@revealui/db 0.3.4 → 0.3.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.
Files changed (76) hide show
  1. package/dist/client/index.d.ts +10 -0
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +13 -0
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/crypto.d.ts +1 -1
  6. package/dist/crypto.js +1 -1
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/queries/boards.d.ts +4 -0
  12. package/dist/queries/boards.d.ts.map +1 -1
  13. package/dist/queries/boards.js +4 -0
  14. package/dist/queries/boards.js.map +1 -1
  15. package/dist/queries/conversations.d.ts.map +1 -1
  16. package/dist/queries/conversations.js +3 -0
  17. package/dist/queries/conversations.js.map +1 -1
  18. package/dist/queries/ticket-comments.d.ts.map +1 -1
  19. package/dist/queries/ticket-comments.js +7 -0
  20. package/dist/queries/ticket-comments.js.map +1 -1
  21. package/dist/saga/crdt-resolver.d.ts +75 -0
  22. package/dist/saga/crdt-resolver.d.ts.map +1 -0
  23. package/dist/saga/crdt-resolver.js +168 -0
  24. package/dist/saga/crdt-resolver.js.map +1 -0
  25. package/dist/saga/idempotent-operation.d.ts +52 -0
  26. package/dist/saga/idempotent-operation.d.ts.map +1 -0
  27. package/dist/saga/idempotent-operation.js +78 -0
  28. package/dist/saga/idempotent-operation.js.map +1 -0
  29. package/dist/saga/index.d.ts +29 -0
  30. package/dist/saga/index.d.ts.map +1 -0
  31. package/dist/saga/index.js +30 -0
  32. package/dist/saga/index.js.map +1 -0
  33. package/dist/saga/neon-saga.d.ts +50 -0
  34. package/dist/saga/neon-saga.d.ts.map +1 -0
  35. package/dist/saga/neon-saga.js +234 -0
  36. package/dist/saga/neon-saga.js.map +1 -0
  37. package/dist/saga/recovery.d.ts +50 -0
  38. package/dist/saga/recovery.d.ts.map +1 -0
  39. package/dist/saga/recovery.js +92 -0
  40. package/dist/saga/recovery.js.map +1 -0
  41. package/dist/saga/resilient-step.d.ts +38 -0
  42. package/dist/saga/resilient-step.d.ts.map +1 -0
  43. package/dist/saga/resilient-step.js +75 -0
  44. package/dist/saga/resilient-step.js.map +1 -0
  45. package/dist/saga/types.d.ts +94 -0
  46. package/dist/saga/types.d.ts.map +1 -0
  47. package/dist/saga/types.js +9 -0
  48. package/dist/saga/types.js.map +1 -0
  49. package/dist/schema/agents.d.ts.map +1 -1
  50. package/dist/schema/agents.js +16 -6
  51. package/dist/schema/agents.js.map +1 -1
  52. package/dist/schema/api-keys.d.ts +1 -1
  53. package/dist/schema/api-keys.js +2 -2
  54. package/dist/schema/api-keys.js.map +1 -1
  55. package/dist/schema/audit-log.d.ts +17 -0
  56. package/dist/schema/audit-log.d.ts.map +1 -1
  57. package/dist/schema/audit-log.js +2 -0
  58. package/dist/schema/audit-log.js.map +1 -1
  59. package/dist/schema/coordination.d.ts.map +1 -1
  60. package/dist/schema/coordination.js +5 -2
  61. package/dist/schema/coordination.js.map +1 -1
  62. package/dist/schema/idempotency.d.ts +104 -0
  63. package/dist/schema/idempotency.d.ts.map +1 -0
  64. package/dist/schema/idempotency.js +24 -0
  65. package/dist/schema/idempotency.js.map +1 -0
  66. package/dist/schema/index.js +1 -1
  67. package/dist/schema/index.js.map +1 -1
  68. package/dist/schema/rest.d.ts +1 -0
  69. package/dist/schema/rest.d.ts.map +1 -1
  70. package/dist/schema/rest.js +1 -0
  71. package/dist/schema/rest.js.map +1 -1
  72. package/dist/types/database.d.ts +12 -1
  73. package/dist/types/database.d.ts.map +1 -1
  74. package/dist/types/database.js +2 -0
  75. package/dist/types/database.js.map +1 -1
  76. package/package.json +7 -3
