@enbox/dwn-sdk-js 0.4.10 → 0.4.12

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 (55) hide show
  1. package/dist/browser.mjs +4 -1
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/src/handlers/records-query.js +9 -11
  4. package/dist/esm/src/handlers/records-query.js.map +1 -1
  5. package/dist/esm/src/handlers/records-read.js +15 -6
  6. package/dist/esm/src/handlers/records-read.js.map +1 -1
  7. package/dist/esm/src/handlers/records-subscribe.js +8 -11
  8. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  9. package/dist/esm/src/handlers/records-write.js +6 -12
  10. package/dist/esm/src/handlers/records-write.js.map +1 -1
  11. package/dist/esm/src/interfaces/records-write-query.js +3 -0
  12. package/dist/esm/src/interfaces/records-write-query.js.map +1 -1
  13. package/dist/esm/src/store/message-store-level.js +104 -3
  14. package/dist/esm/src/store/message-store-level.js.map +1 -1
  15. package/dist/esm/src/store/storage-controller.js +44 -33
  16. package/dist/esm/src/store/storage-controller.js.map +1 -1
  17. package/dist/esm/src/utils/initial-write-attachment.js +48 -0
  18. package/dist/esm/src/utils/initial-write-attachment.js.map +1 -0
  19. package/dist/esm/tests/handlers/records-query.spec.js +82 -0
  20. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  21. package/dist/esm/tests/handlers/records-read.spec.js +25 -0
  22. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  23. package/dist/esm/tests/handlers/records-subscribe.spec.js +60 -1
  24. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  25. package/dist/esm/tests/store/message-store.spec.js +105 -0
  26. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  27. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  28. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  29. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  30. package/dist/types/src/index.d.ts +1 -1
  31. package/dist/types/src/index.d.ts.map +1 -1
  32. package/dist/types/src/interfaces/records-write-query.d.ts.map +1 -1
  33. package/dist/types/src/store/message-store-level.d.ts +9 -1
  34. package/dist/types/src/store/message-store-level.d.ts.map +1 -1
  35. package/dist/types/src/store/storage-controller.d.ts +18 -8
  36. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  37. package/dist/types/src/types/message-store.d.ts +36 -0
  38. package/dist/types/src/types/message-store.d.ts.map +1 -1
  39. package/dist/types/src/utils/initial-write-attachment.d.ts +17 -0
  40. package/dist/types/src/utils/initial-write-attachment.d.ts.map +1 -0
  41. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  42. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  43. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  44. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
  45. package/package.json +3 -3
  46. package/src/handlers/records-query.ts +21 -22
  47. package/src/handlers/records-read.ts +22 -9
  48. package/src/handlers/records-subscribe.ts +9 -15
  49. package/src/handlers/records-write.ts +15 -15
  50. package/src/index.ts +1 -1
  51. package/src/interfaces/records-write-query.ts +3 -0
  52. package/src/store/message-store-level.ts +160 -5
  53. package/src/store/storage-controller.ts +57 -43
  54. package/src/types/message-store.ts +37 -0
  55. package/src/utils/initial-write-attachment.ts +64 -0
