@revealui/db 0.3.4 → 0.3.6
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/dist/client/index.d.ts +10 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +13 -0
- package/dist/client/index.js.map +1 -1
- package/dist/crypto.d.ts +1 -1
- package/dist/crypto.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/queries/boards.d.ts +16 -12
- package/dist/queries/boards.d.ts.map +1 -1
- package/dist/queries/boards.js +4 -0
- package/dist/queries/boards.js.map +1 -1
- package/dist/queries/code-provenance.d.ts +13 -13
- package/dist/queries/code-provenance.d.ts.map +1 -1
- package/dist/queries/code-provenance.js.map +1 -1
- package/dist/queries/conversations.d.ts.map +1 -1
- package/dist/queries/conversations.js +3 -0
- package/dist/queries/conversations.js.map +1 -1
- package/dist/queries/media.d.ts +6 -6
- package/dist/queries/media.d.ts.map +1 -1
- package/dist/queries/media.js.map +1 -1
- package/dist/queries/oauth-accounts.d.ts +9 -0
- package/dist/queries/oauth-accounts.d.ts.map +1 -0
- package/dist/queries/oauth-accounts.js +15 -0
- package/dist/queries/oauth-accounts.js.map +1 -0
- package/dist/queries/orders.d.ts +5 -5
- package/dist/queries/orders.d.ts.map +1 -1
- package/dist/queries/orders.js.map +1 -1
- package/dist/queries/pages.d.ts +7 -7
- package/dist/queries/pages.d.ts.map +1 -1
- package/dist/queries/pages.js.map +1 -1
- package/dist/queries/passkeys.d.ts +21 -0
- package/dist/queries/passkeys.d.ts.map +1 -0
- package/dist/queries/passkeys.js +19 -0
- package/dist/queries/passkeys.js.map +1 -0
- package/dist/queries/posts.d.ts +8 -8
- package/dist/queries/posts.d.ts.map +1 -1
- package/dist/queries/posts.js.map +1 -1
- package/dist/queries/products.d.ts +7 -7
- package/dist/queries/products.d.ts.map +1 -1
- package/dist/queries/products.js.map +1 -1
- package/dist/queries/sessions.d.ts +30 -0
- package/dist/queries/sessions.d.ts.map +1 -0
- package/dist/queries/sessions.js +37 -0
- package/dist/queries/sessions.js.map +1 -0
- package/dist/queries/sites.d.ts +11 -11
- package/dist/queries/sites.d.ts.map +1 -1
- package/dist/queries/sites.js.map +1 -1
- package/dist/queries/ticket-comments.d.ts +8 -8
- package/dist/queries/ticket-comments.d.ts.map +1 -1
- package/dist/queries/ticket-comments.js +7 -0
- package/dist/queries/ticket-comments.js.map +1 -1
- package/dist/queries/ticket-labels.d.ts +9 -9
- package/dist/queries/ticket-labels.d.ts.map +1 -1
- package/dist/queries/ticket-labels.js.map +1 -1
- package/dist/queries/tickets.d.ts +12 -12
- package/dist/queries/tickets.d.ts.map +1 -1
- package/dist/queries/tickets.js.map +1 -1
- package/dist/queries/user-api-keys.d.ts +28 -0
- package/dist/queries/user-api-keys.d.ts.map +1 -0
- package/dist/queries/user-api-keys.js +49 -0
- package/dist/queries/user-api-keys.js.map +1 -0
- package/dist/queries/users.d.ts +52 -10
- package/dist/queries/users.d.ts.map +1 -1
- package/dist/queries/users.js +20 -1
- package/dist/queries/users.js.map +1 -1
- package/dist/saga/crdt-resolver.d.ts +75 -0
- package/dist/saga/crdt-resolver.d.ts.map +1 -0
- package/dist/saga/crdt-resolver.js +168 -0
- package/dist/saga/crdt-resolver.js.map +1 -0
- package/dist/saga/idempotent-operation.d.ts +52 -0
- package/dist/saga/idempotent-operation.d.ts.map +1 -0
- package/dist/saga/idempotent-operation.js +78 -0
- package/dist/saga/idempotent-operation.js.map +1 -0
- package/dist/saga/index.d.ts +29 -0
- package/dist/saga/index.d.ts.map +1 -0
- package/dist/saga/index.js +30 -0
- package/dist/saga/index.js.map +1 -0
- package/dist/saga/neon-saga.d.ts +50 -0
- package/dist/saga/neon-saga.d.ts.map +1 -0
- package/dist/saga/neon-saga.js +234 -0
- package/dist/saga/neon-saga.js.map +1 -0
- package/dist/saga/recovery.d.ts +50 -0
- package/dist/saga/recovery.d.ts.map +1 -0
- package/dist/saga/recovery.js +92 -0
- package/dist/saga/recovery.js.map +1 -0
- package/dist/saga/resilient-step.d.ts +38 -0
- package/dist/saga/resilient-step.d.ts.map +1 -0
- package/dist/saga/resilient-step.js +75 -0
- package/dist/saga/resilient-step.js.map +1 -0
- package/dist/saga/types.d.ts +94 -0
- package/dist/saga/types.d.ts.map +1 -0
- package/dist/saga/types.js +9 -0
- package/dist/saga/types.js.map +1 -0
- package/dist/schema/accounts.d.ts.map +1 -1
- package/dist/schema/accounts.js +9 -1
- package/dist/schema/accounts.js.map +1 -1
- package/dist/schema/agents.d.ts.map +1 -1
- package/dist/schema/agents.js +22 -8
- package/dist/schema/agents.js.map +1 -1
- package/dist/schema/api-keys.d.ts +1 -1
- package/dist/schema/api-keys.js +2 -2
- package/dist/schema/api-keys.js.map +1 -1
- package/dist/schema/audit-log.d.ts +17 -0
- package/dist/schema/audit-log.d.ts.map +1 -1
- package/dist/schema/audit-log.js +2 -0
- package/dist/schema/audit-log.js.map +1 -1
- package/dist/schema/coordination.d.ts.map +1 -1
- package/dist/schema/coordination.js +5 -2
- package/dist/schema/coordination.js.map +1 -1
- package/dist/schema/idempotency.d.ts +104 -0
- package/dist/schema/idempotency.d.ts.map +1 -0
- package/dist/schema/idempotency.js +24 -0
- package/dist/schema/idempotency.js.map +1 -0
- package/dist/schema/index.d.ts +17 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +40 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/licenses.d.ts.map +1 -1
- package/dist/schema/licenses.js +13 -1
- package/dist/schema/licenses.js.map +1 -1
- package/dist/schema/rest.d.ts +2 -0
- package/dist/schema/rest.d.ts.map +1 -1
- package/dist/schema/rest.js +2 -0
- package/dist/schema/rest.js.map +1 -1
- package/dist/schema/revmarket.d.ts +971 -0
- package/dist/schema/revmarket.d.ts.map +1 -0
- package/dist/schema/revmarket.js +160 -0
- package/dist/schema/revmarket.js.map +1 -0
- package/dist/types/database.d.ts +92 -1
- package/dist/types/database.d.ts.map +1 -1
- package/dist/types/database.js +20 -0
- package/dist/types/database.js.map +1 -1
- package/package.json +29 -4
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ticket label database queries
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
5
|
-
export declare function getLabelById(db:
|
|
4
|
+
import type { Database } from '../client/index.js';
|
|
5
|
+
export declare function getLabelById(db: Database, id: string): Promise<{
|
|
6
6
|
id: string;
|
|
7
7
|
tenantId: string | null;
|
|
8
8
|
name: string;
|
|
@@ -12,7 +12,7 @@ export declare function getLabelById(db: DatabaseClient, id: string): Promise<{
|
|
|
12
12
|
createdAt: Date;
|
|
13
13
|
updatedAt: Date;
|
|
14
14
|
} | null>;
|
|
15
|
-
export declare function getAllLabels(db:
|
|
15
|
+
export declare function getAllLabels(db: Database, tenantId?: string): Promise<{
|
|
16
16
|
id: string;
|
|
17
17
|
tenantId: string | null;
|
|
18
18
|
name: string;
|
|
@@ -22,7 +22,7 @@ export declare function getAllLabels(db: DatabaseClient, tenantId?: string): Pro
|
|
|
22
22
|
createdAt: Date;
|
|
23
23
|
updatedAt: Date;
|
|
24
24
|
}[]>;
|
|
25
|
-
export declare function createLabel(db:
|
|
25
|
+
export declare function createLabel(db: Database, data: {
|
|
26
26
|
id: string;
|
|
27
27
|
name: string;
|
|
28
28
|
slug: string;
|
|
@@ -39,7 +39,7 @@ export declare function createLabel(db: DatabaseClient, data: {
|
|
|
39
39
|
tenantId: string | null;
|
|
40
40
|
color: string;
|
|
41
41
|
} | undefined>;
|
|
42
|
-
export declare function updateLabel(db:
|
|
42
|
+
export declare function updateLabel(db: Database, id: string, data: Partial<{
|
|
43
43
|
name: string;
|
|
44
44
|
slug: string;
|
|
45
45
|
color: string;
|
|
@@ -54,8 +54,8 @@ export declare function updateLabel(db: DatabaseClient, id: string, data: Partia
|
|
|
54
54
|
createdAt: Date;
|
|
55
55
|
updatedAt: Date;
|
|
56
56
|
} | null>;
|
|
57
|
-
export declare function deleteLabel(db:
|
|
58
|
-
export declare function assignLabel(db:
|
|
57
|
+
export declare function deleteLabel(db: Database, id: string): Promise<void>;
|
|
58
|
+
export declare function assignLabel(db: Database, data: {
|
|
59
59
|
id: string;
|
|
60
60
|
ticketId: string;
|
|
61
61
|
labelId: string;
|
|
@@ -65,8 +65,8 @@ export declare function assignLabel(db: DatabaseClient, data: {
|
|
|
65
65
|
labelId: string;
|
|
66
66
|
assignedAt: Date;
|
|
67
67
|
} | undefined>;
|
|
68
|
-
export declare function removeLabel(db:
|
|
69
|
-
export declare function getLabelsForTicket(db:
|
|
68
|
+
export declare function removeLabel(db: Database, ticketId: string, labelId: string): Promise<void>;
|
|
69
|
+
export declare function getLabelsForTicket(db: Database, ticketId: string): Promise<{
|
|
70
70
|
id: string;
|
|
71
71
|
tenantId: string | null;
|
|
72
72
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket-labels.d.ts","sourceRoot":"","sources":["../../src/queries/ticket-labels.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ticket-labels.d.ts","sourceRoot":"","sources":["../../src/queries/ticket-labels.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM;;;;;;;;;UAG1D;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;KASjE;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;;;;;;;;;eAIF;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;;;;;;;;;UASlF;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,iBAEzD;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;eAIxD;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAShF;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;KAWtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket-labels.js","sourceRoot":"","sources":["../../src/queries/ticket-labels.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"ticket-labels.js","sourceRoot":"","sources":["../../src/queries/ticket-labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ticket database queries
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
5
|
-
export declare function getTicketsByBoard(db:
|
|
4
|
+
import type { Database } from '../client/index.js';
|
|
5
|
+
export declare function getTicketsByBoard(db: Database, boardId: string, filters?: {
|
|
6
6
|
status?: string;
|
|
7
7
|
priority?: string;
|
|
8
8
|
type?: string;
|
|
@@ -38,7 +38,7 @@ export declare function getTicketsByBoard(db: DatabaseClient, boardId: string, f
|
|
|
38
38
|
updatedAt: Date;
|
|
39
39
|
}[]>;
|
|
40
40
|
/** List tickets with assignee data joined (prevents N+1 on board views) */
|
|
41
|
-
export declare function getTicketsWithAssignees(db:
|
|
41
|
+
export declare function getTicketsWithAssignees(db: Database, boardId: string, filters?: {
|
|
42
42
|
status?: string;
|
|
43
43
|
priority?: string;
|
|
44
44
|
columnId?: string;
|
|
@@ -78,7 +78,7 @@ export declare function getTicketsWithAssignees(db: DatabaseClient, boardId: str
|
|
|
78
78
|
email: string | null;
|
|
79
79
|
} | null;
|
|
80
80
|
}[]>;
|
|
81
|
-
export declare function getTicketById(db:
|
|
81
|
+
export declare function getTicketById(db: Database, id: string): Promise<{
|
|
82
82
|
id: string;
|
|
83
83
|
schemaVersion: string;
|
|
84
84
|
boardId: string;
|
|
@@ -107,7 +107,7 @@ export declare function getTicketById(db: DatabaseClient, id: string): Promise<{
|
|
|
107
107
|
createdAt: Date;
|
|
108
108
|
updatedAt: Date;
|
|
109
109
|
} | null>;
|
|
110
|
-
export declare function getTicketByNumber(db:
|
|
110
|
+
export declare function getTicketByNumber(db: Database, boardId: string, ticketNumber: number): Promise<{
|
|
111
111
|
id: string;
|
|
112
112
|
schemaVersion: string;
|
|
113
113
|
boardId: string;
|
|
@@ -136,7 +136,7 @@ export declare function getTicketByNumber(db: DatabaseClient, boardId: string, t
|
|
|
136
136
|
createdAt: Date;
|
|
137
137
|
updatedAt: Date;
|
|
138
138
|
} | null>;
|
|
139
|
-
export declare function createTicket(db:
|
|
139
|
+
export declare function createTicket(db: Database, data: {
|
|
140
140
|
id: string;
|
|
141
141
|
boardId: string;
|
|
142
142
|
columnId?: string;
|
|
@@ -179,7 +179,7 @@ export declare function createTicket(db: DatabaseClient, data: {
|
|
|
179
179
|
}[];
|
|
180
180
|
closedAt: Date | null;
|
|
181
181
|
} | undefined>;
|
|
182
|
-
export declare function updateTicket(db:
|
|
182
|
+
export declare function updateTicket(db: Database, id: string, data: Partial<{
|
|
183
183
|
title: string;
|
|
184
184
|
description: unknown;
|
|
185
185
|
status: string;
|
|
@@ -222,8 +222,8 @@ export declare function updateTicket(db: DatabaseClient, id: string, data: Parti
|
|
|
222
222
|
createdAt: Date;
|
|
223
223
|
updatedAt: Date;
|
|
224
224
|
} | null>;
|
|
225
|
-
export declare function deleteTicket(db:
|
|
226
|
-
export declare function moveTicket(db:
|
|
225
|
+
export declare function deleteTicket(db: Database, id: string): Promise<void>;
|
|
226
|
+
export declare function moveTicket(db: Database, id: string, columnId: string, sortOrder: number): Promise<{
|
|
227
227
|
id: string;
|
|
228
228
|
schemaVersion: string;
|
|
229
229
|
boardId: string;
|
|
@@ -252,7 +252,7 @@ export declare function moveTicket(db: DatabaseClient, id: string, columnId: str
|
|
|
252
252
|
createdAt: Date;
|
|
253
253
|
updatedAt: Date;
|
|
254
254
|
} | null>;
|
|
255
|
-
export declare function getSubtickets(db:
|
|
255
|
+
export declare function getSubtickets(db: Database, parentTicketId: string): Promise<{
|
|
256
256
|
id: string;
|
|
257
257
|
schemaVersion: string;
|
|
258
258
|
boardId: string;
|
|
@@ -281,7 +281,7 @@ export declare function getSubtickets(db: DatabaseClient, parentTicketId: string
|
|
|
281
281
|
createdAt: Date;
|
|
282
282
|
updatedAt: Date;
|
|
283
283
|
}[]>;
|
|
284
|
-
export declare function getTicketsByColumn(db:
|
|
284
|
+
export declare function getTicketsByColumn(db: Database, columnId: string): Promise<{
|
|
285
285
|
id: string;
|
|
286
286
|
schemaVersion: string;
|
|
287
287
|
boardId: string;
|
|
@@ -310,7 +310,7 @@ export declare function getTicketsByColumn(db: DatabaseClient, columnId: string)
|
|
|
310
310
|
createdAt: Date;
|
|
311
311
|
updatedAt: Date;
|
|
312
312
|
}[]>;
|
|
313
|
-
export declare function getOverdueTickets(db:
|
|
313
|
+
export declare function getOverdueTickets(db: Database, boardId: string): Promise<{
|
|
314
314
|
id: string;
|
|
315
315
|
schemaVersion: string;
|
|
316
316
|
boardId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../src/queries/tickets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../src/queries/tickets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../src/queries/tickets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,
|
|
1
|
+
{"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../src/queries/tickets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User API key database queries
|
|
3
|
+
*/
|
|
4
|
+
import type { Database } from '../client/index.js';
|
|
5
|
+
/** Get a user's API key metadata (provider + hint, no encrypted key) */
|
|
6
|
+
export declare function getApiKeyMetadata(db: Database, userId: string): Promise<{
|
|
7
|
+
provider: string;
|
|
8
|
+
keyHint: string | null;
|
|
9
|
+
} | null>;
|
|
10
|
+
/** Get a user's encrypted API key for decryption */
|
|
11
|
+
export declare function getEncryptedApiKey(db: Database, userId: string): Promise<{
|
|
12
|
+
id: string;
|
|
13
|
+
provider: string;
|
|
14
|
+
encryptedKey: string;
|
|
15
|
+
} | null>;
|
|
16
|
+
/** Upsert an API key (delete existing for provider, then insert new) */
|
|
17
|
+
export declare function upsertApiKey(db: Database, values: {
|
|
18
|
+
id: string;
|
|
19
|
+
userId: string;
|
|
20
|
+
provider: string;
|
|
21
|
+
encryptedKey: string;
|
|
22
|
+
keyHint: string | null;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
/** Delete all API keys for a user */
|
|
25
|
+
export declare function deleteApiKeys(db: Database, userId: string): Promise<void>;
|
|
26
|
+
/** Update lastUsedAt timestamp (fire-and-forget) */
|
|
27
|
+
export declare function touchApiKeyUsage(db: Database, keyId: string): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=user-api-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-api-keys.d.ts","sourceRoot":"","sources":["../../src/queries/user-api-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,wEAAwE;AACxE,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;;;UAOnE;AAED,oDAAoD;AACpD,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;;;;UAWpE;AAED,wEAAwE;AACxE,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE;IACN,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,iBAaF;AAED,qCAAqC;AACrC,wBAAsB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAE/D;AAED,oDAAoD;AACpD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,iBAEjE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User API key database queries
|
|
3
|
+
*/
|
|
4
|
+
import { and, eq } from 'drizzle-orm';
|
|
5
|
+
import { userApiKeys } from '../schema/api-keys.js';
|
|
6
|
+
/** Get a user's API key metadata (provider + hint, no encrypted key) */
|
|
7
|
+
export async function getApiKeyMetadata(db, userId) {
|
|
8
|
+
const result = await db
|
|
9
|
+
.select({ provider: userApiKeys.provider, keyHint: userApiKeys.keyHint })
|
|
10
|
+
.from(userApiKeys)
|
|
11
|
+
.where(eq(userApiKeys.userId, userId))
|
|
12
|
+
.limit(1);
|
|
13
|
+
return result[0] ?? null;
|
|
14
|
+
}
|
|
15
|
+
/** Get a user's encrypted API key for decryption */
|
|
16
|
+
export async function getEncryptedApiKey(db, userId) {
|
|
17
|
+
const result = await db
|
|
18
|
+
.select({
|
|
19
|
+
id: userApiKeys.id,
|
|
20
|
+
provider: userApiKeys.provider,
|
|
21
|
+
encryptedKey: userApiKeys.encryptedKey,
|
|
22
|
+
})
|
|
23
|
+
.from(userApiKeys)
|
|
24
|
+
.where(eq(userApiKeys.userId, userId))
|
|
25
|
+
.limit(1);
|
|
26
|
+
return result[0] ?? null;
|
|
27
|
+
}
|
|
28
|
+
/** Upsert an API key (delete existing for provider, then insert new) */
|
|
29
|
+
export async function upsertApiKey(db, values) {
|
|
30
|
+
// Delete existing key for this user+provider
|
|
31
|
+
await db
|
|
32
|
+
.delete(userApiKeys)
|
|
33
|
+
.where(and(eq(userApiKeys.userId, values.userId), eq(userApiKeys.provider, values.provider)));
|
|
34
|
+
const now = new Date();
|
|
35
|
+
await db.insert(userApiKeys).values({
|
|
36
|
+
...values,
|
|
37
|
+
createdAt: now,
|
|
38
|
+
updatedAt: now,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Delete all API keys for a user */
|
|
42
|
+
export async function deleteApiKeys(db, userId) {
|
|
43
|
+
await db.delete(userApiKeys).where(eq(userApiKeys.userId, userId));
|
|
44
|
+
}
|
|
45
|
+
/** Update lastUsedAt timestamp (fire-and-forget) */
|
|
46
|
+
export async function touchApiKeyUsage(db, keyId) {
|
|
47
|
+
await db.update(userApiKeys).set({ lastUsedAt: new Date() }).where(eq(userApiKeys.id, keyId));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=user-api-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-api-keys.js","sourceRoot":"","sources":["../../src/queries/user-api-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAY,EAAE,MAAc;IAClE,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;SACxE,IAAI,CAAC,WAAW,CAAC;SACjB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACrC,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAY,EAAE,MAAc;IACnE,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC;QACN,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,YAAY,EAAE,WAAW,CAAC,YAAY;KACvC,CAAC;SACD,IAAI,CAAC,WAAW,CAAC;SACjB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACrC,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAY,EACZ,MAMC;IAED,6CAA6C;IAC7C,MAAM,EAAE;SACL,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAClC,GAAG,MAAM;QACT,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;AACL,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAY,EAAE,MAAc;IAC9D,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAY,EAAE,KAAa;IAChE,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC"}
|
package/dist/queries/users.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* User database queries with soft-delete support
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { Database } from '../client/index.js';
|
|
5
5
|
import { users } from '../schema/users.js';
|
|
6
6
|
export interface ListUsersOptions {
|
|
7
7
|
status?: string;
|
|
@@ -11,7 +11,7 @@ export interface ListUsersOptions {
|
|
|
11
11
|
offset?: number;
|
|
12
12
|
}
|
|
13
13
|
/** List users with optional filters and pagination */
|
|
14
|
-
export declare function getAllUsers(db:
|
|
14
|
+
export declare function getAllUsers(db: Database, options?: ListUsersOptions): Promise<{
|
|
15
15
|
id: string;
|
|
16
16
|
schemaVersion: string;
|
|
17
17
|
type: string;
|
|
@@ -46,9 +46,9 @@ export declare function getAllUsers(db: DatabaseClient, options?: ListUsersOptio
|
|
|
46
46
|
_json: unknown;
|
|
47
47
|
}[]>;
|
|
48
48
|
/** Count users matching filters (for pagination) */
|
|
49
|
-
export declare function countUsers(db:
|
|
49
|
+
export declare function countUsers(db: Database, options?: ListUsersOptions): Promise<number>;
|
|
50
50
|
/** Update a user's fields */
|
|
51
|
-
export declare function updateUser(db:
|
|
51
|
+
export declare function updateUser(db: Database, id: string, data: Partial<typeof users.$inferInsert>): Promise<{
|
|
52
52
|
id: string;
|
|
53
53
|
schemaVersion: string;
|
|
54
54
|
type: string;
|
|
@@ -83,7 +83,7 @@ export declare function updateUser(db: DatabaseClient, id: string, data: Partial
|
|
|
83
83
|
_json: unknown;
|
|
84
84
|
} | null>;
|
|
85
85
|
/** Batch-load multiple users by ID in a single query (prevents N+1) */
|
|
86
|
-
export declare function getUsersByIds(db:
|
|
86
|
+
export declare function getUsersByIds(db: Database, ids: string[]): Promise<{
|
|
87
87
|
id: string;
|
|
88
88
|
schemaVersion: string;
|
|
89
89
|
type: string;
|
|
@@ -117,7 +117,7 @@ export declare function getUsersByIds(db: DatabaseClient, ids: string[]): Promis
|
|
|
117
117
|
anonymizedAt: Date | null;
|
|
118
118
|
_json: unknown;
|
|
119
119
|
}[]>;
|
|
120
|
-
export declare function getUserById(db:
|
|
120
|
+
export declare function getUserById(db: Database, id: string): Promise<{
|
|
121
121
|
id: string;
|
|
122
122
|
schemaVersion: string;
|
|
123
123
|
type: string;
|
|
@@ -151,7 +151,7 @@ export declare function getUserById(db: DatabaseClient, id: string): Promise<{
|
|
|
151
151
|
anonymizedAt: Date | null;
|
|
152
152
|
_json: unknown;
|
|
153
153
|
} | null>;
|
|
154
|
-
export declare function getUserByEmail(db:
|
|
154
|
+
export declare function getUserByEmail(db: Database, email: string): Promise<{
|
|
155
155
|
id: string;
|
|
156
156
|
schemaVersion: string;
|
|
157
157
|
type: string;
|
|
@@ -186,9 +186,9 @@ export declare function getUserByEmail(db: DatabaseClient, email: string): Promi
|
|
|
186
186
|
_json: unknown;
|
|
187
187
|
} | null>;
|
|
188
188
|
/** Soft-delete: sets deletedAt timestamp instead of removing the row */
|
|
189
|
-
export declare function deleteUser(db:
|
|
189
|
+
export declare function deleteUser(db: Database, id: string): Promise<void>;
|
|
190
190
|
/** Restore a soft-deleted user */
|
|
191
|
-
export declare function restoreUser(db:
|
|
191
|
+
export declare function restoreUser(db: Database, id: string): Promise<{
|
|
192
192
|
id: string;
|
|
193
193
|
schemaVersion: string;
|
|
194
194
|
type: string;
|
|
@@ -222,6 +222,48 @@ export declare function restoreUser(db: DatabaseClient, id: string): Promise<{
|
|
|
222
222
|
anonymizedAt: Date | null;
|
|
223
223
|
_json: unknown;
|
|
224
224
|
} | null>;
|
|
225
|
+
/** Create a new user and return the inserted row */
|
|
226
|
+
export declare function createUser(db: Database, data: typeof users.$inferInsert): Promise<{
|
|
227
|
+
id: string;
|
|
228
|
+
name: string;
|
|
229
|
+
schemaVersion: string;
|
|
230
|
+
type: string;
|
|
231
|
+
email: string | null;
|
|
232
|
+
avatarUrl: string | null;
|
|
233
|
+
password: string | null;
|
|
234
|
+
role: string;
|
|
235
|
+
status: string;
|
|
236
|
+
agentModel: string | null;
|
|
237
|
+
agentCapabilities: string[] | null;
|
|
238
|
+
agentConfig: unknown;
|
|
239
|
+
emailVerified: boolean;
|
|
240
|
+
emailVerificationToken: string | null;
|
|
241
|
+
emailVerificationTokenExpiresAt: Date | null;
|
|
242
|
+
emailVerifiedAt: Date | null;
|
|
243
|
+
tosAcceptedAt: Date | null;
|
|
244
|
+
tosVersion: string | null;
|
|
245
|
+
stripeCustomerId: string | null;
|
|
246
|
+
mfaEnabled: boolean;
|
|
247
|
+
mfaSecret: string | null;
|
|
248
|
+
mfaBackupCodes: string[] | null;
|
|
249
|
+
mfaVerifiedAt: Date | null;
|
|
250
|
+
mfaLastUsedCounter: number | null;
|
|
251
|
+
sshKeyFingerprint: string | null;
|
|
252
|
+
preferences: unknown;
|
|
253
|
+
createdAt: Date;
|
|
254
|
+
updatedAt: Date;
|
|
255
|
+
lastActiveAt: Date | null;
|
|
256
|
+
deletedAt: Date | null;
|
|
257
|
+
anonymizedAt: Date | null;
|
|
258
|
+
_json: unknown;
|
|
259
|
+
} | null>;
|
|
225
260
|
/** Permanently remove a soft-deleted user (GDPR compliance / admin cleanup) */
|
|
226
|
-
export declare function purgeUser(db:
|
|
261
|
+
export declare function purgeUser(db: Database, id: string): Promise<void>;
|
|
262
|
+
/** Count active (non-deleted, status='active') users */
|
|
263
|
+
export declare function countActiveUsers(db: Database): Promise<number>;
|
|
264
|
+
/** Look up a user by their email verification token hash (non-expired only) */
|
|
265
|
+
export declare function getUserByVerificationToken(db: Database, tokenHash: string): Promise<{
|
|
266
|
+
id: string;
|
|
267
|
+
emailVerified: boolean;
|
|
268
|
+
} | null>;
|
|
227
269
|
//# sourceMappingURL=users.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/queries/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/queries/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAK3C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,gBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAe7E;AAED,oDAAoD;AACpD,wBAAsB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,gBAAqB,mBAa5E;AAED,6BAA6B;AAC7B,wBAAsB,UAAU,CAC9B,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQzC;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAM9D;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAOzD;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAO/D;AAED,wEAAwE;AACxE,wBAAsB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,iBAKxD;AAED,kCAAkC;AAClC,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAOzD;AAED,oDAAoD;AACpD,wBAAsB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAG7E;AAED,+EAA+E;AAC/E,wBAAsB,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,iBAEvD;AAED,wDAAwD;AACxD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpE;AAED,+EAA+E;AAC/E,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;;;UAe/E"}
|
package/dist/queries/users.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* User database queries with soft-delete support
|
|
3
3
|
*/
|
|
4
|
-
import { and, count, desc, eq, ilike, inArray, isNull } from 'drizzle-orm';
|
|
4
|
+
import { and, count, desc, eq, gt, ilike, inArray, isNull, or } from 'drizzle-orm';
|
|
5
5
|
import { users } from '../schema/users.js';
|
|
6
6
|
/** Condition that excludes soft-deleted users */
|
|
7
7
|
const notDeleted = isNull(users.deletedAt);
|
|
@@ -87,8 +87,27 @@ export async function restoreUser(db, id) {
|
|
|
87
87
|
.returning();
|
|
88
88
|
return result[0] ?? null;
|
|
89
89
|
}
|
|
90
|
+
/** Create a new user and return the inserted row */
|
|
91
|
+
export async function createUser(db, data) {
|
|
92
|
+
const result = await db.insert(users).values(data).returning();
|
|
93
|
+
return result[0] ?? null;
|
|
94
|
+
}
|
|
90
95
|
/** Permanently remove a soft-deleted user (GDPR compliance / admin cleanup) */
|
|
91
96
|
export async function purgeUser(db, id) {
|
|
92
97
|
await db.delete(users).where(eq(users.id, id));
|
|
93
98
|
}
|
|
99
|
+
/** Count active (non-deleted, status='active') users */
|
|
100
|
+
export async function countActiveUsers(db) {
|
|
101
|
+
const result = await db.select({ total: count() }).from(users).where(eq(users.status, 'active'));
|
|
102
|
+
return result[0]?.total ?? 0;
|
|
103
|
+
}
|
|
104
|
+
/** Look up a user by their email verification token hash (non-expired only) */
|
|
105
|
+
export async function getUserByVerificationToken(db, tokenHash) {
|
|
106
|
+
const result = await db
|
|
107
|
+
.select({ id: users.id, emailVerified: users.emailVerified })
|
|
108
|
+
.from(users)
|
|
109
|
+
.where(and(eq(users.emailVerificationToken, tokenHash), or(isNull(users.emailVerificationTokenExpiresAt), gt(users.emailVerificationTokenExpiresAt, new Date()))))
|
|
110
|
+
.limit(1);
|
|
111
|
+
return result[0] ?? null;
|
|
112
|
+
}
|
|
94
113
|
//# sourceMappingURL=users.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/queries/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/queries/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRDT Resolver — Conflict Resolution Bridge
|
|
3
|
+
*
|
|
4
|
+
* Bridges the existing CRDT classes from @revealui/ai/memory/crdt with
|
|
5
|
+
* Drizzle ORM operations for conflict-free concurrent writes over NeonDB.
|
|
6
|
+
*
|
|
7
|
+
* Two patterns:
|
|
8
|
+
* 1. PNCounter for commutative balance updates (agent credits, usage metrics)
|
|
9
|
+
* 2. LWWRegister for last-writer-wins value updates with optimistic concurrency
|
|
10
|
+
*
|
|
11
|
+
* These patterns handle concurrent writes without coordination — the CRDT
|
|
12
|
+
* merge function resolves conflicts deterministically.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Increment agent credit balance (safe under concurrency)
|
|
17
|
+
* await crdtIncrement(db, agentCreditBalance, userId, 'balance', 10, 'node-1');
|
|
18
|
+
*
|
|
19
|
+
* // Set a value with last-writer-wins semantics
|
|
20
|
+
* await crdtSetValue(db, agentContexts, contextId, 'metadata', newMetadata, 'node-1');
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { type SQL } from 'drizzle-orm';
|
|
24
|
+
import type { PgTable, TableConfig } from 'drizzle-orm/pg-core';
|
|
25
|
+
import type { Database } from '../client/index.js';
|
|
26
|
+
export interface CRDTIncrementResult {
|
|
27
|
+
previousValue: number;
|
|
28
|
+
newValue: number;
|
|
29
|
+
retries: number;
|
|
30
|
+
}
|
|
31
|
+
export interface CRDTSetResult<T> {
|
|
32
|
+
previousValue: T;
|
|
33
|
+
newValue: T;
|
|
34
|
+
retries: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Atomically increment (or decrement) a numeric column using SQL arithmetic.
|
|
38
|
+
*
|
|
39
|
+
* This is naturally idempotent-safe when combined with an idempotency key.
|
|
40
|
+
* Under the hood it uses `SET column = column + delta` which is atomic in
|
|
41
|
+
* a single SQL statement — no CRDT serialization needed for simple counters.
|
|
42
|
+
*
|
|
43
|
+
* For distributed multi-node scenarios where each node tracks its own
|
|
44
|
+
* counter state, use the full PNCounter class from @revealui/ai/memory/crdt.
|
|
45
|
+
*
|
|
46
|
+
* @param db - Database client
|
|
47
|
+
* @param table - Drizzle table reference
|
|
48
|
+
* @param whereClause - WHERE clause to identify the row
|
|
49
|
+
* @param column - Column name to increment
|
|
50
|
+
* @param delta - Amount to add (negative for decrement)
|
|
51
|
+
* @returns Previous and new values
|
|
52
|
+
*/
|
|
53
|
+
export declare function crdtIncrement(db: Database, table: PgTable<TableConfig>, whereClause: SQL, column: string, delta: number): Promise<CRDTIncrementResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Set a value using last-writer-wins semantics with optimistic concurrency.
|
|
56
|
+
*
|
|
57
|
+
* When the database client supports transactions (Supabase pg Pool), uses
|
|
58
|
+
* SELECT FOR UPDATE inside a real transaction for true atomic check-and-set.
|
|
59
|
+
*
|
|
60
|
+
* When running on NeonDB HTTP (no transaction support), falls back to a
|
|
61
|
+
* best-effort single-statement UPDATE — still safe for single-row writes
|
|
62
|
+
* but without the isolation guarantee of FOR UPDATE.
|
|
63
|
+
*
|
|
64
|
+
* @param db - Database client (pg Pool for true locking, NeonDB HTTP for best-effort)
|
|
65
|
+
* @param table - Drizzle table reference
|
|
66
|
+
* @param whereClause - WHERE clause to identify the row
|
|
67
|
+
* @param updates - Object of column→value updates to apply
|
|
68
|
+
* @param timestampColumn - Column name used for optimistic concurrency (default: 'updatedAt')
|
|
69
|
+
* @returns Retry count and success status
|
|
70
|
+
*/
|
|
71
|
+
export declare function crdtSetWithOptimisticLock(db: Database, table: PgTable<TableConfig>, whereClause: SQL, updates: Record<string, unknown>, timestampColumn?: string): Promise<{
|
|
72
|
+
retries: number;
|
|
73
|
+
success: boolean;
|
|
74
|
+
}>;
|
|
75
|
+
//# sourceMappingURL=crdt-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crdt-resolver.d.ts","sourceRoot":"","sources":["../../src/saga/crdt-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAcnD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAC3B,WAAW,EAAE,GAAG,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,CAAC,CAmB9B;AAiBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAC3B,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,eAAe,GAAE,MAAoB,GACpC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAQhD"}
|