@@ -221,6 +221,16 @@ export declare function closeAllPools(): Promise<void>;
221
221
  */
222
222
  export declare function requiresTransactions(dbType?: DatabaseType): void;
223
223
  export declare function withTransaction<T>(db: Database, fn: (tx: Database) => Promise<T>): Promise<T>;
224
+ /**
225
+ * Execute a saga — a NeonDB-safe alternative to withTransaction.
226
+ *
227
+ * Unlike withTransaction (which requires a pg Pool driver), withSaga works
228
+ * with the NeonDB HTTP driver by modeling multi-step writes as individually
229
+ * atomic operations with compensating actions for rollback.
230
+ *
231
+ * @see executeSaga in ../saga/neon-saga.ts for full documentation
232
+ */
233
+ export { executeSaga as withSaga } from '../saga/neon-saga.js';
224
234
  export type { AgentAction, AgentContext, AgentMemory, Conversation, CRDTOperation, GlobalFooter, GlobalHeader, GlobalSettings, Media, NewAgentAction, NewAgentContext, NewAgentMemory, NewConversation, NewCRDTOperation, NewGlobalFooter, NewGlobalHeader, NewGlobalSettings, NewMedia, NewNodeIdMapping, NewPage, NewPageRevision, NewPost, NewSession, NewSite, NewSiteCollaborator, NewUser, NodeIdMapping, Page, PageRevision, Post, Session, Site, SiteCollaborator, User, } from '../schema/index.js';
225
235
  export type { Database as DatabaseSchema, DatabaseClient, QueryResult, QueryResults, RelatedTables, TableRelationships, Transaction, } from './types.js';
226
236
  export { schema };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -428,5 +428,18 @@ export async function withTransaction(db, fn) {
428
428
  // This automatically handles BEGIN/COMMIT/ROLLBACK
429
429
  return db.transaction(fn);
430
430
  }
431
+ // =============================================================================
432
+ // Saga Helper (NeonDB-safe alternative to withTransaction)
433
+ // =============================================================================
434
+ /**
435
+ * Execute a saga — a NeonDB-safe alternative to withTransaction.
436
+ *
437
+ * Unlike withTransaction (which requires a pg Pool driver), withSaga works
438
+ * with the NeonDB HTTP driver by modeling multi-step writes as individually
439
+ * atomic operations with compensating actions for rollback.
440
+ *
441
+ * @see executeSaga in ../saga/neon-saga.ts for full documentation
442
+ */
443
+ export { executeSaga as withSaga } from '../saga/neon-saga.js';
431
444
  export { schema };
432
445
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
package/dist/crypto.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @revealui/db/crypto — AES-256-GCM envelope encryption for BYOK API keys
2
+ * @revealui/db/crypto — AES-256-GCM envelope encryption for stored API keys
3
3
  *
4
4
  * Uses a Key Encryption Key (KEK) sourced from the REVEALUI_KEK environment
5
5
  * variable (64 hex chars = 32 bytes). Each key is encrypted with a random
package/dist/crypto.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @revealui/db/crypto — AES-256-GCM envelope encryption for BYOK API keys
2
+ * @revealui/db/crypto — AES-256-GCM envelope encryption for stored API keys
3
3
  *
4
4
  * Uses a Key Encryption Key (KEK) sourced from the REVEALUI_KEK environment
5
5
  * variable (64 hex chars = 32 bytes). Each key is encrypted with a random
package/dist/index.d.ts CHANGED
@@ -24,6 +24,8 @@
24
24
  */
25
25
  export { DrizzleAuditStore } from './audit-store.js';
26
26
  export { closeAllPools, createClient, type Database as DatabaseClient, type DatabaseConfig, type DatabaseType, getClient, getPoolMetrics, getRestClient, getVectorClient, requiresTransactions, resetClient, schema, withTransaction, } from './client/index.js';