@@ -1 +1 @@
1
- {"version":3,"file":"records-query.d.ts","sourceRoot":"","sources":["../../../../src/handlers/records-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAA0B,MAAM,2BAA2B,CAAC;AAgBhH,qBAAa,mBAAoB,YAAW,aAAa;IAE3C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEzC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,GACR,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,mBAAmB,CAAA;KAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA2D9E;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;YACW,mBAAmB;YAwBnB,2BAA2B;IAwBzC;;;;;;;;;;;;;;;;;;OAkBG;YACW,sBAAsB;IA4CpC;;OAEG;YACW,qBAAqB;YAkBrB,uCAAuC;IAoGrD,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAY1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2CAA2C;IAa1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,+CAA+C;IAW9D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sDAAsD;IAWrE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0CAA0C;IAazD;;OAEG;mBACkB,qBAAqB;YAuC5B,gCAAgC;CAc/C"}
1
+ {"version":3,"file":"records-query.d.ts","sourceRoot":"","sources":["../../../../src/handlers/records-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAA0B,MAAM,2BAA2B,CAAC;AAyBhH,qBAAa,mBAAoB,YAAW,aAAa;IAE3C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEzC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,GACR,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,mBAAmB,CAAA;KAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsD9E;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;YACW,mBAAmB;YAwBnB,2BAA2B;IAwBzC;;;;;;;;;;;;;;;;;;OAkBG;YACW,sBAAsB;IA4CpC;;OAEG;YACW,qBAAqB;YAkBrB,uCAAuC;IA+FrD,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAY1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2CAA2C;IAa1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,+CAA+C;IAW9D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sDAAsD;IAWrE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0CAA0C;IAazD;;OAEG;mBACkB,qBAAqB;YAuC5B,gCAAgC;CAc/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"records-read.d.ts","sourceRoot":"","sources":["../../../../src/handlers/records-read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAgD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAiBpI,qBAAa,kBAAmB,YAAW,aAAa;IAE1C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEzC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,GACR,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,kBAAkB,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAwGhE,qBAAqB;IA0CnC;;OAEG;mBACkB,oBAAoB;CAkD1C"}
1
+ {"version":3,"file":"records-read.d.ts","sourceRoot":"","sources":["../../../../src/handlers/records-read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAgD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAkBpI,qBAAa,kBAAmB,YAAW,aAAa;IAE1C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEzC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,GACR,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,kBAAkB,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAoHhE,qBAAqB;IA0CnC;;OAEG;mBACkB,oBAAoB;CAkD1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"records-subscribe.d.ts","sourceRoot":"","sources":["../../../../src/handlers/records-subscribe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyD,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AAElJ,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAA0B,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAUxH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAYtE,qBAAa,uBAAwB,YAAW,aAAa;IAE/C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEzC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,EACP,mBAAmB,GACpB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,uBAAuB,CAAC;QACjC,mBAAmB,EAAE,oBAAoB,CAAC;KAC3C,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuIlC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmB9B,OAAO,CAAC,MAAM,CAAC,+BAA+B;IA2H9C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IASrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA0DxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAcxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAUrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAyDxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAWxC;;OAEG;WACiB,yBAAyB,CAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC;YAmCF,+BAA+B;YAe/B,uCAAuC;CAwFtD"}
1
+ {"version":3,"file":"records-subscribe.d.ts","sourceRoot":"","sources":["../../../../src/handlers/records-subscribe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyD,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AAElJ,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAA0B,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAWxH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAWtE,qBAAa,uBAAwB,YAAW,aAAa;IAE/C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEzC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,EACP,mBAAmB,GACpB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,uBAAuB,CAAC;QACjC,mBAAmB,EAAE,oBAAoB,CAAC;KAC3C,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiIlC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmB9B,OAAO,CAAC,MAAM,CAAC,+BAA+B;IA2H9C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IASrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA0DxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAcxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAUrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAyDxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAWxC;;OAEG;WACiB,yBAAyB,CAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC;YAmCF,+BAA+B;YAe/B,uCAAuC;CAwFtD"}
@@ -54,7 +54,7 @@ export type { MessagesReadOptions } from './interfaces/messages-read.js';
54
54
  export { MessagesQuery } from './interfaces/messages-query.js';
55
55
  export type { MessagesQueryOptions } from './interfaces/messages-query.js';
56
56
  export type { UnionMessageReply } from './core/message-reply.js';
57
- export type { MessageStore, MessageStoreOptions, MessageStorePutResult } from './types/message-store.js';
57
+ export type { MessageStore, MessageStoreLatestStateTransition, MessageStoreOptions, MessageStorePutResult } from './types/message-store.js';
58
58
  export { Replication } from './utils/replication.js';
59
59
  export type { MessageInterface } from './types/message-interface.js';
60
60
  export { PermissionGrant } from './protocols/permission-grant.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"records-write-query.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/records-write-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAkBlG;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAS9F;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,oBAAoB,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,GACzE,OAAO,CAyBT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,EAAE,CAI3E;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAe9B;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CASnC;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAS1C"}
1
+ {"version":3,"file":"records-write-query.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/records-write-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAkBlG;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAS9F;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,oBAAoB,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,GACzE,OAAO,CAyBT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,EAAE,CAI3E;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAe9B;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CASnC;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAY1C"}
@@ -2,7 +2,7 @@ import type { CompoundIndexDefinition } from './index-level.js';
2
2
  import type { EventLogReadOptions, EventLogReadResult, ProgressToken, ReplicationFeedReader, WakePublisher } from '../types/subscriptions.js';
3
3
  import type { Filter, KeyValues, PaginationCursor, QueryOptions } from '../types/query-types.js';
4
4
  import type { GenericMessage, MessageSort, Pagination } from '../types/message-types.js';
5
- import type { MessageStore, MessageStoreOptions, MessageStorePutResult } from '../types/message-store.js';
5
+ import type { MessageStore, MessageStoreLatestStateTransition, MessageStoreOptions, MessageStorePutResult } from '../types/message-store.js';
6
6
  import { createLevelDatabase } from './level-wrapper.js';
7
7
  /**
8
8
  * A {@link MessageStore} and {@link ReplicationFeedReader} implementation that works in both the
@@ -62,6 +62,7 @@ export declare class MessageStoreLevel implements MessageStore, ReplicationFeedR
62
62
  */
63
63
  static buildQueryOptions(messageSort?: MessageSort, pagination?: Pagination): QueryOptions;
64
64
  put(tenant: string, message: GenericMessage, indexes: KeyValues, options?: MessageStoreOptions): Promise<MessageStorePutResult>;
65
+ commitLatestState(tenant: string, transition: MessageStoreLatestStateTransition, options?: MessageStoreOptions): Promise<MessageStorePutResult>;
65
66
  updateIndexes(tenant: string, messageCid: string, indexes: KeyValues, options?: MessageStoreOptions): Promise<void>;
66
67
  updateMessageAndIndexes(tenant: string, messageCid: string, message: GenericMessage, indexes: KeyValues, options?: MessageStoreOptions): Promise<void>;
67
68
  delete(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<void>;
@@ -106,6 +107,13 @@ export declare class MessageStoreLevel implements MessageStore, ReplicationFeedR
106
107
  * fingerprint domains. XOR is self-inverse, so the same operations serve insert and delete.
107
108
  */
108
109
  private createFingerprintFoldOperations;
110
+ /**
111
+ * Creates the batch operations that fold multiple messages' contributions into their fingerprint
112
+ * domains. Contributions targeting the same domain are XOR-combined before the single
113
+ * read-fold-write per domain — concatenating per-message fold operations into one batch would
114
+ * let the last write to a shared domain silently discard the earlier folds.
115
+ */
116
+ private createFingerprintFoldOperationsForMessages;
109
117
  /**
110
118
  * Encodes a fingerprint domain name as a Level key. The uniform prefix keeps the global
111
119
  * domain (the empty string) a valid key.
@@ -1 +1 @@
1
- {"version":3,"file":"message-store-level.d.ts","sourceRoot":"","sources":["../../../../src/store/message-store-level.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-store-level.d.ts","sourceRoot":"","sources":["../../../../src/store/message-store-level.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { DataStore } from '../types/data-store.js';
2
2
  import type { GenericMessage } from '../types/message-types.js';
3
- import type { MessageStore } from '../types/message-store.js';
4
3
  import type { ProgressToken } from '../types/subscriptions.js';
4
+ import type { KeyValues } from '../types/query-types.js';
5
+ import type { MessageStore, MessageStorePutResult } from '../types/message-store.js';
5
6
  import type { RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';
6
7
  export type ResumableRecordsDeleteData = {
7
8
  tenant: string;
@@ -64,14 +65,23 @@ export declare class StorageController {
64
65
  */
65
66
  static purgeRecordMessages(tenant: string, recordMessages: GenericMessage[], messageStore: MessageStore, dataStore: DataStore): Promise<void>;
66
67
  /**
67
- * Deletes all messages in `existingMessages` that the `retainedMessage` displaces, while keeping
68
- * the initial write and the caller-supplied writes as non-latest state for future replay and
69
- * tombstone visibility reconstruction. Displacement is deliberately NOT a timestamp comparison:
70
- * a RecordsDelete displaces even a newer RecordsWrite (delete-wins convergence), and on
71
- * resumable-task replay the retained message itself is back in `existingMessages` and must
72
- * survive — so membership is decided by CID.
68
+ * Stores the new latest message and displaces every other message in `existingMessages` as ONE
69
+ * atomic message-store commit: the initial write and the caller-supplied writes are retained as
70
+ * non-latest state for future replay and tombstone visibility reconstruction, and the remaining
71
+ * displaced messages are deleted. Readers can never observe an intermediate state where both the
72
+ * new message and a displaced message carry latest-state indexes.
73
+ *
74
+ * Displacement is deliberately NOT a timestamp comparison: a RecordsDelete displaces even a
75
+ * newer RecordsWrite (delete-wins convergence), and on resumable-task replay the new message
76
+ * itself is back in `existingMessages` and must survive — so membership is decided by CID.
77
+ *
78
+ * Displaced messages' unreferenced data is deleted from the data store only AFTER the commit:
79
+ * a crash in between leaves at most an orphaned data blob, never a live row whose data is gone.
73
80
  */
74
- static deleteDisplacedMessagesAndRetainWrites(tenant: string, existingMessages: GenericMessage[], retainedMessage: GenericMessage, messageStore: MessageStore, dataStore: DataStore, additionalRetainedRecordsWrites: RecordsWriteMessage[]): Promise<void>;
81
+ static commitLatestStateTransition(tenant: string, existingMessages: GenericMessage[], newMessage: {
82
+ message: GenericMessage;
83
+ indexes: KeyValues;
84
+ }, additionalRetainedRecordsWrites: RecordsWriteMessage[], messageStore: MessageStore, dataStore: DataStore): Promise<MessageStorePutResult>;
75
85
  private static stripInlineData;
76
86
  }
77
87
  //# sourceMappingURL=storage-controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-controller.d.ts","sourceRoot":"","sources":["../../../../src/store/storage-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAW3F,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAEnB,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE;QAC9C,YAAY,EAAG,YAAY,CAAC;QAC5B,SAAS,EAAG,SAAS,CAAC;KACvB;IAMY,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAuDpH;;;;;;;;OAQG;IACU,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DjG;;;OAGG;mBACkB,2BAA2B;IA2BhD;;;;;;;;;;;;;;;;OAgBG;WACiB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC;IAkChB;;;OAGG;WACiB,mBAAmB,CACrC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAAE,EAChC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;;;OAOG;WACiB,sCAAsC,CACxD,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,cAAc,EAAE,EAClC,eAAe,EAAE,cAAc,EAC/B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,+BAA+B,EAAE,mBAAmB,EAAE,GACrD,OAAO,CAAC,IAAI,CAAC;IAsChB,OAAO,CAAC,MAAM,CAAC,eAAe;CAK/B"}
1
+ {"version":3,"file":"storage-controller.d.ts","sourceRoot":"","sources":["../../../../src/store/storage-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAW3F,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAEnB,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE;QAC9C,YAAY,EAAG,YAAY,CAAC;QAC5B,SAAS,EAAG,SAAS,CAAC;KACvB;IAMY,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAuDpH;;;;;;;;OAQG;IACU,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DjG;;;OAGG;mBACkB,2BAA2B;IA2BhD;;;;;;;;;;;;;;;;OAgBG;WACiB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC;IAkChB;;;OAGG;WACiB,mBAAmB,CACrC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAAE,EAChC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;;;;;;;;;OAaG;WACiB,2BAA2B,CAC7C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,cAAc,EAAE,EAClC,UAAU,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,SAAS,CAAA;KAAE,EAC3D,+BAA+B,EAAE,mBAAmB,EAAE,EACtD,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,qBAAqB,CAAC;IA8CjC,OAAO,CAAC,MAAM,CAAC,eAAe;CAK/B"}
@@ -20,6 +20,32 @@ export type MessageStorePutResult = {
20
20
  */
21
21
  position?: ProgressToken;
22
22
  };
23
+ /**
24
+ * A latest-state transition applied by {@link MessageStore.commitLatestState}: the insert of a new
25
+ * message together with the displacement of the messages it supersedes.
26
+ */
27
+ export type MessageStoreLatestStateTransition = {
28
+ /**
29
+ * The new message to insert, with its insert-time indexes.
30
+ */
31
+ put: {
32
+ message: GenericMessage;
33
+ indexes: KeyValues;
34
+ };
35
+ /**
36
+ * Displaced writes retained as non-latest state: same-CID in-place replacements
37
+ * (same row, same log sequence) applied with the insert.
38
+ */
39
+ retains?: {
40
+ messageCid: string;
41
+ message: GenericMessage;
42
+ indexes: KeyValues;
43
+ }[];
44
+ /**
45
+ * Message CIDs of displaced messages that are not retained, deleted with the insert.
46
+ */
47
+ deletes?: string[];
48
+ };
23
49
  export interface MessageStore {
24
50
  /**
25
51
  * opens a connection to the underlying store
@@ -34,6 +60,16 @@ export interface MessageStore {
34
60
  * @param indexes indexes (key-value pairs) to be included as part of this put operation
35
61
  */
36
62
  put(tenant: string, message: GenericMessage, indexes: KeyValues, options?: MessageStoreOptions): Promise<MessageStorePutResult>;
63
+ /**
64
+ * Atomically inserts a new message and displaces the messages it supersedes: retained writes are
65
+ * replaced in place with their demoted state, and the remaining displaced rows are deleted, all
66
+ * in one commit. Readers can never observe an intermediate state where both the new message and
67
+ * a displaced message carry latest-state indexes.
68
+ *
69
+ * When the new message already exists, returns `duplicate` and still applies the retains and
70
+ * deletes, so replaying a transition heals one that was only partially planned before a crash.
71
+ */
72
+ commitLatestState(tenant: string, transition: MessageStoreLatestStateTransition, options?: MessageStoreOptions): Promise<MessageStorePutResult>;
37
73
  /**
38
74
  * Fetches a single message by `cid` from the underlying store.
39
75
  * Returns `undefined` no message was found.
@@ -1 +1 @@
1
- {"version":3,"file":"message-store.d.ts","sourceRoot":"","sources":["../../../../src/types/message-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAElF,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,GAAG,CACD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElC;;;OAGG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAErG;;;OAGG;IACH,KAAK,CACH,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAC,CAAC,CAAC;IAErE;;;OAGG;IACH,KAAK,CACH,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;OAGG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;OAIG;IACH,uBAAuB,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
1
+ {"version":3,"file":"message-store.d.ts","sourceRoot":"","sources":["../../../../src/types/message-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { MessageStore } from '../types/message-store.js';
2
+ import type { RecordsQueryReplyEntry } from '../types/records-types.js';
3
+ /**
4
+ * Attaches each returned update's retained initial write, resolved for the whole result page in
5
+ * one batched lookup by the stable identity `entryId === recordId` — unlike the mutable
6
+ * latest-state index, that identity holds at every point of the record's lifecycle.
7
+ *
8
+ * An update whose initial write is genuinely missing (store corruption) is omitted with a
9
+ * warning rather than failing the whole reply.
10
+ */
11
+ export declare function attachInitialWrites(input: {
12
+ messageStore: MessageStore;
13
+ tenant: string;
14
+ recordsWrites: RecordsQueryReplyEntry[];
15
+ operationName: 'RecordsQuery' | 'RecordsSubscribe';
16
+ }): Promise<RecordsQueryReplyEntry[]>;
17
+ //# sourceMappingURL=initial-write-attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initial-write-attachment.d.ts","sourceRoot":"","sources":["../../../../src/utils/initial-write-attachment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAMxE;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,aAAa,EAAE,cAAc,GAAG,kBAAkB,CAAC;CACpD,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA2CpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"records-query.spec.d.ts","sourceRoot":"","sources":["../../../../tests/handlers/records-query.spec.ts"],"names":[],"mappings":"AA0CA,wBAAgB,uBAAuB,IAAI,IAAI,CA+oI9C"}
1
+ {"version":3,"file":"records-query.spec.d.ts","sourceRoot":"","sources":["../../../../tests/handlers/records-query.spec.ts"],"names":[],"mappings":"AA2CA,wBAAgB,uBAAuB,IAAI,IAAI,CAmvI9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"records-read.spec.d.ts","sourceRoot":"","sources":["../../../../tests/handlers/records-read.spec.ts"],"names":[],"mappings":"AAoCA,wBAAgB,sBAAsB,IAAI,IAAI,CAmnE7C"}
1
+ {"version":3,"file":"records-read.spec.d.ts","sourceRoot":"","sources":["../../../../tests/handlers/records-read.spec.ts"],"names":[],"mappings":"AAqCA,wBAAgB,sBAAsB,IAAI,IAAI,CAkpE7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"records-subscribe.spec.d.ts","sourceRoot":"","sources":["../../../../tests/handlers/records-subscribe.spec.ts"],"names":[],"mappings":"AAkCA,wBAAgB,2BAA2B,IAAI,IAAI,CA8kDlD"}
1
+ {"version":3,"file":"records-subscribe.spec.d.ts","sourceRoot":"","sources":["../../../../tests/handlers/records-subscribe.spec.ts"],"names":[],"mappings":"AAkCA,wBAAgB,2BAA2B,IAAI,IAAI,CAupDlD"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-store.spec.d.ts","sourceRoot":"","sources":["../../../../tests/store/message-store.spec.ts"],"names":[],"mappings":"AAeA,wBAAgB,gBAAgB,IAAI,IAAI,CAqqBvC"}
1
+ {"version":3,"file":"message-store.spec.d.ts","sourceRoot":"","sources":["../../../../tests/store/message-store.spec.ts"],"names":[],"mappings":"AAiBA,wBAAgB,gBAAgB,IAAI,IAAI,CAozBvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enbox/dwn-sdk-js",
3
- "version": "0.4.10",
3
+ "version": "0.4.12",
4
4
  "description": "A reference implementation of https://identity.foundation/decentralized-web-node/spec/",
5
5
  "repository": {
6
6
  "type": "git",
@@ -73,8 +73,8 @@
73
73
  "react-native": "./dist/esm/src/index.js",
74
74
  "dependencies": {
75
75
  "@enbox/common": "0.1.3",
76
- "@enbox/crypto": "0.1.5",
77
- "@enbox/dids": "0.1.5",
76
+ "@enbox/crypto": "0.1.6",
77
+ "@enbox/dids": "0.1.6",
78
78
  "@ipld/dag-cbor": "10.0.1",
79
79
  "@noble/curves": "2.2.0",
80
80
  "ajv": "8.18.0",
@@ -3,6 +3,7 @@ import type { GenericMessage, MessageSort } from '../types/message-types.js';
3
3
  import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
4
4
  import type { RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry } from '../types/records-types.js';
5
5
 
6
+ import { attachInitialWrites } from '../utils/initial-write-attachment.js';
6
7
  import { authenticate } from '../core/auth.js';
7
8
  import { DateSort } from '../types/records-types.js';
8
9
  import { EncryptionControl } from '../core/encryption-control.js';
@@ -13,10 +14,18 @@ import { queryRecordsWithRecordLimitOccupancy } from '../utils/record-limit-occu
13
14
  import { Records } from '../utils/records.js';
14
15
  import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
15
16
  import { RecordsQuery } from '../interfaces/records-query.js';
16
- import { RecordsWrite } from '../interfaces/records-write.js';
17
17
  import { SortDirection } from '../types/query-types.js';
18
18
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
19
19
 
20
+ type RecordsQueryProjectionInput = {
21
+ tenant: string;
22
+ recordsQuery: RecordsQuery;
23
+ requester: string | undefined;
24
+ filters: Filter[];
25
+ messageSort: MessageSort;
26
+ pagination?: { cursor?: PaginationCursor; limit?: number };
27
+ };
28
+
20
29
  export class RecordsQueryHandler implements MethodHandler {
21
30
 
22
31
  constructor(private readonly deps: HandlerDependencies) { }
@@ -63,22 +72,17 @@ export class RecordsQueryHandler implements MethodHandler {
63
72
  }
64
73
  }
65
74
 
66
- // attach initial write if returned RecordsWrite is not initial write
67
- for (const recordsWrite of recordsWrites) {
68
- if (!await RecordsWrite.isInitialWrite(recordsWrite)) {
69
- const initialWriteQueryResult = await this.deps.messageStore.query(
70
- tenant,
71
- [{ recordId: recordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]
72
- );
73
- const initialWrite = initialWriteQueryResult.messages[0] as RecordsQueryReplyEntry;
74
- delete initialWrite.encodedData; // defensive measure but technically optional because we do this when an update RecordsWrite takes place
75
- recordsWrite.initialWrite = initialWrite;
76
- }
77
- }
75
+ // attach the retained initial write to every entry that is not itself an initial write
76
+ const completeRecordsWrites = await attachInitialWrites({
77
+ messageStore : this.deps.messageStore,
78
+ tenant,
79
+ recordsWrites,
80
+ operationName : 'RecordsQuery',
81
+ });
78
82
 
79
83
  return {
80
84
  status : { code: 200, detail: 'OK' },
81
- entries : recordsWrites,
85
+ entries : completeRecordsWrites,
82
86
  cursor
83
87
  };
84
88
  }
@@ -244,14 +248,9 @@ export class RecordsQueryHandler implements MethodHandler {
244
248
  });
245
249
  }
246
250
 
247
- private async queryRecordsWithVisibleControlFiltering(input: {
248
- tenant: string;
249
- recordsQuery: RecordsQuery;
250
- requester: string | undefined;
251
- filters: Filter[];
252
- messageSort: MessageSort;
253
- pagination?: { cursor?: PaginationCursor; limit?: number };
254
- }): Promise<{ messages: RecordsQueryReplyEntry[], cursor?: PaginationCursor }> {
251
+ private async queryRecordsWithVisibleControlFiltering(
252
+ input: RecordsQueryProjectionInput
253
+ ): Promise<{ messages: RecordsQueryReplyEntry[], cursor?: PaginationCursor }> {
255
254
  const {
256
255
  tenant, recordsQuery, requester, filters, messageSort, pagination
257
256
  } = input;
@@ -9,6 +9,7 @@ import { EncryptionControl } from '../core/encryption-control.js';
9
9
  import { isRecordLimitOccupant } from '../utils/record-limit-occupancy.js';
10
10
  import { Message } from '../core/message.js';
11
11
  import { messageReplyFromError } from '../core/message-reply.js';
12
+ import { Messages } from '../utils/messages.js';
12
13
  import { ProtocolAuthorization } from '../core/protocol-authorization.js';
13
14
  import { Records } from '../utils/records.js';
14
15
  import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
@@ -114,15 +115,27 @@ export class RecordsReadHandler implements MethodHandler {
114
115
  }
115
116
  };
116
117
 
117
- // attach initial write if latest RecordsWrite is not initial write
118
- if (!await RecordsWrite.isInitialWrite(matchedRecordsWrite)) {
119
- const initialWriteQueryResult = await this.deps.messageStore.query(
120
- tenant,
121
- [{ recordId: matchedRecordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]
122
- );
123
- const initialWrite = initialWriteQueryResult.messages[0] as RecordsQueryReplyEntry;
124
- delete initialWrite.encodedData; // just defensive because technically should already be deleted when a later RecordsWrite is written
125
- recordsReadReply.entry!.initialWrite = initialWrite;
118
+ try {
119
+ // Attach the initial write by its stable entry ID. Looking it up through
120
+ // `isLatestBaseState:false` races with the update that demotes it.
121
+ if (!await RecordsWrite.isInitialWrite(matchedRecordsWrite)) {
122
+ const storedInitialWrite = await RecordsWrite.fetchInitialRecordsWriteMessage(
123
+ this.deps.messageStore,
124
+ tenant,
125
+ matchedRecordsWrite.recordId,
126
+ );
127
+ if (storedInitialWrite === undefined) {
128
+ throw new DwnError(
129
+ DwnErrorCode.RecordsWriteGetInitialWriteNotFound,
130
+ `initial write not found for record ${matchedRecordsWrite.recordId}`,
131
+ );
132
+ }
133
+
134
+ const { message: initialWrite } = Messages.detachEncodedData(storedInitialWrite);
135
+ recordsReadReply.entry!.initialWrite = initialWrite as RecordsQueryReplyEntry;
136
+ }
137
+ } catch (error) {
138
+ return messageReplyFromError(error, 500);
126
139
  }
127
140
 
128
141
  return recordsReadReply;
@@ -4,6 +4,7 @@ import type { Filter, PaginationCursor } from '../types/query-types.js';
4
4
  import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
5
5
  import type { RecordsQueryReplyEntry, RecordsSubscribeMessage, RecordsSubscribeReply } from '../types/records-types.js';
6
6
 
7
+ import { attachInitialWrites } from '../utils/initial-write-attachment.js';
7
8
  import { authenticate } from '../core/auth.js';
8
9
  import { DateSort } from '../types/records-types.js';
9
10
  import { EncryptionControl } from '../core/encryption-control.js';
@@ -13,7 +14,6 @@ import { ProtocolAuthorization } from '../core/protocol-authorization.js';
13
14
  import { Records } from '../utils/records.js';
14
15
  import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
15
16
  import { RecordsSubscribe } from '../interfaces/records-subscribe.js';
16
- import { RecordsWrite } from '../interfaces/records-write.js';
17
17
  import { SortDirection } from '../types/query-types.js';
18
18
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
19
19
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
@@ -141,21 +141,15 @@ export class RecordsSubscribeHandler implements MethodHandler {
141
141
  messageSort,
142
142
  pagination,
143
143
  );
144
- entries = queryResult.messages;
145
- paginationCursor = queryResult.cursor;
146
144
 
147
- // attach initialWrite for non-initial writes
148
- for (const entry of entries) {
149
- if (!await RecordsWrite.isInitialWrite(entry)) {
150
- const initialWriteResult = await this.deps.messageStore.query(
151
- tenant,
152
- [{ recordId: entry.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]
153
- );
154
- const initialWrite = initialWriteResult.messages[0] as RecordsQueryReplyEntry;
155
- delete initialWrite.encodedData;
156
- entry.initialWrite = initialWrite;
157
- }
158
- }
145
+ // attach the retained initial write to every entry that is not itself an initial write
146
+ entries = await attachInitialWrites({
147
+ messageStore : this.deps.messageStore,
148
+ tenant,
149
+ recordsWrites : queryResult.messages,
150
+ operationName : 'RecordsSubscribe',
151
+ });
152
+ paginationCursor = queryResult.cursor;
159
153
  } catch (error) {
160
154
  // if the query fails, close the subscription and return the error
161
155
  await subscription.close();
@@ -100,16 +100,10 @@ export class RecordsWriteHandler implements MethodHandler {
100
100
 
101
101
  const newestExistingMessage = await Message.getNewestMessage(existingMessages);
102
102
 
103
- let incomingMessageIsNewest = false;
104
- let newestMessage; // keep reference of newest message for pruning later
105
- if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {
106
- incomingMessageIsNewest = true;
107
- newestMessage = message;
108
- } else { // existing message is the same age or newer than the incoming message
109
- newestMessage = newestExistingMessage;
110
- }
111
-
103
+ const incomingMessageIsNewest =
104
+ newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage);
112
105
  if (!incomingMessageIsNewest) {
106
+ // existing message is the same age or newer than the incoming message
113
107
  return {
114
108
  status: { code: 409, detail: 'Conflict' }
115
109
  };
@@ -170,7 +164,18 @@ export class RecordsWriteHandler implements MethodHandler {
170
164
  }
171
165
 
172
166
  const indexes = await recordsWrite.constructIndexes(isLatestBaseState);
173
- const putResult = await this.deps.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
167
+
168
+ // store the new message and displace every other message for this record in one atomic
169
+ // commit, retaining only the initial write as non-latest state — readers can never observe
170
+ // two latest-state rows for the record
171
+ const putResult = await StorageController.commitLatestStateTransition(
172
+ tenant,
173
+ existingMessages,
174
+ { message: messageWithOptionalEncodedData, indexes },
175
+ [],
176
+ this.deps.messageStore,
177
+ this.deps.dataStore!,
178
+ );
174
179
  position = putResult.position;
175
180
  } catch (error) {
176
181
  if (error instanceof DwnError) {
@@ -200,11 +205,6 @@ export class RecordsWriteHandler implements MethodHandler {
200
205
  position,
201
206
  };
202
207
 
203
- // displace every other message for this record, retaining only the initial write as non-latest state
204
- await StorageController.deleteDisplacedMessagesAndRetainWrites(
205
- tenant, existingMessages, newestMessage, this.deps.messageStore, this.deps.dataStore!, []
206
- );
207
-
208
208
  // Squash processing: if the incoming write is a squash, delete all older sibling records
209
209
  // at the same protocol path and parent context. Uses the resumable task system for crash safety.
210
210
  if (message.descriptor.squash === true) {
package/src/index.ts CHANGED
@@ -79,7 +79,7 @@ export type { MessagesReadOptions } from './interfaces/messages-read.js';
79
79
  export { MessagesQuery } from './interfaces/messages-query.js';
80
80
  export type { MessagesQueryOptions } from './interfaces/messages-query.js';
81
81
  export type { UnionMessageReply } from './core/message-reply.js';
82
- export type { MessageStore, MessageStoreOptions, MessageStorePutResult } from './types/message-store.js';
82
+ export type { MessageStore, MessageStoreLatestStateTransition, MessageStoreOptions, MessageStorePutResult } from './types/message-store.js';
83
83
  export { Replication } from './utils/replication.js';
84
84
  export type { MessageInterface } from './types/message-interface.js';
85
85
  export { PermissionGrant } from './protocols/permission-grant.js';
@@ -128,6 +128,9 @@ export async function fetchInitialRecordsWriteMessage(
128
128
  tenant: string,
129
129
  recordId: string
130
130
  ): Promise<RecordsWriteMessage | undefined> {
131
+ // `entryId === recordId` identifies the initial write. Do not also filter on
132
+ // `isLatestBaseState:false`: that mutable index is updated after a newer
133
+ // write is inserted, so it can still be `true` during the update transition.
131
134
  const query = { entryId: recordId };
132
135
  const { messages } = await messageStore.query(tenant, [query]);
133
136