@farukada/aws-langgraph-dynamodb-ts 0.3.1 → 0.4.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 (197) hide show
  1. package/README.md +12 -5
  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/get-tuple.js.map +1 -1
  5. package/dist/checkpointer/actions/list.d.ts.map +1 -1
  6. package/dist/checkpointer/actions/list.js +3 -1
  7. package/dist/checkpointer/actions/list.js.map +1 -1
  8. package/dist/checkpointer/actions/put-writes.d.ts +6 -0
  9. package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
  10. package/dist/checkpointer/actions/put-writes.js +77 -10
  11. package/dist/checkpointer/actions/put-writes.js.map +1 -1
  12. package/dist/checkpointer/actions/put.js.map +1 -1
  13. package/dist/checkpointer/internal/assemble.js.map +1 -1
  14. package/dist/checkpointer/internal/configurable.js.map +1 -1
  15. package/dist/checkpointer/internal/fetch.js.map +1 -1
  16. package/dist/checkpointer/internal/filter-match.d.ts.map +1 -1
  17. package/dist/checkpointer/internal/filter-match.js.map +1 -1
  18. package/dist/checkpointer/internal/item-reader.js.map +1 -1
  19. package/dist/checkpointer/internal/item-writer.d.ts +13 -2
  20. package/dist/checkpointer/internal/item-writer.d.ts.map +1 -1
  21. package/dist/checkpointer/internal/item-writer.js +15 -3
  22. package/dist/checkpointer/internal/item-writer.js.map +1 -1
  23. package/dist/checkpointer/internal/keys.js.map +1 -1
  24. package/dist/checkpointer/internal/query.d.ts +5 -1
  25. package/dist/checkpointer/internal/query.d.ts.map +1 -1
  26. package/dist/checkpointer/internal/query.js +5 -2
  27. package/dist/checkpointer/internal/query.js.map +1 -1
  28. package/dist/checkpointer/internal/setup.d.ts.map +1 -1
  29. package/dist/checkpointer/internal/setup.js +8 -1
  30. package/dist/checkpointer/internal/setup.js.map +1 -1
  31. package/dist/checkpointer/internal/validation.js.map +1 -1
  32. package/dist/checkpointer/saver.d.ts +9 -0
  33. package/dist/checkpointer/saver.d.ts.map +1 -1
  34. package/dist/checkpointer/saver.js +14 -0
  35. package/dist/checkpointer/saver.js.map +1 -1
  36. package/dist/factory/factory.d.ts +4 -4
  37. package/dist/factory/factory.d.ts.map +1 -1
  38. package/dist/factory/factory.js +4 -6
  39. package/dist/factory/factory.js.map +1 -1
  40. package/dist/history/actions/add-messages.d.ts.map +1 -1
  41. package/dist/history/actions/add-messages.js +4 -3
  42. package/dist/history/actions/add-messages.js.map +1 -1
  43. package/dist/history/actions/clear.d.ts +6 -3
  44. package/dist/history/actions/clear.d.ts.map +1 -1
  45. package/dist/history/actions/clear.js +28 -15
  46. package/dist/history/actions/clear.js.map +1 -1
  47. package/dist/history/actions/get-messages.d.ts.map +1 -1
  48. package/dist/history/actions/get-messages.js +2 -0
  49. package/dist/history/actions/get-messages.js.map +1 -1
  50. package/dist/history/actions/list-sessions.d.ts +4 -1
  51. package/dist/history/actions/list-sessions.d.ts.map +1 -1
  52. package/dist/history/actions/list-sessions.js +3 -1
  53. package/dist/history/actions/list-sessions.js.map +1 -1
  54. package/dist/history/actions/reconcile-count.d.ts +4 -1
  55. package/dist/history/actions/reconcile-count.d.ts.map +1 -1
  56. package/dist/history/actions/reconcile-count.js +21 -9
  57. package/dist/history/actions/reconcile-count.js.map +1 -1
  58. package/dist/history/chat-message-history.d.ts +13 -1
  59. package/dist/history/chat-message-history.d.ts.map +1 -1
  60. package/dist/history/chat-message-history.js +16 -2
  61. package/dist/history/chat-message-history.js.map +1 -1
  62. package/dist/history/internal/append-saga.d.ts +6 -3
  63. package/dist/history/internal/append-saga.d.ts.map +1 -1
  64. package/dist/history/internal/append-saga.js +28 -14
  65. package/dist/history/internal/append-saga.js.map +1 -1
  66. package/dist/history/internal/item-mapper.js.map +1 -1
  67. package/dist/history/internal/keys.js.map +1 -1
  68. package/dist/history/internal/message-chunker.js.map +1 -1
  69. package/dist/history/internal/message-transaction.d.ts +4 -0
  70. package/dist/history/internal/message-transaction.d.ts.map +1 -1
  71. package/dist/history/internal/message-transaction.js +6 -0
  72. package/dist/history/internal/message-transaction.js.map +1 -1
  73. package/dist/history/internal/query.js.map +1 -1
  74. package/dist/history/internal/session-update.d.ts +6 -1
  75. package/dist/history/internal/session-update.d.ts.map +1 -1
  76. package/dist/history/internal/session-update.js +6 -2
  77. package/dist/history/internal/session-update.js.map +1 -1
  78. package/dist/history/internal/setup.d.ts.map +1 -1
  79. package/dist/history/internal/setup.js +8 -1
  80. package/dist/history/internal/setup.js.map +1 -1
  81. package/dist/history/internal/title-generator.js.map +1 -1
  82. package/dist/history/internal/ttl-anchor.d.ts +20 -7
  83. package/dist/history/internal/ttl-anchor.d.ts.map +1 -1
  84. package/dist/history/internal/ttl-anchor.js +19 -7
  85. package/dist/history/internal/ttl-anchor.js.map +1 -1
  86. package/dist/history/session-adapter.d.ts.map +1 -1
  87. package/dist/history/session-adapter.js.map +1 -1
  88. package/dist/index.d.ts +1 -1
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +2 -1
  91. package/dist/index.js.map +1 -1
  92. package/dist/shared/clock.js.map +1 -1
  93. package/dist/shared/codec/codec.js.map +1 -1
  94. package/dist/shared/codec/compression.js.map +1 -1
  95. package/dist/shared/codec/descriptor-keys.js.map +1 -1
  96. package/dist/shared/codec/s3/client.d.ts +7 -1
  97. package/dist/shared/codec/s3/client.d.ts.map +1 -1
  98. package/dist/shared/codec/s3/client.js +8 -2
  99. package/dist/shared/codec/s3/client.js.map +1 -1
  100. package/dist/shared/codec/s3/config.d.ts +9 -1
  101. package/dist/shared/codec/s3/config.d.ts.map +1 -1
  102. package/dist/shared/codec/s3/config.js +14 -2
  103. package/dist/shared/codec/s3/config.js.map +1 -1
  104. package/dist/shared/codec/s3/delete.js.map +1 -1
  105. package/dist/shared/codec/s3/lifecycle.js.map +1 -1
  106. package/dist/shared/codec/s3/offloader.d.ts +2 -1
  107. package/dist/shared/codec/s3/offloader.d.ts.map +1 -1
  108. package/dist/shared/codec/s3/offloader.js +15 -8
  109. package/dist/shared/codec/s3/offloader.js.map +1 -1
  110. package/dist/shared/codec/s3/orphans.d.ts +4 -2
  111. package/dist/shared/codec/s3/orphans.d.ts.map +1 -1
  112. package/dist/shared/codec/s3/orphans.js +8 -23
  113. package/dist/shared/codec/s3/orphans.js.map +1 -1
  114. package/dist/shared/codec/s3/read-write.d.ts.map +1 -1
  115. package/dist/shared/codec/s3/read-write.js +14 -13
  116. package/dist/shared/codec/s3/read-write.js.map +1 -1
  117. package/dist/shared/codec/s3/retry.d.ts +5 -0
  118. package/dist/shared/codec/s3/retry.d.ts.map +1 -0
  119. package/dist/shared/codec/s3/retry.js +25 -0
  120. package/dist/shared/codec/s3/retry.js.map +1 -0
  121. package/dist/shared/constants.d.ts +12 -0
  122. package/dist/shared/constants.d.ts.map +1 -1
  123. package/dist/shared/constants.js +13 -1
  124. package/dist/shared/constants.js.map +1 -1
  125. package/dist/shared/dynamodb/backoff.js.map +1 -1
  126. package/dist/shared/dynamodb/batch-write.d.ts +5 -2
  127. package/dist/shared/dynamodb/batch-write.d.ts.map +1 -1
  128. package/dist/shared/dynamodb/batch-write.js +19 -3
  129. package/dist/shared/dynamodb/batch-write.js.map +1 -1
  130. package/dist/shared/dynamodb/client.js +1 -1
  131. package/dist/shared/dynamodb/client.js.map +1 -1
  132. package/dist/shared/dynamodb/drain-unprocessed.js.map +1 -1
  133. package/dist/shared/dynamodb/paginate-core.js.map +1 -1
  134. package/dist/shared/dynamodb/paginate.js.map +1 -1
  135. package/dist/shared/dynamodb/retry-classifier.d.ts.map +1 -1
  136. package/dist/shared/dynamodb/retry-classifier.js +3 -0
  137. package/dist/shared/dynamodb/retry-classifier.js.map +1 -1
  138. package/dist/shared/dynamodb/retry.js.map +1 -1
  139. package/dist/shared/dynamodb/scan.js.map +1 -1
  140. package/dist/shared/errors/base-error.d.ts.map +1 -1
  141. package/dist/shared/errors/base-error.js.map +1 -1
  142. package/dist/shared/errors/error-code.js.map +1 -1
  143. package/dist/shared/errors/errors.d.ts +13 -0
  144. package/dist/shared/errors/errors.d.ts.map +1 -1
  145. package/dist/shared/errors/errors.js +22 -1
  146. package/dist/shared/errors/errors.js.map +1 -1
  147. package/dist/shared/errors/wrap-error.js.map +1 -1
  148. package/dist/shared/logging/logger.js.map +1 -1
  149. package/dist/shared/logging/redaction.d.ts.map +1 -1
  150. package/dist/shared/logging/redaction.js +13 -8
  151. package/dist/shared/logging/redaction.js.map +1 -1
  152. package/dist/shared/ulid.js.map +1 -1
  153. package/dist/shared/validation/primitives.js.map +1 -1
  154. package/dist/shared/validation/ttl.d.ts +5 -0
  155. package/dist/shared/validation/ttl.d.ts.map +1 -1
  156. package/dist/shared/validation/ttl.js +8 -0
  157. package/dist/shared/validation/ttl.js.map +1 -1
  158. package/dist/store/actions/get.js.map +1 -1
  159. package/dist/store/actions/list-namespaces.js.map +1 -1
  160. package/dist/store/actions/put.d.ts +6 -4
  161. package/dist/store/actions/put.d.ts.map +1 -1
  162. package/dist/store/actions/put.js +32 -13
  163. package/dist/store/actions/put.js.map +1 -1
  164. package/dist/store/actions/reconcile-vector-index.js.map +1 -1
  165. package/dist/store/actions/search.d.ts.map +1 -1
  166. package/dist/store/actions/search.js +29 -9
  167. package/dist/store/actions/search.js.map +1 -1
  168. package/dist/store/internal/filter.d.ts.map +1 -1
  169. package/dist/store/internal/filter.js +12 -8
  170. package/dist/store/internal/filter.js.map +1 -1
  171. package/dist/store/internal/index-reconcile.d.ts.map +1 -1
  172. package/dist/store/internal/index-reconcile.js +5 -5
  173. package/dist/store/internal/index-reconcile.js.map +1 -1
  174. package/dist/store/internal/index-sync.js.map +1 -1
  175. package/dist/store/internal/item-mapper.d.ts +2 -1
  176. package/dist/store/internal/item-mapper.d.ts.map +1 -1
  177. package/dist/store/internal/item-mapper.js +1 -1
  178. package/dist/store/internal/item-mapper.js.map +1 -1
  179. package/dist/store/internal/keys.js.map +1 -1
  180. package/dist/store/internal/namespace-match.js.map +1 -1
  181. package/dist/store/internal/query.js.map +1 -1
  182. package/dist/store/internal/ranker.d.ts.map +1 -1
  183. package/dist/store/internal/ranker.js +3 -1
  184. package/dist/store/internal/ranker.js.map +1 -1
  185. package/dist/store/internal/semantic-search.js.map +1 -1
  186. package/dist/store/internal/setup.d.ts +1 -0
  187. package/dist/store/internal/setup.d.ts.map +1 -1
  188. package/dist/store/internal/setup.js +8 -1
  189. package/dist/store/internal/setup.js.map +1 -1
  190. package/dist/store/internal/validation.js.map +1 -1
  191. package/dist/store/store.d.ts +9 -0
  192. package/dist/store/store.d.ts.map +1 -1
  193. package/dist/store/store.js +14 -0
  194. package/dist/store/store.js.map +1 -1
  195. package/dist/store/types.d.ts +2 -0
  196. package/dist/store/types.d.ts.map +1 -1
  197. package/package.json +28 -26
