@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.1 → 1.0.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 (608) hide show
  1. package/README.md +1820 -290
  2. package/dist/cjs/backfill/backfill.d.ts +171 -0
  3. package/dist/cjs/backfill/backfill.js +177 -0
  4. package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
  5. package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
  6. package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
  7. package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
  8. package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
  9. package/dist/cjs/checkpointer/actions/list.js +70 -0
  10. package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
  11. package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
  12. package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
  13. package/dist/cjs/checkpointer/actions/put.js +79 -0
  14. package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
  15. package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
  16. package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
  17. package/dist/cjs/checkpointer/internal/listing.js +104 -0
  18. package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
  19. package/dist/cjs/checkpointer/internal/parse.js +184 -0
  20. package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
  21. package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
  22. package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
  23. package/dist/cjs/checkpointer/internal/read.js +132 -0
  24. package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
  25. package/dist/cjs/checkpointer/internal/rows.js +356 -0
  26. package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
  27. package/dist/cjs/checkpointer/internal/setup.js +25 -0
  28. package/dist/cjs/checkpointer/saver.d.ts +306 -0
  29. package/dist/cjs/checkpointer/saver.js +56 -0
  30. package/dist/cjs/checkpointer/types.d.ts +51 -0
  31. package/dist/cjs/factory/factory.d.ts +154 -0
  32. package/dist/cjs/factory/factory.js +137 -0
  33. package/dist/{factory → cjs/factory}/types.d.ts +33 -14
  34. package/dist/cjs/history/actions/add-messages.d.ts +51 -0
  35. package/dist/cjs/history/actions/add-messages.js +17 -0
  36. package/dist/cjs/history/actions/clear.d.ts +52 -0
  37. package/dist/cjs/history/actions/clear.js +29 -0
  38. package/dist/cjs/history/actions/get-messages.d.ts +60 -0
  39. package/dist/cjs/history/actions/get-messages.js +58 -0
  40. package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
  41. package/dist/cjs/history/actions/list-sessions.js +67 -0
  42. package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
  43. package/dist/cjs/history/actions/reconcile-count.js +8 -0
  44. package/dist/cjs/history/chat-message-history.d.ts +267 -0
  45. package/dist/cjs/history/chat-message-history.js +61 -0
  46. package/dist/cjs/history/internal/append.d.ts +244 -0
  47. package/dist/cjs/history/internal/append.js +267 -0
  48. package/dist/cjs/history/internal/message-read.d.ts +84 -0
  49. package/dist/cjs/history/internal/message-read.js +93 -0
  50. package/dist/cjs/history/internal/parse.d.ts +153 -0
  51. package/dist/cjs/history/internal/parse.js +113 -0
  52. package/dist/cjs/history/internal/rows.d.ts +196 -0
  53. package/dist/cjs/history/internal/rows.js +96 -0
  54. package/dist/cjs/history/internal/session.d.ts +350 -0
  55. package/dist/cjs/history/internal/session.js +296 -0
  56. package/dist/cjs/history/internal/setup.d.ts +64 -0
  57. package/dist/cjs/history/internal/setup.js +60 -0
  58. package/dist/cjs/history/session-adapter.d.ts +112 -0
  59. package/dist/cjs/history/session-adapter.js +38 -0
  60. package/dist/cjs/history/types.d.ts +102 -0
  61. package/dist/cjs/index.d.ts +53 -0
  62. package/dist/cjs/index.js +25 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/shared/adapter.d.ts +146 -0
  65. package/dist/cjs/shared/adapter.js +70 -0
  66. package/dist/cjs/shared/clock.d.ts +52 -0
  67. package/dist/cjs/shared/clock.js +14 -0
  68. package/dist/cjs/shared/codec/codec.d.ts +336 -0
  69. package/dist/cjs/shared/codec/codec.js +162 -0
  70. package/dist/cjs/shared/codec/compression.d.ts +66 -0
  71. package/dist/cjs/shared/codec/compression.js +45 -0
  72. package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
  73. package/dist/cjs/shared/codec/json-serde.js +58 -0
  74. package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
  75. package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
  76. package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
  77. package/dist/cjs/shared/codec/s3/client.js +78 -0
  78. package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
  79. package/dist/cjs/shared/codec/s3/config.js +92 -0
  80. package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
  81. package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
  82. package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
  83. package/dist/cjs/shared/codec/s3/offloader.js +289 -0
  84. package/dist/cjs/shared/concurrency.d.ts +43 -0
  85. package/dist/{shared → cjs/shared}/concurrency.js +10 -9
  86. package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
  87. package/dist/cjs/shared/dynamodb/abort.js +16 -0
  88. package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
  89. package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
  90. package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
  91. package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
  92. package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
  93. package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
  94. package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
  95. package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
  96. package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
  97. package/dist/cjs/shared/dynamodb/paginate.js +90 -0
  98. package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
  99. package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
  100. package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
  101. package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
  102. package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
  103. package/dist/cjs/shared/dynamodb/retry.js +193 -0
  104. package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
  105. package/dist/cjs/shared/dynamodb/row-size.js +30 -0
  106. package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
  107. package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
  108. package/dist/cjs/shared/errors/base-error.d.ts +231 -0
  109. package/dist/cjs/shared/errors/base-error.js +73 -0
  110. package/dist/cjs/shared/errors/boundary.d.ts +86 -0
  111. package/dist/cjs/shared/errors/boundary.js +61 -0
  112. package/dist/cjs/shared/errors/classify.d.ts +206 -0
  113. package/dist/cjs/shared/errors/classify.js +232 -0
  114. package/dist/cjs/shared/errors/error-code.d.ts +95 -0
  115. package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
  116. package/dist/cjs/shared/errors/errors.d.ts +233 -0
  117. package/dist/cjs/shared/errors/errors.js +123 -0
  118. package/dist/cjs/shared/logging/logger.d.ts +80 -0
  119. package/dist/cjs/shared/logging/logger.js +30 -0
  120. package/dist/cjs/shared/logging/redaction.d.ts +123 -0
  121. package/dist/cjs/shared/logging/redaction.js +145 -0
  122. package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
  123. package/dist/cjs/shared/logging/secret-patterns.js +93 -0
  124. package/dist/cjs/shared/logging/truncate.d.ts +197 -0
  125. package/dist/cjs/shared/logging/truncate.js +31 -0
  126. package/dist/cjs/shared/options.d.ts +100 -0
  127. package/dist/cjs/shared/ulid.d.ts +80 -0
  128. package/dist/{shared → cjs/shared}/ulid.js +7 -21
  129. package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
  130. package/dist/cjs/shared/validation/collaborators.js +79 -0
  131. package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
  132. package/dist/cjs/shared/validation/option-shape.js +31 -0
  133. package/dist/cjs/shared/validation/options.d.ts +145 -0
  134. package/dist/cjs/shared/validation/options.js +166 -0
  135. package/dist/cjs/shared/validation/primitives.d.ts +292 -0
  136. package/dist/cjs/shared/validation/primitives.js +114 -0
  137. package/dist/cjs/shared/validation/ttl.d.ts +94 -0
  138. package/dist/cjs/shared/validation/ttl.js +52 -0
  139. package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
  140. package/dist/cjs/store/actions/list-namespaces.js +92 -0
  141. package/dist/cjs/store/actions/put.d.ts +43 -0
  142. package/dist/cjs/store/actions/put.js +49 -0
  143. package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
  144. package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
  145. package/dist/cjs/store/actions/search.d.ts +38 -0
  146. package/dist/cjs/store/actions/search.js +26 -0
  147. package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
  148. package/dist/cjs/store/internal/batch-plan.js +32 -0
  149. package/dist/cjs/store/internal/filter.d.ts +43 -0
  150. package/dist/cjs/store/internal/filter.js +64 -0
  151. package/dist/cjs/store/internal/get-item.d.ts +77 -0
  152. package/dist/cjs/store/internal/get-item.js +58 -0
  153. package/dist/cjs/store/internal/item-write.d.ts +270 -0
  154. package/dist/cjs/store/internal/item-write.js +181 -0
  155. package/dist/cjs/store/internal/parse.d.ts +230 -0
  156. package/dist/cjs/store/internal/parse.js +180 -0
  157. package/dist/cjs/store/internal/rows.d.ts +359 -0
  158. package/dist/cjs/store/internal/rows.js +166 -0
  159. package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
  160. package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
  161. package/dist/cjs/store/internal/setup.d.ts +96 -0
  162. package/dist/cjs/store/internal/setup.js +103 -0
  163. package/dist/cjs/store/internal/table-search.d.ts +100 -0
  164. package/dist/cjs/store/internal/table-search.js +123 -0
  165. package/dist/cjs/store/internal/vector-index.d.ts +258 -0
  166. package/dist/cjs/store/internal/vector-index.js +269 -0
  167. package/dist/cjs/store/store.d.ts +329 -0
  168. package/dist/cjs/store/store.js +97 -0
  169. package/dist/cjs/store/types.d.ts +111 -0
  170. package/dist/cjs/store/vector-backend.d.ts +104 -0
  171. package/dist/cjs/store/vector-backend.js +4 -0
  172. package/dist/esm/backfill/backfill.d.ts +171 -0
  173. package/dist/esm/backfill/backfill.js +170 -0
  174. package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
  175. package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
  176. package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
  177. package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
  178. package/dist/esm/checkpointer/actions/list.d.ts +55 -0
  179. package/dist/esm/checkpointer/actions/list.js +67 -0
  180. package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
  181. package/dist/esm/checkpointer/actions/put-writes.js +18 -0
  182. package/dist/esm/checkpointer/actions/put.d.ts +95 -0
  183. package/dist/esm/checkpointer/actions/put.js +75 -0
  184. package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
  185. package/dist/esm/checkpointer/internal/delta-history.js +126 -0
  186. package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
  187. package/dist/esm/checkpointer/internal/listing.js +95 -0
  188. package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
  189. package/dist/esm/checkpointer/internal/parse.js +169 -0
  190. package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
  191. package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
  192. package/dist/esm/checkpointer/internal/read.d.ts +135 -0
  193. package/dist/esm/checkpointer/internal/read.js +125 -0
  194. package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
  195. package/dist/esm/checkpointer/internal/rows.js +323 -0
  196. package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
  197. package/dist/esm/checkpointer/internal/setup.js +21 -0
  198. package/dist/esm/checkpointer/saver.d.ts +306 -0
  199. package/dist/esm/checkpointer/saver.js +52 -0
  200. package/dist/esm/checkpointer/types.d.ts +51 -0
  201. package/dist/esm/checkpointer/types.js +1 -0
  202. package/dist/esm/factory/factory.d.ts +154 -0
  203. package/dist/esm/factory/factory.js +133 -0
  204. package/dist/esm/factory/types.d.ts +76 -0
  205. package/dist/esm/factory/types.js +1 -0
  206. package/dist/esm/history/actions/add-messages.d.ts +51 -0
  207. package/dist/esm/history/actions/add-messages.js +14 -0
  208. package/dist/esm/history/actions/clear.d.ts +52 -0
  209. package/dist/esm/history/actions/clear.js +26 -0
  210. package/dist/esm/history/actions/get-messages.d.ts +60 -0
  211. package/dist/esm/history/actions/get-messages.js +55 -0
  212. package/dist/esm/history/actions/list-sessions.d.ts +55 -0
  213. package/dist/esm/history/actions/list-sessions.js +64 -0
  214. package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
  215. package/dist/esm/history/actions/reconcile-count.js +5 -0
  216. package/dist/esm/history/chat-message-history.d.ts +267 -0
  217. package/dist/esm/history/chat-message-history.js +57 -0
  218. package/dist/esm/history/internal/append.d.ts +244 -0
  219. package/dist/esm/history/internal/append.js +259 -0
  220. package/dist/esm/history/internal/message-read.d.ts +84 -0
  221. package/dist/esm/history/internal/message-read.js +89 -0
  222. package/dist/esm/history/internal/parse.d.ts +153 -0
  223. package/dist/esm/history/internal/parse.js +105 -0
  224. package/dist/esm/history/internal/rows.d.ts +196 -0
  225. package/dist/esm/history/internal/rows.js +83 -0
  226. package/dist/esm/history/internal/session.d.ts +350 -0
  227. package/dist/esm/history/internal/session.js +285 -0
  228. package/dist/esm/history/internal/setup.d.ts +64 -0
  229. package/dist/esm/history/internal/setup.js +56 -0
  230. package/dist/esm/history/session-adapter.d.ts +112 -0
  231. package/dist/esm/history/session-adapter.js +34 -0
  232. package/dist/esm/history/types.d.ts +102 -0
  233. package/dist/esm/history/types.js +1 -0
  234. package/dist/esm/index.d.ts +53 -0
  235. package/dist/esm/index.js +10 -0
  236. package/dist/esm/shared/adapter.d.ts +146 -0
  237. package/dist/esm/shared/adapter.js +65 -0
  238. package/dist/esm/shared/clock.d.ts +52 -0
  239. package/dist/esm/shared/clock.js +9 -0
  240. package/dist/esm/shared/codec/codec.d.ts +336 -0
  241. package/dist/esm/shared/codec/codec.js +150 -0
  242. package/dist/esm/shared/codec/compression.d.ts +66 -0
  243. package/dist/esm/shared/codec/compression.js +40 -0
  244. package/dist/esm/shared/codec/json-serde.d.ts +80 -0
  245. package/dist/esm/shared/codec/json-serde.js +54 -0
  246. package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
  247. package/dist/esm/shared/codec/s3/client-types.js +3 -0
  248. package/dist/esm/shared/codec/s3/client.d.ts +63 -0
  249. package/dist/esm/shared/codec/s3/client.js +40 -0
  250. package/dist/esm/shared/codec/s3/config.d.ts +260 -0
  251. package/dist/esm/shared/codec/s3/config.js +79 -0
  252. package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
  253. package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
  254. package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
  255. package/dist/esm/shared/codec/s3/offloader.js +278 -0
  256. package/dist/esm/shared/concurrency.d.ts +43 -0
  257. package/dist/esm/shared/concurrency.js +27 -0
  258. package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
  259. package/dist/esm/shared/dynamodb/abort.js +12 -0
  260. package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
  261. package/dist/esm/shared/dynamodb/batch-write.js +74 -0
  262. package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
  263. package/dist/esm/shared/dynamodb/cancellation.js +30 -0
  264. package/dist/esm/shared/dynamodb/client.d.ts +177 -0
  265. package/dist/esm/shared/dynamodb/client.js +35 -0
  266. package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
  267. package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
  268. package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
  269. package/dist/esm/shared/dynamodb/paginate.js +84 -0
  270. package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
  271. package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
  272. package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
  273. package/dist/esm/shared/dynamodb/recency-index.js +136 -0
  274. package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
  275. package/dist/esm/shared/dynamodb/retry.js +180 -0
  276. package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
  277. package/dist/esm/shared/dynamodb/row-size.js +26 -0
  278. package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
  279. package/dist/esm/shared/dynamodb/table-schema.js +43 -0
  280. package/dist/esm/shared/errors/base-error.d.ts +231 -0
  281. package/dist/esm/shared/errors/base-error.js +64 -0
  282. package/dist/esm/shared/errors/boundary.d.ts +86 -0
  283. package/dist/esm/shared/errors/boundary.js +54 -0
  284. package/dist/esm/shared/errors/classify.d.ts +206 -0
  285. package/dist/esm/shared/errors/classify.js +220 -0
  286. package/dist/esm/shared/errors/error-code.d.ts +95 -0
  287. package/dist/esm/shared/errors/error-code.js +24 -0
  288. package/dist/esm/shared/errors/errors.d.ts +233 -0
  289. package/dist/esm/shared/errors/errors.js +110 -0
  290. package/dist/esm/shared/logging/logger.d.ts +80 -0
  291. package/dist/esm/shared/logging/logger.js +25 -0
  292. package/dist/esm/shared/logging/redaction.d.ts +123 -0
  293. package/dist/esm/shared/logging/redaction.js +140 -0
  294. package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
  295. package/dist/esm/shared/logging/secret-patterns.js +83 -0
  296. package/dist/esm/shared/logging/truncate.d.ts +197 -0
  297. package/dist/esm/shared/logging/truncate.js +25 -0
  298. package/dist/esm/shared/options.d.ts +100 -0
  299. package/dist/esm/shared/options.js +1 -0
  300. package/dist/esm/shared/ulid.d.ts +80 -0
  301. package/dist/esm/shared/ulid.js +77 -0
  302. package/dist/esm/shared/validation/collaborators.d.ts +160 -0
  303. package/dist/esm/shared/validation/collaborators.js +70 -0
  304. package/dist/esm/shared/validation/option-shape.d.ts +91 -0
  305. package/dist/esm/shared/validation/option-shape.js +24 -0
  306. package/dist/esm/shared/validation/options.d.ts +145 -0
  307. package/dist/esm/shared/validation/options.js +156 -0
  308. package/dist/esm/shared/validation/primitives.d.ts +292 -0
  309. package/dist/esm/shared/validation/primitives.js +100 -0
  310. package/dist/esm/shared/validation/ttl.d.ts +94 -0
  311. package/dist/esm/shared/validation/ttl.js +46 -0
  312. package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
  313. package/dist/esm/store/actions/list-namespaces.js +86 -0
  314. package/dist/esm/store/actions/put.d.ts +43 -0
  315. package/dist/esm/store/actions/put.js +46 -0
  316. package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
  317. package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
  318. package/dist/esm/store/actions/search.d.ts +38 -0
  319. package/dist/esm/store/actions/search.js +23 -0
  320. package/dist/esm/store/internal/batch-plan.d.ts +56 -0
  321. package/dist/esm/store/internal/batch-plan.js +28 -0
  322. package/dist/esm/store/internal/filter.d.ts +43 -0
  323. package/dist/esm/store/internal/filter.js +60 -0
  324. package/dist/esm/store/internal/get-item.d.ts +77 -0
  325. package/dist/esm/store/internal/get-item.js +54 -0
  326. package/dist/esm/store/internal/item-write.d.ts +270 -0
  327. package/dist/esm/store/internal/item-write.js +173 -0
  328. package/dist/esm/store/internal/parse.d.ts +230 -0
  329. package/dist/esm/store/internal/parse.js +169 -0
  330. package/dist/esm/store/internal/rows.d.ts +359 -0
  331. package/dist/esm/store/internal/rows.js +147 -0
  332. package/dist/esm/store/internal/semantic-search.d.ts +168 -0
  333. package/dist/esm/store/internal/semantic-search.js +200 -0
  334. package/dist/esm/store/internal/setup.d.ts +96 -0
  335. package/dist/esm/store/internal/setup.js +98 -0
  336. package/dist/esm/store/internal/table-search.d.ts +100 -0
  337. package/dist/esm/store/internal/table-search.js +119 -0
  338. package/dist/esm/store/internal/vector-index.d.ts +258 -0
  339. package/dist/esm/store/internal/vector-index.js +256 -0
  340. package/dist/esm/store/store.d.ts +329 -0
  341. package/dist/esm/store/store.js +93 -0
  342. package/dist/esm/store/types.d.ts +111 -0
  343. package/dist/esm/store/types.js +1 -0
  344. package/dist/esm/store/vector-backend.d.ts +104 -0
  345. package/dist/esm/store/vector-backend.js +1 -0
  346. package/package.json +68 -46
  347. package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
  348. package/dist/checkpointer/actions/delete-thread.js +0 -38
  349. package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
  350. package/dist/checkpointer/actions/get-tuple.js +0 -25
  351. package/dist/checkpointer/actions/list.d.ts +0 -20
  352. package/dist/checkpointer/actions/list.js +0 -113
  353. package/dist/checkpointer/actions/put-writes.d.ts +0 -15
  354. package/dist/checkpointer/actions/put-writes.js +0 -62
  355. package/dist/checkpointer/actions/put.d.ts +0 -17
  356. package/dist/checkpointer/actions/put.js +0 -73
  357. package/dist/checkpointer/internal/assemble.d.ts +0 -17
  358. package/dist/checkpointer/internal/assemble.js +0 -38
  359. package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
  360. package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
  361. package/dist/checkpointer/internal/configurable.d.ts +0 -12
  362. package/dist/checkpointer/internal/configurable.js +0 -24
  363. package/dist/checkpointer/internal/fetch.d.ts +0 -19
  364. package/dist/checkpointer/internal/fetch.js +0 -88
  365. package/dist/checkpointer/internal/filter-match.d.ts +0 -13
  366. package/dist/checkpointer/internal/filter-match.js +0 -15
  367. package/dist/checkpointer/internal/item-reader.d.ts +0 -66
  368. package/dist/checkpointer/internal/item-reader.js +0 -113
  369. package/dist/checkpointer/internal/item-writer.d.ts +0 -35
  370. package/dist/checkpointer/internal/item-writer.js +0 -107
  371. package/dist/checkpointer/internal/keys.d.ts +0 -41
  372. package/dist/checkpointer/internal/keys.js +0 -117
  373. package/dist/checkpointer/internal/list-scope.d.ts +0 -61
  374. package/dist/checkpointer/internal/list-scope.js +0 -108
  375. package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
  376. package/dist/checkpointer/internal/pending-sends.js +0 -29
  377. package/dist/checkpointer/internal/query.d.ts +0 -21
  378. package/dist/checkpointer/internal/query.js +0 -42
  379. package/dist/checkpointer/internal/regular-write.d.ts +0 -28
  380. package/dist/checkpointer/internal/regular-write.js +0 -66
  381. package/dist/checkpointer/internal/setup.d.ts +0 -33
  382. package/dist/checkpointer/internal/setup.js +0 -38
  383. package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
  384. package/dist/checkpointer/internal/special-write-cas.js +0 -104
  385. package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
  386. package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
  387. package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
  388. package/dist/checkpointer/internal/special-write-verify.js +0 -80
  389. package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
  390. package/dist/checkpointer/internal/stored-channels.js +0 -70
  391. package/dist/checkpointer/internal/validation.d.ts +0 -18
  392. package/dist/checkpointer/internal/validation.js +0 -40
  393. package/dist/checkpointer/internal/write-guard.d.ts +0 -20
  394. package/dist/checkpointer/internal/write-guard.js +0 -48
  395. package/dist/checkpointer/internal/write-index.d.ts +0 -36
  396. package/dist/checkpointer/internal/write-index.js +0 -41
  397. package/dist/checkpointer/saver.d.ts +0 -70
  398. package/dist/checkpointer/saver.js +0 -105
  399. package/dist/checkpointer/types.d.ts +0 -58
  400. package/dist/factory/factory.d.ts +0 -40
  401. package/dist/factory/factory.js +0 -87
  402. package/dist/history/actions/add-messages.d.ts +0 -15
  403. package/dist/history/actions/add-messages.js +0 -77
  404. package/dist/history/actions/clear.d.ts +0 -10
  405. package/dist/history/actions/clear.js +0 -34
  406. package/dist/history/actions/get-messages.d.ts +0 -17
  407. package/dist/history/actions/get-messages.js +0 -79
  408. package/dist/history/actions/list-sessions.d.ts +0 -13
  409. package/dist/history/actions/list-sessions.js +0 -53
  410. package/dist/history/actions/reconcile-count.d.ts +0 -12
  411. package/dist/history/actions/reconcile-count.js +0 -64
  412. package/dist/history/chat-message-history.d.ts +0 -73
  413. package/dist/history/chat-message-history.js +0 -111
  414. package/dist/history/internal/append-saga.d.ts +0 -25
  415. package/dist/history/internal/append-saga.js +0 -79
  416. package/dist/history/internal/compensation.d.ts +0 -25
  417. package/dist/history/internal/compensation.js +0 -92
  418. package/dist/history/internal/item-mapper.d.ts +0 -9
  419. package/dist/history/internal/item-mapper.js +0 -27
  420. package/dist/history/internal/keys.d.ts +0 -16
  421. package/dist/history/internal/keys.js +0 -48
  422. package/dist/history/internal/message-chunker.d.ts +0 -13
  423. package/dist/history/internal/message-chunker.js +0 -67
  424. package/dist/history/internal/message-transaction.d.ts +0 -25
  425. package/dist/history/internal/message-transaction.js +0 -61
  426. package/dist/history/internal/message-window.d.ts +0 -17
  427. package/dist/history/internal/message-window.js +0 -49
  428. package/dist/history/internal/query.d.ts +0 -23
  429. package/dist/history/internal/query.js +0 -39
  430. package/dist/history/internal/session-count.d.ts +0 -47
  431. package/dist/history/internal/session-count.js +0 -115
  432. package/dist/history/internal/session-title.d.ts +0 -19
  433. package/dist/history/internal/session-title.js +0 -43
  434. package/dist/history/internal/session-update.d.ts +0 -27
  435. package/dist/history/internal/session-update.js +0 -69
  436. package/dist/history/internal/setup.d.ts +0 -31
  437. package/dist/history/internal/setup.js +0 -43
  438. package/dist/history/internal/title-generator.d.ts +0 -12
  439. package/dist/history/internal/title-generator.js +0 -41
  440. package/dist/history/internal/ttl-anchor.d.ts +0 -24
  441. package/dist/history/internal/ttl-anchor.js +0 -38
  442. package/dist/history/internal/validation.d.ts +0 -25
  443. package/dist/history/internal/validation.js +0 -53
  444. package/dist/history/session-adapter.d.ts +0 -29
  445. package/dist/history/session-adapter.js +0 -35
  446. package/dist/history/types.d.ts +0 -69
  447. package/dist/index.d.ts +0 -29
  448. package/dist/index.js +0 -32
  449. package/dist/shared/clock.d.ts +0 -8
  450. package/dist/shared/clock.js +0 -16
  451. package/dist/shared/codec/codec.d.ts +0 -53
  452. package/dist/shared/codec/codec.js +0 -66
  453. package/dist/shared/codec/compression.d.ts +0 -24
  454. package/dist/shared/codec/compression.js +0 -48
  455. package/dist/shared/codec/descriptor-keys.d.ts +0 -12
  456. package/dist/shared/codec/descriptor-keys.js +0 -14
  457. package/dist/shared/codec/encode.d.ts +0 -13
  458. package/dist/shared/codec/encode.js +0 -43
  459. package/dist/shared/codec/json-serde.d.ts +0 -7
  460. package/dist/shared/codec/json-serde.js +0 -17
  461. package/dist/shared/codec/payload-loss.d.ts +0 -12
  462. package/dist/shared/codec/payload-loss.js +0 -38
  463. package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
  464. package/dist/shared/codec/s3/adapter-config.js +0 -22
  465. package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
  466. package/dist/shared/codec/s3/bounded-body.js +0 -47
  467. package/dist/shared/codec/s3/client.d.ts +0 -18
  468. package/dist/shared/codec/s3/client.js +0 -46
  469. package/dist/shared/codec/s3/config.d.ts +0 -51
  470. package/dist/shared/codec/s3/config.js +0 -58
  471. package/dist/shared/codec/s3/delete.d.ts +0 -7
  472. package/dist/shared/codec/s3/delete.js +0 -28
  473. package/dist/shared/codec/s3/key-scope.d.ts +0 -23
  474. package/dist/shared/codec/s3/key-scope.js +0 -44
  475. package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
  476. package/dist/shared/codec/s3/lifecycle.js +0 -63
  477. package/dist/shared/codec/s3/offloader.d.ts +0 -44
  478. package/dist/shared/codec/s3/offloader.js +0 -118
  479. package/dist/shared/codec/s3/orphans.d.ts +0 -23
  480. package/dist/shared/codec/s3/orphans.js +0 -71
  481. package/dist/shared/codec/s3/read-write.d.ts +0 -18
  482. package/dist/shared/codec/s3/read-write.js +0 -51
  483. package/dist/shared/codec/s3/retry.d.ts +0 -5
  484. package/dist/shared/codec/s3/retry.js +0 -22
  485. package/dist/shared/concurrency.d.ts +0 -6
  486. package/dist/shared/constants.d.ts +0 -112
  487. package/dist/shared/constants.js +0 -115
  488. package/dist/shared/dynamodb/abort.d.ts +0 -9
  489. package/dist/shared/dynamodb/abort.js +0 -27
  490. package/dist/shared/dynamodb/backoff.d.ts +0 -15
  491. package/dist/shared/dynamodb/backoff.js +0 -48
  492. package/dist/shared/dynamodb/batch-write.d.ts +0 -22
  493. package/dist/shared/dynamodb/batch-write.js +0 -53
  494. package/dist/shared/dynamodb/cancellation.d.ts +0 -6
  495. package/dist/shared/dynamodb/cancellation.js +0 -7
  496. package/dist/shared/dynamodb/client.d.ts +0 -28
  497. package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
  498. package/dist/shared/dynamodb/conditional-put.js +0 -76
  499. package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
  500. package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
  501. package/dist/shared/dynamodb/expiry.d.ts +0 -16
  502. package/dist/shared/dynamodb/expiry.js +0 -29
  503. package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
  504. package/dist/shared/dynamodb/paginate-core.js +0 -82
  505. package/dist/shared/dynamodb/paginate.d.ts +0 -14
  506. package/dist/shared/dynamodb/paginate.js +0 -19
  507. package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
  508. package/dist/shared/dynamodb/partition-delete.js +0 -71
  509. package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
  510. package/dist/shared/dynamodb/retry-classifier.js +0 -118
  511. package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
  512. package/dist/shared/dynamodb/retry-policy.js +0 -22
  513. package/dist/shared/dynamodb/retry.d.ts +0 -31
  514. package/dist/shared/dynamodb/retry.js +0 -57
  515. package/dist/shared/dynamodb/scan.d.ts +0 -14
  516. package/dist/shared/dynamodb/scan.js +0 -19
  517. package/dist/shared/dynamodb/types.d.ts +0 -23
  518. package/dist/shared/errors/base-error.d.ts +0 -30
  519. package/dist/shared/errors/base-error.js +0 -27
  520. package/dist/shared/errors/boundary.d.ts +0 -18
  521. package/dist/shared/errors/boundary.js +0 -46
  522. package/dist/shared/errors/error-code.d.ts +0 -13
  523. package/dist/shared/errors/errors.d.ts +0 -68
  524. package/dist/shared/errors/errors.js +0 -114
  525. package/dist/shared/errors/upstream-error.d.ts +0 -16
  526. package/dist/shared/errors/upstream-error.js +0 -27
  527. package/dist/shared/errors/wrap-error.d.ts +0 -7
  528. package/dist/shared/errors/wrap-error.js +0 -15
  529. package/dist/shared/logging/logger.d.ts +0 -18
  530. package/dist/shared/logging/logger.js +0 -15
  531. package/dist/shared/logging/redaction-walk.d.ts +0 -23
  532. package/dist/shared/logging/redaction-walk.js +0 -112
  533. package/dist/shared/logging/redaction.d.ts +0 -39
  534. package/dist/shared/logging/redaction.js +0 -75
  535. package/dist/shared/logging/secret-patterns.d.ts +0 -92
  536. package/dist/shared/logging/secret-patterns.js +0 -133
  537. package/dist/shared/options.d.ts +0 -37
  538. package/dist/shared/ulid.d.ts +0 -23
  539. package/dist/shared/validation/options.d.ts +0 -8
  540. package/dist/shared/validation/options.js +0 -90
  541. package/dist/shared/validation/primitives.d.ts +0 -29
  542. package/dist/shared/validation/primitives.js +0 -82
  543. package/dist/shared/validation/ttl.d.ts +0 -28
  544. package/dist/shared/validation/ttl.js +0 -52
  545. package/dist/store/actions/get.d.ts +0 -13
  546. package/dist/store/actions/get.js +0 -73
  547. package/dist/store/actions/list-namespaces.d.ts +0 -8
  548. package/dist/store/actions/list-namespaces.js +0 -59
  549. package/dist/store/actions/put.d.ts +0 -10
  550. package/dist/store/actions/put.js +0 -96
  551. package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
  552. package/dist/store/actions/reconcile-vector-index.js +0 -26
  553. package/dist/store/actions/search.d.ts +0 -9
  554. package/dist/store/actions/search.js +0 -34
  555. package/dist/store/internal/backend-search.d.ts +0 -4
  556. package/dist/store/internal/backend-search.js +0 -74
  557. package/dist/store/internal/batch-plan.d.ts +0 -11
  558. package/dist/store/internal/batch-plan.js +0 -52
  559. package/dist/store/internal/candidates.d.ts +0 -23
  560. package/dist/store/internal/candidates.js +0 -94
  561. package/dist/store/internal/filter.d.ts +0 -9
  562. package/dist/store/internal/filter.js +0 -85
  563. package/dist/store/internal/index-reconcile.d.ts +0 -21
  564. package/dist/store/internal/index-reconcile.js +0 -118
  565. package/dist/store/internal/index-sync.d.ts +0 -10
  566. package/dist/store/internal/index-sync.js +0 -25
  567. package/dist/store/internal/item-mapper.d.ts +0 -27
  568. package/dist/store/internal/item-mapper.js +0 -61
  569. package/dist/store/internal/keys.d.ts +0 -17
  570. package/dist/store/internal/keys.js +0 -41
  571. package/dist/store/internal/namespace-match.d.ts +0 -11
  572. package/dist/store/internal/namespace-match.js +0 -40
  573. package/dist/store/internal/option-validation.d.ts +0 -13
  574. package/dist/store/internal/option-validation.js +0 -77
  575. package/dist/store/internal/overwrite-swap.d.ts +0 -32
  576. package/dist/store/internal/overwrite-swap.js +0 -68
  577. package/dist/store/internal/persist.d.ts +0 -28
  578. package/dist/store/internal/persist.js +0 -64
  579. package/dist/store/internal/query.d.ts +0 -11
  580. package/dist/store/internal/query.js +0 -48
  581. package/dist/store/internal/ranker.d.ts +0 -18
  582. package/dist/store/internal/ranker.js +0 -39
  583. package/dist/store/internal/read-existing.d.ts +0 -23
  584. package/dist/store/internal/read-existing.js +0 -41
  585. package/dist/store/internal/score-direction.d.ts +0 -31
  586. package/dist/store/internal/score-direction.js +0 -38
  587. package/dist/store/internal/search-filter.d.ts +0 -3
  588. package/dist/store/internal/search-filter.js +0 -10
  589. package/dist/store/internal/semantic-search.d.ts +0 -34
  590. package/dist/store/internal/semantic-search.js +0 -87
  591. package/dist/store/internal/setup.d.ts +0 -36
  592. package/dist/store/internal/setup.js +0 -40
  593. package/dist/store/internal/text-path.d.ts +0 -17
  594. package/dist/store/internal/validation.d.ts +0 -18
  595. package/dist/store/internal/validation.js +0 -51
  596. package/dist/store/internal/write-verify.d.ts +0 -42
  597. package/dist/store/internal/write-verify.js +0 -71
  598. package/dist/store/store.d.ts +0 -61
  599. package/dist/store/store.js +0 -107
  600. package/dist/store/types.d.ts +0 -50
  601. package/dist/store/types.js +0 -2
  602. package/dist/store/vector-backend.d.ts +0 -43
  603. package/dist/store/vector-backend.js +0 -2
  604. /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
  605. /package/dist/{factory → cjs/factory}/types.js +0 -0
  606. /package/dist/{history → cjs/history}/types.js +0 -0
  607. /package/dist/{shared → cjs/shared}/options.js +0 -0
  608. /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Hides which adapter-wide construction options are accepted.
