@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
@@ -2,16 +2,51 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.batchWriteAll = batchWriteAll;
4
4
  const constants_1 = require("../constants");
5
+ const errors_1 = require("../errors/errors");
5
6
  const drain_unprocessed_1 = require("./drain-unprocessed");
7
+ /** True when `error` is a {@link BatchWriteIncompleteError} — checked by name, not `instanceof`. */
8
+ function isBatchWriteIncomplete(error) {
9
+ return error.name === 'BatchWriteIncompleteError';
10
+ }
6
11
  /**
7
12
  * Write an arbitrary number of requests, chunked into batches of 25 (the
8
- * BatchWriteItem limit). Each batch drains its UnprocessedItems independently.
9
- * Partial-success applies across batches — see {@link BatchWriteIncompleteError}.
13
+ * BatchWriteItem limit). Every chunk is attempted regardless of an earlier
14
+ * chunk's failure — order-independent writes (deletes/puts) should never
15
+ * lose "later" chunks just because an earlier one failed. If any chunk fails,
16
+ * throws {@link BatchWriteAllIncompleteError} reporting exactly how many
17
+ * chunks succeeded vs. failed, and exactly how many individual writes
18
+ * persisted, once every chunk has been attempted.
19
+ *
20
+ * This is this function's ONLY throw site. Two callers —
21
+ * checkpointer/internal/special-write-cleanup.ts and
22
+ * history/internal/append-saga.ts — type-assert a caught error straight to
23
+ * {@link BatchWriteAllIncompleteError} on that guarantee (not `instanceof`,
24
+ * banned repo-wide) instead of narrowing it, since this project enforces
25
+ * 100% branch coverage and a defensive else-branch here would be
26
+ * unreachable, hence untestable. Adding another throw path to this function
27
+ * requires updating both call sites.
10
28
  */
11
29
  async function batchWriteAll(client, tableName, requests, options = {}) {
30
+ const totalChunks = Math.ceil(requests.length / constants_1.BATCH_WRITE_MAX);
31
+ let succeededChunks = 0;
32
+ let succeededCount = 0;
33
+ const failedChunks = [];
12
34
  for (let offset = 0; offset < requests.length; offset += constants_1.BATCH_WRITE_MAX) {
13
35
  const chunk = requests.slice(offset, offset + constants_1.BATCH_WRITE_MAX);
14
- await (0, drain_unprocessed_1.drainUnprocessedWrites)(client, tableName, chunk, options);
36
+ try {
37
+ await (0, drain_unprocessed_1.drainUnprocessedWrites)(client, tableName, chunk, options);
38
+ succeededChunks += 1;
39
+ succeededCount += chunk.length;
40
+ }
41
+ catch (error) {
42
+ const err = error;
43
+ failedChunks.push(err);
44
+ if (isBatchWriteIncomplete(err))
45
+ succeededCount += err.succeededCount;
46
+ }
47
+ }
48
+ if (failedChunks.length > 0) {
49
+ throw new errors_1.BatchWriteAllIncompleteError(succeededChunks, totalChunks, failedChunks, succeededCount);
15
50
  }
16
51
  }
17
52
  //# sourceMappingURL=batch-write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch-write.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/batch-write.ts"],"names":[],"mappings":";;;AAEA,4CAA+C;AAC/C,2DAA2E;AAG3E;;;;GAIG;AACI,KAAK,wBACV,MAAwB,EACxB,SAAiB,EACjB,QAAwB,EACxB,OAAO,GAAiB,EAAE;IAE1B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,2BAAe,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,2BAAe,CAAC,CAAC;QAC/D,MAAM,IAAA,0CAAsB,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"batch-write.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/batch-write.ts"],"names":[],"mappings":";;;AAEA,4CAA+C;AAC/C,6CAA2F;AAC3F,2DAA2E;AAG3E,oGAAoG;AACpG,SAAS,sBAAsB,CAAC,KAAY;IAC1C,OAAO,KAAK,CAAC,IAAI,KAAK,2BAA2B,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,wBACV,MAAwB,EACxB,SAAiB,EACjB,QAAwB,EACxB,OAAO,GAAiB,EAAE;IAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,2BAAe,CAAC,CAAC;IACjE,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,YAAY,GAAY,EAAE,CAAC;IACjC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,2BAAe,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,2BAAe,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,IAAA,0CAAsB,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAChE,eAAe,IAAI,CAAC,CAAC;YACrB,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAc,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,sBAAsB,CAAC,GAAG,CAAC;gBAAE,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC;QACxE,CAAC;IACH,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,qCAA4B,CACpC,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** One entry of a TransactWriteItems/TransactionCanceledException's CancellationReasons. */