@@ -1 +1 @@
1
- {"version":3,"file":"message-chunker.js","sourceRoot":"","sources":["../../../src/history/internal/message-chunker.ts"],"names":[],"mappings":";;AAyBA,8CAQC;AAkBD,kCAoBC;AAvED,oDAAmF;AAGnF;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,eAAe,CAAC,UAA6B;IACpD,MAAM,IAAI,GACR,UAAU,CAAC,QAAQ,KAAK,uBAAe,CAAC,MAAM;QAC5C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM;QACzB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9B,OAAO,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,IAAqB;IACrD,OAAO,CACL,IAAI,CAAC,EAAE,CAAC,MAAM;QACd,IAAI,CAAC,EAAE,CAAC,MAAM;QACd,IAAI,CAAC,SAAS,CAAC,MAAM;QACrB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,KAAa,EACb,KAAa,EACb,IAAY,EACZ,GAAW,EACX,QAAgB;IAEhB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CACzB,KAAwB,EACxB,QAAgB,EAChB,QAAgB;IAEhB,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,IAAI,OAAO,GAAsB,EAAE,CAAC;IACpC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,YAAY,IAAI,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"message-chunker.js","sourceRoot":"","sources":["../../../src/history/internal/message-chunker.ts"],"names":[],"mappings":";;;;AAAA,oDAAmF;AAGnF;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,SAAS,eAAe,CAAC,UAA6B;IACpD,MAAM,IAAI,GACR,UAAU,CAAC,QAAQ,KAAK,uBAAe,CAAC,MAAM;QAC5C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM;QACzB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9B,OAAO,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,2BAAkC,IAAqB;IACrD,OAAO,CACL,IAAI,CAAC,EAAE,CAAC,MAAM;QACd,IAAI,CAAC,EAAE,CAAC,MAAM;QACd,IAAI,CAAC,SAAS,CAAC,MAAM;QACrB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,KAAa,EACb,KAAa,EACb,IAAY,EACZ,GAAW,EACX,QAAgB;IAEhB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,qBACE,KAAwB,EACxB,QAAgB,EAChB,QAAgB;IAEhB,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,IAAI,OAAO,GAAsB,EAAE,CAAC;IACpC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,YAAY,IAAI,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -12,6 +12,10 @@ export interface ChunkRetryOptions {
12
12
  * call, so `messageCount` can never disagree with the messages that landed. A
13
13
  * single `ClientRequestToken` is reused across retries so a re-sent commit (e.g.
14
14
  * after a lost response) is idempotent and never double-applies the count `ADD`.
15
+ * The transaction always touches the session's shared metadata row, so
16
+ * concurrent appends to the same session contend on it; retries use
17
+ * {@link MESSAGE_APPEND_RETRY_MAX_ATTEMPTS} rather than the default budget so a
18
+ * burst of concurrent callers can drain via backoff instead of erroring.
15
19
  */
16
20
  export declare function writeMessageChunk(context: HistoryContext, items: ChatMessageItem[], fields: SessionUpdateFields, retry?: ChunkRetryOptions): Promise<void>;
17
21
  //# sourceMappingURL=message-transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-transaction.d.ts","sourceRoot":"","sources":["../../../src/history/internal/message-transaction.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,eAAe,EAAE,EACxB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,GAAE,iBAAsB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAYf"}
1
+ {"version":3,"file":"message-transaction.d.ts","sourceRoot":"","sources":["../../../src/history/internal/message-transaction.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,eAAe,EAAE,EACxB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,GAAE,iBAAsB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.writeMessageChunk = writeMessageChunk;
4
4
  const node_crypto_1 = require("node:crypto");
5
+ const constants_1 = require("../../shared/constants");
5
6
  const retry_1 = require("../../shared/dynamodb/retry");
6
7
  const session_update_1 = require("./session-update");
7
8
  /**
@@ -10,6 +11,10 @@ const session_update_1 = require("./session-update");
10
11
  * call, so `messageCount` can never disagree with the messages that landed. A
11
12
  * single `ClientRequestToken` is reused across retries so a re-sent commit (e.g.
12
13
  * after a lost response) is idempotent and never double-applies the count `ADD`.
14
+ * The transaction always touches the session's shared metadata row, so
15
+ * concurrent appends to the same session contend on it; retries use
16
+ * {@link MESSAGE_APPEND_RETRY_MAX_ATTEMPTS} rather than the default budget so a
17
+ * burst of concurrent callers can drain via backoff instead of erroring.
13
18
  */
14
19
  async function writeMessageChunk(context, items, fields, retry = {}) {
15
20
  const input = {
@@ -20,6 +25,7 @@ async function writeMessageChunk(context, items, fields, retry = {}) {
20
25
  ClientRequestToken: (0, node_crypto_1.randomUUID)(),
21
26
  };
22
27
  await (0, retry_1.withDynamoDBRetry)(() => context.client.transactWrite(input), {
28
+ maxAttempts: constants_1.MESSAGE_APPEND_RETRY_MAX_ATTEMPTS,
23
29
  rng: retry.rng,
24
30
  signal: retry.signal,
25
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"message-transaction.js","sourceRoot":"","sources":["../../../src/history/internal/message-transaction.ts"],"names":[],"mappings":";;AAoBA,8CAiBC;AArCD,6CAAyC;AAEzC,uDAAgE;AAEhE,qDAAoF;AASpF;;;;;;GAMG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,KAAwB,EACxB,MAA2B,EAC3B,QAA2B,EAAE;IAE7B,MAAM,KAAK,GAAG;QACZ,aAAa,EAAE;YACb,IAAA,uCAAsB,EAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;YACjD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;SAChF;QACD,kBAAkB,EAAE,IAAA,wBAAU,GAAE;KACjC,CAAC;IACF,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QACjE,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"message-transaction.js","sourceRoot":"","sources":["../../../src/history/internal/message-transaction.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAEzC,sDAA2E;AAC3E,uDAAgE;AAEhE,qDAAoF;AASpF;;;;;;;;;;GAUG;AACI,KAAK,4BACV,OAAuB,EACvB,KAAwB,EACxB,MAA2B,EAC3B,KAAK,GAAsB,EAAE;IAE7B,MAAM,KAAK,GAAG;QACZ,aAAa,EAAE;YACb,IAAA,uCAAsB,EAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;YACjD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;SAChF;QACD,kBAAkB,EAAE,IAAA,wBAAU,GAAE;KACjC,CAAC;IACF,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QACjE,WAAW,EAAE,6CAAiC;QAC9C,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/history/internal/query.ts"],"names":[],"mappings":";;AAKA,8CAOC;AAGD,oCAWC;AAxBD,iCAAgE;AAEhE,uFAAuF;AACvF,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;IACpE,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,sBAAsB,EAAE,WAAW;QACnC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QACzC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC,EAAE;KAClE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAgB,YAAY,CAAC,SAAiB,EAAE,SAAiB;IAC/D,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,sBAAsB,EAAE,sCAAsC;QAC9D,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QACtD,yBAAyB,EAAE;YACzB,KAAK,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC;YAClC,MAAM,EAAE,IAAA,2BAAoB,GAAE;SAC/B;QACD,gBAAgB,EAAE,IAAI;KACvB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/history/internal/query.ts"],"names":[],"mappings":";;;;AAEA,iCAAgE;AAEhE,uFAAuF;AACvF,2BAAkC,SAAiB,EAAE,SAAiB;IACpE,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,sBAAsB,EAAE,WAAW;QACnC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QACzC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC,EAAE;KAClE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sBAA6B,SAAiB,EAAE,SAAiB;IAC/D,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,sBAAsB,EAAE,sCAAsC;QAC9D,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QACtD,yBAAyB,EAAE;YACzB,KAAK,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC;YAClC,MAAM,EAAE,IAAA,2BAAoB,GAAE;SAC/B;QACD,gBAAgB,EAAE,IAAI;KACvB,CAAC;AACJ,CAAC"}
@@ -8,13 +8,18 @@ export interface SessionUpdateFields {
8
8
  now: string;
9
9
  title?: string;
10
10
  ttlTimestamp?: number;
11
+ forceTtlRefresh?: boolean;
11
12
  }
12
13
  /**
13
14
  * Build the metadata `Update` transact-item: `ADD` the message count and `SET`
14
15
  * `updatedAt` every time, while `createdAt`, `sessionId`, `title`, and the `ttl`
15
16
  * anchor are written once via `if_not_exists`. Folding the `ttl` anchor in here
16
17
  * means the first append fixes one shared expiry atomically with the count, with
17
- * no separate pre-write that could orphan a metadata-only row.
18
+ * no separate pre-write that could orphan a metadata-only row. When
19
+ * `forceTtlRefresh` is set (because {@link resolveTtlAnchor} found the persisted
20
+ * anchor missing or already expired), the `ttl` clause instead does a plain
21
+ * `SET`, so the SESSION row's own stale attribute actually heals instead of
22
+ * being permanently blocked by `if_not_exists`.
18
23
  */
19
24
  export declare function buildSessionUpdateItem(tableName: string, fields: SessionUpdateFields): HistoryTransactItem;
20
25
  //# sourceMappingURL=session-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-update.d.ts","sourceRoot":"","sources":["../../../src/history/internal/session-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAI7F,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAElG,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,CAiCrB"}
1
+ {"version":3,"file":"session-update.d.ts","sourceRoot":"","sources":["../../../src/history/internal/session-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAI7F,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAElG,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,CAiCrB"}
@@ -7,7 +7,11 @@ const keys_1 = require("./keys");
7
7
  * `updatedAt` every time, while `createdAt`, `sessionId`, `title`, and the `ttl`
8
8
  * anchor are written once via `if_not_exists`. Folding the `ttl` anchor in here
9
9
  * means the first append fixes one shared expiry atomically with the count, with
10
- * no separate pre-write that could orphan a metadata-only row.
10
+ * no separate pre-write that could orphan a metadata-only row. When
11
+ * `forceTtlRefresh` is set (because {@link resolveTtlAnchor} found the persisted
12
+ * anchor missing or already expired), the `ttl` clause instead does a plain
13
+ * `SET`, so the SESSION row's own stale attribute actually heals instead of
14
+ * being permanently blocked by `if_not_exists`.
11
15
  */
12
16
  function buildSessionUpdateItem(tableName, fields) {
13
17
  const names = {
@@ -31,7 +35,7 @@ function buildSessionUpdateItem(tableName, fields) {
31
35
  if (fields.ttlTimestamp !== undefined) {
32
36
  names['#ttl'] = 'ttl';
33
37
  values[':ttl'] = fields.ttlTimestamp;
34
- sets.push('#ttl = if_not_exists(#ttl, :ttl)');
38
+ sets.push(fields.forceTtlRefresh ? '#ttl = :ttl' : '#ttl = if_not_exists(#ttl, :ttl)');
35
39
  }
36
40
  return {
37
41
  Update: {
@@ -1 +1 @@
1
- {"version":3,"file":"session-update.js","sourceRoot":"","sources":["../../../src/history/internal/session-update.ts"],"names":[],"mappings":";;AAuBA,wDAoCC;AAzDD,iCAA4D;AAc5D;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,SAAiB,EACjB,MAA2B;IAE3B,MAAM,KAAK,GAA2B;QACpC,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,WAAW;KACpB,CAAC;IACF,MAAM,MAAM,GAAyC;QACnD,IAAI,EAAE,MAAM,CAAC,KAAK;QAClB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM,CAAC,SAAS;KACzB,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,4BAA4B,EAAE,kCAAkC,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO;QACL,MAAM,EAAE;YACN,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE,EAAE,EAAE,EAAE,IAAA,uBAAgB,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,uBAAgB,EAAE;YACrE,gBAAgB,EAAE,qBAAqB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxD,wBAAwB,EAAE,KAAK;YAC/B,yBAAyB,EAAE,MAAM;SAClC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"session-update.js","sourceRoot":"","sources":["../../../src/history/internal/session-update.ts"],"names":[],"mappings":";;;AAEA,iCAA4D;AAe5D;;;;;;;;;;GAUG;AACH,gCACE,SAAiB,EACjB,MAA2B;IAE3B,MAAM,KAAK,GAA2B;QACpC,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,WAAW;KACpB,CAAC;IACF,MAAM,MAAM,GAAyC;QACnD,IAAI,EAAE,MAAM,CAAC,KAAK;QAClB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM,CAAC,SAAS;KACzB,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,4BAA4B,EAAE,kCAAkC,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO;QACL,MAAM,EAAE;YACN,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE,EAAE,EAAE,EAAE,IAAA,uBAAgB,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,uBAAgB,EAAE;YACrE,gBAAgB,EAAE,qBAAqB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxD,wBAAwB,EAAE,KAAK;YAC/B,yBAAyB,EAAE,MAAM;SAClC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/history/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,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,6BAA6B,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAElE,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,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,IAAI,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,OAAO,EAAE,iCAAiC,GAAG,YAAY,CAgBrF"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/history/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,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,6BAA6B,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAElE,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,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,IAAI,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,OAAO,EAAE,iCAAiC,GAAG,YAAY,CAsBrF"}
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setUpHistory = setUpHistory;
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");
7
+ const constants_1 = require("../../shared/constants");
6
8
  const client_1 = require("../../shared/dynamodb/client");
7
9
  const logger_1 = require("../../shared/logging/logger");
8
10
  const ulid_1 = require("../../shared/ulid");
@@ -15,7 +17,12 @@ function setUpHistory(options) {
15
17
  tableName: options.tableName,
16
18
  serde: options.serde ?? json_serde_1.JSON_SERDE,
17
19
  compression: options.compression,
18
- offloader: options.s3 ? new offloader_1.S3Offloader(options.s3) : undefined,
20
+ offloader: options.s3
21
+ ? new offloader_1.S3Offloader({
22
+ ...options.s3,
23
+ keyPrefix: options.s3.keyPrefix ?? (0, config_1.defaultAdapterKeyPrefix)(constants_1.DEFAULT_S3_KEY_PREFIX, 'history'),
24
+ })
25
+ : undefined,
19
26
  ttl: options.ttl,
20
27
  logger: (0, logger_1.resolveLogger)(options.logger),
21
28
  ulid: (0, ulid_1.createUlidFactory)(),
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/history/internal/setup.ts"],"names":[],"mappings":";;AAiCA,oCAgBC;AA5CD,8DAA2D;AAC3D,+DAA8D;AAC9D,yDAAqE;AACrE,wDAAyE;AACzE,4CAAsD;AAuBtD,gFAAgF;AAChF,SAAgB,YAAY,CAAC,OAA0C;IACrE,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,IAAI,EAAE,IAAA,wBAAiB,GAAE;SAC1B;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/history/internal/setup.ts"],"names":[],"mappings":";;;AAKA,8DAA2D;AAC3D,yDAAuE;AACvE,+DAA8D;AAC9D,sDAA+D;AAC/D,yDAAqE;AACrE,wDAAyE;AACzE,4CAAsD;AAuBtD,gFAAgF;AAChF,sBAA6B,OAA0C;IACrE,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,SAAS,CAAC;iBACpF,CAAC;gBACJ,CAAC,CAAC,SAAS;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,IAAA,sBAAa,EAAC,OAAO,CAAC,MAAM,CAAC;YACrC,IAAI,EAAE,IAAA,wBAAiB,GAAE;SAC1B;QACD,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"title-generator.js","sourceRoot":"","sources":["../../../src/history/internal/title-generator.ts"],"names":[],"mappings":";;AAQA,kCAKC;AAXD,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;GAGG;AACH,SAAgB,WAAW,CAAC,QAAyB;IACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;IACzC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,OAAO,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAChG,CAAC"}
1
+ {"version":3,"file":"title-generator.js","sourceRoot":"","sources":["../../../src/history/internal/title-generator.ts"],"names":[],"mappings":";;;AAEA,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;GAGG;AACH,qBAA4B,QAAyB;IACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;IACzC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,OAAO,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAChG,CAAC"}
@@ -1,12 +1,25 @@
1
1
  import type { HistoryContext } from './setup';
2
+ /** The resolved ttl anchor plus whether the persisted SESSION-row value must be force-refreshed. */
3
+ export interface TtlAnchorResult {
4
+ ttlTimestamp: number;
5
+ refresh: boolean;
6
+ }
2
7
  /**
3
8
  * Resolve the session's creation-anchored TTL: the value already stored on the
4
- * SESSION item if one exists, otherwise the supplied `candidate`. This is a
5
- * strongly-consistent read, never a write, so it cannot leave a metadata-only
6
- * orphan row when the following append transaction fails. The append transaction
7
- * itself sets the anchor via `if_not_exists`, so concurrent first appends still
8
- * converge on a single shared expiry, and every later append reuses it — giving
9
- * all message items in a session one uniform expiry.
9
+ * SESSION item, if one exists AND is still in the future; otherwise the
10
+ * supplied `candidate`, with `refresh: true` so the caller force-overwrites
11
+ * the stale/missing persisted anchor instead of leaving it stuck (DynamoDB's
12
+ * `if_not_exists` would otherwise never correct an already-expired anchor).
13
+ * This is a strongly-consistent read, never a write, so it cannot leave a
14
+ * metadata-only orphan row when the following append transaction fails.
15
+ *
16
+ * When a stale anchor is healed, only the persisted SESSION row's `ttl` is
17
+ * force-refreshed — the message rows already written under the expired
18
+ * anchor keep their own (already-expired) `ttl` and get swept independently
19
+ * by DynamoDB's TTL sweep. Until that sweep runs (and until
20
+ * `reconcileMessageCount` repairs the count), `messageCount` can therefore be
21
+ * temporarily overstated relative to what `getMessages` actually returns.
22
+ * This is expected, not a bug.
10
23
  */
11
- export declare function resolveTtlAnchor(context: HistoryContext, sessionId: string, candidate: number): Promise<number>;
24
+ export declare function resolveTtlAnchor(context: HistoryContext, sessionId: string, candidate: number): Promise<TtlAnchorResult>;
12
25
  //# sourceMappingURL=ttl-anchor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ttl-anchor.d.ts","sourceRoot":"","sources":["../../../src/history/internal/ttl-anchor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAYjB"}
1
+ {"version":3,"file":"ttl-anchor.d.ts","sourceRoot":"","sources":["../../../src/history/internal/ttl-anchor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAgB1B"}
@@ -5,12 +5,20 @@ const retry_1 = require("../../shared/dynamodb/retry");
5
5
  const keys_1 = require("./keys");
6
6
  /**
7
7
  * Resolve the session's creation-anchored TTL: the value already stored on the
8
- * SESSION item if one exists, otherwise the supplied `candidate`. This is a
9
- * strongly-consistent read, never a write, so it cannot leave a metadata-only
10
- * orphan row when the following append transaction fails. The append transaction
11
- * itself sets the anchor via `if_not_exists`, so concurrent first appends still
12
- * converge on a single shared expiry, and every later append reuses it — giving
13
- * all message items in a session one uniform expiry.
8
+ * SESSION item, if one exists AND is still in the future; otherwise the
9
+ * supplied `candidate`, with `refresh: true` so the caller force-overwrites
10
+ * the stale/missing persisted anchor instead of leaving it stuck (DynamoDB's
11
+ * `if_not_exists` would otherwise never correct an already-expired anchor).
12
+ * This is a strongly-consistent read, never a write, so it cannot leave a
13
+ * metadata-only orphan row when the following append transaction fails.
14
+ *
15
+ * When a stale anchor is healed, only the persisted SESSION row's `ttl` is
16
+ * force-refreshed — the message rows already written under the expired
17
+ * anchor keep their own (already-expired) `ttl` and get swept independently
18
+ * by DynamoDB's TTL sweep. Until that sweep runs (and until
19
+ * `reconcileMessageCount` repairs the count), `messageCount` can therefore be
20
+ * temporarily overstated relative to what `getMessages` actually returns.
21
+ * This is expected, not a bug.
14
22
  */
15
23
  async function resolveTtlAnchor(context, sessionId, candidate) {
16
24
  const result = await (0, retry_1.withDynamoDBRetry)(() => context.client.get({
@@ -21,6 +29,10 @@ async function resolveTtlAnchor(context, sessionId, candidate) {
21
29
  ExpressionAttributeNames: { '#ttl': 'ttl' },
22
30
  }));
23
31
  const ttl = result.Item?.ttl;
24
- return typeof ttl === 'number' ? ttl : candidate;
32
+ const nowSeconds = Math.floor(Date.now() / 1000);
33
+ if (typeof ttl === 'number' && ttl > nowSeconds) {
34
+ return { ttlTimestamp: ttl, refresh: false };
35
+ }
36
+ return { ttlTimestamp: candidate, refresh: true };
25
37
  }
26
38
  //# sourceMappingURL=ttl-anchor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ttl-anchor.js","sourceRoot":"","sources":["../../../src/history/internal/ttl-anchor.ts"],"names":[],"mappings":";;AAaA,4CAgBC;AA7BD,uDAAgE;AAChE,iCAA4D;AAG5D;;;;;;;;GAQG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,EAAE,EAAE,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC,EAAE,EAAE,EAAE,uBAAgB,EAAE;QAC9D,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,MAAM;QAC5B,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;KAC5C,CAAC,CACH,CAAC;IACF,MAAM,GAAG,GAAI,MAAM,CAAC,IAAqC,EAAE,GAAG,CAAC;IAC/D,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"ttl-anchor.js","sourceRoot":"","sources":["../../../src/history/internal/ttl-anchor.ts"],"names":[],"mappings":";;;AAAA,uDAAgE;AAChE,iCAA4D;AAS5D;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,2BACV,OAAuB,EACvB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAC1C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,EAAE,EAAE,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC,EAAE,EAAE,EAAE,uBAAgB,EAAE;QAC9D,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,MAAM;QAC5B,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;KAC5C,CAAC,CACH,CAAC;IACF,MAAM,GAAG,GAAI,MAAM,CAAC,IAAqC,EAAE,GAAG,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;QAChD,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-adapter.d.ts","sourceRoot":"","sources":["../../src/history/session-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,0BAA0B;IAI7E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,YAAY,WAAkD;gBAG3C,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM;IAKpC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIrC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
1
+ {"version":3,"file":"session-adapter.d.ts","sourceRoot":"","sources":["../../src/history/session-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,0BAA0B;IAI7E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,YAAY,WAAkD;IAE9D,YACmB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EAGnC;IAED,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAEpC;IAED,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9C;IAED,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAElD;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-adapter.js","sourceRoot":"","sources":["../../src/history/session-adapter.ts"],"names":[],"mappings":";;;AAAA,+DAA0E;AAU1E;;;GAGG;AACH,MAAa,iCAAkC,SAAQ,yCAA0B;IAI5D;IACA;IAJnB,YAAY,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE9D,YACmB,OAAuB,EACvB,SAAiB;QAElC,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAAgB;QACvB,cAAS,GAAT,SAAS,CAAQ;IAGpC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,UAAU,CAAC,OAAoB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,QAAuB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACF;AAzBD,8EAyBC"}
1
+ {"version":3,"file":"session-adapter.js","sourceRoot":"","sources":["../../src/history/session-adapter.ts"],"names":[],"mappings":";;;AAAA,+DAA0E;AAU1E;;;GAGG;AACH,uCAA+C,SAAQ,yCAA0B;IAI5D,OAAO;IACP,SAAS;IAJ5B,YAAY,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE9D,YACmB,OAAuB,EACvB,SAAiB;QAElC,KAAK,EAAE,CAAC;uBAHS,OAAO;yBACP,SAAS;IAG5B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,UAAU,CAAC,OAAoB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,QAAuB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export type { CreateAllOptions, CreatedAdapters, FactoryBaseOptions } from './fa
12
12
  export { DynamoDbLangGraphError } from './shared/errors/base-error';
13
13
  export type { ErrorContext } from './shared/errors/base-error';
14
14
  export { ErrorCode } from './shared/errors/error-code';
15
- export { AbortError, BatchWriteIncompleteError, CompensationFailedError, ConflictError, ResultTruncatedError, RetryExhaustedError, ValidationError, } from './shared/errors/errors';
15
+ export { AbortError, BatchWriteAllIncompleteError, BatchWriteIncompleteError, CompensationFailedError, ConflictError, ResultTruncatedError, RetryExhaustedError, ValidationError, } from './shared/errors/errors';
16
16
  export type { Logger, LogArgument } from './shared/logging/logger';
17
17
  export { redactLogger, redactSecrets } from './shared/logging/redaction';
18
18
  export type { BaseAdapterOptions, CodecOptions } from './shared/options';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,YAAY,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,UAAU,EACV,yBAAyB,EACzB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEzE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,YAAY,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,UAAU,EACV,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEzE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.redactSecrets = exports.redactLogger = exports.ValidationError = exports.RetryExhaustedError = exports.ResultTruncatedError = exports.ConflictError = exports.CompensationFailedError = exports.BatchWriteIncompleteError = exports.AbortError = exports.ErrorCode = exports.DynamoDbLangGraphError = exports.DynamoDBFactory = exports.DynamoDBSessionChatMessageHistory = exports.DynamoDBChatMessageHistory = exports.DynamoDBStore = exports.DynamoDBSaver = void 0;
3
+ exports.redactSecrets = exports.redactLogger = exports.ValidationError = exports.RetryExhaustedError = exports.ResultTruncatedError = exports.ConflictError = exports.CompensationFailedError = exports.BatchWriteIncompleteError = exports.BatchWriteAllIncompleteError = exports.AbortError = exports.ErrorCode = exports.DynamoDbLangGraphError = exports.DynamoDBFactory = exports.DynamoDBSessionChatMessageHistory = exports.DynamoDBChatMessageHistory = exports.DynamoDBStore = exports.DynamoDBSaver = void 0;
4
4
  var saver_1 = require("./checkpointer/saver");
5
5
  Object.defineProperty(exports, "DynamoDBSaver", { enumerable: true, get: function () { return saver_1.DynamoDBSaver; } });
6
6
  var store_1 = require("./store/store");
@@ -17,6 +17,7 @@ var error_code_1 = require("./shared/errors/error-code");
17
17
  Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return error_code_1.ErrorCode; } });
18
18
  var errors_1 = require("./shared/errors/errors");
19
19
  Object.defineProperty(exports, "AbortError", { enumerable: true, get: function () { return errors_1.AbortError; } });
20
+ Object.defineProperty(exports, "BatchWriteAllIncompleteError", { enumerable: true, get: function () { return errors_1.BatchWriteAllIncompleteError; } });
20
21
  Object.defineProperty(exports, "BatchWriteIncompleteError", { enumerable: true, get: function () { return errors_1.BatchWriteIncompleteError; } });
21
22
  Object.defineProperty(exports, "CompensationFailedError", { enumerable: true, get: function () { return errors_1.CompensationFailedError; } });
22
23
  Object.defineProperty(exports, "ConflictError", { enumerable: true, get: function () { return errors_1.ConflictError; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8CAAqD;AAA5C,sGAAA,aAAa,OAAA;AAEtB,uCAA8C;AAArC,sGAAA,aAAa,OAAA;AAItB,uEAA4E;AAAnE,kIAAA,0BAA0B,OAAA;AACnC,6DAA8E;AAArE,oIAAA,iCAAiC,OAAA;AAE1C,6CAAoD;AAA3C,0GAAA,eAAe,OAAA;AAGxB,yDAAoE;AAA3D,oHAAA,sBAAsB,OAAA;AAE/B,yDAAuD;AAA9C,uGAAA,SAAS,OAAA;AAClB,iDAQgC;AAP9B,oGAAA,UAAU,OAAA;AACV,mHAAA,yBAAyB,OAAA;AACzB,iHAAA,uBAAuB,OAAA;AACvB,uGAAA,aAAa,OAAA;AACb,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AAIjB,wDAAyE;AAAhE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8CAAqD;AAA5C,sGAAA,aAAa,OAAA;AAEtB,uCAA8C;AAArC,sGAAA,aAAa,OAAA;AAItB,uEAA4E;AAAnE,kIAAA,0BAA0B,OAAA;AACnC,6DAA8E;AAArE,oIAAA,iCAAiC,OAAA;AAE1C,6CAAoD;AAA3C,0GAAA,eAAe,OAAA;AAGxB,yDAAoE;AAA3D,oHAAA,sBAAsB,OAAA;AAE/B,yDAAuD;AAA9C,uGAAA,SAAS,OAAA;AAClB,iDASgC;AAR9B,oGAAA,UAAU,OAAA;AACV,sHAAA,4BAA4B,OAAA;AAC5B,mHAAA,yBAAyB,OAAA;AACzB,iHAAA,uBAAuB,OAAA;AACvB,uGAAA,aAAa,OAAA;AACb,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AAIjB,wDAAyE;AAAhE,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/shared/clock.ts"],"names":[],"mappings":";;AACA,wBAEC;AAHD,mFAAmF;AACnF,SAAgB,MAAM;IACpB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/shared/clock.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF;IACE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/shared/codec/codec.ts"],"names":[],"mappings":";;;AAsDA,sCAeC;AAGD,sCAWC;AAjFD,+CAA2F;AAG3F,sCAAsC;AACtC,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,4BAAS,CAAA;AACX,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AAiCD,SAAS,gBAAgB,CAAC,IAAe;IACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,aAAa,CACjC,KAAQ,EACR,IAAe,EACf,OAAsB;IAEtB,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAsB,IAAI,CAAC,WAAW;QAC/D,CAAC,CAAC,MAAM,IAAA,sBAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC5E,CAAC;AAED,4EAA4E;AACrE,KAAK,UAAU,aAAa,CAAI,UAA6B,EAAE,IAAe;IACnF,MAAM,GAAG,GACP,UAAU,CAAC,QAAQ,KAAK,eAAe,CAAC,EAAE;QACxC,CAAC,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QACzD,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAU,EAC5B,GAAG,EACH,UAAU,CAAC,UAAU,EACrB,IAAI,CAAC,WAAW,EAAE,oBAAoB,CACvC,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/shared/codec/codec.ts"],"names":[],"mappings":";;;;;AAEA,+CAA2F;AAG3F,sCAAsC;AACtC,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,4BAAS,CAAA;AACX,CAAC,EAHW,eAAe,aAAf,eAAe,GAAf,eAAe,QAG1B;AAiCD,SAAS,gBAAgB,CAAC,IAAe;IACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACI,KAAK,wBACV,KAAQ,EACR,IAAe,EACf,OAAsB;IAEtB,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAsB,IAAI,CAAC,WAAW;QAC/D,CAAC,CAAC,MAAM,IAAA,sBAAQ,EAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC5E,CAAC;AAED,4EAA4E;AACrE,KAAK,wBAA2B,UAA6B,EAAE,IAAe;IACnF,MAAM,GAAG,GACP,UAAU,CAAC,QAAQ,KAAK,eAAe,CAAC,EAAE;QACxC,CAAC,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QACzD,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAU,EAC5B,GAAG,EACH,UAAU,CAAC,UAAU,EACrB,IAAI,CAAC,WAAW,EAAE,oBAAoB,CACvC,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compression.js","sourceRoot":"","sources":["../../../src/shared/codec/compression.ts"],"names":[],"mappings":";;AAoCA,4BAYC;AAOD,gCAoBC;AA3ED,yCAAsC;AACtC,yCAAyC;AAEzC,4CAIsB;AACtB,qDAA8D;AAC9D,qDAAiD;AAEjD,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,gBAAI,CAAC,CAAC;AAClC,MAAM,WAAW,GAAG,IAAA,qBAAS,EAAC,kBAAM,CAAC,CAAC;AAEtC,kFAAkF;AAClF,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAgBnC;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAC5B,IAAgB,EAChB,MAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,IAAI,yCAA6B,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACxF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,qCAAyB,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,UAAmB,EACnB,WAAmB,0CAA8B;IAEjD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,UAAU,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAA0B,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACxC,MAAM,IAAI,mCAAsB,CAC9B,+CAA+C,QAAQ,QAAQ,EAC/D,sBAAS,CAAC,iBAAiB,EAC3B,EAAE,EACF,KAAc,CACf,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"compression.js","sourceRoot":"","sources":["../../../src/shared/codec/compression.ts"],"names":[],"mappings":";;;;AAAA,yCAAsC;AACtC,yCAAyC;AAEzC,4CAIsB;AACtB,qDAA8D;AAC9D,qDAAiD;AAEjD,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,gBAAI,CAAC,CAAC;AAClC,MAAM,WAAW,GAAG,IAAA,qBAAS,EAAC,kBAAM,CAAC,CAAC;AAEtC,kFAAkF;AAClF,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAgBnC;;;;GAIG;AACI,KAAK,mBACV,IAAgB,EAChB,MAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,IAAI,yCAA6B,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACxF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,qCAAyB,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACI,KAAK,qBACV,IAAgB,EAChB,UAAmB,EACnB,QAAQ,GAAW,0CAA8B;IAEjD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,UAAU,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAA0B,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACxC,MAAM,IAAI,mCAAsB,CAC9B,+CAA+C,QAAQ,QAAQ,EAC/D,sBAAS,CAAC,iBAAiB,EAC3B,EAAE,EACF,KAAc,CACf,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-keys.js","sourceRoot":"","sources":["../../../src/shared/codec/descriptor-keys.ts"],"names":[],"mappings":";;AAGA,sCAMC;AATD,mCAAkE;AAElE,4EAA4E;AAC5E,SAAgB,aAAa,CAAC,WAAyC;IACrE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,QAAQ,KAAK,uBAAe,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"descriptor-keys.js","sourceRoot":"","sources":["../../../src/shared/codec/descriptor-keys.ts"],"names":[],"mappings":";;;AAAA,mCAAkE;AAElE,4EAA4E;AAC5E,uBAA8B,WAAyC;IACrE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,QAAQ,KAAK,uBAAe,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,6 +1,12 @@
1
1
  import type { S3Client, S3ClientConfig } from '@aws-sdk/client-s3';
2
2
  /** Lazily import the optional `@aws-sdk/client-s3` peer, caching the module. */
3
3
  export declare function loadS3Sdk(): Promise<typeof import('@aws-sdk/client-s3')>;
4
- /** Construct an `S3Client` from `config` using the lazily-loaded SDK. */
4
+ /**
5
+ * Construct an `S3Client` from `config` using the lazily-loaded SDK. Defaults
6
+ * `maxAttempts: 1` so the SDK's own internal retries are disabled and this
7
+ * library's retry/backoff/classification system is the sole retry layer,
8
+ * matching {@link resolveDynamoDBClient}'s equivalent default; an explicit
9
+ * `maxAttempts` in `config` still wins.
10
+ */
5
11
  export declare function createDefaultS3Client(config: S3ClientConfig): Promise<S3Client>;
6
12
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/shared/codec/s3/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAInE,gFAAgF;AAChF,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,oBAAoB,CAAC,CAAC,CAK9E;AAED,yEAAyE;AACzE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAGrF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/shared/codec/s3/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAInE,gFAAgF;AAChF,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,oBAAoB,CAAC,CAAC,CAK9E;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAGrF"}
@@ -10,9 +10,15 @@ async function loadS3Sdk() {
10
10
  }
11
11
  return sdkPromise;
12
12
  }
13
- /** Construct an `S3Client` from `config` using the lazily-loaded SDK. */
13
+ /**
14
+ * Construct an `S3Client` from `config` using the lazily-loaded SDK. Defaults
15
+ * `maxAttempts: 1` so the SDK's own internal retries are disabled and this
16
+ * library's retry/backoff/classification system is the sole retry layer,
17
+ * matching {@link resolveDynamoDBClient}'s equivalent default; an explicit
18
+ * `maxAttempts` in `config` still wins.
19
+ */
14
20
  async function createDefaultS3Client(config) {
15
21
  const { S3Client: S3ClientCtor } = await loadS3Sdk();
16
- return new S3ClientCtor(config);
22
+ return new S3ClientCtor({ maxAttempts: 1, ...config });
17
23
  }
18
24
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/client.ts"],"names":[],"mappings":";;AAKA,8BAKC;AAGD,sDAGC;AAdD,IAAI,UAAoE,CAAC;AAEzE,gFAAgF;AACzE,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,yEAAyE;AAClE,KAAK,UAAU,qBAAqB,CAAC,MAAsB;IAChE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IACrD,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/client.ts"],"names":[],"mappings":";;;;AAEA,IAAI,UAAoE,CAAC;AAEzE,gFAAgF;AACzE,KAAK;IACV,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACI,KAAK,gCAAgC,MAAsB;IAChE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IACrD,OAAO,IAAI,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -9,8 +9,16 @@ export interface S3OffloadConfig {
9
9
  clientConfig?: S3ClientConfig;
10
10
  createS3Client?: (config: S3ClientConfig) => S3Client;
11
11
  }
12
- /** Build a fully-qualified S3 key: `${prefix}${parts.join('/')}.bin`. */
12
+ /**
13
+ * Build a fully-qualified S3 key: `${prefix}${parts, each base64url-encoded,
14
+ * joined with '/'}.bin`. Encoding (not rejecting) is what makes two distinct
15
+ * `parts` arrays never collide, since a namespace element or key is allowed
16
+ * to contain '/' (only the DynamoDB '#' separator is forbidden at the
17
+ * validation layer) and base64url's output alphabet never contains '/'.
18
+ */
13
19
  export declare function buildS3Key(prefix: string, parts: readonly string[]): string;
14
20
  /** Build a deterministic, TTL-independent lifecycle rule id from the prefix. */
15
21
  export declare function buildLifecycleRuleId(prefix: string): string;
22
+ /** An adapter's default S3 key prefix: the shared base plus its own segment. */
23
+ export declare function defaultAdapterKeyPrefix(base: string, adapter: string): string;
16
24
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/shared/codec/s3/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEnE,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,QAAQ,CAAC;CACvD;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE3E;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/shared/codec/s3/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEnE,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,QAAQ,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAG3E;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7E"}
@@ -2,13 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildS3Key = buildS3Key;
4
4
  exports.buildLifecycleRuleId = buildLifecycleRuleId;
5
- /** Build a fully-qualified S3 key: `${prefix}${parts.join('/')}.bin`. */
5
+ exports.defaultAdapterKeyPrefix = defaultAdapterKeyPrefix;
6
+ /**
7
+ * Build a fully-qualified S3 key: `${prefix}${parts, each base64url-encoded,
8
+ * joined with '/'}.bin`. Encoding (not rejecting) is what makes two distinct
9
+ * `parts` arrays never collide, since a namespace element or key is allowed
10
+ * to contain '/' (only the DynamoDB '#' separator is forbidden at the
11
+ * validation layer) and base64url's output alphabet never contains '/'.
12
+ */
6
13
  function buildS3Key(prefix, parts) {
7
- return `${prefix}${parts.join('/')}.bin`;
14
+ const encoded = parts.map((part) => Buffer.from(part, 'utf8').toString('base64url'));
15
+ return `${prefix}${encoded.join('/')}.bin`;
8
16
  }
9
17
  /** Build a deterministic, TTL-independent lifecycle rule id from the prefix. */
10
18
  function buildLifecycleRuleId(prefix) {
11
19
  const slug = prefix.replace(/\/+$/, '').replace(/[^a-zA-Z0-9-]/g, '-') || 'default';
12
20
  return `langgraph-ttl-${slug}`;
13
21
  }
22
+ /** An adapter's default S3 key prefix: the shared base plus its own segment. */
23
+ function defaultAdapterKeyPrefix(base, adapter) {
24
+ return `${base}${adapter}/`;
25
+ }
14
26
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/config.ts"],"names":[],"mappings":";;AAcA,gCAEC;AAGD,oDAGC;AATD,yEAAyE;AACzE,SAAgB,UAAU,CAAC,MAAc,EAAE,KAAwB;IACjE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED,gFAAgF;AAChF,SAAgB,oBAAoB,CAAC,MAAc;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;IACpF,OAAO,iBAAiB,IAAI,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/config.ts"],"names":[],"mappings":";;;;;AAaA;;;;;;GAMG;AACH,oBAA2B,MAAc,EAAE,KAAwB;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,gFAAgF;AAChF,8BAAqC,MAAc;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;IACpF,OAAO,iBAAiB,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,gFAAgF;AAChF,iCAAwC,IAAY,EAAE,OAAe;IACnE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,CAAC;AAC9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/delete.ts"],"names":[],"mappings":";;AAUA,sCAqBC;AA7BD,+CAAsD;AACtD,qCAAqC;AAErC;;;;GAIG;AACI,KAAK,UAAU,aAAa,CACjC,MAAgB,EAChB,MAAc,EACd,IAAc;IAEd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IACnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,+BAAmB,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,+BAAmB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,oBAAoB,CAAC;YACvB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SACrE,CAAC,CACH,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/delete.ts"],"names":[],"mappings":";;;AAEA,+CAAsD;AACtD,qCAAqC;AAErC;;;;GAIG;AACI,KAAK,wBACV,MAAgB,EAChB,MAAc,EACd,IAAc;IAEd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IACnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,+BAAmB,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,+BAAmB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,oBAAoB,CAAC;YACvB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SACrE,CAAC,CACH,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/lifecycle.ts"],"names":[],"mappings":";;AA2BA,kDA0BC;AAnDD,qCAAqC;AACrC,qCAAgD;AAEhD,KAAK,UAAU,SAAS,CAAC,MAAgB,EAAE,MAAc;IACvD,MAAM,EAAE,sCAAsC,EAAE,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,sCAAsC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAC/D,CAAC;QACF,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA2B,CAAC,IAAI,KAAK,8BAA8B;YAAE,OAAO,EAAE,CAAC;QACpF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAA+B,EAAE,OAAe;IACtE,OAAO,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAgB,EAChB,MAAc,EACd,MAAc,EACd,OAAe;IAEf,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC1D,IAAI,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAE,OAAO;IAC9C,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,MAAM;QACV,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC9B,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,MAAM,EAAE,sCAAsC,EAAE,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IACrE,MAAM,MAAM,CAAC,IAAI,CACf,IAAI,sCAAsC,CAAC;QACzC,MAAM,EAAE,MAAM;QACd,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;KAC1C,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/lifecycle.ts"],"names":[],"mappings":";;;AAEA,qCAAqC;AACrC,qCAAgD;AAEhD,KAAK,UAAU,SAAS,CAAC,MAAgB,EAAE,MAAc;IACvD,MAAM,EAAE,sCAAsC,EAAE,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,sCAAsC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAC/D,CAAC;QACF,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA2B,CAAC,IAAI,KAAK,8BAA8B;YAAE,OAAO,EAAE,CAAC;QACpF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAA+B,EAAE,OAAe;IACtE,OAAO,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACI,KAAK,8BACV,MAAgB,EAChB,MAAc,EACd,MAAc,EACd,OAAe;IAEf,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC1D,IAAI,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAE,OAAO;IAC9C,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,MAAM;QACV,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1B,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC9B,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,MAAM,EAAE,sCAAsC,EAAE,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IACrE,MAAM,MAAM,CAAC,IAAI,CACf,IAAI,sCAAsC,CAAC;QACzC,MAAM,EAAE,MAAM;QACd,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;KAC1C,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -4,7 +4,8 @@ import { S3OffloadConfig } from './config';
4
4
  * S3 client and delegates all real work; every method is a small delegation.
5
5
  */
6
6
  export declare class S3Offloader {
7
- private client;
7
+ private clientPromise;
8
+ private resolvedClient;
8
9
  private readonly bucketName;
9
10
  private readonly keyPrefix;
10
11
  private readonly thresholdBytes;
@@ -1 +1 @@
1
- {"version":3,"file":"offloader.d.ts","sourceRoot":"","sources":["../../../../src/shared/codec/s3/offloader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,eAAe,EAAE,MAAM,UAAU,CAAC;AAKvD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,eAAe;YASrB,SAAS;IAUvB,8DAA8D;IAC9D,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAIxC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM;IAI1C,iCAAiC;IACjC,YAAY,IAAI,MAAM;IAItB,oDAAoD;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAW5D,6CAA6C;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhD,+DAA+D;IACzD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpD,iFAAiF;IAC3E,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,4DAA4D;IAC5D,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"offloader.d.ts","sourceRoot":"","sources":["../../../../src/shared/codec/s3/offloader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,eAAe,EAAE,MAAM,UAAU,CAAC;AAKvD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,YAAY,MAAM,EAAE,eAAe,EAOlC;IAED,OAAO,CAAC,SAAS;IAqBjB,8DAA8D;IAC9D,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEvC;IAED,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEzC;IAED,iCAAiC;IACjC,YAAY,IAAI,MAAM,CAErB;IAED,oDAAoD;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAS3D;IAED,6CAA6C;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE/C;IAED,+DAA+D;IACzD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnD;IAED,iFAAiF;IAC3E,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;IAED,4DAA4D;IAC5D,OAAO,IAAI,IAAI,CAEd;CACF"}
@@ -12,7 +12,8 @@ const read_write_1 = require("./read-write");
12
12
  * S3 client and delegates all real work; every method is a small delegation.
13
13
  */
14
14
  class S3Offloader {
15
- client;
15
+ clientPromise;
16
+ resolvedClient;
16
17
  bucketName;
17
18
  keyPrefix;
18
19
  thresholdBytes;
@@ -27,14 +28,20 @@ class S3Offloader {
27
28
  this.sse = config.serverSideEncryption ?? constants_1.DEFAULT_S3_SSE;
28
29
  this.sseKmsKeyId = config.sseKmsKeyId;
29
30
  }
30
- async getClient() {
31
- if (!this.client) {
31
+ getClient() {
32
+ if (!this.clientPromise) {
32
33
  const cfg = this.config.clientConfig ?? {};
33
- this.client = this.config.createS3Client
34
- ? this.config.createS3Client(cfg)
35
- : await (0, client_1.createDefaultS3Client)(cfg);
34
+ this.clientPromise = (this.config.createS3Client
35
+ ? Promise.resolve(this.config.createS3Client(cfg))
36
+ : (0, client_1.createDefaultS3Client)(cfg)).then((client) => {
37
+ this.resolvedClient = client;
38
+ return client;
39
+ }, (error) => {
40
+ this.clientPromise = undefined;
41
+ throw error;
42
+ });
36
43
  }
37
- return this.client;
44
+ return this.clientPromise;
38
45
  }
39
46
  /** True when `data` is large enough to warrant S3 offload. */
40
47
  shouldOffload(data) {
@@ -73,7 +80,7 @@ class S3Offloader {
73
80
  }
74
81
  /** Release the underlying S3 client, if one was created. */
75
82
  destroy() {
76
- this.client?.destroy();
83
+ this.resolvedClient?.destroy();
77
84
  }
78
85
  }
79
86
  exports.S3Offloader = S3Offloader;
@@ -1 +1 @@
1
- {"version":3,"file":"offloader.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/offloader.ts"],"names":[],"mappings":";;;AAEA,+CAAoG;AACpG,qCAAiD;AACjD,qCAAuD;AACvD,qCAAyC;AACzC,2CAAkD;AAClD,6CAA4D;AAE5D;;;GAGG;AACH,MAAa,WAAW;IACd,MAAM,CAAuB;IACpB,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,cAAc,CAAS;IACvB,GAAG,CAAS;IACZ,WAAW,CAAU;IACrB,MAAM,CAAkB;IAEzC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,iCAAqB,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,sCAA0B,CAAC;QAC1E,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,oBAAoB,IAAI,0BAAc,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;gBACtC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBACjC,CAAC,CAAC,MAAM,IAAA,8BAAqB,EAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,8DAA8D;IAC9D,aAAa,CAAC,IAAgB;QAC5B,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,gDAAgD;IAChD,QAAQ,CAAC,KAAwB;QAC/B,OAAO,IAAA,mBAAU,EAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,IAAgB;QACxC,MAAM,IAAA,yBAAY,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE;YACzC,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,GAAG;YACH,IAAI;YACJ,oBAAoB,EAAE,IAAI,CAAC,GAAG;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,2BAAc,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,WAAW,CAAC,IAAc;QAC9B,OAAO,IAAA,sBAAa,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,OAAO,IAAA,+BAAmB,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,4DAA4D;IAC5D,OAAO;QACL,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IACzB,CAAC;CACF;AA1ED,kCA0EC"}
1
+ {"version":3,"file":"offloader.js","sourceRoot":"","sources":["../../../../src/shared/codec/s3/offloader.ts"],"names":[],"mappings":";;;AAEA,+CAAoG;AACpG,qCAAiD;AACjD,qCAAuD;AACvD,qCAAyC;AACzC,2CAAkD;AAClD,6CAA4D;AAE5D;;;GAGG;AACH;IACU,aAAa,CAAgC;IAC7C,cAAc,CAAuB;IAC5B,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,cAAc,CAAS;IACvB,GAAG,CAAS;IACZ,WAAW,CAAU;IACrB,MAAM,CAAkB;IAEzC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,iCAAqB,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,sCAA0B,CAAC;QAC1E,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,oBAAoB,IAAI,0BAAc,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,GAAG,CACnB,IAAI,CAAC,MAAM,CAAC,cAAc;gBACxB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAClD,CAAC,CAAC,IAAA,8BAAqB,EAAC,GAAG,CAAC,CAC/B,CAAC,IAAI,CACJ,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;gBAC7B,OAAO,MAAM,CAAC;YAChB,CAAC,EACD,CAAC,KAAY,EAAE,EAAE;gBACf,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,MAAM,KAAK,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,8DAA8D;IAC9D,aAAa,CAAC,IAAgB;QAC5B,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,gDAAgD;IAChD,QAAQ,CAAC,KAAwB;QAC/B,OAAO,IAAA,mBAAU,EAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,IAAgB;QACxC,MAAM,IAAA,yBAAY,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE;YACzC,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,GAAG;YACH,IAAI;YACJ,oBAAoB,EAAE,IAAI,CAAC,GAAG;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,2BAAc,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,WAAW,CAAC,IAAc;QAC9B,OAAO,IAAA,sBAAa,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,OAAO,IAAA,+BAAmB,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,4DAA4D;IAC5D,OAAO;QACL,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -9,8 +9,10 @@ export interface OrphanCleanupOptions {
9
9
  /**
10
10
  * Best-effort delete of S3 objects orphaned by a failed DynamoDB write. Retries
11
11
  * transient errors with full-jitter backoff; on persistent failure or when S3
12
- * reports keys it could not delete, it logs at `warn` (the lifecycle rule is the
13
- * backstop) and never throws — the sole non-throwing path in the library.
12
+ * reports keys it could not delete, it logs at `warn` and never throws — the
13
+ * sole non-throwing path in the library. There is no automatic backstop: an
14
+ * S3 lifecycle rule sweeps the leftovers only if one was provisioned via
15
+ * `ensureS3LifecycleRule()`, which is opt-in.
14
16
  */
15
17
  export declare function cleanUpS3Orphans(offloader: S3Offloader, keys: ReadonlyArray<string | undefined>, context: string, logger: Logger, options?: OrphanCleanupOptions): Promise<void>;
16
18
  //# sourceMappingURL=orphans.d.ts.map