@farukada/aws-langgraph-dynamodb-ts 0.3.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +10 -3
  2. package/dist/checkpointer/actions/delete-thread.js +1 -1
  3. package/dist/checkpointer/actions/delete-thread.js.map +1 -1
  4. package/dist/checkpointer/actions/list.d.ts.map +1 -1
  5. package/dist/checkpointer/actions/list.js +3 -1
  6. package/dist/checkpointer/actions/list.js.map +1 -1
  7. package/dist/checkpointer/actions/put-writes.d.ts +4 -4
  8. package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
  9. package/dist/checkpointer/actions/put-writes.js +21 -20
  10. package/dist/checkpointer/actions/put-writes.js.map +1 -1
  11. package/dist/checkpointer/internal/item-writer.d.ts +18 -9
  12. package/dist/checkpointer/internal/item-writer.d.ts.map +1 -1
  13. package/dist/checkpointer/internal/item-writer.js +28 -11
  14. package/dist/checkpointer/internal/item-writer.js.map +1 -1
  15. package/dist/checkpointer/internal/query.d.ts +5 -1
  16. package/dist/checkpointer/internal/query.d.ts.map +1 -1
  17. package/dist/checkpointer/internal/query.js +5 -2
  18. package/dist/checkpointer/internal/query.js.map +1 -1
  19. package/dist/checkpointer/internal/setup.d.ts.map +1 -1
  20. package/dist/checkpointer/internal/setup.js +8 -1
  21. package/dist/checkpointer/internal/setup.js.map +1 -1
  22. package/dist/checkpointer/internal/special-write-cleanup.d.ts +18 -0
  23. package/dist/checkpointer/internal/special-write-cleanup.d.ts.map +1 -0
  24. package/dist/checkpointer/internal/special-write-cleanup.js +108 -0
  25. package/dist/checkpointer/internal/special-write-cleanup.js.map +1 -0
  26. package/dist/factory/factory.d.ts +3 -1
  27. package/dist/factory/factory.d.ts.map +1 -1
  28. package/dist/factory/factory.js +4 -6
  29. package/dist/factory/factory.js.map +1 -1
  30. package/dist/history/actions/add-messages.d.ts.map +1 -1
  31. package/dist/history/actions/add-messages.js +4 -3
  32. package/dist/history/actions/add-messages.js.map +1 -1
  33. package/dist/history/actions/clear.js +1 -1
  34. package/dist/history/actions/clear.js.map +1 -1
  35. package/dist/history/actions/list-sessions.d.ts +1 -0
  36. package/dist/history/actions/list-sessions.d.ts.map +1 -1
  37. package/dist/history/actions/list-sessions.js +1 -0
  38. package/dist/history/actions/list-sessions.js.map +1 -1
  39. package/dist/history/actions/reconcile-count.d.ts +4 -1
  40. package/dist/history/actions/reconcile-count.d.ts.map +1 -1
  41. package/dist/history/actions/reconcile-count.js +21 -9
  42. package/dist/history/actions/reconcile-count.js.map +1 -1
  43. package/dist/history/chat-message-history.d.ts +1 -0
  44. package/dist/history/chat-message-history.d.ts.map +1 -1
  45. package/dist/history/chat-message-history.js.map +1 -1
  46. package/dist/history/internal/append-saga.d.ts +1 -0
  47. package/dist/history/internal/append-saga.d.ts.map +1 -1
  48. package/dist/history/internal/append-saga.js +25 -21
  49. package/dist/history/internal/append-saga.js.map +1 -1
  50. package/dist/history/internal/message-transaction.d.ts +11 -6
  51. package/dist/history/internal/message-transaction.d.ts.map +1 -1
  52. package/dist/history/internal/message-transaction.js +40 -13
  53. package/dist/history/internal/message-transaction.js.map +1 -1
  54. package/dist/history/internal/query.d.ts +5 -1
  55. package/dist/history/internal/query.d.ts.map +1 -1
  56. package/dist/history/internal/query.js +5 -2
  57. package/dist/history/internal/query.js.map +1 -1
  58. package/dist/history/internal/session-count.d.ts +20 -0
  59. package/dist/history/internal/session-count.d.ts.map +1 -0
  60. package/dist/history/internal/session-count.js +58 -0
  61. package/dist/history/internal/session-count.js.map +1 -0
  62. package/dist/history/internal/session-update.d.ts +9 -1
  63. package/dist/history/internal/session-update.d.ts.map +1 -1
  64. package/dist/history/internal/session-update.js +26 -2
  65. package/dist/history/internal/session-update.js.map +1 -1
  66. package/dist/history/internal/setup.d.ts.map +1 -1
  67. package/dist/history/internal/setup.js +8 -1
  68. package/dist/history/internal/setup.js.map +1 -1
  69. package/dist/history/internal/ttl-anchor.d.ts +20 -7
  70. package/dist/history/internal/ttl-anchor.d.ts.map +1 -1
  71. package/dist/history/internal/ttl-anchor.js +19 -7
  72. package/dist/history/internal/ttl-anchor.js.map +1 -1
  73. package/dist/index.d.ts +1 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +2 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/shared/codec/s3/client.d.ts +7 -1
  78. package/dist/shared/codec/s3/client.d.ts.map +1 -1
  79. package/dist/shared/codec/s3/client.js +8 -2
  80. package/dist/shared/codec/s3/client.js.map +1 -1
  81. package/dist/shared/codec/s3/config.d.ts +2 -0
  82. package/dist/shared/codec/s3/config.d.ts.map +1 -1
  83. package/dist/shared/codec/s3/config.js +5 -0
  84. package/dist/shared/codec/s3/config.js.map +1 -1
  85. package/dist/shared/codec/s3/offloader.js +1 -1
  86. package/dist/shared/codec/s3/offloader.js.map +1 -1
  87. package/dist/shared/codec/s3/read-write.d.ts.map +1 -1
  88. package/dist/shared/codec/s3/read-write.js +3 -6
  89. package/dist/shared/codec/s3/read-write.js.map +1 -1
  90. package/dist/shared/constants.d.ts +3 -0
  91. package/dist/shared/constants.d.ts.map +1 -1
  92. package/dist/shared/constants.js +3 -0
  93. package/dist/shared/constants.js.map +1 -1
  94. package/dist/shared/dynamodb/batch-write.d.ts +15 -2
  95. package/dist/shared/dynamodb/batch-write.d.ts.map +1 -1
  96. package/dist/shared/dynamodb/batch-write.js +38 -3
  97. package/dist/shared/dynamodb/batch-write.js.map +1 -1
  98. package/dist/shared/dynamodb/cancellation.d.ts +7 -0
  99. package/dist/shared/dynamodb/cancellation.d.ts.map +1 -0
  100. package/dist/shared/dynamodb/cancellation.js +8 -0
  101. package/dist/shared/dynamodb/cancellation.js.map +1 -0
  102. package/dist/shared/dynamodb/client.js +1 -1
  103. package/dist/shared/dynamodb/client.js.map +1 -1
  104. package/dist/shared/dynamodb/retry-classifier.d.ts.map +1 -1
  105. package/dist/shared/dynamodb/retry-classifier.js +5 -1
  106. package/dist/shared/dynamodb/retry-classifier.js.map +1 -1
  107. package/dist/shared/errors/errors.d.ts +18 -0
  108. package/dist/shared/errors/errors.d.ts.map +1 -1
  109. package/dist/shared/errors/errors.js +28 -1
  110. package/dist/shared/errors/errors.js.map +1 -1
  111. package/dist/store/actions/list-namespaces.d.ts.map +1 -1
  112. package/dist/store/actions/list-namespaces.js +10 -2
  113. package/dist/store/actions/list-namespaces.js.map +1 -1
  114. package/dist/store/actions/put.d.ts +5 -5
  115. package/dist/store/actions/put.d.ts.map +1 -1
  116. package/dist/store/actions/put.js +20 -36
  117. package/dist/store/actions/put.js.map +1 -1
  118. package/dist/store/actions/search.d.ts.map +1 -1
  119. package/dist/store/actions/search.js +29 -11
  120. package/dist/store/actions/search.js.map +1 -1
  121. package/dist/store/internal/filter.d.ts.map +1 -1
  122. package/dist/store/internal/filter.js +15 -8
  123. package/dist/store/internal/filter.js.map +1 -1
  124. package/dist/store/internal/index-reconcile.d.ts.map +1 -1
  125. package/dist/store/internal/index-reconcile.js +4 -1
  126. package/dist/store/internal/index-reconcile.js.map +1 -1
  127. package/dist/store/internal/item-mapper.d.ts +2 -1
  128. package/dist/store/internal/item-mapper.d.ts.map +1 -1
  129. package/dist/store/internal/item-mapper.js +1 -1
  130. package/dist/store/internal/item-mapper.js.map +1 -1
  131. package/dist/store/internal/persist.d.ts +11 -0
  132. package/dist/store/internal/persist.d.ts.map +1 -0
  133. package/dist/store/internal/persist.js +38 -0
  134. package/dist/store/internal/persist.js.map +1 -0
  135. package/dist/store/internal/ranker.d.ts.map +1 -1
  136. package/dist/store/internal/ranker.js +3 -1
  137. package/dist/store/internal/ranker.js.map +1 -1
  138. package/dist/store/internal/setup.d.ts +1 -0
  139. package/dist/store/internal/setup.d.ts.map +1 -1
  140. package/dist/store/internal/setup.js +8 -1
  141. package/dist/store/internal/setup.js.map +1 -1
  142. package/dist/store/internal/write-verify.d.ts +12 -0
  143. package/dist/store/internal/write-verify.d.ts.map +1 -0
  144. package/dist/store/internal/write-verify.js +28 -0
  145. package/dist/store/internal/write-verify.js.map +1 -0
  146. package/dist/store/types.d.ts +2 -0
  147. package/dist/store/types.d.ts.map +1 -1
  148. package/package.json +9 -8