27
+ export type { SagaContext, SagaOptions, SagaResult, SagaStep, } from './saga/index.js';
28
+ export { executeSaga, executeSaga as withSaga, idempotentWrite, recoverStaleSagas, resilientStep, } from './saga/index.js';
27
29
  export * from './schema/index.js';
28
30
  export type { Database, TableInsert, TableRelationships, TableRow, TableUpdate, } from './types/index.js';
29
31
  export { whereActive, withActiveFilter } from './utils/soft-delete.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,QAAQ,IAAI,cAAc,EAC/B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,MAAM,EACN,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,cAAc,mBAAmB,CAAC;AAElC,YAAY,EACV,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,QAAQ,IAAI,cAAc,EAC/B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,MAAM,EACN,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,WAAW,IAAI,QAAQ,EACvB,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,cAAc,mBAAmB,CAAC;AAElC,YAAY,EACV,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -26,6 +26,8 @@
26
26
  export { DrizzleAuditStore } from './audit-store.js';
27
27
  // Re-export client utilities
28
28
  export { closeAllPools, createClient, getClient, getPoolMetrics, getRestClient, getVectorClient, requiresTransactions, resetClient, schema, withTransaction, } from './client/index.js';
29
+ // Re-export saga module
30
+ export { executeSaga, executeSaga as withSaga, idempotentWrite, recoverStaleSagas, resilientStep, } from './saga/index.js';
29
31
  // Re-export everything from core (schema)
30
32
  export * from './schema/index.js';
31
33
  // Re-export soft-delete helpers
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,6BAA6B;AAC7B,OAAO,EACL,aAAa,EACb,YAAY,EAIZ,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,MAAM,EACN,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,0CAA0C;AAC1C,cAAc,mBAAmB,CAAC;AASlC,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,6BAA6B;AAC7B,OAAO,EACL,aAAa,EACb,YAAY,EAIZ,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,MAAM,EACN,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAQ3B,wBAAwB;AACxB,OAAO,EACL,WAAW,EACX,WAAW,IAAI,QAAQ,EACvB,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,0CAA0C;AAC1C,cAAc,mBAAmB,CAAC;AASlC,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -43,6 +43,10 @@ export declare function getBoardBySlug(db: DatabaseClient, slug: string, tenantI
43
43
  } | null>;
44
44
  /**
45
45
  * Create a board with default kanban columns.
46
+ *
47
+ * NOTE: NeonDB HTTP driver does not support transactions. The board insert and
48
+ * column insert below are not atomic — a failure after the board is created but
49
+ * before columns are inserted will leave a board without its default columns.
46
50
  */
