@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,4 +1,4 @@
1
- import { DynamoDBClient, type DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
1
+ import type { DynamoDBClient, DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
2
2
  import { DynamoDBSaver } from '../checkpointer/saver';
3
3
  import type { DynamoDBSaverOptions } from '../checkpointer/types';
4
4
  import { DynamoDBChatMessageHistory } from '../history/chat-message-history';
@@ -14,9 +14,9 @@ export interface FactoryBaseOptions {
14
14
  }
15
15
  /** Per-adapter options for {@link DynamoDBFactory.createAll} (client is shared). */
16
16
  export interface CreateAllOptions {
17
- saver: Omit<DynamoDBSaverOptions, 'client'>;
18
- store: Omit<DynamoDBStoreOptions, 'client'>;
19
- history: Omit<DynamoDBChatMessageHistoryOptions, 'client'>;
17
+ saver: Omit<DynamoDBSaverOptions, 'client' | 'clientConfig' | 'createClient'>;
18
+ store: Omit<DynamoDBStoreOptions, 'client' | 'clientConfig' | 'createClient'>;
19
+ history: Omit<DynamoDBChatMessageHistoryOptions, 'client' | 'clientConfig' | 'createClient'>;
20
20
  }
21
21
  /** The three adapters sharing one client, plus a combined `destroy`. */
22
22
  export interface CreatedAdapters {
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,EAAE,IAAI,CAAC,iCAAiC,EAAE,QAAQ,CAAC,CAAC;CAC5D;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,kBAAuB;IAE1D,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAIzD,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAIzD,wBAAwB,CAAC,OAAO,EAAE,iCAAiC,GAAG,0BAA0B;IAIhG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe;CAmBtD"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC;IAC9E,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC;IAC9E,OAAO,EAAE,IAAI,CAAC,iCAAiC,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC;CAC9F;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,GAAE,kBAAuB,EAAI;IAE9D,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAExD;IAED,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAExD;IAED,wBAAwB,CAAC,OAAO,EAAE,iCAAiC,GAAG,0BAA0B,CAE/F;IAED,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAiBpD;CACF"}
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DynamoDBFactory = void 0;
4
- const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
- const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
6
4
  const saver_1 = require("../checkpointer/saver");
7
5
  const chat_message_history_1 = require("../history/chat-message-history");
6
+ const client_1 = require("../shared/dynamodb/client");
8
7
  const store_1 = require("../store/store");
9
8
  /**
10
9
  * Convenience constructors for the adapters. Individual `create*` methods each
@@ -26,9 +25,8 @@ class DynamoDBFactory {
26
25
  return new chat_message_history_1.DynamoDBChatMessageHistory({ ...this.base, ...options });
27
26
  }
28
27
  createAll(options) {
29
- const build = this.base.createClient ?? ((config) => new client_dynamodb_1.DynamoDBClient(config));
30
- const ddbClient = build(this.base.clientConfig ?? {});
31
- const client = lib_dynamodb_1.DynamoDBDocument.from(ddbClient);
28
+ const resolved = (0, client_1.resolveDynamoDBClient)(this.base);
29
+ const client = resolved.client;
32
30
  const saver = new saver_1.DynamoDBSaver({ ...this.base, ...options.saver, client });
33
31
  const store = new store_1.DynamoDBStore({ ...this.base, ...options.store, client });
34
32
  const history = new chat_message_history_1.DynamoDBChatMessageHistory({ ...this.base, ...options.history, client });
@@ -40,7 +38,7 @@ class DynamoDBFactory {
40
38
  saver.destroy();
41
39
  store.destroy();
42
40
  history.destroy();
43
- ddbClient.destroy();
41
+ resolved.ddbClient?.destroy();
44
42
  },
45
43
  };
46
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":";;;AAAA,8DAAqF;AACrF,wDAAyD;AAEzD,iDAAsD;AAEtD,0EAA6E;AAG7E,0CAA+C;AAyB/C;;;;GAIG;AACH,MAAa,eAAe;IACG;IAA7B,YAA6B,OAA2B,EAAE;QAA7B,SAAI,GAAJ,IAAI,CAAyB;IAAG,CAAC;IAE9D,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,OAA0C;QACjE,OAAO,IAAI,iDAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,OAAyB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gCAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,+BAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,iDAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO;YACP,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAlCD,0CAkCC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/factory/factory.ts"],"names":[],"mappings":";;;AAEA,iDAAsD;AAEtD,0EAA6E;AAE7E,sDAAkE;AAElE,0CAA+C;AAyB/C;;;;GAIG;AACH;IAC+B,IAAI;IAAjC,YAA6B,IAAI,GAAuB,EAAE;oBAA7B,IAAI;IAA4B,CAAC;IAE9D,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,wBAAwB,CAAC,OAA0C;QACjE,OAAO,IAAI,iDAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,OAAyB;QACjC,MAAM,QAAQ,GAAG,IAAA,8BAAqB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,qBAAa,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,iDAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO;YACP,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YAChC,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"add-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4BxD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAcf"}
1
+ {"version":3,"file":"add-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4BxD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -42,15 +42,16 @@ async function addMessages(context, sessionId, messages) {
42
42
  if (messages.length === 0)
43
43
  return;
44
44
  const stored = (0, messages_1.mapChatMessagesToStoredMessages)(messages);
45
- const ttlTimestamp = context.ttl
45
+ const anchor = context.ttl
46
46
  ? await (0, ttl_anchor_1.resolveTtlAnchor)(context, sessionId, (0, ttl_1.calculateTtlTimestamp)(context.ttl))
47
47
  : undefined;
48
- const items = await buildItems(context, sessionId, stored, ttlTimestamp);
48
+ const items = await buildItems(context, sessionId, stored, anchor?.ttlTimestamp);
49
49
  const chunks = (0, message_chunker_1.chunkBySize)(items, MAX_MESSAGES_PER_TRANSACTION, MAX_TRANSACTION_BYTES);
50
50
  await (0, append_saga_1.appendChunks)(context, sessionId, chunks, {
51
51
  now: (0, clock_1.nowIso)(),
52
52
  title: (0, title_generator_1.deriveTitle)(stored),
53
- ttlTimestamp,
53
+ ttlTimestamp: anchor?.ttlTimestamp,
54
+ forceTtlRefresh: anchor?.refresh,
54
55
  });
55
56
  }
56
57
  //# sourceMappingURL=add-messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-messages.js","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":";;AAoDA,kCAkBC;AAtED,uDAIkC;AAElC,8CAA4C;AAC5C,mEAA4E;AAC5E,qDAAoE;AACpE,yDAAuD;AACvD,yDAA2D;AAC3D,iEAA0D;AAE1D,iEAA0D;AAC1D,uDAA0D;AAG1D,yFAAyF;AACzF,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAExC,KAAK,UAAU,UAAU,CACvB,OAAuB,EACvB,SAAiB,EACjB,MAAuB,EACvB,YAAqB;IAErB,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,IAAA,8BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,SAAiB,EACjB,QAAuB;IAEvB,IAAA,mCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,MAAM,GAAG,IAAA,0CAA+B,EAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG;QAC9B,CAAC,CAAC,MAAM,IAAA,6BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,IAAA,2BAAqB,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,IAAA,6BAAW,EAAC,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,CAAC,CAAC;IACvF,MAAM,IAAA,0BAAY,EAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;QAC7C,GAAG,EAAE,IAAA,cAAM,GAAE;QACb,KAAK,EAAE,IAAA,6BAAW,EAAC,MAAM,CAAC;QAC1B,YAAY;KACb,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"add-messages.js","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":";;;AAAA,uDAIkC;AAElC,8CAA4C;AAC5C,mEAA4E;AAC5E,qDAAoE;AACpE,yDAAuD;AACvD,yDAA2D;AAC3D,iEAA0D;AAE1D,iEAA0D;AAC1D,uDAA0D;AAG1D,yFAAyF;AACzF,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAExC,KAAK,UAAU,UAAU,CACvB,OAAuB,EACvB,SAAiB,EACjB,MAAuB,EACvB,YAAqB;IAErB,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,IAAA,8BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,sBACV,OAAuB,EACvB,SAAiB,EACjB,QAAuB;IAEvB,IAAA,mCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,MAAM,GAAG,IAAA,0CAA+B,EAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG;QACxB,CAAC,CAAC,MAAM,IAAA,6BAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,IAAA,2BAAqB,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,IAAA,6BAAW,EAAC,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,CAAC,CAAC;IACvF,MAAM,IAAA,0BAAY,EAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;QAC7C,GAAG,EAAE,IAAA,cAAM,GAAE;QACb,KAAK,EAAE,IAAA,6BAAW,EAAC,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,EAAE,YAAY;QAClC,eAAe,EAAE,MAAM,EAAE,OAAO;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import type { HistoryContext } from '../internal/setup';
2
2
  /**
3
- * Delete a whole session: every message item plus the metadata item, removed in
4
- * one batched write. Any offloaded S3 objects for those messages are then
5
- * best-effort cleaned up.
3
+ * Delete a whole session: every message item plus the metadata item, flushed
4
+ * in bounded batches as they're listed, plus best-effort S3 cleanup. Streams
5
+ * the partition with unbounded pagination so a session of any size is
6
+ * deleted to completion with bounded memory — never silently truncated at
7
+ * the in-memory page caps, and never discards already-flushed progress if a
8
+ * later batch fails.
6
9
  */
7
10
  export declare function clearSession(context: HistoryContext, sessionId: string): Promise<void>;
8
11
  //# sourceMappingURL=clear.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5F"}
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA2BxD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5F"}
@@ -3,31 +3,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.clearSession = clearSession;
4
4
  const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
5
5
  const orphans_1 = require("../../shared/codec/s3/orphans");
6
+ const constants_1 = require("../../shared/constants");
6
7
  const batch_write_1 = require("../../shared/dynamodb/batch-write");
7
8
  const paginate_1 = require("../../shared/dynamodb/paginate");
8
9
  const query_1 = require("../internal/query");
10
+ async function flushBuffer(context, buffer) {
11
+ if (buffer.keys.length === 0)
12
+ return;
13
+ await (0, batch_write_1.batchWriteAll)(context.client, context.tableName, buffer.keys.map((Key) => ({ DeleteRequest: { Key } })));
14
+ if (context.offloader) {
15
+ await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(buffer.descriptors), 'history.clear', context.logger);
16
+ }
17
+ buffer.keys = [];
18
+ buffer.descriptors = [];
19
+ }
9
20
  /**
10
- * Delete a whole session: every message item plus the metadata item, removed in
11
- * one batched write. Any offloaded S3 objects for those messages are then
12
- * best-effort cleaned up.
21
+ * Delete a whole session: every message item plus the metadata item, flushed
22
+ * in bounded batches as they're listed, plus best-effort S3 cleanup. Streams
23
+ * the partition with unbounded pagination so a session of any size is
24
+ * deleted to completion with bounded memory — never silently truncated at
25
+ * the in-memory page caps, and never discards already-flushed progress if a
26
+ * later batch fails.
13
27
  */
14
28
  async function clearSession(context, sessionId) {
15
- const deletes = [];
16
- const descriptors = [];
17
- for await (const raw of (0, paginate_1.paginateQuery)({
29
+ const buffer = { keys: [], descriptors: [] };
30
+ const pages = (0, paginate_1.paginateQuery)({
18
31
  client: context.client,
19
32
  params: (0, query_1.sessionItemsQuery)(context.tableName, sessionId),
20
- })) {
33
+ maxItems: Number.POSITIVE_INFINITY,
34
+ maxIterations: Number.POSITIVE_INFINITY,
35
+ });
36
+ for await (const raw of pages) {
21
37
  const item = raw;
22
- deletes.push({ DeleteRequest: { Key: { PK: item.PK, SK: item.SK } } });
38
+ buffer.keys.push({ PK: item.PK, SK: item.SK });
23
39
  if (item.message)
24
- descriptors.push(item.message);
25
- }
26
- if (deletes.length === 0)
27
- return;
28
- await (0, batch_write_1.batchWriteAll)(context.client, context.tableName, deletes);
29
- if (context.offloader) {
30
- await (0, orphans_1.cleanUpS3Orphans)(context.offloader, (0, descriptor_keys_1.collectS3Keys)(descriptors), 'history.clear', context.logger);
40
+ buffer.descriptors.push(item.message);
41
+ if (buffer.keys.length >= constants_1.BATCH_WRITE_MAX)
42
+ await flushBuffer(context, buffer);
31
43
  }
44
+ await flushBuffer(context, buffer);
32
45
  }
33
46
  //# sourceMappingURL=clear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":";;AAeA,oCAqBC;AAnCD,wEAAmE;AACnE,2DAAiE;AACjE,mEAAkE;AAClE,6DAA+D;AAE/D,6CAAsD;AAItD;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,OAAuB,EAAE,SAAiB;IAC3E,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,wBAAa,EAAC;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,yBAAiB,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;KACxD,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,OAAO;YAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,IAAA,2BAAa,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAA,0BAAgB,EACpB,OAAO,CAAC,SAAS,EACjB,IAAA,+BAAa,EAAC,WAAW,CAAC,EAC1B,eAAe,EACf,OAAO,CAAC,MAAM,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/history/actions/clear.ts"],"names":[],"mappings":";;;AACA,wEAAmE;AACnE,2DAAiE;AACjE,sDAAyD;AACzD,mEAAkE;AAClE,6DAA+D;AAC/D,6CAAsD;AAStD,KAAK,UAAU,WAAW,CAAC,OAAuB,EAAE,MAAoB;IACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACrC,MAAM,IAAA,2BAAa,EACjB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,EACjB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CACvD,CAAC;IACF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAA,0BAAgB,EACpB,OAAO,CAAC,SAAS,EACjB,IAAA,+BAAa,EAAC,MAAM,CAAC,WAAW,CAAC,EACjC,eAAe,EACf,OAAO,CAAC,MAAM,CACf,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,uBAAuB,OAAuB,EAAE,SAAiB;IAC3E,MAAM,MAAM,GAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAA,wBAAa,EAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,yBAAiB,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QACvD,QAAQ,EAAE,MAAM,CAAC,iBAAiB;QAClC,aAAa,EAAE,MAAM,CAAC,iBAAiB;KACxC,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,2BAAe;YAAE,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAYxB"}
1
+ {"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAcxB"}
@@ -19,6 +19,8 @@ async function getMessages(context, sessionId) {
19
19
  for await (const raw of (0, paginate_1.paginateQuery)({
20
20
  client: context.client,
21
21
  params: (0, query_1.messageQuery)(context.tableName, sessionId),
22
+ maxItems: Number.POSITIVE_INFINITY,
23
+ maxIterations: Number.POSITIVE_INFINITY,
22
24
  })) {
23
25
  const item = raw;
24
26
  if (isExpired(item, nowSeconds))
@@ -1 +1 @@
1
- {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":";;AAqBA,kCAeC;AApCD,uDAIkC;AAElC,6DAA+D;AAC/D,yDAA4D;AAC5D,6CAAiD;AAIjD,SAAS,SAAS,CAAC,IAAqB,EAAE,UAAkB;IAC1D,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,wBAAa,EAAC;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,oBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;KACnD,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;YAAE,SAAS;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,IAAA,+BAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAA,0CAA+B,EAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/history/actions/get-messages.ts"],"names":[],"mappings":";;;AAAA,uDAIkC;AAElC,6DAA+D;AAC/D,yDAA4D;AAC5D,6CAAiD;AAIjD,SAAS,SAAS,CAAC,IAAqB,EAAE,UAAkB;IAC1D,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACI,KAAK,sBACV,OAAuB,EACvB,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,wBAAa,EAAC;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAA,oBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QAClD,QAAQ,EAAE,MAAM,CAAC,iBAAiB;QAClC,aAAa,EAAE,MAAM,CAAC,iBAAiB;KACxC,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;YAAE,SAAS;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,IAAA,+BAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAA,0CAA+B,EAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
@@ -5,5 +5,8 @@ import type { SessionMetadata } from '../types';
5
5
  * filtered to session items so the adapter works on a table shared with the
6
6
  * checkpointer/store; foreign rows are also skipped defensively.
7
7
  */
8
- export declare function listSessions(context: HistoryContext): Promise<SessionMetadata[]>;
8
+ export declare function listSessions(context: HistoryContext, options?: {
9
+ maxIterations?: number;
10
+ maxItems?: number;
11
+ }): Promise<SessionMetadata[]>;
9
12
  //# sourceMappingURL=list-sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-sessions.d.ts","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,UAAU,CAAC;AAEjE;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAuBtF"}
1
+ {"version":3,"file":"list-sessions.d.ts","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,UAAU,CAAC;AAEjE;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,OAAO,CAAC,eAAe,EAAE,CAAC,CAyB5B"}
@@ -8,7 +8,7 @@ const keys_1 = require("../internal/keys");
8
8
  * filtered to session items so the adapter works on a table shared with the
9
9
  * checkpointer/store; foreign rows are also skipped defensively.
10
10
  */
11
- async function listSessions(context) {
11
+ async function listSessions(context, options) {
12
12
  const sessions = [];
13
13
  for await (const raw of (0, scan_1.paginateScan)({
14
14
  client: context.client,
@@ -18,6 +18,8 @@ async function listSessions(context) {
18
18
  ExpressionAttributeNames: { '#sk': 'SK' },
19
19
  ExpressionAttributeValues: { ':session': keys_1.SESSION_SORT_KEY },
20
20
  },
21
+ maxIterations: options?.maxIterations,
22
+ maxItems: options?.maxItems,
21
23
  })) {
22
24
  const item = raw;
23
25
  if (item.SK !== keys_1.SESSION_SORT_KEY || typeof item.sessionId !== 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"list-sessions.js","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":";;AAUA,oCAuBC;AAjCD,qDAA0D;AAC1D,2CAAoD;AAIpD;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,OAAuB;IACxD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,mBAAY,EAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,gBAAgB;YAClC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YACzC,yBAAyB,EAAE,EAAE,UAAU,EAAE,uBAAgB,EAAE;SAC5D;KACF,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,IAAI,IAAI,CAAC,EAAE,KAAK,uBAAgB,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YAAE,SAAS;QACjF,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"list-sessions.js","sourceRoot":"","sources":["../../../src/history/actions/list-sessions.ts"],"names":[],"mappings":";;;AAAA,qDAA0D;AAC1D,2CAAoD;AAIpD;;;;GAIG;AACI,KAAK,uBACV,OAAuB,EACvB,OAAuD;IAEvD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAA,mBAAY,EAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,gBAAgB;YAClC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YACzC,yBAAyB,EAAE,EAAE,UAAU,EAAE,uBAAgB,EAAE;SAC5D;QACD,aAAa,EAAE,OAAO,EAAE,aAAa;QACrC,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAC,EAAE,CAAC;QACH,MAAM,IAAI,GAAG,GAAsB,CAAC;QACpC,IAAI,IAAI,CAAC,EAAE,KAAK,uBAAgB,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YAAE,SAAS;QACjF,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -4,7 +4,10 @@ import type { HistoryContext } from '../internal/setup';
4
4
  * and write it back, repairing any drift. A repair tool: the append path keeps
5
5
  * the count consistent transactionally, so this is only needed after external
6
6
  * corruption. Run it when the session is quiescent — it `SET`s the count, so a
7
- * concurrent append's increment could be clobbered. Returns the reconciled count.
7
+ * concurrent append's increment could be clobbered. Requires the session to
8
+ * already exist; reconciling a nonexistent session throws {@link ConflictError}
9
+ * rather than creating a permanent, TTL-less metadata-only row. Returns the
10
+ * reconciled count.
8
11
  */
9
12
  export declare function reconcileMessageCount(context: HistoryContext, sessionId: string): Promise<number>;
10
13
  //# sourceMappingURL=reconcile-count.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-count.d.ts","sourceRoot":"","sources":["../../../src/history/actions/reconcile-count.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiBxD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAajB"}
1
+ {"version":3,"file":"reconcile-count.d.ts","sourceRoot":"","sources":["../../../src/history/actions/reconcile-count.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgBxD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.reconcileMessageCount = reconcileMessageCount;
4
4
  const retry_1 = require("../../shared/dynamodb/retry");
5
+ const errors_1 = require("../../shared/errors/errors");
5
6
  const primitives_1 = require("../../shared/validation/primitives");
6
7
  const keys_1 = require("../internal/keys");
7
8
  const query_1 = require("../internal/query");
8
- /** Count a session's message items with a server-side `COUNT` query, all pages. */
9
9
  async function countMessages(context, sessionId) {
10
10
  const base = (0, query_1.messageQuery)(context.tableName, sessionId);
11
11
  let total = 0;
@@ -22,18 +22,30 @@ async function countMessages(context, sessionId) {
22
22
  * and write it back, repairing any drift. A repair tool: the append path keeps
23
23
  * the count consistent transactionally, so this is only needed after external
24
24
  * corruption. Run it when the session is quiescent — it `SET`s the count, so a
25
- * concurrent append's increment could be clobbered. Returns the reconciled count.
25
+ * concurrent append's increment could be clobbered. Requires the session to
26
+ * already exist; reconciling a nonexistent session throws {@link ConflictError}
27
+ * rather than creating a permanent, TTL-less metadata-only row. Returns the
28
+ * reconciled count.
26
29
  */
27
30
  async function reconcileMessageCount(context, sessionId) {
28
31
  (0, primitives_1.validateNonEmptyString)(sessionId, 'sessionId');
29
32
  const count = await countMessages(context, sessionId);
30
- await (0, retry_1.withDynamoDBRetry)(() => context.client.update({
31
- TableName: context.tableName,
32
- Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
33
- UpdateExpression: 'SET #count = :count',
34
- ExpressionAttributeNames: { '#count': 'messageCount' },
35
- ExpressionAttributeValues: { ':count': count },
36
- }));
33
+ try {
34
+ await (0, retry_1.withDynamoDBRetry)(() => context.client.update({
35
+ TableName: context.tableName,
36
+ Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
37
+ UpdateExpression: 'SET #count = :count',
38
+ ExpressionAttributeNames: { '#count': 'messageCount' },
39
+ ExpressionAttributeValues: { ':count': count },
40
+ ConditionExpression: 'attribute_exists(PK)',
41
+ }));
42
+ }
43
+ catch (error) {
44
+ if (error.name === 'ConditionalCheckFailedException') {
45
+ throw new errors_1.ConflictError(`Cannot reconcile messageCount: session "${sessionId}" does not exist`, error);
46
+ }
47
+ throw error;
48
+ }
37
49
  return count;
38
50
  }
39
51
  //# sourceMappingURL=reconcile-count.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-count.js","sourceRoot":"","sources":["../../../src/history/actions/reconcile-count.ts"],"names":[],"mappings":";;AA8BA,sDAgBC;AA5CD,uDAAgE;AAChE,mEAA4E;AAC5E,2CAAsE;AACtE,6CAAiD;AAGjD,mFAAmF;AACnF,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,SAAiB;IACrE,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAA0D,CAAC;IAC/D,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAChF,CAAC;QACF,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACzB,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACnC,CAAC,QAAQ,QAAQ,EAAE;IACnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,qBAAqB,CACzC,OAAuB,EACvB,SAAiB;IAEjB,IAAA,mCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,EAAE,EAAE,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC,EAAE,EAAE,EAAE,uBAAgB,EAAE;QAC9D,gBAAgB,EAAE,qBAAqB;QACvC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE;QACtD,yBAAyB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC/C,CAAC,CACH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"reconcile-count.js","sourceRoot":"","sources":["../../../src/history/actions/reconcile-count.ts"],"names":[],"mappings":";;;AAEA,uDAAgE;AAChE,uDAA2D;AAC3D,mEAA4E;AAC5E,2CAAsE;AACtE,6CAAiD;AAGjD,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,SAAiB;IACrE,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAA0D,CAAC;IAC/D,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAChF,CAAC;QACF,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACzB,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACnC,CAAC,QAAQ,QAAQ,EAAE;IACnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,gCACV,OAAuB,EACvB,SAAiB;IAEjB,IAAA,mCAAsB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,CAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,EAAE,EAAE,EAAE,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC,EAAE,EAAE,EAAE,uBAAgB,EAAE;YAC9D,gBAAgB,EAAE,qBAAqB;YACvC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE;YACtD,yBAAyB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC9C,mBAAmB,EAAE,sBAAsB;SAC5C,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA2B,CAAC,IAAI,KAAK,iCAAiC,EAAE,CAAC;YAC5E,MAAM,IAAI,sBAAa,CACrB,2CAA2C,SAAS,kBAAkB,EACtE,KAAc,CACf,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -22,7 +22,10 @@ export declare class DynamoDBChatMessageHistory {
22
22
  /** Delete a session and any offloaded payload. */
23
23
  clear(sessionId: string): Promise<void>;
24
24
  /** List all sessions as metadata summaries. */
25
- listSessions(): Promise<SessionMetadata[]>;
25
+ listSessions(options?: {
26
+ maxIterations?: number;
27
+ maxItems?: number;
28
+ }): Promise<SessionMetadata[]>;
26
29
  /**
27
30
  * Recompute and repair a session's `messageCount` from the stored messages.
28
31
  * A maintenance tool for external corruption; run it when the session is idle.
@@ -32,5 +35,14 @@ export declare class DynamoDBChatMessageHistory {
32
35
  forSession(sessionId: string): DynamoDBSessionChatMessageHistory;
33
36
  /** Release owned resources (the underlying client and any S3 client). */
34
37
  destroy(): void;
38
+ /**
39
+ * Best-effort provision an S3 lifecycle expiration rule matching the
40
+ * configured TTL, so offloaded objects don't outlive their DynamoDB item
41
+ * forever. No-ops when S3 offload or TTL isn't configured. Requires the
42
+ * `s3:GetLifecycleConfiguration`/`s3:PutLifecycleConfiguration` bucket-level
43
+ * permissions (broader than the object-level CRUD the rest of S3 offload
44
+ * needs) — call this once during deployment/provisioning, not per-request.
45
+ */
46
+ ensureS3LifecycleRule(): Promise<void>;
35
47
  }
36
48
  //# sourceMappingURL=chat-message-history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-message-history.d.ts","sourceRoot":"","sources":["../../src/history/chat-message-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQ5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAElF;;;;;;GAMG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;gBAE7D,OAAO,EAAE,iCAAiC;IAOtD,yCAAyC;IACzC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAItD,oCAAoC;IACpC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,4CAA4C;IAC5C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,kDAAkD;IAClD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,+CAA+C;IAC/C,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI1C;;;OAGG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzD,8DAA8D;IAC9D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iCAAiC;IAIhE,yEAAyE;IACzE,OAAO,IAAI,IAAI;CAIhB"}
1
+ {"version":3,"file":"chat-message-history.d.ts","sourceRoot":"","sources":["../../src/history/chat-message-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAS5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAElF;;;;;;GAMG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;IAEzE,YAAY,OAAO,EAAE,iCAAiC,EAKrD;IAED,yCAAyC;IACzC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAErD;IAED,oCAAoC;IACpC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;IAED,4CAA4C;IAC5C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;IAED,kDAAkD;IAClD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtC;IAED,+CAA+C;IAC/C,YAAY,CAAC,OAAO,CAAC,EAAE;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAE7B;IAED;;;OAGG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExD;IAED,8DAA8D;IAC9D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iCAAiC,CAE/D;IAED,yEAAyE;IACzE,OAAO,IAAI,IAAI,CAGd;IAED;;;;;;;OAOG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3C;CACF"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DynamoDBChatMessageHistory = void 0;
4
+ const ttl_1 = require("../shared/validation/ttl");
4
5
  const add_messages_1 = require("./actions/add-messages");
5
6
  const clear_1 = require("./actions/clear");
6
7
  const get_messages_1 = require("./actions/get-messages");
@@ -42,8 +43,8 @@ class DynamoDBChatMessageHistory {
42
43
  return (0, clear_1.clearSession)(this.context, sessionId);
43
44
  }
44
45
  /** List all sessions as metadata summaries. */
45
- listSessions() {
46
- return (0, list_sessions_1.listSessions)(this.context);
46
+ listSessions(options) {
47
+ return (0, list_sessions_1.listSessions)(this.context, options);
47
48
  }
48
49
  /**
49
50
  * Recompute and repair a session's `messageCount` from the stored messages.
@@ -62,6 +63,19 @@ class DynamoDBChatMessageHistory {
62
63
  if (this.ownsClient)
63
64
  this.ddbClient?.destroy();
64
65
  }
66
+ /**
67
+ * Best-effort provision an S3 lifecycle expiration rule matching the
68
+ * configured TTL, so offloaded objects don't outlive their DynamoDB item
69
+ * forever. No-ops when S3 offload or TTL isn't configured. Requires the
70
+ * `s3:GetLifecycleConfiguration`/`s3:PutLifecycleConfiguration` bucket-level
71
+ * permissions (broader than the object-level CRUD the rest of S3 offload
72
+ * needs) — call this once during deployment/provisioning, not per-request.
73
+ */
74
+ async ensureS3LifecycleRule() {
75
+ if (!this.context.offloader || !this.context.ttl)
76
+ return;
77
+ await this.context.offloader.ensureLifecycleRule((0, ttl_1.resolveTtlDaysCeil)(this.context.ttl));
78
+ }
65
79
  }
66
80
  exports.DynamoDBChatMessageHistory = DynamoDBChatMessageHistory;
67
81
  //# sourceMappingURL=chat-message-history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-message-history.js","sourceRoot":"","sources":["../../src/history/chat-message-history.ts"],"names":[],"mappings":";;;AAEA,yDAA0E;AAC1E,2CAA+C;AAC/C,yDAA0E;AAC1E,2DAA6E;AAC7E,+DAAiG;AACjG,4CAAqE;AACrE,uDAAsE;AAGtE;;;;;;GAMG;AACH,MAAa,0BAA0B;IACpB,OAAO,CAAiB;IACxB,UAAU,CAAU;IACpB,SAAS,CAA+C;IAEzE,YAAY,OAA0C;QACpD,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACnC,CAAC;IAED,yCAAyC;IACzC,WAAW,CAAC,SAAiB;QAC3B,OAAO,IAAA,0BAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,oCAAoC;IACpC,WAAW,CAAC,SAAiB,EAAE,QAAuB;QACpD,OAAO,IAAA,0BAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,4CAA4C;IAC5C,UAAU,CAAC,SAAiB,EAAE,OAAoB;QAChD,OAAO,IAAA,0BAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,+CAA+C;IAC/C,YAAY;QACV,OAAO,IAAA,4BAAkB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,SAAiB;QACrC,OAAO,IAAA,uCAA2B,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IAC9D,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,mDAAiC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,yEAAyE;IACzE,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC;CACF;AAvDD,gEAuDC"}
1
+ {"version":3,"file":"chat-message-history.js","sourceRoot":"","sources":["../../src/history/chat-message-history.ts"],"names":[],"mappings":";;;AAEA,kDAA8D;AAC9D,yDAA0E;AAC1E,2CAA+C;AAC/C,yDAA0E;AAC1E,2DAA6E;AAC7E,+DAAiG;AACjG,4CAAqE;AACrE,uDAAsE;AAGtE;;;;;;GAMG;AACH;IACmB,OAAO,CAAiB;IACxB,UAAU,CAAU;IACpB,SAAS,CAA+C;IAEzE,YAAY,OAA0C;QACpD,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACnC,CAAC;IAED,yCAAyC;IACzC,WAAW,CAAC,SAAiB;QAC3B,OAAO,IAAA,0BAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,oCAAoC;IACpC,WAAW,CAAC,SAAiB,EAAE,QAAuB;QACpD,OAAO,IAAA,0BAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,4CAA4C;IAC5C,UAAU,CAAC,SAAiB,EAAE,OAAoB;QAChD,OAAO,IAAA,0BAAiB,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,+CAA+C;IAC/C,YAAY,CAAC,OAGZ;QACC,OAAO,IAAA,4BAAkB,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,SAAiB;QACrC,OAAO,IAAA,uCAA2B,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IAC9D,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,mDAAiC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,yEAAyE;IACzE,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,OAAO;QACzD,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAA,wBAAkB,EAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,CAAC;CACF"}
@@ -5,13 +5,16 @@ export interface AppendFields {
5
5
  now: string;
6
6
  title?: string;
7
7
  ttlTimestamp?: number;
8
+ forceTtlRefresh?: boolean;
8
9
  }
9
10
  /**
10
11
  * Append message chunks with caller-observed atomicity. Each chunk commits its
11
12
  * messages and count in one transaction; if a later chunk fails, every
12
- * already-committed chunk is deleted and its count reverted, and all batch S3
13
- * objects are cleaned, restoring the pre-call state before the error is
14
- * rethrown. So `addMessages` either lands the whole batch or nothing.
13
+ * already-committed chunk is deleted and its count reverted, and the batch's
14
+ * S3 objects are cleaned once their rows are gone, restoring the pre-call
15
+ * state before the error is rethrown. Except on a failed rollback, which
16
+ * surfaces as {@link CompensationFailedError} and deliberately leaves the
17
+ * committed chunks' S3 objects behind, since their rows may survive.
15
18
  */
16
19
  export declare function appendChunks(context: HistoryContext, sessionId: string, chunks: ChatMessageItem[][], fields: AppendFields): Promise<void>;
17
20
  //# sourceMappingURL=append-saga.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"append-saga.d.ts","sourceRoot":"","sources":["../../../src/history/internal/append-saga.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwFD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,EAAE,EAAE,EAC3B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"append-saga.d.ts","sourceRoot":"","sources":["../../../src/history/internal/append-saga.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAmGD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,EAAE,EAAE,EAC3B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.appendChunks = appendChunks;
4
+ const node_crypto_1 = require("node:crypto");
4
5
  const descriptor_keys_1 = require("../../shared/codec/descriptor-keys");
5
6
  const orphans_1 = require("../../shared/codec/s3/orphans");
6
7
  const batch_write_1 = require("../../shared/dynamodb/batch-write");
@@ -13,15 +14,21 @@ const message_transaction_1 = require("./message-transaction");
13
14
  async function revertSessionCount(context, sessionId, delta) {
14
15
  if (delta === 0)
15
16
  return;
16
- await (0, retry_1.withDynamoDBRetry)(() => context.client.update({
17
+ const update = {
17
18
  TableName: context.tableName,
18
19
  Key: { PK: (0, keys_1.sessionPartition)(sessionId), SK: keys_1.SESSION_SORT_KEY },
19
20
  UpdateExpression: 'ADD #count :neg',
20
21
  ExpressionAttributeNames: { '#count': 'messageCount' },
21
22
  ExpressionAttributeValues: { ':neg': -delta },
22
- }));
23
+ };
24
+ const input = { TransactItems: [{ Update: update }], ClientRequestToken: (0, node_crypto_1.randomUUID)() };
25
+ await (0, retry_1.withDynamoDBRetry)(() => context.client.transactWrite(input));
23
26
  }
24
- /** Best-effort delete every offloaded S3 object uploaded for the whole batch. */
27
+ /**
28
+ * Best-effort delete the offloaded S3 objects of the `chunks` slice given.
29
+ * {@link compensate} calls it once per commit status, never for the whole
30
+ * batch, so a committed chunk's objects arrive only once its rows are gone.
31
+ */
25
32
  async function cleanBatchS3(context, chunks) {
26
33
  if (!context.offloader)
27
34
  return;
@@ -38,10 +45,13 @@ async function rollbackCommitted(context, sessionId, committed) {
38
45
  await revertSessionCount(context, sessionId, total);
39
46
  }
40
47
  /**
41
- * Undo a failed batch: warn, best-effort clean S3, then roll back committed
42
- * chunks. Always throws. If the rollback itself fails the session may have
43
- * drifted, so it raises {@link CompensationFailedError} carrying both the
44
- * trigger and the rollback error; otherwise it rethrows the trigger.
48
+ * Undo a failed batch. Always throws. S3 cleanup is split by commit status so
49
+ * no live row is ever left pointing at a deleted object: the never-committed
50
+ * suffix is cleaned immediately, the committed prefix only after its rows are
51
+ * confirmed deleted. If the rollback itself fails, the committed chunks' S3
52
+ * objects are deliberately left in place (their rows may survive) and it
53
+ * raises {@link CompensationFailedError} carrying both the trigger and the
54
+ * rollback error; otherwise it rethrows the trigger.
45
55
  */
46
56
  async function compensate(context, sessionId, chunks, committed, trigger) {
47
57
  if (committed.length > 0) {
@@ -50,7 +60,8 @@ async function compensate(context, sessionId, chunks, committed, trigger) {
50
60
  committedChunks: committed.length,
51
61
  });
52
62
  }
53
- await cleanBatchS3(context, chunks);
63
+ /** The failed/never-attempted suffix never had a DynamoDB row, so it's safe to clean now. */
64
+ await cleanBatchS3(context, chunks.slice(committed.length));
54
65
  try {
55
66
  await rollbackCommitted(context, sessionId, committed);
56
67
  }
@@ -59,27 +70,30 @@ async function compensate(context, sessionId, chunks, committed, trigger) {
59
70
  sessionId,
60
71
  committedChunks: committed.length,
61
72
  });
73
+ /** Skip S3 cleanup here: rollback may have failed, so committed rows might still reference these objects. */
62
74
  throw new errors_1.CompensationFailedError(trigger, (0, wrap_error_1.toError)(rollbackError));
63
75
  }
76
+ /** Only now that committed rows are confirmed deleted is it safe to delete their S3 objects. */
77
+ await cleanBatchS3(context, chunks.slice(0, committed.length));
64
78
  throw trigger;
65
79
  }
66
80
  /**
67
81
  * Append message chunks with caller-observed atomicity. Each chunk commits its
68
82
  * messages and count in one transaction; if a later chunk fails, every
69
- * already-committed chunk is deleted and its count reverted, and all batch S3
70
- * objects are cleaned, restoring the pre-call state before the error is
71
- * rethrown. So `addMessages` either lands the whole batch or nothing.
83
+ * already-committed chunk is deleted and its count reverted, and the batch's
84
+ * S3 objects are cleaned once their rows are gone, restoring the pre-call
85
+ * state before the error is rethrown. Except on a failed rollback, which
86
+ * surfaces as {@link CompensationFailedError} and deliberately leaves the
87
+ * committed chunks' S3 objects behind, since their rows may survive.
72
88
  */
73
89
  async function appendChunks(context, sessionId, chunks, fields) {
74
90
  const committed = [];
75
91
  for (const chunk of chunks) {
76
92
  try {
77
93
  await (0, message_transaction_1.writeMessageChunk)(context, chunk, {
94
+ ...fields,
78
95
  sessionId,
79
96
  count: chunk.length,
80
- now: fields.now,
81
- title: fields.title,
82
- ttlTimestamp: fields.ttlTimestamp,
83
97
  });
84
98
  committed.push({
85
99
  keys: chunk.map((item) => ({ PK: item.PK, SK: item.SK })),
@@ -1 +1 @@
1
- {"version":3,"file":"append-saga.js","sourceRoot":"","sources":["../../../src/history/internal/append-saga.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"append-saga.js","sourceRoot":"","sources":["../../../src/history/internal/append-saga.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"item-mapper.js","sourceRoot":"","sources":["../../../src/history/internal/item-mapper.ts"],"names":[],"mappings":";;AAgBA,4CAkBC;AAGD,8CAKC;AAxCD,oDAAwF;AAExF,iCAA0D;AAG1D,SAAS,SAAS,CAAC,OAAuB;IACxC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,SAAiB,EACjB,IAAY,EACZ,OAAsB,EACtB,YAAqB;IAErB,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;QAClE,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,IAAI,GAAoB;QAC5B,EAAE,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC;QAC/B,EAAE,EAAE,IAAA,qBAAc,EAAC,IAAI,CAAC;QACxB,SAAS;QACT,OAAO,EAAE,UAAU;KACpB,CAAC;IACF,IAAI,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AAC1D,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,IAAqB;IAErB,OAAO,IAAA,qBAAa,EAAgB,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"item-mapper.js","sourceRoot":"","sources":["../../../src/history/internal/item-mapper.ts"],"names":[],"mappings":";;;;AAEA,oDAAwF;AAExF,iCAA0D;AAG1D,SAAS,SAAS,CAAC,OAAuB;IACxC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACI,KAAK,2BACV,OAAuB,EACvB,SAAiB,EACjB,IAAY,EACZ,OAAsB,EACtB,YAAqB;IAErB,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;QAClE,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,IAAI,GAAoB;QAC5B,EAAE,EAAE,IAAA,uBAAgB,EAAC,SAAS,CAAC;QAC/B,EAAE,EAAE,IAAA,qBAAc,EAAC,IAAI,CAAC;QACxB,SAAS;QACT,OAAO,EAAE,UAAU;KACpB,CAAC;IACF,IAAI,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AAC1D,KAAK,4BACV,OAAuB,EACvB,IAAqB;IAErB,OAAO,IAAA,qBAAa,EAAgB,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/history/internal/keys.ts"],"names":[],"mappings":";;;AAMA,4CAEC;AAGD,wCAEC;AAGD,oDAEC;AAlBD,wDAAwD;AAC3C,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,+DAA+D;AAC/D,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yEAAyE;AACzE,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,GAAG,cAAc,GAAG,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,sEAAsE;AACtE,SAAgB,oBAAoB;IAClC,OAAO,cAAc,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/history/internal/keys.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAwD;AAC3C,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,+DAA+D;AAC/D,0BAAiC,SAAiB;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yEAAyE;AACzE,wBAA+B,IAAY;IACzC,OAAO,GAAG,cAAc,GAAG,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,sEAAsE;AACtE;IACE,OAAO,cAAc,CAAC;AACxB,CAAC"}