3
+ *
4
+ * The table name, the client choice, the ttl, the retry policy, the recency
5
+ * index, the read concurrency, compression and S3 offload are checked here with
6
+ * their bounds, before an adapter builds anything, so a misconfiguration
7
+ * surfaces at construction rather than on the first call.
8
+ */
9
+ import type { CompressionConfig } from '../codec/compression.js';
10
+ import { type S3OffloadConfig } from '../codec/s3/config.js';
11
+ import type { RetryPolicy } from '../dynamodb/retry.js';
12
+ import type { BaseAdapterOptions, CodecOptions } from '../options.js';
13
+ /**
14
+ * Largest `s3.maxDownloadBytes`/`compression.maxDecompressedBytes` an adapter
15
+ * accepts (512 MiB): both hold one buffer fully resident while it is read or
16
+ * inflated, and `BaseAdapterOptions.readConcurrency`'s doc multiplies the two
17
+ * together into the package's memory ceiling, so an unbounded value here is an
18
+ * unbounded process, not just an unbounded object.
19
+ */
20
+ export declare const MAX_PAYLOAD_BUFFER_BYTES: number;
21
+ /** Largest `retry.maxAttempts` an adapter accepts; beyond it a retry loop is a hang, not a policy. */
22
+ export declare const MAX_RETRY_ATTEMPTS = 100;
23
+ /**
24
+ * Largest `retry.baseDelayMs`/`retry.maxDelayMs` an adapter accepts (one
25
+ * minute): combined with {@link MAX_RETRY_ATTEMPTS}, an unbounded per-attempt
26
+ * delay turns a bounded attempt count back into an effectively unbounded wait.
27
+ */
28
+ export declare const MAX_RETRY_DELAY_MS = 60000;
29
+ /**
30
+ * Largest `readConcurrency` an adapter accepts: it is a multiplier on the
31
+ * memory-ceiling formula (see the option's own doc) and on requests fired at
32
+ * once, so an unbounded value turns a typo into an out-of-memory crash or a
33
+ * request storm against the table/bucket.
34
+ */
35
+ export declare const MAX_READ_CONCURRENCY = 128;
36
+ /**
37
+ * Validate a table name against DynamoDB's own naming rule.
38
+ *
39
+ * Accepts: `tableName` — as the caller gave it.
40
+ *
41
+ * Returns: nothing: the value is kept under its declared type, and this
42
+ * checks it.
43
+ *
44
+ * Throws: `VALIDATION` naming `tableName`.
45
+ */
46
+ export declare function assertTableName(tableName: string): void;
47
+ /**
48
+ * Reject a client choice that names two ways of getting one, or a
49
+ * `clientConfig` that is not an object.
50
+ *
51
+ * Accepts: the three client options, from an adapter or from the factory that
52
+ * defaults them. An injected `client` is used as-is, so a `clientConfig` or
53
+ * `createClient` given alongside it would be silently ignored — including a
54
+ * `region` the caller believes is in effect. `clientConfig`, when given, must
55
+ * be an object that is neither `null` nor an array; what it holds is the AWS
56
+ * SDK's to judge.
57
+ *
58
+ * Returns: nothing: the value is kept under its declared type, and this
59
+ * checks it.
60
+ *
61
+ * Throws: `VALIDATION` naming `client` for both ways at once, then
62
+ * `clientConfig` for one that is not an object.
63
+ */
64
+ export declare function assertClientChoice(options: Pick<BaseAdapterOptions, 'client' | 'clientConfig' | 'createClient'>): void;
65
+ /**
66
+ * The three numeric bounds every retry policy shares, regardless of which
67
+ * other keys the caller's own type allows beyond them. Split out so a caller
68
+ * with a wider surface than {@link RetryPolicy} (`backfillRecencyIndex`'s
69
+ * `RetryOptions`, which also exposes `onRetry`, `isRetryable` and friends)
70
+ * can reuse the identical bounds without going through {@link
71
+ * assertRetryPolicy}'s narrower `assertShape`, which would refuse those
72
+ * extra keys outright.
73
+ *
74
+ * Accepts: `policy` — its `maxAttempts`, `baseDelayMs` and `maxDelayMs`, each
75
+ * optional.
76
+ *
77
+ * Returns: nothing: the value is kept under its declared type, and this
78
+ * checks it.
79
+ *
80
+ * Throws: `VALIDATION` naming `retry.maxAttempts`, `retry.baseDelayMs` or
81
+ * `retry.maxDelayMs`.
82
+ */
83
+ export declare function assertRetryBounds(policy: Pick<RetryPolicy, 'maxAttempts' | 'baseDelayMs' | 'maxDelayMs'>): void;
84
+ /**
85
+ * Validate a retry policy: shape, then each bound.
86
+ *
87
+ * Accepts: `policy` — must be an object naming only `maxAttempts`,
88
+ * `baseDelayMs` and `maxDelayMs`; each, if given, is a bounded integer.
89
+ *
90
+ * Returns: nothing: the value is kept under its declared type, and this
91
+ * checks it.
92
+ *
93
+ * Throws: `VALIDATION` naming `retry` or `retry.<key>`.
94
+ */
95
+ export declare function assertRetryPolicy(policy: RetryPolicy): void;
96
+ /**
97
+ * Validate the options every adapter shares, at construction.
98
+ *
99
+ * Accepts: `options` — must be an object. `tableName` is required; every other
100
+ * option is optional, and `undefined` means "not configured" for each. A
101
+ * nested `ttl`, `retry`, `compression` or `s3` must be an object whose keys
102
+ * this package reads: a misspelt key is rejected rather than ignored, because
103
+ * the caller would otherwise run on a default they believe they overrode.
104
+ * `clientConfig` and `s3.clientConfig` must be objects, but their keys belong
105
+ * to the AWS SDK and are not checked. Keys of `options` itself are not checked
106
+ * here — the adapter types differ and this validator sees only the shared ones.
107
+ *
108
+ * Returns: nothing: the value is kept under its declared type, and this
109
+ * checks it.
110
+ *
111
+ * Throws: `VALIDATION` whose `context.field` names the offending option,
112
+ * dotted for a nested one (`s3.bucketName`). The order is `tableName`, client
113
+ * choice, `ttl`, `retry`, `compression`, `s3`, `readConcurrency`, then the
114
+ * index options.
115
+ *
116
+ * Guarantees: a misconfiguration surfaces at construction, naming the option,
117
+ * rather than as a raw AWS error on the first request.
118
+ */
119
+ export declare function assertBaseAdapterOptions(options: BaseAdapterOptions & CodecOptions): void;
120
+ /**
121
+ * Validate a `compression` config, honoring its allowed key set.
122
+ *
123
+ * Accepts: `config` — an object naming only {@link CompressionConfig}'s keys.
124
+ *
125
+ * Returns: nothing: the value is kept under its declared type, and this
126
+ * checks it.
127
+ *
128
+ * Throws: `VALIDATION` naming the offending field, dotted under
129
+ * `compression`.
130
+ */
131
+ export declare function assertCompression(config: CompressionConfig): void;
132
+ /**
133
+ * Validate an `s3` offload config, honoring its allowed key set.
134
+ *
135
+ * Accepts: `config` — an object naming only {@link S3OffloadConfig}'s keys.
136
+ * `config.clientConfig`, when given, must be an object that is neither `null`
137
+ * nor an array; its own keys are not checked. `config.createS3Client`, when
138
+ * given, must be a function.
139
+ *
140
+ * Returns: nothing: the value is kept under its declared type, and this
141
+ * checks it.
142
+ *
143
+ * Throws: `VALIDATION` naming the offending field, dotted under `s3`.
144
+ */
145
+ export declare function assertS3(config: S3OffloadConfig): void;
@@ -0,0 +1,156 @@
1
+ import { MAX_INLINE_PAYLOAD_BYTES } from '../codec/codec.js';
2
+ import { assertScopedKeyPrefix } from '../codec/s3/config.js';
3
+ import { DEFAULT_MAX_S3_DOWNLOAD_BYTES, DEFAULT_S3_THRESHOLD_BYTES, } from '../codec/s3/offloader.js';
4
+ import { MAX_INDEX_SHARDS } from '../dynamodb/recency-index.js';
5
+ import { validationError } from '../errors/errors.js';
6
+ import { allKeysOf, assertObjectShape, assertShape } from './option-shape.js';
7
+ import { assertInteger, assertNonEmptyString } from './primitives.js';
8
+ import { resolveTtlSeconds } from './ttl.js';
9
+ const TABLE_NAME_PATTERN = /^[A-Za-z0-9_.-]{3,255}$/;
10
+ export const MAX_PAYLOAD_BUFFER_BYTES = 512 * 1024 * 1024;
11
+ export const MAX_RETRY_ATTEMPTS = 100;
12
+ export const MAX_RETRY_DELAY_MS = 60_000;
13
+ export const MAX_READ_CONCURRENCY = 128;
14
+ const RETRY_KEYS = allKeysOf({
15
+ maxAttempts: 'maxAttempts',
16
+ baseDelayMs: 'baseDelayMs',
17
+ maxDelayMs: 'maxDelayMs',
18
+ });
19
+ export function assertTableName(tableName) {
20
+ if (typeof tableName !== 'string' || !TABLE_NAME_PATTERN.test(tableName)) {
21
+ throw validationError('tableName must be 3-255 characters from [A-Za-z0-9_.-], as DynamoDB requires', 'tableName');
22
+ }
23
+ }
24
+ export function assertClientChoice(options) {
25
+ if (options.client &&
26
+ (options.clientConfig !== undefined || options.createClient !== undefined)) {
27
+ throw validationError('provide either `client` or `clientConfig`/`createClient`, not both: an injected client ' +
28
+ 'is used as-is and the configuration would be silently ignored', 'client');
29
+ }
30
+ if (options.clientConfig !== undefined)
31
+ assertObjectShape(options.clientConfig, 'clientConfig');
32
+ }
33
+ export function assertRetryBounds(policy) {
34
+ if (policy.maxAttempts !== undefined) {
35
+ assertInteger(policy.maxAttempts, 'retry.maxAttempts', { min: 1, max: MAX_RETRY_ATTEMPTS });
36
+ }
37
+ if (policy.baseDelayMs !== undefined) {
38
+ assertInteger(policy.baseDelayMs, 'retry.baseDelayMs', { min: 1, max: MAX_RETRY_DELAY_MS });
39
+ }
40
+ if (policy.maxDelayMs !== undefined) {
41
+ assertInteger(policy.maxDelayMs, 'retry.maxDelayMs', {
42
+ min: policy.baseDelayMs ?? 1,
43
+ max: MAX_RETRY_DELAY_MS,
44
+ });
45
+ }
46
+ }
47
+ export function assertRetryPolicy(policy) {
48
+ assertShape(policy, RETRY_KEYS, 'retry');
49
+ assertRetryBounds(policy);
50
+ }
51
+ function assertRecencyIndex(options) {
52
+ if (options.indexShards !== undefined) {
53
+ assertInteger(options.indexShards, 'indexShards', { min: 1, max: MAX_INDEX_SHARDS });
54
+ }
55
+ if (options.indexName !== undefined)
56
+ assertNonEmptyString(options.indexName, 'indexName');
57
+ }
58
+ export function assertBaseAdapterOptions(options) {
59
+ if (typeof options !== 'object' || options === null) {
60
+ throw validationError('options must be an object naming at least a tableName', 'options');
61
+ }
62
+ assertTableName(options.tableName);
63
+ assertClientChoice(options);
64
+ if (options.ttl !== undefined)
65
+ resolveTtlSeconds(options.ttl);
66
+ if (options.retry !== undefined)
67
+ assertRetryPolicy(options.retry);
68
+ if (options.compression !== undefined)
69
+ assertCompression(options.compression);
70
+ if (options.s3 !== undefined)
71
+ assertS3(options.s3);
72
+ if (options.readConcurrency !== undefined) {
73
+ assertInteger(options.readConcurrency, 'readConcurrency', {
74
+ min: 1,
75
+ max: MAX_READ_CONCURRENCY,
76
+ });
77
+ }
78
+ assertRecencyIndex(options);
79
+ }
80
+ const SSE_ALGORITHMS = ['AES256', 'aws:kms', 'aws:kms:dsse'];
81
+ const COMPRESSION_KEYS = allKeysOf({
82
+ enabled: 'enabled',
83
+ level: 'level',
84
+ minSizeBytes: 'minSizeBytes',
85
+ maxDecompressedBytes: 'maxDecompressedBytes',
86
+ });
87
+ const S3_KEYS = allKeysOf({
88
+ bucketName: 'bucketName',
89
+ keyPrefix: 'keyPrefix',
90
+ thresholdBytes: 'thresholdBytes',
91
+ serverSideEncryption: 'serverSideEncryption',
92
+ sseKmsKeyId: 'sseKmsKeyId',
93
+ maxDownloadBytes: 'maxDownloadBytes',
94
+ clientConfig: 'clientConfig',
95
+ createS3Client: 'createS3Client',
96
+ });
97
+ export function assertCompression(config) {
98
+ assertShape(config, COMPRESSION_KEYS, 'compression');
99
+ if (typeof config.enabled !== 'boolean') {
100
+ throw validationError('compression.enabled must be a boolean', 'compression.enabled');
101
+ }
102
+ if (config.level !== undefined) {
103
+ assertInteger(config.level, 'compression.level', { min: 0, max: 9 });
104
+ }
105
+ if (config.minSizeBytes !== undefined) {
106
+ assertInteger(config.minSizeBytes, 'compression.minSizeBytes', {
107
+ min: 0,
108
+ max: MAX_PAYLOAD_BUFFER_BYTES,
109
+ });
110
+ }
111
+ if (config.maxDecompressedBytes !== undefined) {
112
+ assertInteger(config.maxDecompressedBytes, 'compression.maxDecompressedBytes', {
113
+ min: 1,
114
+ max: MAX_PAYLOAD_BUFFER_BYTES,
115
+ });
116
+ }
117
+ }
118
+ function assertS3Encryption(config) {
119
+ if (config.serverSideEncryption !== undefined &&
120
+ !SSE_ALGORITHMS.includes(config.serverSideEncryption)) {
121
+ throw validationError(`s3.serverSideEncryption must be one of ${SSE_ALGORITHMS.join(', ')}`, 's3.serverSideEncryption');
122
+ }
123
+ if (config.sseKmsKeyId !== undefined) {
124
+ assertNonEmptyString(config.sseKmsKeyId, 's3.sseKmsKeyId');
125
+ }
126
+ }
127
+ export function assertS3(config) {
128
+ assertShape(config, S3_KEYS, 's3');
129
+ assertNonEmptyString(config.bucketName, 's3.bucketName');
130
+ if (config.clientConfig !== undefined)
131
+ assertObjectShape(config.clientConfig, 's3.clientConfig');
132
+ if (config.thresholdBytes !== undefined) {
133
+ assertInteger(config.thresholdBytes, 's3.thresholdBytes', {
134
+ min: 1,
135
+ max: MAX_INLINE_PAYLOAD_BYTES,
136
+ });
137
+ }
138
+ if (config.keyPrefix !== undefined)
139
+ assertScopedKeyPrefix(config.keyPrefix);
140
+ if (config.maxDownloadBytes !== undefined) {
141
+ assertInteger(config.maxDownloadBytes, 's3.maxDownloadBytes', {
142
+ min: 1,
143
+ max: MAX_PAYLOAD_BUFFER_BYTES,
144
+ });
145
+ }
146
+ const threshold = config.thresholdBytes ?? DEFAULT_S3_THRESHOLD_BYTES;
147
+ const downloadable = config.maxDownloadBytes ?? DEFAULT_MAX_S3_DOWNLOAD_BYTES;
148
+ if (downloadable < threshold) {
149
+ throw validationError(`s3.maxDownloadBytes (${downloadable}) must be at least s3.thresholdBytes (${threshold}): ` +
150
+ 'every offloaded payload is at least the threshold, so none could be read back', 's3.maxDownloadBytes');
151
+ }
152
+ assertS3Encryption(config);
153
+ if (config.createS3Client !== undefined && typeof config.createS3Client !== 'function') {
154
+ throw validationError('s3.createS3Client must be a function', 's3.createS3Client');
155
+ }
156
+ }
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Hides the rules every caller-supplied primitive must pass.
3
+ *
4
+ * What makes a string an identifier safe inside a key, an integer a page size
5
+ * this package serves, and an array a copy holding only strings is decided
6
+ * once here. Only `parseLimit` returns a branded type of its own —
7
+ * `PageLimit`, which only it can build (record 21); every other rule's
8
+ * `parse*` form returns the plain checked value, and a feature parser brands
9
+ * it into its own type. Feature parsers compose these rules rather than
10
+ * restate them, so tightening one changes every method at once.
11
+ */
12
+ /**
13
+ * Largest `limit` any read accepts, on every method that takes one.
14
+ *
15
+ * Chosen from what a page costs, which is linear in `limit` and amortised
16
+ * nowhere: every row of a page is held decoded and resident until the whole
17
+ * page is handed back, and an offloaded row is an S3 GET and a decompression
18
+ * of its own, `readConcurrency` at a time. A page of N rows is therefore N
19
+ * objects held at once and, in the worst case, N round trips before the caller
20
+ * sees the first of them.
21
+ *
22
+ * Ten thousand is where this package already says a read has stopped being one
23
+ * and become an export: `MAX_TOTAL_ROWS_IN_MEMORY`
24
+ * (`src/shared/dynamodb/paginate.ts`) refuses to collect more than that across
25
+ * a whole paginated query, and `LIST_SCAN_WARN_THRESHOLD`
26
+ * (`src/shared/dynamodb/paginate.ts`) tells an operator about a listing that
27
+ * walks that far. A single page allowed past either would hold more than every
28
+ * other path in the package may. Its own literal at the same value rather than
29
+ * an alias of them, for the reason `LIST_SCAN_WARN_THRESHOLD`
30
+ * (`src/shared/dynamodb/paginate.ts`) records.
31
+ *
32
+ * What it does *not* do is promise a memory figure: rows are the caller's own
33
+ * data, so ten thousand session summaries are a few megabytes while a hundred
34
+ * items at `MAX_INLINE_PAYLOAD_BYTES` (`src/shared/codec/codec.ts`) are forty.
35
+ * It bounds a typo — a `1e12` that would otherwise resolve — not a working set.
36
+ *
37
+ * What a caller loses at the ceiling is one large page, never the rows: every
38
+ * bounded read has a way to continue — `listSessions` a cursor, `search` an
39
+ * `offset`, `getMessages` a `before`, and `saver.list` streams and never
40
+ * accumulates — so an answer larger than this is paid for as pages.
41
+ */
42
+ export declare const MAX_PAGE_LIMIT = 10000;
43
+ declare const pageLimitBrand: unique symbol;
44
+ /**
45
+ * A page size checked against the package-wide page rule: an integer from the
46
+ * call site's floor to {@link MAX_PAGE_LIMIT}. {@link parseLimit} is the only
47
+ * way to obtain one, so a reader that asks for a `PageLimit` cannot be handed a
48
+ * size nobody checked, and does not check it again. The brand is phantom: at
49
+ * run time it is the caller's own number.
50
+ */
51
+ export type PageLimit = number & {
52
+ readonly [pageLimitBrand]: true;
53
+ };
54
+ /**
55
+ * The value as a string, or a refusal.
56
+ *
57
+ * Accepts: `value` — anything. A JavaScript caller, or a TypeScript caller
58
+ * whose input came from JSON, can pass any type where a string is declared, and
59
+ * every rule after this one reaches a string method.
60
+ *
61
+ * Returns: `value`, typed as the string it was checked to be.
62
+ *
63
+ * Throws: `VALIDATION` naming `field`, for anything that is not a string.
64
+ */
65
+ export declare function parseString(value: unknown, field: string): string;
66
+ /**
67
+ * Throw `VALIDATION` unless `value` is a string holding at least one
68
+ * non-whitespace character.
69
+ *
70
+ * Accepts: `value` — any type; `''` and whitespace-only are rejected alongside
71
+ * non-strings. `field` — the option or identifier name carried on the error.
72
+ * The rule is {@link parseNonBlankString}'s; this form is for a value the
73
+ * caller keeps under its declared type.
74
+ *
75
+ * Returns: nothing: the value is kept under its declared type, and this
76
+ * checks it.
77
+ *
78
+ * Throws: `VALIDATION` naming `field`.
79
+ */
80
+ export declare function assertNonEmptyString(value: string, field: string): void;
81
+ /**
82
+ * The value as an integer inside `bounds`.
83
+ *
84
+ * Accepts: `value` — anything; a non-number, a fraction, `NaN` and `Infinity`
85
+ * are all refused by the integer rule. `bounds` — omitted or `{}` bounds
86
+ * nothing; `min` and `max` are inclusive.
87
+ *
88
+ * Returns: `value`, typed as a number.
89
+ *
90
+ * Throws: `VALIDATION` naming `field`; the integer rule is reported before
91
+ * either bound.
92
+ */
93
+ export declare function parseInteger(value: unknown, field: string, bounds?: {
94
+ min?: number;
95
+ max?: number;
96
+ }): number;
97
+ /**
98
+ * Throw `VALIDATION` unless `value` is an integer inside `bounds`.
99
+ *
100
+ * Accepts: `value` — any type; a non-number, a fraction, `NaN` and `Infinity`
101
+ * are all rejected by the integer rule. `bounds` — omitted or `{}` bounds
102
+ * nothing, `min` and `max` are inclusive and may be given together or alone.
103
+ * The rule is {@link parseInteger}'s; this form is for a value the caller
104
+ * keeps under its declared type.
105
+ *
106
+ * Returns: nothing: the value is kept under its declared type, and this
107
+ * checks it.
108
+ *
109
+ * Throws: `VALIDATION` naming `field`; the integer rule is reported before
110
+ * either bound.
111
+ */
112
+ export declare function assertInteger(value: number, field: string, bounds?: {
113
+ min?: number;
114
+ max?: number;
115
+ }): void;
116
+ /**
117
+ * The value as a page size this package will serve: an integer from `min` to
118
+ * {@link MAX_PAGE_LIMIT}.
119
+ *
120
+ * One rule for every `limit` a public method takes. Without it they would
121
+ * disagree three ways — no minimum on `saver.list`, so `limit: -1` would
122
+ * resolve; `0` refused by the history reads and accepted by the store — and
123
+ * none would have a ceiling, so `limit: 1e12` would resolve on five methods.
124
+ * The same mistake would be answered differently depending on which method a
125
+ * caller happened to reach for.
126
+ *
127
+ * What survives that unification is one message shape, one ceiling and two
128
+ * floors, because zero does not ask for the same thing on every method. A zero
129
+ * *page* is answered: the caller asked a listing for nothing, holds the empty
130
+ * array it returned, and can see that is what it got. A zero *conversation
131
+ * window* is refused: it feeds a model rather than a caller, an empty
132
+ * conversation is indistinguishable from one that never happened, and the
133
+ * answer the model gives is persisted as the transcript. So every call site
134
+ * passes its floor and says why; `1` is passed from exactly one place,
135
+ * `parseMessageWindow` in `src/history/internal/parse.ts`, which is the
136
+ * check behind `history.getMessages` and `history.forSession` alike.
137
+ *
138
+ * Accepts: `value` — any type; a non-number, a fraction, `NaN` and `Infinity`
139
+ * are all rejected by the integer rule. `min` — `0` where an empty result is a
140
+ * request the call site answers without issuing a read, `1` where an empty
141
+ * result would be mistaken for an empty conversation. A negative value is
142
+ * refused at either floor rather than read as zero: it is a page size that was
143
+ * computed, and the computation went wrong.
144
+ *
145
+ * Returns: `value` as a {@link PageLimit}.
146
+ *
147
+ * Throws: `VALIDATION` naming `limit`, quoting the bound broken — the floor
148
+ * or {@link MAX_PAGE_LIMIT} — so the caller is told what the rule is rather
149
+ * than only that it has one.
150
+ */
151
+ export declare function parseLimit(value: unknown, min: 0 | 1): PageLimit;
152
+ /**
153
+ * The value as an array of strings, copied.
154
+ *
155
+ * Accepts: `value` — anything; a non-array is refused, as is an array holding
156
+ * anything but a string. An empty array is valid.
157
+ *
158
+ * Returns: a copy of `value`, so a caller changing its own array afterwards
159
+ * changes nothing this package acts on.
160
+ *
161
+ * Throws: `VALIDATION` naming `field`, its message identifying the offending
162
+ * index. Walked by position rather than `Array.prototype.some`, which skips a
163
+ * hole in a sparse array instead of visiting it, and copied by position rather
164
+ * than `Array.prototype.slice`, which carries a hole forward instead of
165
+ * filling it: unchecked, a hole passed as a string and reached a caller who
166
+ * declared `string[]`.
167
+ */
168
+ export declare function parseStringArray(value: unknown, field: string): string[];
169
+ /**
170
+ * Throw `VALIDATION` unless `value` is an array of strings.
171
+ *
172
+ * Accepts: `value` — declared `readonly string[]` for a caller whose types
173
+ * hold; a non-array is rejected, as is an array holding anything but a
174
+ * string. An empty array is valid. The rule is {@link parseStringArray}'s;
175
+ * this form is for a value the caller keeps under its declared type.
176
+ *
177
+ * Returns: nothing: the value is kept under its declared type, and this
178
+ * checks it.
179
+ *
180
+ * Throws: `VALIDATION` naming `field`.
181
+ */
182
+ export declare function assertStringArray(value: readonly string[], field: string): void;
183
+ /**
184
+ * Throw `VALIDATION` unless `value` is free of control characters.
185
+ *
186
+ * Accepts: `value` — any type, non-strings rejected first by
187
+ * {@link parseString}. Rejected code points are C0 (`U+0000`–`U+001F`), DEL
188
+ * (`U+007F`) and C1 (`U+0080`–`U+009F`). The rule is this function's own:
189
+ * {@link parseKeySegment} applies it to every key segment and identifier by
190
+ * calling this one, and this form serves a value the caller keeps under its
191
+ * declared type.
192
+ *
193
+ * Returns: nothing: the value is kept under its declared type, and this
194
+ * checks it.
195
+ *
196
+ * Throws: `VALIDATION` naming `field`.
197
+ *
198
+ * Guarantees: an accepted value cannot terminate a log line or open a terminal
199
+ * escape sequence — neither `ESC` (`U+001B`) nor the single-byte `CSI`
200
+ * (`U+009B`) survives this rule. Identifiers are written into log lines by this
201
+ * package, and unneutralised output is CWE-117
202
+ * (https://cwe.mitre.org/data/definitions/117.html).
203
+ */
204
+ export declare function assertNoControlChars(value: string, field: string): void;
205
+ /**
206
+ * Throw `VALIDATION` unless every surrogate in `value` is part of a
207
+ * pair.
208
+ *
209
+ * Accepts: `value` — any type, non-strings rejected first by
210
+ * {@link parseString}. The rule is this function's own:
211
+ * {@link parseKeySegment} applies it to every key segment and identifier by
212
+ * calling this one, and this form serves a value the caller keeps under its
213
+ * declared type.
214
+ *
215
+ * Returns: nothing: the value is kept under its declared type, and this
216
+ * checks it.
217
+ *
218
+ * Throws: `VALIDATION` naming `field`.
219
+ *
220
+ * Guarantees: the mapping from an accepted value to its UTF-8 encoding is
221
+ * injective. `Buffer.from(value, 'utf8')` replaces a lone surrogate with
222
+ * U+FFFD, so two values differing only there would encode identically and,
223
+ * where that encoding is a storage key, address one object.
224
+ */
225
+ export declare function assertWellFormed(value: string, field: string): void;
226
+ /**
227
+ * One segment of a key, which may be empty: every rule of
228
+ * {@link parseIdentifier} except non-blank. The checkpoint namespace is the one
229
+ * such value — `''` *is* the root namespace — and it is still a segment of both
230
+ * the sort key and the offloaded object's key, so a lone surrogate or a control
231
+ * character in it is as damaging as in any other.
232
+ *
233
+ * Accepts: `value` — anything. `separator`, `field`, `maxBytes` — as
234
+ * {@link parseIdentifier}.
235
+ *
236
+ * Returns: `value`, typed as a string.
237
+ *
238
+ * Throws: `VALIDATION` naming `field`, in this order: string, at most
239
+ * `maxBytes` of UTF-8, free of `separator`, free of control characters,
240
+ * well-formed UTF-16.
241
+ */
242
+ export declare function parseKeySegment(value: unknown, separator: string, field: string, maxBytes: number): string;
243
+ /**
244
+ * The value as a caller-supplied identifier that reaches a DynamoDB key or an
245
+ * S3 object key, checked.
246
+ *
247
+ * Accepts: `value` — any type. `separator`, `field`, `maxBytes` — as the rules
248
+ * below.
249
+ *
250
+ * Returns: `value`, typed as a string. The caller's parser brands it.
251
+ *
252
+ * Throws: `VALIDATION` naming `field`. The rules apply in this order, and
253
+ * the order is part of the contract because a caller branches on which one
254
+ * failed: string, non-blank, at most `maxBytes` of UTF-8, free of `separator`,
255
+ * free of control characters, well-formed UTF-16.
256
+ *
257
+ * Guarantees: every guarantee of {@link assertNoControlChars} and
258
+ * {@link assertWellFormed} holds for an accepted value, and it composes into a
259
+ * key segment without escaping.
260
+ *
261
+ * Not guaranteed, and deliberately so: an accepted identifier is **not**
262
+ * normalised, and Unicode format characters (`Cf` — `U+200B` ZERO WIDTH SPACE,
263
+ * `U+200C`/`U+200D` the zero-width non-joiner and joiner, `U+FEFF`, `U+202E`
264
+ * RIGHT-TO-LEFT OVERRIDE) and the separators `U+2028`/`U+2029` are all
265
+ * accepted. Two facts make that safe, and one makes it necessary.
266
+ *
267
+ * It is safe because none of them can produce a collision. DynamoDB orders and
268
+ * compares strings by their UTF-8 bytes, and {@link assertWellFormed} has
269
+ * already made the mapping from an accepted identifier to those bytes
270
+ * injective — so two identifiers differing anywhere address two different
271
+ * rows. An identifier that reaches an S3 key is base64url-encoded on the way
272
+ * (`encodeKeyPart`), so none of these characters appears in a key at all. What
273
+ * one actually costs is a log line, a terminal or a console that renders two
274
+ * distinct identifiers alike: confusion for a reader, not a row either of them
275
+ * can reach. Terminal escapes and line breaks, which *are* an injection rather
276
+ * than a rendering, are refused by {@link assertNoControlChars}.
277
+ *
278
+ * It is necessary because refusing `Cf` would refuse ordinary text rather than
279
+ * hostile text. `U+200C` and `U+200D` carry meaning in Persian, Hindi and the
280
+ * Indic scripts — the Persian for "goes" is spelled with a `U+200C` — and
281
+ * `U+200D` is what joins the code points of every multi-person emoji. A rule
282
+ * against `Cf` would reject a `thread_id` or a store `key` taken from ordinary
283
+ * user text, in a package whose identifiers are the caller's own.
284
+ *
285
+ * Normalising would be worse than breaking: `NFC` folds `e` + `U+0301` onto
286
+ * `U+00E9`, so a row written under one form would afterwards be addressed
287
+ * under the other and the caller's data would stop being found. That is silent
288
+ * loss on upgrade, bought with a rendering nicety. A caller who wants either
289
+ * rule can apply it to its own identifiers before passing them.
290
+ */
291
+ export declare function parseIdentifier(value: unknown, separator: string, field: string, maxBytes: number): string;
292
+ export {};