@@ -24,6 +24,7 @@ async function collectReconcileTargets(context, prefix) {
24
24
  const source = (0, paginate_1.paginateQuery)({
25
25
  client: context.client,
26
26
  params: (0, query_1.scopedQuery)(context.tableName, prefix),
27
+ maxItems: context.maxScanItems,
27
28
  });
28
29
  for await (const raw of source) {
29
30
  const record = raw;
@@ -48,7 +49,9 @@ async function pushEmbeddings(backend, targets) {
48
49
  }
49
50
  /** Refs present in the backend but absent from `live` — orphans to prune. */
50
51
  function selectOrphans(backendRefs, live) {
51
- const liveKeys = new Set(live.map((target) => refIdentity(target.namespace, target.key)));
52
+ const liveKeys = new Set(live
53
+ .filter((target) => target.embedding !== undefined)
54
+ .map((target) => refIdentity(target.namespace, target.key)));
52
55
  return backendRefs.filter((ref) => !liveKeys.has(refIdentity(ref.namespace, ref.key)));
53
56
  }
54
57
  /** Delete backend vectors with no canonical item; returns the prune count. */
@@ -1 +1 @@
1
- {"version":3,"file":"index-reconcile.js","sourceRoot":"","sources":["../../../src/store/internal/index-reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-reconcile.js","sourceRoot":"","sources":["../../../src/store/internal/index-reconcile.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,13 @@ import type { StoreContext } from './setup';
9
9
  * the scan boundary, the one place rows are not written by this library.
10
10
  */
11
11
  export declare function narrowStoreRecord(raw: DocItem): StoreItemRecord | undefined;
12
- /** Fields controlling a stored item's timestamps, embedding, and ttl. */
12
+ /** Fields controlling a stored item's timestamps, embedding, ttl, and S3 key nonce. */
13
13
  export interface BuildItemOptions {
14
14
  createdAt: string;
15
15
  updatedAt: string;
16
16
  embedding?: number[];
17
17
  ttlTimestamp?: number;
18
+ nonce?: string;
18
19
  }
19
20
  /** Encode a value into the DynamoDB record for a stored item. */
20
21
  export declare function buildStoreItem(context: StoreContext, namespace: string[], key: string, value: Record<string, JsonValue>, options: BuildItemOptions): Promise<StoreItemRecord>;
@@ -1 +1 @@
1
- {"version":3,"file":"item-mapper.d.ts","sourceRoot":"","sources":["../../../src/store/internal/item-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAE3E;AAOD,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iEAAiE;AACjE,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjG"}
1
+ {"version":3,"file":"item-mapper.d.ts","sourceRoot":"","sources":["../../../src/store/internal/item-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAE3E;AAOD,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iEAAiE;AACjE,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAiB1B;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjG"}
@@ -20,7 +20,7 @@ function storeCodecDeps(context) {
20
20
  /** Encode a value into the DynamoDB record for a stored item. */
21
21
  async function buildStoreItem(context, namespace, key, value, options) {
22
22
  const descriptor = await (0, codec_1.encodePayload)(value, storeCodecDeps(context), {
23
- keyParts: [...namespace, key],
23
+ keyParts: options.nonce === undefined ? [...namespace, key] : [...namespace, key, options.nonce],
24
24
  });
25
25
  const record = {
26
26
  PK: (0, keys_1.partitionKey)(namespace),
@@ -1 +1 @@
1
- {"version":3,"file":"item-mapper.js","sourceRoot":"","sources":["../../../src/store/internal/item-mapper.ts"],"names":[],"mappings":";;;;;AAEA,oDAAwF;AAIxF,iCAA+C;AAG/C;;;;GAIG;AACH,2BAAkC,GAAY;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,GAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,sDAAsD;AACtD,SAAS,cAAc,CAAC,OAAqB;IAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAClG,CAAC;AAUD,iEAAiE;AAC1D,KAAK,yBACV,OAAqB,EACrB,SAAmB,EACnB,GAAW,EACX,KAAgC,EAChC,OAAyB;IAEzB,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE;QACrE,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,GAAoB;QAC9B,EAAE,EAAE,IAAA,mBAAY,EAAC,SAAS,CAAC;QAC3B,EAAE,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,GAAG,CAAC;QAC3B,SAAS;QACT,GAAG;QACH,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IACF,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5D,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AACxD,KAAK,wBAAwB,OAAqB,EAAE,MAAuB;IAChF,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAa,EAC/B,MAAM,CAAC,KAAK,EACZ,cAAc,CAAC,OAAO,CAAC,CACxB,CAAC;IACF,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK;QACL,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACrC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;KACtC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"item-mapper.js","sourceRoot":"","sources":["../../../src/store/internal/item-mapper.ts"],"names":[],"mappings":";;;;;AAEA,oDAAwF;AAIxF,iCAA+C;AAG/C;;;;GAIG;AACH,2BAAkC,GAAY;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,GAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,sDAAsD;AACtD,SAAS,cAAc,CAAC,OAAqB;IAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAClG,CAAC;AAWD,iEAAiE;AAC1D,KAAK,yBACV,OAAqB,EACrB,SAAmB,EACnB,GAAW,EACX,KAAgC,EAChC,OAAyB;IAEzB,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE;QACrE,QAAQ,EACN,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;KACzF,CAAC,CAAC;IACH,MAAM,MAAM,GAAoB;QAC9B,EAAE,EAAE,IAAA,mBAAY,EAAC,SAAS,CAAC;QAC3B,EAAE,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,GAAG,CAAC;QAC3B,SAAS;QACT,GAAG;QACH,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IACF,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5D,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AACxD,KAAK,wBAAwB,OAAqB,EAAE,MAAuB;IAChF,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAa,EAC/B,MAAM,CAAC,KAAK,EACZ,cAAc,CAAC,OAAO,CAAC,CACxB,CAAC;IACF,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK;QACL,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACrC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type PayloadDescriptor } from '../../shared/codec/codec';
2
+ import type { StoreItemRecord } from '../types';
3
+ import type { StoreContext } from './setup';
4
+ /**
5
+ * Put the record: on a definite failure, clean up *this* record's nonced S3
6
+ * object; on an ambiguous retry-exhaustion failure, verify via
7
+ * `writeLandedAt` before deleting anything — if it landed, clean up the
8
+ * *previous* row's object instead, like the ordinary success path.
9
+ */
10
+ export declare function persistRecord(context: StoreContext, record: StoreItemRecord, previousValue: PayloadDescriptor | undefined): Promise<void>;
11
+ //# sourceMappingURL=persist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/store/internal/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,0BAA0B,CAAC;AAInF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC3C,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.persistRecord = persistRecord;
4
+ const codec_1 = require("../../shared/codec/codec");
5
+ const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
6
+ const orphans_1 = require("../../shared/codec/s3/orphans");
7
+ const retry_1 = require("../../shared/dynamodb/retry");
8
+ const write_verify_1 = require("./write-verify");
9
+ /** True when `error` is a {@link RetryExhaustedError} — checked by name, not `instanceof` (banned repo-wide). */
10
+ function isRetryExhausted(error) {
11
+ return error.name === 'RetryExhaustedError';
12
+ }
13
+ /**
14
+ * Put the record: on a definite failure, clean up *this* record's nonced S3
15
+ * object; on an ambiguous retry-exhaustion failure, verify via
16
+ * `writeLandedAt` before deleting anything — if it landed, clean up the
17
+ * *previous* row's object instead, like the ordinary success path.
18
+ */
19
+ async function persistRecord(context, record, previousValue) {
20
+ try {
21
+ await (0, retry_1.withDynamoDBRetry)(() => context.client.put({ TableName: context.tableName, Item: record }));
22
+ }
23
+ catch (error) {
24
+ const landed = isRetryExhausted(error) &&
25
+ record.value.location === codec_1.PayloadLocation.S3 &&
26
+ (await (0, write_verify_1.writeLandedAt)(context, record, record.value.s3Key));
27
+ if (!landed) {
28
+ if (context.offloader) {
29
+ await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)([record.value]), 'store.put', context.logger);
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ if (context.offloader && previousValue) {
35
+ await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)([previousValue]), 'store.put.overwrite', context.logger);
36
+ }
37
+ }
38
+ //# sourceMappingURL=persist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/store/internal/persist.ts"],"names":[],"mappings":";;;AAAA,oDAAmF;AACnF,wEAAmE;AACnE,2DAAiE;AACjE,uDAAgE;AAGhE,iDAA+C;AAE/C,iHAAiH;AACjH,SAAS,gBAAgB,CAAC,KAAY;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACI,KAAK,wBACV,OAAqB,EACrB,MAAuB,EACvB,aAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GACV,gBAAgB,CAAC,KAAc,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,uBAAe,CAAC,EAAE;YAC5C,CAAC,MAAM,IAAA,4BAAa,EAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAA,0BAAgB,EACpB,OAAO,CAAC,SAAS,EACjB,IAAA,+BAAa,EAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAC7B,WAAW,EACX,OAAO,CAAC,MAAM,CACf,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC;QACvC,MAAM,IAAA,0BAAgB,EACpB,OAAO,CAAC,SAAS,EACjB,IAAA,+BAAa,EAAC,CAAC,aAAa,CAAC,CAAC,EAC9B,qBAAqB,EACrB,OAAO,CAAC,MAAM,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../../src/store/internal/ranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQxE,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,EAAE,EAC3B,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,MAAM,GACpB,UAAU,EAAE,CAcd"}
1
+ {"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../../src/store/internal/ranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQxE,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,EAAE,EAC3B,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,MAAM,GACpB,UAAU,EAAE,CAiBd"}
@@ -18,7 +18,9 @@ function rankInMemory(candidates, queryVector, maxCandidates) {
18
18
  return candidates
19
19
  .map(({ item, embedding }) => ({
20
20
  ...item,
21
- score: embedding ? (0, semantic_search_1.cosineSimilarity)(queryVector, embedding) : undefined,
21
+ score: embedding && embedding.length === queryVector.length
22
+ ? (0, semantic_search_1.cosineSimilarity)(queryVector, embedding)
23
+ : undefined,
22
24
  }))
23
25
  .sort((a, b) => rankValue(b) - rankValue(a));
24
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../../src/store/internal/ranker.ts"],"names":[],"mappings":";;;AAEA,uDAA6D;AAC7D,uDAAqD;AAErD,iFAAiF;AACjF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC;AAQzB;;;;GAIG;AACH,sBACE,UAA2B,EAC3B,WAAqB,EACrB,aAAqB;IAErB,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,wBAAe,CACvB,kCAAkC,UAAU,CAAC,MAAM,gCAAgC;YACjF,IAAI,aAAa,oDAAoD,EACvE,qBAAqB,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,IAAI;QACP,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAA,kCAAgB,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;KACxE,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,8FAA8F;AAC9F,SAAS,SAAS,CAAC,IAAgB;IACjC,OAAO,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../../src/store/internal/ranker.ts"],"names":[],"mappings":";;;AAEA,uDAA6D;AAC7D,uDAAqD;AAErD,iFAAiF;AACjF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC;AAQzB;;;;GAIG;AACH,sBACE,UAA2B,EAC3B,WAAqB,EACrB,aAAqB;IAErB,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,wBAAe,CACvB,kCAAkC,UAAU,CAAC,MAAM,gCAAgC;YACjF,IAAI,aAAa,oDAAoD,EACvE,qBAAqB,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,IAAI;QACP,KAAK,EACH,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;YAClD,CAAC,CAAC,IAAA,kCAAgB,EAAC,WAAW,EAAE,SAAS,CAAC;YAC1C,CAAC,CAAC,SAAS;KAChB,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,8FAA8F;AAC9F,SAAS,SAAS,CAAC,IAAgB;IACjC,OAAO,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;AACrC,CAAC"}
@@ -19,6 +19,7 @@ export interface StoreContext {
19
19
  index?: IndexConfig;
20
20
  vectorBackend?: VectorBackend;
21
21
  maxSearchCandidates: number;
22
+ maxScanItems: number;
22
23
  }
23
24
  /** Result of wiring up a store from its options. */
24
25
  export interface StoreSetup {
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/store/internal/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAEvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAkBpE"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/store/internal/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAEvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAO9D,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAyBpE"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setUpStore = setUpStore;
4
4
  const json_serde_1 = require("../../shared/codec/json-serde");
5
+ const config_1 = require("../../shared/codec/s3/config");
5
6
  const offloader_1 = require("../../shared/codec/s3/offloader");
6
7
  const constants_1 = require("../../shared/constants");
7
8
  const client_1 = require("../../shared/dynamodb/client");
@@ -15,12 +16,18 @@ function setUpStore(options) {
15
16
  tableName: options.tableName,
16
17
  serde: options.serde ?? json_serde_1.JSON_SERDE,
17
18
  compression: options.compression,
18
- offloader: options.s3 ? new offloader_1.S3Offloader(options.s3) : undefined,
19
+ offloader: options.s3
20
+ ? new offloader_1.S3Offloader({
21
+ ...options.s3,
22
+ keyPrefix: options.s3.keyPrefix ?? (0, config_1.defaultAdapterKeyPrefix)(constants_1.DEFAULT_S3_KEY_PREFIX, 'store'),
23
+ })
24
+ : undefined,
19
25
  ttl: options.ttl,
20
26
  logger: (0, logger_1.resolveLogger)(options.logger),
21
27
  index: options.index,
22
28
  vectorBackend: options.vectorBackend,
23
29
  maxSearchCandidates: options.maxSearchCandidates ?? constants_1.DEFAULT_MAX_SEARCH_CANDIDATES,
30
+ maxScanItems: options.maxScanItems ?? constants_1.MAX_TOTAL_ITEMS_IN_MEMORY,
24
31
  },
25
32
  ddbClient: resolved.ddbClient,
26
33
  ownsClient: resolved.ownsClient,
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/store/internal/setup.ts"],"names":[],"mappings":";;;AAKA,8DAA2D;AAC3D,+DAA8D;AAC9D,sDAAuE;AACvE,yDAAqE;AACrE,wDAAyE;AA0BzE,+EAA+E;AAC/E,oBAA2B,OAA6B;IACtD,MAAM,QAAQ,GAAG,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAChD,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,uBAAU;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,uBAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/D,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,IAAA,sBAAa,EAAC,OAAO,CAAC,MAAM,CAAC;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,yCAA6B;SAClF;QACD,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/store/internal/setup.ts"],"names":[],"mappings":";;;AAKA,8DAA2D;AAC3D,yDAAuE;AACvE,+DAA8D;AAC9D,sDAIgC;AAChC,yDAAqE;AACrE,wDAAyE;AA2BzE,+EAA+E;AAC/E,oBAA2B,OAA6B;IACtD,MAAM,QAAQ,GAAG,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAChD,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,uBAAU;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACnB,CAAC,CAAC,IAAI,uBAAW,CAAC;oBACd,GAAG,OAAO,CAAC,EAAE;oBACb,SAAS,EACP,OAAO,CAAC,EAAE,CAAC,SAAS,IAAI,IAAA,gCAAuB,EAAC,iCAAqB,EAAE,OAAO,CAAC;iBAClF,CAAC;gBACJ,CAAC,CAAC,SAAS;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,IAAA,sBAAa,EAAC,OAAO,CAAC,MAAM,CAAC;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,yCAA6B;YACjF,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,qCAAyB;SAChE;QACD,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { StoreContext } from './setup';
2
+ /**
3
+ * True when `record`'s row already holds the S3 key `expectedS3Key` — i.e. an
4
+ * ambiguous retry-exhaustion write actually landed server-side and only its
5
+ * acknowledgment was lost. A failure reading this (itself possible) is not
6
+ * treated as confirmation — fail safe, matching the pre-fix behavior.
7
+ */
8
+ export declare function writeLandedAt(context: StoreContext, record: {
9
+ PK: string;
10
+ SK: string;
11
+ }, expectedS3Key: string): Promise<boolean>;
12
+ //# sourceMappingURL=write-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-verify.d.ts","sourceRoot":"","sources":["../../../src/store/internal/write-verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAClC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeLandedAt = writeLandedAt;
4
+ const codec_1 = require("../../shared/codec/codec");
5
+ const retry_1 = require("../../shared/dynamodb/retry");
6
+ /**
7
+ * True when `record`'s row already holds the S3 key `expectedS3Key` — i.e. an
8
+ * ambiguous retry-exhaustion write actually landed server-side and only its
9
+ * acknowledgment was lost. A failure reading this (itself possible) is not
10
+ * treated as confirmation — fail safe, matching the pre-fix behavior.
11
+ */
12
+ async function writeLandedAt(context, record, expectedS3Key) {
13
+ try {
14
+ const result = await (0, retry_1.withDynamoDBRetry)(() => context.client.get({
15
+ TableName: context.tableName,
16
+ Key: { PK: record.PK, SK: record.SK },
17
+ ConsistentRead: true,
18
+ ProjectionExpression: '#v',
19
+ ExpressionAttributeNames: { '#v': 'value' },
20
+ }));
21
+ const value = result.Item?.value;
22
+ return value?.location === codec_1.PayloadLocation.S3 && value.s3Key === expectedS3Key;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ //# sourceMappingURL=write-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-verify.js","sourceRoot":"","sources":["../../../src/store/internal/write-verify.ts"],"names":[],"mappings":";;;AAAA,oDAAmF;AACnF,uDAAgE;AAGhE;;;;;GAKG;AACI,KAAK,wBACV,OAAqB,EACrB,MAAkC,EAClC,aAAqB;IAErB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;YACjB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACrC,cAAc,EAAE,IAAI;YACpB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC5C,CAAC,CACH,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAsC,CAAC;QAClE,OAAO,KAAK,EAAE,QAAQ,KAAK,uBAAe,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -12,6 +12,8 @@ export type DynamoDBStoreOptions = BaseAdapterOptions & CodecOptions & {
12
12
  vectorBackend?: VectorBackend;
13
13
  /** Max candidates the in-DB ranker will score before erroring (default 1000). */
14
14
  maxSearchCandidates?: number;
15
+ /** Cap on items scanned into memory during a plain (non-semantic) search before ResultTruncatedError. Defaults to MAX_TOTAL_ITEMS_IN_MEMORY. */
16
+ maxScanItems?: number;
15
17
  };
16
18
  /** The DynamoDB item backing a single stored value. */
17
19
  export interface StoreItemRecord {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAEvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GACnD,YAAY,GAAG;IACb,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sEAAsE;IACtE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,mFAAmF;IACnF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEJ,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAEvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GACnD,YAAY,GAAG;IACb,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sEAAsE;IACtE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,mFAAmF;IACnF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gJAAgJ;IAChJ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farukada/aws-langgraph-dynamodb-ts",
3
- "version": "0.3.2",
3
+ "version": "0.6.0",
4
4
  "license": "MIT",
5
5
  "description": "AWS DynamoDB implementation for LangGraph Memory Store and Checkpoint Saver in TypeScript",
6
6
  "keywords": [
@@ -35,8 +35,9 @@
35
35
  "npm": ">=10.0.0"
36
36
  },
37
37
  "scripts": {
38
- "build": "tsc",
39
- "typecheck": "tsc --noEmit",
38
+ "build": "tsc -p tsconfig.build.json",
39
+ "typecheck": "tsc -p tsconfig.build.json --noEmit",
40
+ "typecheck:all": "tsc --noEmit",
40
41
  "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\" \"*.config.ts\" --no-error-on-unmatched-pattern",
41
42
  "lint:fix": "eslint \"src/**/*.ts\" \"test/**/*.ts\" \"*.config.ts\" --fix --no-error-on-unmatched-pattern",
42
43
  "test": "jest",
@@ -47,7 +48,7 @@
47
48
  "test:aws": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.aws.config.ts",
48
49
  "test:static": "jest test/static",
49
50
  "test:package-smoke": "node --test test/package-smoke/smoke.test.mjs",
50
- "prepublishOnly": "npm run typecheck && npm run lint && npm run build && npm test",
51
+ "prepublishOnly": "npm run typecheck && npm run typecheck:all && npm run lint && npm run build && npm test",
51
52
  "docs": "typedoc",
52
53
  "docs:watch": "typedoc --watch",
53
54
  "unused": "knip",
@@ -58,13 +59,13 @@
58
59
  },
59
60
  "dependencies": {
60
61
  "@aws-sdk/client-dynamodb": "^3.1116.0",
61
- "@aws-sdk/lib-dynamodb": "^3.1116.0",
62
- "@langchain/core": "^1.2.9",
63
- "@langchain/langgraph-checkpoint": "^1.1.5"
62
+ "@aws-sdk/lib-dynamodb": "^3.1116.0"
64
63
  },
65
64
  "peerDependencies": {
66
65
  "@aws-sdk/client-s3": "^3.900.0",
67
- "@langchain/langgraph": "^1.3.2"
66
+ "@langchain/core": "^1.2.9",
67
+ "@langchain/langgraph": "^1.3.2",
68
+ "@langchain/langgraph-checkpoint": "^1.1.5"
68
69
  },
69
70
  "overrides": {
70
71
  "uuid": ">=11.1.1"