2
+ export interface CancellationReason {
3
+ Code?: string;
4
+ }
5
+ /** Extract `CancellationReasons` from a transaction-cancellation error, if present. */
6
+ export declare function getCancellationReasons(error: Error): CancellationReason[] | undefined;
7
+ //# sourceMappingURL=cancellation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancellation.d.ts","sourceRoot":"","sources":["../../../src/shared/dynamodb/cancellation.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB,EAAE,GAAG,SAAS,CAErF"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCancellationReasons = getCancellationReasons;
4
+ /** Extract `CancellationReasons` from a transaction-cancellation error, if present. */
5
+ function getCancellationReasons(error) {
6
+ return error.CancellationReasons;
7
+ }
8
+ //# sourceMappingURL=cancellation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancellation.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/cancellation.ts"],"names":[],"mappings":";;;AAKA,uFAAuF;AACvF,gCAAuC,KAAY;IACjD,OAAQ,KAAwD,CAAC,mBAAmB,CAAC;AACvF,CAAC"}
@@ -13,7 +13,7 @@ function resolveDynamoDBClient(options) {
13
13
  return { ddbClient: undefined, client: options.client, ownsClient: false };
14
14
  }
15
15
  const createClient = options.createClient ?? ((config) => new client_dynamodb_1.DynamoDBClient(config));
16
- const ddbClient = createClient(options.clientConfig ?? {});
16
+ const ddbClient = createClient({ maxAttempts: 1, ...options.clientConfig });
17
17
  return { ddbClient, client: lib_dynamodb_1.DynamoDBDocument.from(ddbClient), ownsClient: true };
18
18
  }