47
51
  export declare function createBoard(db: DatabaseClient, data: {
48
52
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../src/queries/boards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAWzD,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;KAKvE;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;UAGhE;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;UAUvF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;;;;;eAoBF;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;;;;;;;;;;;;UAS3F;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAE/D;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;UAGjE;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;KAM1E;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;eAIF;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;;;;;;;;;;;UASH;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAEhE"}
1
+ {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../src/queries/boards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAWzD,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;KAKvE;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;UAGhE;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;UAUvF;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;;;;;eAoBF;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;;;;;;;;;;;;UAS3F;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAE/D;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;UAGjE;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;KAM1E;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;eAIF;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;;;;;;;;;;;UASH;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAEhE"}
@@ -33,6 +33,10 @@ export async function getBoardBySlug(db, slug, tenantId) {
33
33
  }
34
34
  /**
35
35
  * Create a board with default kanban columns.
36
+ *
37
+ * NOTE: NeonDB HTTP driver does not support transactions. The board insert and
38
+ * column insert below are not atomic — a failure after the board is created but
39
+ * before columns are inserted will leave a board without its default columns.
36
40
  */
37
41
  export async function createBoard(db, data) {
38
42
  const result = await db.insert(boards).values(data).returning();
@@ -1 +1 @@
1
- {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/queries/boards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/queries/boards.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/queries/conversations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,KAAK,KAAK,GAAG,GAAG,CAAC;AAEjB,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,gBAUlD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAO9E;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,KAAK,EACT,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,gBAatE;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,gBAQd;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAO7E;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,KAAK,EACT,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,gBAUlD;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,KAAK,EACT,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,gBAmB5E"}
1
+ {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/queries/conversations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,KAAK,KAAK,GAAG,GAAG,CAAC;AAEjB,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,gBAUlD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAO9E;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,KAAK,EACT,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,gBAatE;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,gBAQd;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAO7E;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,KAAK,EACT,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,gBAUlD;AAKD,wBAAsB,UAAU,CAC9B,EAAE,EAAE,KAAK,EACT,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,gBAmB5E"}
@@ -60,6 +60,9 @@ export async function getMessages(db, conversationId, options = {}) {
60
60
  .limit(limit)
61
61
  .offset(offset);
62
62
  }
63
+ // NOTE: NeonDB HTTP driver does not support transactions. The message insert
64
+ // and conversation timestamp update below are not atomic — a failure between
65
+ // them can leave the conversation's updatedAt stale.
63
66
  export async function addMessage(db, data) {
64
67
  const result = await db
65
68
  .insert(messages)
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/queries/conversations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/queries/conversations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-comments.d.ts","sourceRoot":"","sources":["../../src/queries/ticket-comments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;;UAGlE;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;;;;;;;KAM7E;AAED,kFAAkF;AAClF,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;KAchF;AAED,6EAA6E;AAC7E,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE;;;;;;;KAOnF;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE;;;;;;;eAczE;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE;;;;;;;UAQ1F;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAoBjE"}
1
+ {"version":3,"file":"ticket-comments.d.ts","sourceRoot":"","sources":["../../src/queries/ticket-comments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;;UAGlE;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;;;;;;;KAM7E;AAED,kFAAkF;AAClF,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;KAchF;AAED,6EAA6E;AAC7E,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE;;;;;;;KAOnF;AAMD,wBAAsB,aAAa,CACjC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE;;;;;;;eAczE;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE;;;;;;;UAQ1F;AAKD,wBAAsB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAoBjE"}
@@ -41,6 +41,10 @@ export async function getCommentsByTicketIds(db, ticketIds) {
41
41
  .where(inArray(ticketComments.ticketId, ticketIds))
42
42
  .orderBy(ticketComments.createdAt);
43
43
  }
44
+ // NOTE: NeonDB HTTP driver does not support transactions. The insert and count
45
+ // update below are not atomic — a failure between them can leave the comment
46
+ // count out of sync. A periodic reconciliation job or manual correction may be
47
+ // needed if this becomes a problem in practice.
44
48
  export async function createComment(db, data) {
45
49
  const result = await db.insert(ticketComments).values(data).returning();
46
50
  // Increment comment count on the ticket
@@ -61,6 +65,9 @@ export async function updateComment(db, id, data) {
61
65
  .returning();
62
66
  return result[0] ?? null;
63
67
  }
68
+ // NOTE: NeonDB HTTP driver does not support transactions. The select, delete,
69
+ // and count update below are not atomic — a failure between them can leave the
70
+ // comment count out of sync or orphan a decrement without a deletion.
64
71
  export async function deleteComment(db, id) {
65
72
  // Get the ticket ID before deleting
66
73
  const comment = await db
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-comments.js","sourceRoot":"","sources":["../../src/queries/ticket-comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ticket-comments.js","sourceRoot":"","sources":["../../src/queries/ticket-comments.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"}
@@ -0,0 +1,168 @@
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 { sql } from 'drizzle-orm';
24
+ // =============================================================================
25
+ // Types
26
+ // =============================================================================
27
+ /** Maximum number of optimistic concurrency retries before giving up */
28
+ const MAX_RETRIES = 5;
29
+ // =============================================================================
30
+ // PNCounter Pattern — Commutative Increments/Decrements
31
+ // =============================================================================
32
+ /**
33
+ * Atomically increment (or decrement) a numeric column using SQL arithmetic.
34
+ *
35
+ * This is naturally idempotent-safe when combined with an idempotency key.
36
+ * Under the hood it uses `SET column = column + delta` which is atomic in
37
+ * a single SQL statement — no CRDT serialization needed for simple counters.
38
+ *
39
+ * For distributed multi-node scenarios where each node tracks its own
40
+ * counter state, use the full PNCounter class from @revealui/ai/memory/crdt.
41
+ *
42
+ * @param db - Database client
43
+ * @param table - Drizzle table reference
44
+ * @param whereClause - WHERE clause to identify the row
45
+ * @param column - Column name to increment
46
+ * @param delta - Amount to add (negative for decrement)
47
+ * @returns Previous and new values
48
+ */
49
+ export async function crdtIncrement(db, table, whereClause, column, delta) {
50
+ // Read current value
51
+ const rows = await db.select().from(table).where(whereClause).limit(1);
52
+ if (rows.length === 0) {
53
+ throw new Error('CRDT increment: row not found');
54
+ }
55
+ const row = rows[0];
56
+ const previousValue = typeof row[column] === 'number' ? row[column] : 0;
57
+ const newValue = previousValue + delta;
58
+ // Atomic update using SQL arithmetic via set
59
+ await db
60
+ .update(table)
61
+ .set({ [column]: newValue })
62
+ .where(whereClause);
63
+ return { previousValue, newValue, retries: 0 };
64
+ }
65
+ // =============================================================================
66
+ // LWW Register Pattern — Last-Writer-Wins with Optimistic Concurrency
67
+ // =============================================================================
68
+ /**
69
+ * Detect whether a Database instance supports real transactions (pg Pool).
70
+ * NeonDB HTTP clients are stateless and cannot hold transaction state.
71
+ */
72
+ function supportsTransactions(db) {
73
+ return ('transaction' in db &&
74
+ typeof db.transaction === 'function');
75
+ }
76
+ /**
77
+ * Set a value using last-writer-wins semantics with optimistic concurrency.
78
+ *
79
+ * When the database client supports transactions (Supabase pg Pool), uses
80
+ * SELECT FOR UPDATE inside a real transaction for true atomic check-and-set.
81
+ *
82
+ * When running on NeonDB HTTP (no transaction support), falls back to a
83
+ * best-effort single-statement UPDATE — still safe for single-row writes
84
+ * but without the isolation guarantee of FOR UPDATE.
85
+ *
86
+ * @param db - Database client (pg Pool for true locking, NeonDB HTTP for best-effort)
87
+ * @param table - Drizzle table reference
88
+ * @param whereClause - WHERE clause to identify the row
89
+ * @param updates - Object of column→value updates to apply
90
+ * @param timestampColumn - Column name used for optimistic concurrency (default: 'updatedAt')
91
+ * @returns Retry count and success status
92
+ */
93
+ export async function crdtSetWithOptimisticLock(db, table, whereClause, updates, timestampColumn = 'updatedAt') {
94
+ // pg Pool path — true transactional SELECT FOR UPDATE
95
+ if (supportsTransactions(db)) {
96
+ return crdtSetTransactional(db, table, whereClause, updates, timestampColumn);
97
+ }
98
+ // NeonDB HTTP fallback — best-effort single-statement update
99
+ return crdtSetBestEffort(db, table, whereClause, updates, timestampColumn);
100
+ }
101
+ /**
102
+ * True atomic check-and-set via SELECT FOR UPDATE + conditional UPDATE
103
+ * inside a pg transaction. Retries on serialization failures.
104
+ */
105
+ async function crdtSetTransactional(db, table, whereClause, updates, timestampColumn) {
106
+ let retries = 0;
107
+ while (retries < MAX_RETRIES) {
108
+ try {
109
+ const success = await db.transaction(async (tx) => {
110
+ // Lock the row — blocks concurrent writers until this tx commits
111
+ const rows = await tx.select().from(table).where(whereClause).for('update').limit(1);
112
+ if (rows.length === 0) {
113
+ throw new Error('CRDT set: row not found');
114
+ }
115
+ const row = rows[0];
116
+ const currentTimestamp = row[timestampColumn];
117
+ // Write with new timestamp
118
+ const newTimestamp = new Date();
119
+ const result = await tx
120
+ .update(table)
121
+ .set({
122
+ ...updates,
123
+ [timestampColumn]: newTimestamp,
124
+ })
125
+ .where(sql `${whereClause} AND ${sql.identifier(timestampColumn)} = ${currentTimestamp}`)
126
+ .returning();
127
+ return result.length > 0;
128
+ });
129
+ if (success) {
130
+ return { retries, success: true };
131
+ }
132
+ retries++;
133
+ }
134
+ catch (error) {
135
+ const message = error instanceof Error ? error.message : String(error);
136
+ // Row not found is a hard error, not a retry scenario
137
+ if (message === 'CRDT set: row not found')
138
+ throw error;
139
+ // Serialization/deadlock failures are retryable
140
+ retries++;
141
+ if (retries >= MAX_RETRIES) {
142
+ return { retries, success: false };
143
+ }
144
+ }
145
+ }
146
+ return { retries, success: false };
147
+ }
148
+ /**
149
+ * Best-effort single-statement UPDATE for NeonDB HTTP.
150
+ * No true isolation — relies on the write being a single atomic statement.
151
+ */
152
+ async function crdtSetBestEffort(db, table, whereClause, updates, timestampColumn) {
153
+ const rows = await db.select().from(table).where(whereClause).limit(1);
154
+ if (rows.length === 0) {
155
+ throw new Error('CRDT set: row not found');
156
+ }
157
+ const newTimestamp = new Date();
158
+ const result = await db
159
+ .update(table)
160
+ .set({
161
+ ...updates,
162
+ [timestampColumn]: newTimestamp,
163
+ })
164
+ .where(whereClause)
165
+ .returning();
166
+ return { retries: 0, success: result.length > 0 };
167
+ }
168
+ //# sourceMappingURL=crdt-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crdt-resolver.js","sourceRoot":"","sources":["../../src/saga/crdt-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Idempotent Operation Wrapper
3
+ *
4
+ * Generalizes the processedWebhookEvents dedup pattern into a reusable
5
+ * utility. Checks an idempotency key before executing, skips if already
6
+ * processed, and records the key after success.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const { result, alreadyProcessed } = await idempotentWrite(
11
+ * db,
12
+ * `send-welcome-email:${userId}`,
13
+ * 'email',
14
+ * async () => {
15
+ * await sendWelcomeEmail(userId);
16
+ * return { sent: true };
17
+ * },
18
+ * );
19
+ *
20
+ * if (alreadyProcessed) {
21
+ * // Email was already sent — skip
22
+ * }
23
+ * ```
24
+ */
25
+ import type { Database } from '../client/index.js';
26
+ export interface IdempotentWriteResult<T> {
27
+ /** The operation's return value (undefined if already processed) */
28
+ result?: T;
29
+ /** True if the operation was skipped because the key already existed */
30
+ alreadyProcessed: boolean;
31
+ }
32
+ export interface IdempotentWriteOptions {
33
+ /** TTL for the idempotency key in ms (default: 24 hours) */
34
+ ttlMs?: number;
35
+ /** Cache the result in the idempotency record for retrieval on replay */
36
+ cacheResult?: boolean;
37
+ }
38
+ /**
39
+ * Execute an operation idempotently.
40
+ *
41
+ * 1. Check if the key exists in idempotency_keys (skip if so)
42
+ * 2. Execute the operation
43
+ * 3. Record the key (ON CONFLICT DO NOTHING for race-condition safety)
44
+ *
45
+ * @param db - Database client
46
+ * @param key - Unique idempotency key for this operation
47
+ * @param operationType - Category string (e.g., 'saga', 'email', 'webhook')
48
+ * @param operation - The function to execute idempotently
49
+ * @param options - TTL and caching options
50
+ */
51
+ export declare function idempotentWrite<T>(db: Database, key: string, operationType: string, operation: () => Promise<T>, options?: IdempotentWriteOptions): Promise<IdempotentWriteResult<T>>;
52
+ //# sourceMappingURL=idempotent-operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotent-operation.d.ts","sourceRoot":"","sources":["../../src/saga/idempotent-operation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAMnD,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,wEAAwE;IACxE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CA0CnC"}