@truto/ginger 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +597 -0
- package/dist/adapters/bun-sqlite.d.ts +37 -0
- package/dist/adapters/bun-sqlite.d.ts.map +1 -0
- package/dist/adapters/bun-sqlite.js +136 -0
- package/dist/adapters/bun-sqlite.js.map +1 -0
- package/dist/adapters/durable-object.d.ts +40 -0
- package/dist/adapters/durable-object.d.ts.map +1 -0
- package/dist/adapters/durable-object.js +142 -0
- package/dist/adapters/durable-object.js.map +1 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/crypto.d.ts +40 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +148 -0
- package/dist/crypto.js.map +1 -0
- package/dist/errors.d.ts +64 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +90 -0
- package/dist/errors.js.map +1 -0
- package/dist/example.d.ts +119 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +297 -0
- package/dist/example.js.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/pagination.d.ts +31 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +173 -0
- package/dist/pagination.js.map +1 -0
- package/dist/service.d.ts +81 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +615 -0
- package/dist/service.js.map +1 -0
- package/dist/sql-builder.d.ts +48 -0
- package/dist/sql-builder.d.ts.map +1 -0
- package/dist/sql-builder.js +230 -0
- package/dist/sql-builder.js.map +1 -0
- package/dist/types.d.ts +266 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap a Bun `Database` (from `bun:sqlite`) so it satisfies the
|
|
3
|
+
* generic {@link Database} interface used by Ginger services.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { Database } from 'bun:sqlite'
|
|
8
|
+
* import { createService, fromBunSqlite } from 'ginger'
|
|
9
|
+
*
|
|
10
|
+
* const bunDb = new Database(':memory:')
|
|
11
|
+
* const db = fromBunSqlite(bunDb)
|
|
12
|
+
* const service = createService({ db, ... })
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function fromBunSqlite(bunDb) {
|
|
16
|
+
return {
|
|
17
|
+
prepare(query) {
|
|
18
|
+
const stmt = bunDb.prepare(query);
|
|
19
|
+
function makebound(values) {
|
|
20
|
+
return {
|
|
21
|
+
bind(...more) {
|
|
22
|
+
return makebound([...values, ...more]);
|
|
23
|
+
},
|
|
24
|
+
first() {
|
|
25
|
+
try {
|
|
26
|
+
const row = stmt.get(...values);
|
|
27
|
+
return Promise.resolve(row ?? null);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return Promise.resolve(null);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
all() {
|
|
34
|
+
try {
|
|
35
|
+
const rows = stmt.all(...values);
|
|
36
|
+
return Promise.resolve({
|
|
37
|
+
success: true,
|
|
38
|
+
results: rows,
|
|
39
|
+
meta: {
|
|
40
|
+
duration: 0,
|
|
41
|
+
size_after: 0,
|
|
42
|
+
rows_read: rows.length,
|
|
43
|
+
rows_written: 0,
|
|
44
|
+
last_row_id: 0,
|
|
45
|
+
changed_db: false,
|
|
46
|
+
changes: 0,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return Promise.resolve({
|
|
52
|
+
success: false,
|
|
53
|
+
results: [],
|
|
54
|
+
meta: {
|
|
55
|
+
duration: 0,
|
|
56
|
+
size_after: 0,
|
|
57
|
+
rows_read: 0,
|
|
58
|
+
rows_written: 0,
|
|
59
|
+
last_row_id: 0,
|
|
60
|
+
changed_db: false,
|
|
61
|
+
changes: 0,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
run() {
|
|
67
|
+
try {
|
|
68
|
+
const result = stmt.run(...values);
|
|
69
|
+
const changes = result.changes ?? 0;
|
|
70
|
+
return Promise.resolve({
|
|
71
|
+
success: true,
|
|
72
|
+
meta: {
|
|
73
|
+
duration: 0,
|
|
74
|
+
size_after: 0,
|
|
75
|
+
rows_read: 0,
|
|
76
|
+
rows_written: changes,
|
|
77
|
+
last_row_id: Number(result.lastInsertRowid ?? 0),
|
|
78
|
+
changed_db: changes > 0,
|
|
79
|
+
changes,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return Promise.resolve({
|
|
85
|
+
success: false,
|
|
86
|
+
meta: {
|
|
87
|
+
duration: 0,
|
|
88
|
+
size_after: 0,
|
|
89
|
+
rows_read: 0,
|
|
90
|
+
rows_written: 0,
|
|
91
|
+
last_row_id: 0,
|
|
92
|
+
changed_db: false,
|
|
93
|
+
changes: 0,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
raw() {
|
|
99
|
+
return Promise.resolve(stmt.all(...values));
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
bind(...values) {
|
|
105
|
+
return makebound(values);
|
|
106
|
+
},
|
|
107
|
+
first() {
|
|
108
|
+
return makebound([]).first();
|
|
109
|
+
},
|
|
110
|
+
all() {
|
|
111
|
+
return makebound([]).all();
|
|
112
|
+
},
|
|
113
|
+
run() {
|
|
114
|
+
return makebound([]).run();
|
|
115
|
+
},
|
|
116
|
+
raw() {
|
|
117
|
+
return makebound([]).raw();
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
batch(statements) {
|
|
122
|
+
return Promise.resolve(statements.map((s) => {
|
|
123
|
+
const r = s.run();
|
|
124
|
+
return r;
|
|
125
|
+
}));
|
|
126
|
+
},
|
|
127
|
+
exec(query) {
|
|
128
|
+
bunDb.exec(query);
|
|
129
|
+
return Promise.resolve({ count: 1, duration: 0 });
|
|
130
|
+
},
|
|
131
|
+
dump() {
|
|
132
|
+
return Promise.resolve(new ArrayBuffer(0));
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=bun-sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../src/adapters/bun-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Database } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structural interface matching the cursor returned by
|
|
4
|
+
* Cloudflare Durable Object `SqlStorage.exec()`.
|
|
5
|
+
*/
|
|
6
|
+
export interface SqlStorageCursor<T = Record<string, unknown>> {
|
|
7
|
+
toArray(): T[];
|
|
8
|
+
one(): T;
|
|
9
|
+
readonly columnNames: string[];
|
|
10
|
+
readonly rowsRead: number;
|
|
11
|
+
readonly rowsWritten: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Structural interface matching Cloudflare Durable Object's `SqlStorage`
|
|
15
|
+
* (available as `ctx.storage.sql` inside a Durable Object).
|
|
16
|
+
*
|
|
17
|
+
* No runtime import of `@cloudflare/workers-types` is needed — TypeScript's
|
|
18
|
+
* structural typing lets the real `SqlStorage` satisfy this automatically.
|
|
19
|
+
*/
|
|
20
|
+
export interface DurableObjectSqlStorage {
|
|
21
|
+
exec<T = Record<string, unknown>>(query: string, ...bindings: unknown[]): SqlStorageCursor<T>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Wrap a Durable Object `SqlStorage` instance so it satisfies the
|
|
25
|
+
* generic {@link Database} interface used by Ginger services.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { createService, fromDurableObjectStorage } from 'ginger'
|
|
30
|
+
*
|
|
31
|
+
* export class MyDO extends DurableObject {
|
|
32
|
+
* service = createService({
|
|
33
|
+
* db: fromDurableObjectStorage(this.ctx.storage.sql),
|
|
34
|
+
* ...
|
|
35
|
+
* })
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function fromDurableObjectStorage(sql: DurableObjectSqlStorage): Database;
|
|
40
|
+
//# sourceMappingURL=durable-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-object.d.ts","sourceRoot":"","sources":["../../src/adapters/durable-object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAIT,MAAM,aAAa,CAAA;AAEpB;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D,OAAO,IAAI,CAAC,EAAE,CAAA;IACd,GAAG,IAAI,CAAC,CAAA;IACR,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,GAAG,QAAQ,EAAE,OAAO,EAAE,GACrB,gBAAgB,CAAC,CAAC,CAAC,CAAA;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,uBAAuB,GAC3B,QAAQ,CA+HV"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap a Durable Object `SqlStorage` instance so it satisfies the
|
|
3
|
+
* generic {@link Database} interface used by Ginger services.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { createService, fromDurableObjectStorage } from 'ginger'
|
|
8
|
+
*
|
|
9
|
+
* export class MyDO extends DurableObject {
|
|
10
|
+
* service = createService({
|
|
11
|
+
* db: fromDurableObjectStorage(this.ctx.storage.sql),
|
|
12
|
+
* ...
|
|
13
|
+
* })
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export function fromDurableObjectStorage(sql) {
|
|
18
|
+
return {
|
|
19
|
+
prepare(query) {
|
|
20
|
+
function makeBound(values) {
|
|
21
|
+
return {
|
|
22
|
+
bind(...more) {
|
|
23
|
+
return makeBound([...values, ...more]);
|
|
24
|
+
},
|
|
25
|
+
first() {
|
|
26
|
+
try {
|
|
27
|
+
const cursor = sql.exec(query, ...values);
|
|
28
|
+
const rows = cursor.toArray();
|
|
29
|
+
return Promise.resolve(rows[0] ?? null);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return Promise.resolve(null);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
all() {
|
|
36
|
+
try {
|
|
37
|
+
const cursor = sql.exec(query, ...values);
|
|
38
|
+
const rows = cursor.toArray();
|
|
39
|
+
return Promise.resolve({
|
|
40
|
+
success: true,
|
|
41
|
+
results: rows,
|
|
42
|
+
meta: {
|
|
43
|
+
duration: 0,
|
|
44
|
+
size_after: 0,
|
|
45
|
+
rows_read: cursor.rowsRead,
|
|
46
|
+
rows_written: cursor.rowsWritten,
|
|
47
|
+
last_row_id: 0,
|
|
48
|
+
changed_db: cursor.rowsWritten > 0,
|
|
49
|
+
changes: cursor.rowsWritten,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return Promise.resolve({
|
|
55
|
+
success: false,
|
|
56
|
+
results: [],
|
|
57
|
+
meta: {
|
|
58
|
+
duration: 0,
|
|
59
|
+
size_after: 0,
|
|
60
|
+
rows_read: 0,
|
|
61
|
+
rows_written: 0,
|
|
62
|
+
last_row_id: 0,
|
|
63
|
+
changed_db: false,
|
|
64
|
+
changes: 0,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
run() {
|
|
70
|
+
try {
|
|
71
|
+
const cursor = sql.exec(query, ...values);
|
|
72
|
+
const lastRowId = sql
|
|
73
|
+
.exec('SELECT last_insert_rowid() AS lid')
|
|
74
|
+
.one().lid;
|
|
75
|
+
return Promise.resolve({
|
|
76
|
+
success: true,
|
|
77
|
+
meta: {
|
|
78
|
+
duration: 0,
|
|
79
|
+
size_after: 0,
|
|
80
|
+
rows_read: cursor.rowsRead,
|
|
81
|
+
rows_written: cursor.rowsWritten,
|
|
82
|
+
last_row_id: lastRowId,
|
|
83
|
+
changed_db: cursor.rowsWritten > 0,
|
|
84
|
+
changes: cursor.rowsWritten,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return Promise.resolve({
|
|
90
|
+
success: false,
|
|
91
|
+
meta: {
|
|
92
|
+
duration: 0,
|
|
93
|
+
size_after: 0,
|
|
94
|
+
rows_read: 0,
|
|
95
|
+
rows_written: 0,
|
|
96
|
+
last_row_id: 0,
|
|
97
|
+
changed_db: false,
|
|
98
|
+
changes: 0,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
raw() {
|
|
104
|
+
const cursor = sql.exec(query, ...values);
|
|
105
|
+
return Promise.resolve(cursor.toArray());
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
bind(...values) {
|
|
111
|
+
return makeBound(values);
|
|
112
|
+
},
|
|
113
|
+
first() {
|
|
114
|
+
return makeBound([]).first();
|
|
115
|
+
},
|
|
116
|
+
all() {
|
|
117
|
+
return makeBound([]).all();
|
|
118
|
+
},
|
|
119
|
+
run() {
|
|
120
|
+
return makeBound([]).run();
|
|
121
|
+
},
|
|
122
|
+
raw() {
|
|
123
|
+
return makeBound([]).raw();
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
},
|
|
127
|
+
batch(statements) {
|
|
128
|
+
return Promise.resolve(statements.map((s) => {
|
|
129
|
+
const r = s.run();
|
|
130
|
+
return r;
|
|
131
|
+
}));
|
|
132
|
+
},
|
|
133
|
+
exec(query) {
|
|
134
|
+
sql.exec(query);
|
|
135
|
+
return Promise.resolve({ count: 1, duration: 0 });
|
|
136
|
+
},
|
|
137
|
+
dump() {
|
|
138
|
+
return Promise.resolve(new ArrayBuffer(0));
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=durable-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-object.js","sourceRoot":"","sources":["../../src/adapters/durable-object.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { fromBunSqlite } from './bun-sqlite.js';
|
|
2
|
+
export type { BunSqliteDatabase, BunSqliteStatement } from './bun-sqlite.js';
|
|
3
|
+
export { fromDurableObjectStorage } from './durable-object.js';
|
|
4
|
+
export type { DurableObjectSqlStorage, SqlStorageCursor, } from './durable-object.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,YAAY,EACV,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/crypto.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { KeyProvider, SecretFieldDef } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default key provider that accepts keys as constructor parameters
|
|
4
|
+
*/
|
|
5
|
+
export declare class DefaultKeyProvider implements KeyProvider {
|
|
6
|
+
private keyCache;
|
|
7
|
+
private keys;
|
|
8
|
+
constructor(keys?: Record<string, string>);
|
|
9
|
+
getKey(keyId?: string): Promise<CryptoKey>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generate a new encryption key (utility function for setup)
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateSecretKey(): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Encrypt a plaintext value using AES-256-GCM
|
|
17
|
+
* Returns a packed string in format "kid:iv:cipher" (base64 segments)
|
|
18
|
+
*/
|
|
19
|
+
export declare function encrypt(plaintext: string, keyProvider: KeyProvider, keyId?: string): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Decrypt a packed ciphertext string
|
|
22
|
+
*/
|
|
23
|
+
export declare function decrypt(packed: string, keyProvider: KeyProvider): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Encrypt secret fields in a data object
|
|
26
|
+
*/
|
|
27
|
+
export declare function encryptSecrets<T extends Record<string, unknown>>(data: T, secrets: readonly SecretFieldDef[], keyProvider: KeyProvider): Promise<Record<string, unknown>>;
|
|
28
|
+
/**
|
|
29
|
+
* Decrypt secret fields in a data object
|
|
30
|
+
*/
|
|
31
|
+
export declare function decryptSecrets<T extends Record<string, unknown>>(data: T, secrets: readonly SecretFieldDef[], keyProvider: KeyProvider): Promise<Record<string, unknown>>;
|
|
32
|
+
/**
|
|
33
|
+
* Get secret column names for SQL queries
|
|
34
|
+
*/
|
|
35
|
+
export declare function getSecretColumns(secrets: readonly SecretFieldDef[]): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Get secret logical names for schema validation
|
|
38
|
+
*/
|
|
39
|
+
export declare function getSecretLogicalNames(secrets: readonly SecretFieldDef[]): string[];
|
|
40
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE7D;;GAEG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,IAAI,CAAqB;gBAErB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAYvC,MAAM,CAAC,KAAK,GAAE,MAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;CAoC5D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CASzD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,KAAK,GAAE,MAAkB,GACxB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAyCjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqBlC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqBlC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAE7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,cAAc,EAAE,GACjC,MAAM,EAAE,CAEV"}
|
package/dist/crypto.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { EncryptionError } from './errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default key provider that accepts keys as constructor parameters
|
|
4
|
+
*/
|
|
5
|
+
export class DefaultKeyProvider {
|
|
6
|
+
keyCache = new Map();
|
|
7
|
+
keys;
|
|
8
|
+
constructor(keys = {}) {
|
|
9
|
+
this.keys = new Map(Object.entries(keys));
|
|
10
|
+
// If no keys provided but a default key exists, use it
|
|
11
|
+
if (this.keys.size === 0 &&
|
|
12
|
+
typeof process !== 'undefined' &&
|
|
13
|
+
process.env?.SECRET_KEY) {
|
|
14
|
+
this.keys.set('default', process.env.SECRET_KEY);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async getKey(keyId = 'default') {
|
|
18
|
+
const cached = this.keyCache.get(keyId);
|
|
19
|
+
if (cached) {
|
|
20
|
+
return cached;
|
|
21
|
+
}
|
|
22
|
+
const secretKey = this.keys.get(keyId);
|
|
23
|
+
if (!secretKey) {
|
|
24
|
+
throw new EncryptionError(`Encryption key not found for keyId: ${keyId}`);
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
// Convert base64 secret to ArrayBuffer
|
|
28
|
+
const keyData = new Uint8Array(atob(secretKey)
|
|
29
|
+
.split('')
|
|
30
|
+
.map((char) => char.charCodeAt(0)));
|
|
31
|
+
const cryptoKey = await crypto.subtle.importKey('raw', keyData, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt']);
|
|
32
|
+
this.keyCache.set(keyId, cryptoKey);
|
|
33
|
+
return cryptoKey;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new EncryptionError(`Failed to import encryption key: ${error instanceof Error ? error.message : 'Unknown error'}`, { keyId, error });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Generate a new encryption key (utility function for setup)
|
|
42
|
+
*/
|
|
43
|
+
export async function generateSecretKey() {
|
|
44
|
+
const key = await crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']);
|
|
45
|
+
const exported = await crypto.subtle.exportKey('raw', key);
|
|
46
|
+
return btoa(String.fromCharCode(...new Uint8Array(exported)));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Encrypt a plaintext value using AES-256-GCM
|
|
50
|
+
* Returns a packed string in format "kid:iv:cipher" (base64 segments)
|
|
51
|
+
*/
|
|
52
|
+
export async function encrypt(plaintext, keyProvider, keyId = 'default') {
|
|
53
|
+
try {
|
|
54
|
+
const key = await keyProvider.getKey(keyId);
|
|
55
|
+
const iv = crypto.getRandomValues(new Uint8Array(12)); // 96-bit IV for GCM
|
|
56
|
+
const encoder = new TextEncoder();
|
|
57
|
+
const data = encoder.encode(plaintext);
|
|
58
|
+
const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, data);
|
|
59
|
+
// Pack as "kid:iv:cipher" with base64 encoding
|
|
60
|
+
const kidB64 = btoa(keyId);
|
|
61
|
+
const ivB64 = btoa(String.fromCharCode(...iv));
|
|
62
|
+
const cipherB64 = btoa(String.fromCharCode(...new Uint8Array(ciphertext)));
|
|
63
|
+
return `${kidB64}:${ivB64}:${cipherB64}`;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new EncryptionError(`Failed to encrypt data: ${error instanceof Error ? error.message : 'Unknown error'}`, { keyId, error });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Decrypt a packed ciphertext string
|
|
71
|
+
*/
|
|
72
|
+
export async function decrypt(packed, keyProvider) {
|
|
73
|
+
try {
|
|
74
|
+
const parts = packed.split(':');
|
|
75
|
+
if (parts.length !== 3) {
|
|
76
|
+
throw new EncryptionError('Invalid packed ciphertext format');
|
|
77
|
+
}
|
|
78
|
+
const [kidB64, ivB64, cipherB64] = parts;
|
|
79
|
+
if (!kidB64 || !ivB64 || !cipherB64) {
|
|
80
|
+
throw new EncryptionError('Invalid packed ciphertext format: missing parts');
|
|
81
|
+
}
|
|
82
|
+
const keyId = atob(kidB64);
|
|
83
|
+
const iv = new Uint8Array(atob(ivB64)
|
|
84
|
+
.split('')
|
|
85
|
+
.map((char) => char.charCodeAt(0)));
|
|
86
|
+
const ciphertext = new Uint8Array(atob(cipherB64)
|
|
87
|
+
.split('')
|
|
88
|
+
.map((char) => char.charCodeAt(0)));
|
|
89
|
+
const key = await keyProvider.getKey(keyId);
|
|
90
|
+
const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, ciphertext);
|
|
91
|
+
const decoder = new TextDecoder();
|
|
92
|
+
return decoder.decode(decrypted);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
throw new EncryptionError(`Failed to decrypt data: ${error instanceof Error ? error.message : 'Unknown error'}`, { error });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Encrypt secret fields in a data object
|
|
100
|
+
*/
|
|
101
|
+
export async function encryptSecrets(data, secrets, keyProvider) {
|
|
102
|
+
const result = { ...data };
|
|
103
|
+
for (const secret of secrets) {
|
|
104
|
+
const { logicalName, columnName, keyId = 'default' } = secret;
|
|
105
|
+
const value = data[logicalName];
|
|
106
|
+
if (value !== undefined && value !== null) {
|
|
107
|
+
if (typeof value !== 'string') {
|
|
108
|
+
throw new EncryptionError(`Secret field "${logicalName}" must be a string`, { logicalName, value });
|
|
109
|
+
}
|
|
110
|
+
// Replace logical field with encrypted column
|
|
111
|
+
delete result[logicalName];
|
|
112
|
+
result[columnName] = await encrypt(value, keyProvider, keyId);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Decrypt secret fields in a data object
|
|
119
|
+
*/
|
|
120
|
+
export async function decryptSecrets(data, secrets, keyProvider) {
|
|
121
|
+
const result = { ...data };
|
|
122
|
+
for (const secret of secrets) {
|
|
123
|
+
const { logicalName, columnName } = secret;
|
|
124
|
+
const encryptedValue = data[columnName];
|
|
125
|
+
if (encryptedValue !== undefined && encryptedValue !== null) {
|
|
126
|
+
if (typeof encryptedValue !== 'string') {
|
|
127
|
+
throw new EncryptionError(`Encrypted field "${columnName}" must be a string`, { columnName, encryptedValue });
|
|
128
|
+
}
|
|
129
|
+
// Replace encrypted column with decrypted logical field
|
|
130
|
+
delete result[columnName];
|
|
131
|
+
result[logicalName] = await decrypt(encryptedValue, keyProvider);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get secret column names for SQL queries
|
|
138
|
+
*/
|
|
139
|
+
export function getSecretColumns(secrets) {
|
|
140
|
+
return secrets.map((s) => s.columnName);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get secret logical names for schema validation
|
|
144
|
+
*/
|
|
145
|
+
export function getSecretLogicalNames(secrets) {
|
|
146
|
+
return secrets.map((s) => s.logicalName);
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base service error class
|
|
3
|
+
*/
|
|
4
|
+
export declare class ServiceError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly statusCode: number;
|
|
7
|
+
readonly details?: unknown;
|
|
8
|
+
constructor(message: string, code: string, statusCode?: number, details?: unknown);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resource not found error
|
|
12
|
+
*/
|
|
13
|
+
export declare class NotFoundError extends ServiceError {
|
|
14
|
+
constructor(resource: string, id: string | number, details?: unknown);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validation error for schema validation failures
|
|
18
|
+
*/
|
|
19
|
+
export declare class ValidationError extends ServiceError {
|
|
20
|
+
constructor(message: string, details?: unknown);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Authorization error for access control failures
|
|
24
|
+
*/
|
|
25
|
+
export declare class AuthError extends ServiceError {
|
|
26
|
+
constructor(message?: string, details?: unknown);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Database operation error
|
|
30
|
+
*/
|
|
31
|
+
export declare class DatabaseError extends ServiceError {
|
|
32
|
+
constructor(message: string, details?: unknown);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Encryption/decryption error
|
|
36
|
+
*/
|
|
37
|
+
export declare class EncryptionError extends ServiceError {
|
|
38
|
+
constructor(message: string, details?: unknown);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Hook execution error
|
|
42
|
+
*/
|
|
43
|
+
export declare class HookError extends ServiceError {
|
|
44
|
+
constructor(hookPhase: string, methodName: string, originalError: Error, details?: unknown);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Pagination cursor error
|
|
48
|
+
*/
|
|
49
|
+
export declare class CursorError extends ServiceError {
|
|
50
|
+
constructor(message: string, details?: unknown);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* SQL builder error
|
|
54
|
+
*/
|
|
55
|
+
export declare class SqlBuilderError extends ServiceError {
|
|
56
|
+
constructor(message: string, details?: unknown);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Dependency injection error
|
|
60
|
+
*/
|
|
61
|
+
export declare class DependencyError extends ServiceError {
|
|
62
|
+
constructor(message: string, details?: unknown);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,UAAU,EAAE,MAAM,CAAA;IAClC,SAAgB,OAAO,CAAC,EAAE,OAAO,CAAA;gBAG/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,OAAO;CAWpB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAGrE;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAG/C;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;gBAC7B,OAAO,GAAE,MAAwB,EAAE,OAAO,CAAC,EAAE,OAAO;CAGjE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAG/C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAG/C;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;gBAEvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,KAAK,EACpB,OAAO,CAAC,EAAE,OAAO;CASpB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAG/C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAG/C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAG/C"}
|