19
19
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/client.ts"],"names":[],"mappings":";;;AAAA,8DAAqF;AACrF,wDAAyD;AAgBzD;;;;GAIG;AACH,+BAAsC,OAA6B;IACjE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gCAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,+BAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/client.ts"],"names":[],"mappings":";;;AAAA,8DAAqF;AACrF,wDAAyD;AAgBzD;;;;GAIG;AACH,+BAAsC,OAA6B;IACjE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gCAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,+BAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry-classifier.d.ts","sourceRoot":"","sources":["../../../src/shared/dynamodb/retry-classifier.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAcrD,CAAC;AAwDF,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK1F"}
1
+ {"version":3,"file":"retry-classifier.d.ts","sourceRoot":"","sources":["../../../src/shared/dynamodb/retry-classifier.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAiBrD,CAAC;AAmDF,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK1F"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_RETRYABLE_ERRORS = void 0;
4
4
  exports.isRetryableError = isRetryableError;
5
+ const cancellation_1 = require("./cancellation");
5
6
  const MAX_CAUSE_DEPTH = 32;
6
7
  /**
7
8
  * Default retryable transient signals. TransactionCanceledException is
@@ -15,6 +16,9 @@ exports.DEFAULT_RETRYABLE_ERRORS = [
15
16
  'InternalServerError',
16
17
  'ServiceUnavailable',
17
18
  'TransactionConflictException',
19
+ 'TransactionInProgressException',
20
+ 'RequestTimeout',
21
+ 'RequestTimeoutException',
18
22
  'ECONNRESET',
19
23
  'ECONNREFUSED',
20
24
  'ETIMEDOUT',
@@ -40,7 +44,7 @@ const TRANSIENT_CANCELLATION_REASONS = [
40
44
  * applies. A bare cancellation with no reasons is treated as non-retryable.
41
45
  */
42
46
  function transactionCancellationRetryable(error) {
43
- const reasons = error.CancellationReasons;
47
+ const reasons = (0, cancellation_1.getCancellationReasons)(error);
44
48
  if (!reasons)
45
49
  return undefined;
46
50
  return reasons.every((reason) => reason.Code === undefined || TRANSIENT_CANCELLATION_REASONS.includes(reason.Code));
@@ -1 +1 @@
1
- {"version":3,"file":"retry-classifier.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/retry-classifier.ts"],"names":[],"mappings":";;;;AAAA,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;GAIG;AACU,QAAA,wBAAwB,GAAsB;IACzD,wCAAwC;IACxC,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,8BAA8B;IAC9B,YAAY;IACZ,cAAc;IACd,WAAW;IACX,OAAO;IACP,WAAW;IACX,iBAAiB;IACjB,cAAc;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,8BAA8B,GAAsB;IACxD,MAAM;IACN,qBAAqB;IACrB,iBAAiB;IACjB,+BAA+B;CAChC,CAAC;AAOF;;;;GAIG;AACH,SAAS,gCAAgC,CAAC,KAAY;IACpD,MAAM,OAAO,GAAI,KAAwD,CAAC,mBAAmB,CAAC;IAC9F,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,KAAK,CAClB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,8BAA8B,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAC9F,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAY;IAClC,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,IAAW,EAAE,KAAa,EAAQ,EAAE;QAChD,IAAI,KAAK,GAAG,eAAe,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAMd,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,0BAAiC,KAAY,EAAE,eAAkC;IAC/E,MAAM,YAAY,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"retry-classifier.js","sourceRoot":"","sources":["../../../src/shared/dynamodb/retry-classifier.ts"],"names":[],"mappings":";;;;AAAA,iDAAwD;AAExD,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;GAIG;AACU,QAAA,wBAAwB,GAAsB;IACzD,wCAAwC;IACxC,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,8BAA8B;IAC9B,gCAAgC;IAChC,gBAAgB;IAChB,yBAAyB;IACzB,YAAY;IACZ,cAAc;IACd,WAAW;IACX,OAAO;IACP,WAAW;IACX,iBAAiB;IACjB,cAAc;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,8BAA8B,GAAsB;IACxD,MAAM;IACN,qBAAqB;IACrB,iBAAiB;IACjB,+BAA+B;CAChC,CAAC;AAEF;;;;GAIG;AACH,SAAS,gCAAgC,CAAC,KAAY;IACpD,MAAM,OAAO,GAAG,IAAA,qCAAsB,EAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,KAAK,CAClB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,8BAA8B,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAC9F,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAY;IAClC,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,IAAW,EAAE,KAAa,EAAQ,EAAE;QAChD,IAAI,KAAK,GAAG,eAAe,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAMd,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACf,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,0BAAiC,KAAY,EAAE,eAAkC;IAC/E,MAAM,YAAY,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC"}
@@ -34,6 +34,24 @@ export declare class BatchWriteIncompleteError extends DynamoDbLangGraphError {
34
34
  readonly unprocessed: WriteRequest[];
35
35
  constructor(succeededCount: number, unprocessed: WriteRequest[], retries: number);
36
36
  }
37
+ /**
38
+ * batchWriteAll attempts every chunk rather than stopping at the first
39
+ * failure — a mid-sequence chunk failing does not abandon the chunks after
40
+ * it. `failedChunks` holds each failing chunk's own error (commonly a
41
+ * {@link BatchWriteIncompleteError}); every chunk not represented there
42
+ * drained successfully and its writes persist — there is no rollback.
43
+ * `succeededCount` is the exact number of individual write requests
44
+ * confirmed persisted across every chunk (full chunks plus any failed
45
+ * chunk's own partial drain), more precise than `succeededChunks` alone
46
+ * when a chunk partially drains before exhausting its retries.
47
+ */
48
+ export declare class BatchWriteAllIncompleteError extends DynamoDbLangGraphError {
49
+ readonly succeededChunks: number;
50
+ readonly totalChunks: number;
51
+ readonly failedChunks: Error[];
52
+ readonly succeededCount: number;
53
+ constructor(succeededChunks: number, totalChunks: number, failedChunks: Error[], succeededCount?: number);
54
+ }
37
55
  /**
38
56
  * A compensating rollback failed after an append-saga chunk error, so the
39
57
  * trigger error could not be cleanly undone. Carries the original trigger as
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/shared/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGtD,mEAAmE;AACnE,qBAAa,eAAgB,SAAQ,sBAAsB;IACzD,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAG1C;CACF;AAED,2EAA2E;AAC3E,qBAAa,aAAc,SAAQ,sBAAsB;IACvD,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAGzC;CACF;AAED,wDAAwD;AACxD,qBAAa,mBAAoB,SAAQ,sBAAsB;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAG5D;CACF;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,YAAY,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAOrC;CACF;AAED,sDAAsD;AACtD,qBAAa,UAAW,SAAQ,sBAAsB;IACpD,YAAY,OAAO,SAAsB,EAGxC;CACF;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;IACnE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;IAErC,YAAY,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAS/E;CACF;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,sBAAsB;IACjE,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC;IAE9B,YAAY,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAS7C;CACF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/shared/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGtD,mEAAmE;AACnE,qBAAa,eAAgB,SAAQ,sBAAsB;IACzD,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAG1C;CACF;AAED,2EAA2E;AAC3E,qBAAa,aAAc,SAAQ,sBAAsB;IACvD,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAGzC;CACF;AAED,wDAAwD;AACxD,qBAAa,mBAAoB,SAAQ,sBAAsB;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAG5D;CACF;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,YAAY,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAOrC;CACF;AAED,sDAAsD;AACtD,qBAAa,UAAW,SAAQ,sBAAsB;IACpD,YAAY,OAAO,SAAsB,EAGxC;CACF;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;IACnE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;IAErC,YAAY,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAS/E;CACF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,4BAA6B,SAAQ,sBAAsB;IACtE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,YACE,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,KAAK,EAAE,EACrB,cAAc,SAAI,EAcnB;CACF;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,sBAAsB;IACjE,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC;IAE9B,YAAY,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAS7C;CACF"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompensationFailedError = exports.BatchWriteIncompleteError = exports.AbortError = exports.ResultTruncatedError = exports.RetryExhaustedError = exports.ConflictError = exports.ValidationError = void 0;
3
+ exports.CompensationFailedError = exports.BatchWriteAllIncompleteError = exports.BatchWriteIncompleteError = exports.AbortError = exports.ResultTruncatedError = exports.RetryExhaustedError = exports.ConflictError = exports.ValidationError = void 0;
4
4
  const base_error_1 = require("./base-error");
5
5
  const error_code_1 = require("./error-code");
6
6
  /** Input failed a validation rule before any AWS call was made. */
@@ -64,6 +64,33 @@ class BatchWriteIncompleteError extends base_error_1.DynamoDbLangGraphError {
64
64
  }
65
65
  }
66
66
  exports.BatchWriteIncompleteError = BatchWriteIncompleteError;
67
+ /**
68
+ * batchWriteAll attempts every chunk rather than stopping at the first
69
+ * failure — a mid-sequence chunk failing does not abandon the chunks after
70
+ * it. `failedChunks` holds each failing chunk's own error (commonly a
71
+ * {@link BatchWriteIncompleteError}); every chunk not represented there
72
+ * drained successfully and its writes persist — there is no rollback.
73
+ * `succeededCount` is the exact number of individual write requests
74
+ * confirmed persisted across every chunk (full chunks plus any failed
75
+ * chunk's own partial drain), more precise than `succeededChunks` alone
76
+ * when a chunk partially drains before exhausting its retries.
77
+ */
78
+ class BatchWriteAllIncompleteError extends base_error_1.DynamoDbLangGraphError {
79
+ succeededChunks;
80
+ totalChunks;
81
+ failedChunks;
82
+ succeededCount;
83
+ constructor(succeededChunks, totalChunks, failedChunks, succeededCount = 0) {
84
+ super(`batchWriteAll did not fully drain: ${succeededChunks}/${totalChunks} chunk(s) succeeded, ` +
85
+ `${failedChunks.length} chunk(s) failed. ${succeededCount} write(s) persisted before the failure.`, error_code_1.ErrorCode.BATCH_WRITE_INCOMPLETE, {}, failedChunks[0]);
86
+ this.name = 'BatchWriteAllIncompleteError';
87
+ this.succeededChunks = succeededChunks;
88
+ this.totalChunks = totalChunks;
89
+ this.failedChunks = failedChunks;
90
+ this.succeededCount = succeededCount;
91
+ }
92
+ }
93
+ exports.BatchWriteAllIncompleteError = BatchWriteAllIncompleteError;
67
94
  /**
68
95
  * A compensating rollback failed after an append-saga chunk error, so the
69
96
  * trigger error could not be cleanly undone. Carries the original trigger as
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/shared/errors/errors.ts"],"names":[],"mappings":";;;AACA,6CAAsD;AACtD,6CAAyC;AAEzC,mEAAmE;AACnE,qBAA6B,SAAQ,mCAAsB;IACzD,YAAY,OAAe,EAAE,KAAc;QACzC,KAAK,CAAC,OAAO,EAAE,sBAAS,CAAC,UAAU,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;;AAED,2EAA2E;AAC3E,mBAA2B,SAAQ,mCAAsB;IACvD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,sBAAS,CAAC,kBAAkB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;;AAED,wDAAwD;AACxD,yBAAiC,SAAQ,mCAAsB;IAC7D,YAAY,OAAe,EAAE,QAAiB,EAAE,KAAa;QAC3D,KAAK,CAAC,OAAO,EAAE,sBAAS,CAAC,eAAe,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7F,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;;AAED;;;;GAIG;AACH,0BAAkC,SAAQ,mCAAsB;IAC9D,YAAY,GAAW,EAAE,KAAa;QACpC,KAAK,CACH,mCAAmC,GAAG,SAAS,KAAK,4BAA4B,EAChF,sBAAS,CAAC,gBAAgB,EAC1B,EAAE,SAAS,EAAE,GAAG,EAAE,CACnB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;;AAED,sDAAsD;AACtD,gBAAwB,SAAQ,mCAAsB;IACpD,YAAY,OAAO,GAAG,mBAAmB;QACvC,KAAK,CAAC,OAAO,EAAE,sBAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;;AAED;;;;GAIG;AACH,+BAAuC,SAAQ,mCAAsB;IAC1D,cAAc,CAAS;IACvB,WAAW,CAAiB;IAErC,YAAY,cAAsB,EAAE,WAA2B,EAAE,OAAe;QAC9E,KAAK,CACH,kCAAkC,OAAO,6BAA6B;YACpE,GAAG,cAAc,uBAAuB,WAAW,CAAC,MAAM,kBAAkB,EAC9E,sBAAS,CAAC,sBAAsB,CACjC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;;AAED;;;;;GAKG;AACH,6BAAqC,SAAQ,mCAAsB;IACxD,aAAa,CAAQ;IAE9B,YAAY,KAAY,EAAE,aAAoB;QAC5C,KAAK,CACH,8CAA8C,KAAK,CAAC,OAAO,eAAe,aAAa,CAAC,OAAO,GAAG,EAClG,sBAAS,CAAC,mBAAmB,EAC7B,EAAE,EACF,KAAK,CACN,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/shared/errors/errors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-namespaces.d.ts","sourceRoot":"","sources":["../../../src/store/actions/list-namespaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAQ/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWtD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,uBAAuB,GAC1B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAsBrB"}
1
+ {"version":3,"file":"list-namespaces.d.ts","sourceRoot":"","sources":["../../../src/store/actions/list-namespaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAQ/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmBtD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,uBAAuB,GAC1B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAsBrB"}
@@ -11,9 +11,17 @@ const validation_1 = require("../internal/validation");
11
11
  function namespaceSource(context, op) {
12
12
  const root = (0, namespace_match_1.prefixRoot)(op.matchConditions);
13
13
  if (root.length > 0) {
14
- return (0, paginate_1.paginateQuery)({ client: context.client, params: (0, query_1.scopedQuery)(context.tableName, root) });
14
+ return (0, paginate_1.paginateQuery)({
15
+ client: context.client,
16
+ params: (0, query_1.scopedQuery)(context.tableName, root),
17
+ maxItems: context.maxScanItems,
18
+ });
15
19
  }
16
- return (0, scan_1.paginateScan)({ client: context.client, params: (0, query_1.storeScan)(context.tableName) });
20
+ return (0, scan_1.paginateScan)({
21
+ client: context.client,
22
+ params: (0, query_1.storeScan)(context.tableName),
23
+ maxItems: context.maxScanItems,
24
+ });
17
25
  }
18
26
  /**
19
27
  * List distinct namespaces (truncated to `maxDepth`) that satisfy every match
@@ -1 +1 @@
1
- {"version":3,"file":"list-namespaces.js","sourceRoot":"","sources":["../../../src/store/actions/list-namespaces.ts"],"names":[],"mappings":";;;AAEA,6DAA+D;AAC/D,qDAA0D;AAC1D,yDAA4D;AAC5D,2CAAuD;AACvD,iEAAwF;AACxF,6CAA2D;AAE3D,uDAAwD;AAExD,SAAS,eAAe,CAAC,OAAqB,EAAE,EAA2B;IACzE,MAAM,IAAI,GAAG,IAAA,4BAAU,EAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,IAAA,wBAAa,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAA,mBAAW,EAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,IAAA,mBAAY,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAA,iBAAS,EAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACI,KAAK,yBACV,OAAqB,EACrB,EAA2B;IAE3B,IAAA,2BAAc,EAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,IAAA,+BAAiB,EAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IACE,EAAE,CAAC,eAAe;YAClB,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,gCAAc,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAC9E,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAA,+BAAa,EAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC;IAClG,OAAO,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"list-namespaces.js","sourceRoot":"","sources":["../../../src/store/actions/list-namespaces.ts"],"names":[],"mappings":";;;AAEA,6DAA+D;AAC/D,qDAA0D;AAC1D,yDAA4D;AAC5D,2CAAuD;AACvD,iEAAwF;AACxF,6CAA2D;AAE3D,uDAAwD;AAExD,SAAS,eAAe,CAAC,OAAqB,EAAE,EAA2B;IACzE,MAAM,IAAI,GAAG,IAAA,4BAAU,EAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,IAAA,wBAAa,EAAC;YACnB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,IAAA,mBAAW,EAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YAC5C,QAAQ,EAAE,OAAO,CAAC,YAAY;SAC/B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAA,mBAAY,EAAC;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,iBAAS,EAAC,OAAO,CAAC,SAAS,CAAC;QACpC,QAAQ,EAAE,OAAO,CAAC,YAAY;KAC/B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,yBACV,OAAqB,EACrB,EAA2B;IAE3B,IAAA,2BAAc,EAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,IAAA,+BAAiB,EAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IACE,EAAE,CAAC,eAAe;YAClB,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,gCAAc,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAC9E,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAA,+BAAa,EAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAC,CAAC,CAAC;IAClG,OAAO,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import type { PutOperation } from '@langchain/langgraph-checkpoint';
2
2
  import type { StoreContext } from '../internal/setup';
3
3
  /**
4
- * Store, update, or delete an item. A null value deletes; otherwise the value
5
- * is encoded (with optional compression/S3 offload), `createdAt` is preserved
6
- * across updates, and an embedding is computed when indexing is enabled. When a
7
- * `vectorBackend` is configured the embedding is sent there (and not stored on
8
- * the item); DynamoDB always holds the canonical item.
4
+ * Store, update, or delete an item (null deletes). The value is encoded
5
+ * (optional compression/S3 offload, nonced per call so a failed write can never
6
+ * delete the previous payload) and `createdAt` is preserved across updates; a
7
+ * computed embedding is sent to a configured `vectorBackend` instead of being
8
+ * stored on the item — DynamoDB always holds the canonical item.
9
9
  */
10
10
  export declare function putItem(context: StoreContext, op: PutOperation): Promise<void>;
11
11
  //# sourceMappingURL=put.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/store/actions/put.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAapE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA2FtD;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBpF"}
1
+ {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/store/actions/put.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAcpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA+DtD;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBpF"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.putItem = putItem;
4
+ const node_crypto_1 = require("node:crypto");
4
5
  const clock_1 = require("../../shared/clock");
5
6
  const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
6
7
  const orphans_1 = require("../../shared/codec/s3/orphans");
@@ -9,34 +10,28 @@ const ttl_1 = require("../../shared/validation/ttl");
9
10
  const index_sync_1 = require("../internal/index-sync");
10
11
  const item_mapper_1 = require("../internal/item-mapper");
11
12
  const keys_1 = require("../internal/keys");
13
+ const persist_1 = require("../internal/persist");
12
14
  const semantic_search_1 = require("../internal/semantic-search");
13
15
  const validation_1 = require("../internal/validation");
14
- async function readCreatedAt(context, pk, sk) {
16
+ async function readExisting(context, pk, sk) {
15
17
  const existing = await (0, retry_1.withDynamoDBRetry)(() => context.client.get({
16
18
  TableName: context.tableName,
17
19
  Key: { PK: pk, SK: sk },
18
20
  ConsistentRead: true,
19
- ProjectionExpression: '#c',
20
- ExpressionAttributeNames: { '#c': 'createdAt' },
21
+ ProjectionExpression: '#c, #v',
22
+ ExpressionAttributeNames: { '#c': 'createdAt', '#v': 'value' },
21
23
  }));
22
- return existing.Item?.createdAt;
23
- }
24
- async function readValueDescriptor(context, pk, sk) {
25
- const existing = await (0, retry_1.withDynamoDBRetry)(() => context.client.get({
26
- TableName: context.tableName,
27
- Key: { PK: pk, SK: sk },
28
- ConsistentRead: true,
29
- ProjectionExpression: '#v',
30
- ExpressionAttributeNames: { '#v': 'value' },
31
- }));
32
- return existing.Item?.value;
24
+ return {
25
+ createdAt: existing.Item?.createdAt,
26
+ value: existing.Item?.value,
27
+ };
33
28
  }
34
29
  /** Delete the item and, when a vector backend is configured, drop its vector. */
35
30
  async function deleteStoreItem(context, op, pk, sk) {
36
- const descriptor = context.offloader ? await readValueDescriptor(context, pk, sk) : undefined;
31
+ const existing = context.offloader ? await readExisting(context, pk, sk) : undefined;
37
32
  await (0, retry_1.withDynamoDBRetry)(() => context.client.delete({ TableName: context.tableName, Key: { PK: pk, SK: sk } }));
38
33
  if (context.offloader) {
39
- await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(descriptor ? [descriptor] : []), 'store.delete', context.logger);
34
+ await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(existing?.value ? [existing.value] : []), 'store.delete', context.logger);
40
35
  }
41
36
  if (context.vectorBackend) {
42
37
  await (0, index_sync_1.syncVectorIndex)(context.vectorBackend, op.namespace, op.key, undefined, context.logger);
@@ -48,24 +43,12 @@ async function resolveEmbedding(context, op, value) {
48
43
  return undefined;
49
44
  return (0, semantic_search_1.embedValue)(context, value, Array.isArray(op.index) ? op.index : undefined);
50
45
  }
51
- /** Put the record; on failure best-effort clean any S3 objects it referenced. */
52
- async function persistRecord(context, record) {
53
- try {
54
- await (0, retry_1.withDynamoDBRetry)(() => context.client.put({ TableName: context.tableName, Item: record }));
55
- }
56
- catch (error) {
57
- if (context.offloader) {
58
- await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)([record.value]), 'store.put', context.logger);
59
- }
60
- throw error;
61
- }
62
- }
63
46
  /**
64
- * Store, update, or delete an item. A null value deletes; otherwise the value
65
- * is encoded (with optional compression/S3 offload), `createdAt` is preserved
66
- * across updates, and an embedding is computed when indexing is enabled. When a
67
- * `vectorBackend` is configured the embedding is sent there (and not stored on
68
- * the item); DynamoDB always holds the canonical item.
47
+ * Store, update, or delete an item (null deletes). The value is encoded
48
+ * (optional compression/S3 offload, nonced per call so a failed write can never
49
+ * delete the previous payload) and `createdAt` is preserved across updates; a
50
+ * computed embedding is sent to a configured `vectorBackend` instead of being
51
+ * stored on the item — DynamoDB always holds the canonical item.
69
52
  */
70
53
  async function putItem(context, op) {
71
54
  (0, validation_1.validateNamespace)(op.namespace);
@@ -78,16 +61,17 @@ async function putItem(context, op) {
78
61
  }
79
62
  const value = op.value;
80
63
  const timestamp = (0, clock_1.nowIso)();
81
- const createdAt = (await readCreatedAt(context, pk, sk)) ?? timestamp;
64
+ const existing = await readExisting(context, pk, sk);
82
65
  const embedding = await resolveEmbedding(context, op, value);
83
66
  const ttlTimestamp = context.ttl ? (0, ttl_1.calculateTtlTimestamp)(context.ttl) : undefined;
84
67
  const record = await (0, item_mapper_1.buildStoreItem)(context, op.namespace, op.key, value, {
85
- createdAt,
68
+ createdAt: existing.createdAt ?? timestamp,
86
69
  updatedAt: timestamp,
87
70
  embedding: context.vectorBackend ? undefined : embedding,
88
71
  ttlTimestamp,
72
+ nonce: (0, node_crypto_1.randomUUID)(),
89
73
  });
90
- await persistRecord(context, record);
74
+ await (0, persist_1.persistRecord)(context, record, existing.value);
91
75
  if (context.vectorBackend) {
92
76
  await (0, index_sync_1.syncVectorIndex)(context.vectorBackend, op.namespace, op.key, embedding, context.logger);
93
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/store/actions/put.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/store/actions/put.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/store/actions/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,UAAU,EACV,eAAe,EAChB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAwDtD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,eAAe,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CAuBvB"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/store/actions/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,UAAU,EACV,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6EtD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,eAAe,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CAwBvB"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.searchItems = searchItems;
4
4
  const paginate_1 = require("../../shared/dynamodb/paginate");
5
5
  const scan_1 = require("../../shared/dynamodb/scan");
6
+ const errors_1 = require("../../shared/errors/errors");
6
7
  const filter_1 = require("../internal/filter");
7
8
  const item_mapper_1 = require("../internal/item-mapper");
8
9
  const keys_1 = require("../internal/keys");
@@ -21,8 +22,13 @@ async function collectCandidates(context, op) {
21
22
  ? (0, paginate_1.paginateQuery)({
22
23
  client: context.client,
23
24
  params: (0, query_1.scopedQuery)(context.tableName, op.namespacePrefix),
25
+ maxItems: context.maxScanItems,
24
26
  })
25
- : (0, scan_1.paginateScan)({ client: context.client, params: (0, query_1.storeScan)(context.tableName) });
27
+ : (0, scan_1.paginateScan)({
28
+ client: context.client,
29
+ params: (0, query_1.storeScan)(context.tableName),
30
+ maxItems: context.maxScanItems,
31
+ });
26
32
  const candidates = [];
27
33
  for await (const raw of source) {
28
34
  const record = (0, item_mapper_1.narrowStoreRecord)(raw);
@@ -37,16 +43,28 @@ async function collectCandidates(context, op) {
37
43
  }
38
44
  return candidates;
39
45
  }
40
- async function searchViaBackend(context, backend, index, op, topK) {
46
+ async function searchViaBackend(context, backend, index, op, offset, limit) {
41
47
  const queryVector = await index.embeddings.embedQuery(op.query);
42
- const matches = await backend.query(op.namespacePrefix, queryVector, topK);
43
- const results = [];
44
- for (const match of matches) {
45
- if (!(0, keys_1.namespaceMatchesPrefix)(match.namespace, op.namespacePrefix))
46
- continue;
47
- const item = await (0, get_1.getItem)(context, match.namespace, match.key);
48
- if (item && passesFilter(item, op))
49
- results.push({ ...item, score: match.score });
48
+ const need = offset + limit;
49
+ if (need > context.maxSearchCandidates) {
50
+ throw new errors_1.ValidationError(`Requested page (offset ${offset} + limit ${limit} = ${need}) exceeds maxSearchCandidates ` +
51
+ `(${context.maxSearchCandidates}); narrow the page or raise maxSearchCandidates`, 'maxSearchCandidates');
52
+ }
53
+ let topK = Math.min(need, context.maxSearchCandidates);
54
+ let results;
55
+ for (;;) {
56
+ const matches = await backend.query(op.namespacePrefix, queryVector, topK);
57
+ results = [];
58
+ for (const match of matches) {
59
+ if (!(0, keys_1.namespaceMatchesPrefix)(match.namespace, op.namespacePrefix))
60
+ continue;
61
+ const item = await (0, get_1.getItem)(context, match.namespace, match.key);
62
+ if (item && passesFilter(item, op))
63
+ results.push({ ...item, score: match.score });
64
+ }
65
+ if (results.length >= need || matches.length < topK || topK >= context.maxSearchCandidates)
66
+ break;
67
+ topK = Math.min(topK * 2, context.maxSearchCandidates);
50
68
  }
51
69
  return results;
52
70
  }
@@ -61,7 +79,7 @@ async function searchItems(context, op) {
61
79
  const limit = op.limit ?? DEFAULT_LIMIT;
62
80
  (0, validation_1.validatePaging)(offset, limit);
63
81
  if (op.query && context.index && context.vectorBackend) {
64
- const ranked = await searchViaBackend(context, context.vectorBackend, context.index, op, offset + limit);
82
+ const ranked = await searchViaBackend(context, context.vectorBackend, context.index, op, offset, limit);
65
83
  return ranked.slice(offset, offset + limit);
66
84
  }
67
85
  const candidates = await collectCandidates(context, op);
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/store/actions/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/store/actions/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/store/internal/filter.ts"],"names":[],"mappings":"AAIA,8DAA8D;AAC9D,MAAM,MAAM,SAAS,GACnB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AA8BhF;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAChC,OAAO,CAIT"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/store/internal/filter.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,MAAM,SAAS,GACnB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AA2ChF;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAChC,OAAO,CAIT"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchesStoreFilter = matchesStoreFilter;
4
4
  const node_util_1 = require("node:util");
5
- const errors_1 = require("../../shared/errors/errors");
6
5
  const COMPARATORS = {
7
6
  $eq: (actual, expected) => (0, node_util_1.isDeepStrictEqual)(actual, expected),
8
7
  $ne: (actual, expected) => !(0, node_util_1.isDeepStrictEqual)(actual, expected),
@@ -10,23 +9,31 @@ const COMPARATORS = {
10
9
  $gte: (actual, expected) => actual >= expected,
11
10
  $lt: (actual, expected) => actual < expected,
12
11
  $lte: (actual, expected) => actual <= expected,
12
+ $in: (actual, expected) => Array.isArray(expected)
13
+ ? expected.some((candidate) => (0, node_util_1.isDeepStrictEqual)(actual, candidate))
14
+ : false,
15
+ $nin: (actual, expected) => Array.isArray(expected)
16
+ ? !expected.some((candidate) => (0, node_util_1.isDeepStrictEqual)(actual, candidate))
17
+ : true,
13
18
  };
19
+ /**
20
+ * True only when every key is one of the exact known operator names — matches
21
+ * the official `@langchain/langgraph-checkpoint` InMemoryStore's own detection
22
+ * exactly, so a stored value that merely has `$`-prefixed keys (e.g. a JSON
23
+ * Schema document) is compared as a literal value instead of misread as a
24
+ * filter operator.
25
+ */
14
26
  function isOperatorObject(condition) {
15
27
  return (typeof condition === 'object' &&
16
28
  condition !== null &&
17
29
  !Array.isArray(condition) &&
18
30
  Object.keys(condition).length > 0 &&
19
- Object.keys(condition).every((key) => key.startsWith('$')));
31
+ Object.keys(condition).every((key) => Object.prototype.hasOwnProperty.call(COMPARATORS, key)));
20
32
  }
21
33
  function matchesCondition(actual, condition) {
22
34
  if (!isOperatorObject(condition))
23
35
  return (0, node_util_1.isDeepStrictEqual)(actual, condition);
24
- return Object.entries(condition).every(([operator, expected]) => {
25
- const comparator = COMPARATORS[operator];
26
- if (!comparator)
27
- throw new errors_1.ValidationError(`Unknown filter operator "${operator}"`, 'filter');
28
- return comparator(actual, expected);
29
- });
36
+ return Object.entries(condition).every(([operator, expected]) => COMPARATORS[operator](actual, expected));
30
37
  }
31
38
  /**
32
39
  * True when `value` satisfies every field condition in `filter`. A plain value
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/store/internal/filter.ts"],"names":[],"mappings":";;;AAAA,yCAA8C;AAE9C,uDAA6D;AAM7D,MAAM,WAAW,GAAwE;IACvF,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC;IAC9D,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC;IAC/D,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,GAAI,QAAmB;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,IAAK,QAAmB;IACtE,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,GAAI,QAAmB;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,IAAK,QAAmB;CACvE,CAAC;AAEF,SAAS,gBAAgB,CAAC,SAAoB;IAC5C,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QAClB,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,SAAoB;IAC/D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAA,6BAAiB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,wBAAe,CAAC,4BAA4B,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9F,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,4BACE,KAAgC,EAChC,MAAiC;IAEjC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CACzD,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAC1C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/store/internal/filter.ts"],"names":[],"mappings":";;;AAAA,yCAA8C;AAM9C,MAAM,WAAW,GAAwE;IACvF,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC;IAC9D,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC;IAC/D,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,GAAI,QAAmB;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,IAAK,QAAmB;IACtE,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,GAAI,QAAmB;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAE,MAAiB,IAAK,QAAmB;IACtE,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CACxB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpE,CAAC,CAAC,KAAK;IACX,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CACzB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,6BAAiB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC,IAAI;CACX,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,SAAoB;IAC5C,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QAClB,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAC9F,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,SAAoB;IAC/D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAA,6BAAiB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAC9D,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,4BACE,KAAgC,EAChC,MAAiC;IAEjC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CACzD,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-reconcile.d.ts","sourceRoot":"","sources":["../../../src/store/internal/index-reconcile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC;AAOD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,CAG5F;AAED,8EAA8E;AAC9E,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,eAAe,EAAE,GACtB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
1
+ {"version":3,"file":"index-reconcile.d.ts","sourceRoot":"","sources":["../../../src/store/internal/index-reconcile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC;AAOD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAe5B;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,CAO5F;AAED,8EAA8E;AAC9E,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,eAAe,EAAE,GACtB,OAAO,CAAC,MAAM,CAAC,CAUjB"}