# SaaS RS SDK Changelog

## [0.5.7] - 2026-12-17
### Changed
- [#177](https://gitlab.com/saas-rs/sdk/-/issues/177) Upgrade pbbson 0.2.3 → 0.2.4
- [#176](https://gitlab.com/saas-rs/sdk/-/issues/176) Implement Debug and Clone for FindOptions

## [0.5.6] - 2026-02-16
### Added
- [#174](https://gitlab.com/saas-rs/sdk/-/issues/174) Use a SessionStore FindOptions struct to prevent parameter sprawl
- [#173](https://gitlab.com/saas-rs/sdk/-/issues/173) Support ConfigStore find_many pagination

### Changed
- [#175](https://gitlab.com/saas-rs/sdk/-/issues/175) Upgrade 13 crates

### Fixed
- [#172](https://gitlab.com/saas-rs/sdk/-/issues/172) SessionStore adapter for Redis deserializer converts bool and number JSON types to string
- [#136](https://gitlab.com/saas-rs/sdk/-/issues/136) SessionStore adapter for Memory fails to apply a filter, when one is provided
- [#96](https://gitlab.com/saas-rs/sdk/-/issues/96) SessionStore adapter for Redis fails to apply a filter, when one is provided

## [0.5.5] - 2026-02-10
### Changed
- [#171](https://gitlab.com/saas-rs/sdk/-/issues/171) Use async client in SessionStore adapter for Redis
- [#170](https://gitlab.com/saas-rs/sdk/-/issues/170) Support non-transactional MongoDB instances that have no replica set

## [0.5.4] - 2026-02-07
### Added
- [#169](https://gitlab.com/saas-rs/sdk/-/issues/169) Support ConfigStore find_many projections

## [0.5.3] - 2026-01-31
### Changed
- [#167](https://gitlab.com/saas-rs/sdk/-/issues/167) Centralize Redis error conversions
- [#166](https://gitlab.com/saas-rs/sdk/-/issues/166) Centralize MongoDB error conversions
- [#165](https://gitlab.com/saas-rs/sdk/-/issues/165) Upgrade Rust 1.91.1 → 1.93.0

### Fixed
- [#168](https://gitlab.com/saas-rs/sdk/-/issues/168) SessionStore adapter for Redis find_many fails when there are no keys

## [0.5.2] - 2025-01-14
### Changed
- [#163](https://gitlab.com/saas-rs/sdk/-/issues/163) Upgrade 4 crates
- [#162](https://gitlab.com/saas-rs/sdk/-/issues/162) Adopt get/put/del semantics in ObjectStore
- [#160](https://gitlab.com/saas-rs/sdk/-/issues/160) Use a ConfigStore FindOptions struct to prevent parameter sprawl
- [#159](https://gitlab.com/saas-rs/sdk/-/issues/159) Retry S3 operations after a transient error

## [0.5.1] - 2026-01-08
### Fixed
- [#161](https://gitlab.com/saas-rs/sdk/-/issues/161) SessionStore adapter for Redis fails to deserialize structs with 2+ levels of nesting

## [0.5.0] - 2026-01-04
### Changed
- [#158](https://gitlab.com/saas-rs/sdk/-/issues/158) Remove metadata capabilities from ObjectStore trait

### Fixed
- [#144](https://gitlab.com/saas-rs/sdk/-/issues/144) ObjectStore configuration for Digital Ocean repeats the bucket name as the first path segment; switch to OpenDAL

## [0.4.8] - 2025-12-31
### Changed
- [#155](https://gitlab.com/saas-rs/sdk/-/issues/155) Allow payment provider callers to specify the metadata field name
- [#154](https://gitlab.com/saas-rs/sdk/-/issues/154) Export the async-stripe-billing crate
- [#134](https://gitlab.com/saas-rs/sdk/-/issues/134) Replace `fred` crate with `redis`

### Fixed
- [#157](https://gitlab.com/saas-rs/sdk/-/issues/157) Rethrown Stripe error messages are bloated while message details are lost in the noise
- [#156](https://gitlab.com/saas-rs/sdk/-/issues/156) Plan cost sync fails to use a "stripe" object to namespace the settings

## [0.4.7] - 2025-12-26
### Changed
- [#153](https://gitlab.com/saas-rs/sdk/-/issues/153) Promote models module to a higher directory, since it's also used for payments
- [#152](https://gitlab.com/saas-rs/sdk/-/issues/152) Upgrade 7 crates
- [#151](https://gitlab.com/saas-rs/sdk/-/issues/151) Export the Stripe related crates
- [#140](https://gitlab.com/saas-rs/sdk/-/issues/140) When writing to Plan metadata, use a "stripe" object to namespace the keys

### Fixed
- [#150](https://gitlab.com/saas-rs/sdk/-/issues/150) SessionStore adapter for Redis fails returning NotFound error when deleting non-existent record

## [0.4.6] - 2025-12-23
### Fixed
- [#149](https://gitlab.com/saas-rs/sdk/-/issues/149) SessionStore adapter for Redis fails deserializing a model containing a metadata struct

## [0.4.5] - 2025-12-17
### Changed
- [#146](https://gitlab.com/saas-rs/sdk/-/issues/146) Upgrade Rust 1.90.0 → 1.91.1

### Fixed
- [#148](https://gitlab.com/saas-rs/sdk/-/issues/148) ConfigStore adapter for MongoDB ignores requested ordering
- [#147](https://gitlab.com/saas-rs/sdk/-/issues/147) ConfigStore adapter for MongoDB logs error when handling empty belongs-to relation

## [0.4.4] - 2025-12-09
### Changed
- [#142](https://gitlab.com/saas-rs/sdk/-/issues/142) Upgrade 4 crates

### Fixed
- [#143](https://gitlab.com/saas-rs/sdk/-/issues/143) ObjectStore configuration for Digital Ocean leaves a double-slash in paths

## [0.4.3] - 2025-11-27
### Changed
- [#139](https://gitlab.com/saas-rs/sdk/-/issues/139) Pin to exact version of async-stripe 1.0.0 while it is pre-release
- [#132](https://gitlab.com/saas-rs/sdk/-/issues/132) Set accountId and planId in Stripe checkout session metadata

### Fixed
- [#137](https://gitlab.com/saas-rs/sdk/-/issues/137) ObjectStore adapter for MongoDB find_many fails to match when filters contain ObjectIds

## [0.4.2] - 2025-11-20
### Added
- [#128](https://gitlab.com/saas-rs/sdk/-/issues/128) Support creating a Stripe Checkout Session via the payment processor

### Changed
- [#131](https://gitlab.com/saas-rs/sdk/-/issues/131) Rename PaymentProcessor → PaymentProvider enum for consistency with storage traits
- [#130](https://gitlab.com/saas-rs/sdk/-/issues/130) Store service name and plan name in Stripe product metadata

### Fixed
- [#127](https://gitlab.com/saas-rs/sdk/-/issues/127) Redis SessionStore adapter fails to assign createdAt and updatedAt timestamp fields

## [0.4.1] - 2025-11-13
### Changed
- [#126](https://gitlab.com/saas-rs/sdk/-/issues/126) Upgrade 3 crates
- [#125](https://gitlab.com/saas-rs/sdk/-/issues/125) Don't define structs or functions in mod.rs files

## [0.4.0] - 2025-11-06
### Added
- [#123](https://gitlab.com/saas-rs/sdk/-/issues/123) Support Postgres migrations in storage adapter config

### Changed
- [#124](https://gitlab.com/saas-rs/sdk/-/issues/124) Upgrade pbbson 0.1.9 → 0.2.0, bson 2.15 → 3.0

## [0.3.9] - 2025-10-14
### Added
- [#122](https://gitlab.com/saas-rs/sdk/-/issues/122) Provide decimal datatype support in the Postgres ConfigStore adapter
- [#117](https://gitlab.com/saas-rs/sdk/-/issues/117) Provide a utility function to compare two Protobuf messages for equality while ignoring audit fields

### Changed
- [#121](https://gitlab.com/saas-rs/sdk/-/issues/121) Upgrade 6 crates
- [#120](https://gitlab.com/saas-rs/sdk/-/issues/120) Upgrade Rust edition from 2021 → 2024
- [#119](https://gitlab.com/saas-rs/sdk/-/issues/119) Disallow unwrap during clippy checks
- [#118](https://gitlab.com/saas-rs/sdk/-/issues/118) Upgrade Rust 1.89.0 → 1.90.0

### Fixed
- [#116](https://gitlab.com/saas-rs/sdk/-/issues/116) ObjectStore adapter for MongoDB fails to store additional metadata

## [0.3.8] - 2025-10-05
### Added
- [#114](https://gitlab.com/saas-rs/sdk/-/issues/114) Provide a utility function to compare two models for equality while ignoring audit fields

### Fixed
- [#115](https://gitlab.com/saas-rs/sdk/-/issues/115) ConfigStore adapter for MongoDB fails to insert empty foreign key string fields
- [#113](https://gitlab.com/saas-rs/sdk/-/issues/113) Payment processor enum is not public

## [0.3.7] - 2025-09-29
### Added
- [#111](https://gitlab.com/saas-rs/sdk/-/issues/111) Author a README
- [#110](https://gitlab.com/saas-rs/sdk/-/issues/110) Provide uuid datatype support in the Postgres ConfigStore adapter
- [#109](https://gitlab.com/saas-rs/sdk/-/issues/109) Support deserializing an array in the ConfigStore adapter for Postgres
- [#108](https://gitlab.com/saas-rs/sdk/-/issues/108) Provide an enum of enabled payment processors
- [#86](https://gitlab.com/saas-rs/sdk/-/issues/86) Provide datatype support for character, numerics, and bools in the Postgres ConfigStore adapter

## [0.3.6] - 2025-09-24
### Added
- [#105](https://gitlab.com/saas-rs/sdk/-/issues/105) Support updates in the ConfigStore adapter for Postgres
- [#85](https://gitlab.com/saas-rs/sdk/-/issues/85) Provide interval datatype support for the Postgres ConfigStore adapter
- [#55](https://gitlab.com/saas-rs/sdk/-/issues/55) Provide a PaymentProcessor adapter for Stripe

### Changed
- [#107](https://gitlab.com/saas-rs/sdk/-/issues/107) Export oauth2-client crate, in case a caller requires it for compatibility
- [#106](https://gitlab.com/saas-rs/sdk/-/issues/106) Upgrade Rust 1.88.0 → 1.89.0

### Fixed
- [#103](https://gitlab.com/saas-rs/sdk/-/issues/103) ConfigStore adapter for Postgres fails to bind a null param to a where clause
- [#102](https://gitlab.com/saas-rs/sdk/-/issues/102) ConfigStore adapter for Postgres fails to perform soft deletes

## [0.3.5] - 2025-09-18
### Fixed
- [#101](https://gitlab.com/saas-rs/sdk/-/issues/101) Model `assign()` utility fn fails to unset an optional field
- [#100](https://gitlab.com/saas-rs/sdk/-/issues/100) ObjectStore adapters for MongoDB and Posix fail to populate createdAt field

## [0.3.4] - 2025-09-12
### Added
- [#99](https://gitlab.com/saas-rs/sdk/-/issues/99) ObjectStore adapters should populate md5 hash field

## [0.3.3] - 2025-09-06
### Changed
- [#98](https://gitlab.com/saas-rs/sdk/-/issues/98) Upgrade prost 0.13.5 → 0.14.1
- [#97](https://gitlab.com/saas-rs/sdk/-/issues/97) Upgrade Rust 1.86.0 → 1.88.0

## [0.3.2] - 2025-08-26
### Fixed
- [#95](https://gitlab.com/saas-rs/sdk/-/issues/95) When a record is created or updated, the MongoDB adapter stores updated-by-account-id fields in maintained foreign keys as string instead of ObjectId
- [#94](https://gitlab.com/saas-rs/sdk/-/issues/94) When a record is soft-deleted, the MongoDB adapter stores a deletedBy field instead of a deletedByAccountId field
- [#93](https://gitlab.com/saas-rs/sdk/-/issues/93) When a record is soft-deleted, the MongoDB adapter stores a string instead of ObjectId for the deletedBy field

## [0.3.1] - 2025-08-19
### Added
- [#91](https://gitlab.com/saas-rs/sdk/-/issues/91) Support metadata updates and soft deletes for ObjectStore filesystem adapter

### Changed
- [#92](https://gitlab.com/saas-rs/sdk/-/issues/92) Upgrade pbbson 0.1.7 → 0.1.8

### Fixed
- [#90](https://gitlab.com/saas-rs/sdk/-/issues/90) Storage adapters should not automatically filter out deleted records during find-many operations
- [#89](https://gitlab.com/saas-rs/sdk/-/issues/89) Storage adapters should not automatically filter out deleted records during find-one operations

## [0.3.0] - 2025-08-08
### Added
- [#83](https://gitlab.com/saas-rs/sdk/-/issues/83) Provide a centralized `grpc_code_from_http_status_code()` fn used for validations

### Changed
- [#88](https://gitlab.com/saas-rs/sdk/-/issues/88) Upgrade 5 crates
- [#87](https://gitlab.com/saas-rs/sdk/-/issues/87) Export tonic crate, in case a caller requires it for compatibility

### Changed
- [#84](https://gitlab.com/saas-rs/sdk/-/issues/84) Export oauth2-signin crate, in case a caller needs it for compatibility for their Authenticator

### Fixed
- [#81](https://gitlab.com/saas-rs/sdk/-/issues/81) Postgres ConfigStore provider requires change-case dependency

## [0.2.9] - 2025-07-29
### Added
- [#68](https://gitlab.com/saas-rs/sdk/-/issues/68) Provide a ConfigStore adapter for Postgres

### Changed
- [#79](https://gitlab.com/saas-rs/sdk/-/issues/79) Upgrade pbbson 0.1.6 → 0.1.7
- [#78](https://gitlab.com/saas-rs/sdk/-/issues/78) Don't require MongoDB or Redis build runner tag for tests that don't require them
- [#60](https://gitlab.com/saas-rs/sdk/-/issues/60) Redis SessionStore adapter `find_by_key()` should not require 2 round-trips
- [#50](https://gitlab.com/saas-rs/sdk/-/issues/50) Optimize Redis SessionStore adapter by performing find-many requests in a single pipeline

### Fixed
- [#77](https://gitlab.com/saas-rs/sdk/-/issues/77) Redis-related integration tests are influenced by old data; flush the db before running
- [#76](https://gitlab.com/saas-rs/sdk/-/issues/76) S3 ObjectStore provider requires futures-util dependency

## [0.2.8] - 2025-07-22
### Added
- [#71](https://gitlab.com/saas-rs/sdk/-/issues/71) Provide an ObjectStore adapter for the local filesystem
- [#70](https://gitlab.com/saas-rs/sdk/-/issues/70) Provide an ObjectStore adapter for S3, with initial factory support for Digital Ocean Spaces

### Changed
- [#74](https://gitlab.com/saas-rs/sdk/-/issues/74) Namespace the storage-related feature flags with a "storage-" prefix
- [#73](https://gitlab.com/saas-rs/sdk/-/issues/73) Pass Path into ObjectStore APIs instead of a File, so adapters can potentially copy or move
- [#72](https://gitlab.com/saas-rs/sdk/-/issues/72) Update crate homepage to point to new documentation site docs.saas-rs.com
- [#69](https://gitlab.com/saas-rs/sdk/-/issues/69) Test the in-memory ConfigStore and SessionStore adapters during CI
- [#67](https://gitlab.com/saas-rs/sdk/-/issues/67) Adopt the option struct pattern for storage adapter factories
- [#65](https://gitlab.com/saas-rs/sdk/-/issues/65) Export OAuth adapter crates for caller convenience

### Fixed
- [#66](https://gitlab.com/saas-rs/sdk/-/issues/66) Redis requires futures-util dependency

## [0.2.7] - 2025-07-12
### Added
- [#62](https://gitlab.com/saas-rs/sdk/-/issues/62) Provide a utility fn to assign all non-audit fields from one Protobuf message to another

### Changed
- [#64](https://gitlab.com/saas-rs/sdk/-/issues/64) Export mongodb-ensure-index crate, so callers don't have to
- [#63](https://gitlab.com/saas-rs/sdk/-/issues/63) Upgrade pbbson 0.1.5 → 0.1.6

## [0.2.6] - 2025-07-08
### Added
- [#59](https://gitlab.com/saas-rs/sdk/-/issues/59) Provide a utility fn to assign all non-audit fields from one model to another
- [#57](https://gitlab.com/saas-rs/sdk/-/issues/57) Storage adapter `find_many()` trait functions require the ability to designate an ordering
- [#56](https://gitlab.com/saas-rs/sdk/-/issues/56) Provide a PaymentProcessor factory

### Changed
- [#58](https://gitlab.com/saas-rs/sdk/-/issues/58) Export bson crate, in case a caller requires it for compatibility

## [0.2.5] - 2025-07-04
### Added
- [#54](https://gitlab.com/saas-rs/sdk/-/issues/54) Provide a PaymentProcessor adapter for service unavailable (none configured)

## [0.2.4] - 2025-06-27
### Added
- [#52](https://gitlab.com/saas-rs/sdk/-/issues/52) Provide a PaymentProcessor trait

### Fixed
- [#53](https://gitlab.com/saas-rs/sdk/-/issues/53) MongoDB ConfigStore adapter fails deserializing Null values
- [#51](https://gitlab.com/saas-rs/sdk/-/issues/51) Mongo ConfigStore adapter fails translating ObjectId foreign keys to xid

## [0.2.3] - 2025-06-18
### Added
- [#48](https://gitlab.com/saas-rs/sdk/-/issues/48) Support full range of CRUD operations in SessionStore

### Changed
- [#49](https://gitlab.com/saas-rs/sdk/-/issues/49) A TTL should be set for all SessionStore tests

## [0.2.2] - 2025-06-16
### Added
- [#47](https://gitlab.com/saas-rs/sdk/-/issues/47) Return IdP enum from IdP handler factory

## [0.2.1] - 2025-06-16
### Fixed
- [#46](https://gitlab.com/saas-rs/sdk/-/issues/46) XidTokenFactory requires a factory
- [#45](https://gitlab.com/saas-rs/sdk/-/issues/45) `new_from_env_for_client_id()` IdentityProviderHandler factory is not exported

## [0.2.0] - 2025-06-15
### Added
- [#43](https://gitlab.com/saas-rs/sdk/-/issues/43) Provide an Authenticator trait
- [#42](https://gitlab.com/saas-rs/sdk/-/issues/42) Provide a token factory trait and default XID based implementation
- [#41](https://gitlab.com/saas-rs/sdk/-/issues/41) Provide an IdentityProvider handler for Linode
- [#40](https://gitlab.com/saas-rs/sdk/-/issues/40) Provide an IdentityProvider handler for Digital Ocean
- [#39](https://gitlab.com/saas-rs/sdk/-/issues/39) Provide an IdentityProvider handler for Instagram
- [#38](https://gitlab.com/saas-rs/sdk/-/issues/38) Provide an IdentityProvider handler for Amazon
- [#37](https://gitlab.com/saas-rs/sdk/-/issues/37) Provide an IdentityProvider handler for Twitter
- [#36](https://gitlab.com/saas-rs/sdk/-/issues/36) Provide an IdentityProvider handler for Google
- [#35](https://gitlab.com/saas-rs/sdk/-/issues/35) Provide an IdentityProvider handler for Facebook
- [#34](https://gitlab.com/saas-rs/sdk/-/issues/34) Provide an IdentityProvider handler for Okta
- [#33](https://gitlab.com/saas-rs/sdk/-/issues/33) Provide an IdentityProvider handler for Apple
- [#32](https://gitlab.com/saas-rs/sdk/-/issues/32) Provide an IdentityProvider handler for Microsoft
- [#31](https://gitlab.com/saas-rs/sdk/-/issues/31) Provide an IdentityProviderHandler factory
- [#30](https://gitlab.com/saas-rs/sdk/-/issues/30) Provide an enum of all possible identity providers

### Changed
- [#44](https://gitlab.com/saas-rs/sdk/-/issues/44) Export mongodb and fred crates, in case a caller requires it for compatibility
- [#29](https://gitlab.com/saas-rs/sdk/-/issues/29) Rename IdentityProvider trait → IdentityProviderHandler to disambiguate

## [0.1.9] - 2025-06-10
### Added
- [#24](https://gitlab.com/saas-rs/sdk/-/issues/24) Provide an ObjectStore factory

### Changed
- [#28](https://gitlab.com/saas-rs/sdk/-/issues/28) Provide SessionStore adapters with app name, in case they can use it
- [#19](https://gitlab.com/saas-rs/sdk/-/issues/19) Run ObjectStore integration tests with MongoDB during CI

### Fixed
- [#26](https://gitlab.com/saas-rs/sdk/-/issues/26) ObjectStore trait download function requires whole file to reside in memory
- [#14](https://gitlab.com/saas-rs/sdk/-/issues/14) ConfigStore adapter for MongoDB fails to set updatedByAccountId fields when updating foreign keys

## [0.1.8] - 2025-06-06
### Added
- [#23](https://gitlab.com/saas-rs/sdk/-/issues/23) Provide a SessionStore factory
- [#22](https://gitlab.com/saas-rs/sdk/-/issues/22) Provide a ConfigStore factory

### Changed
- [#25](https://gitlab.com/saas-rs/sdk/-/issues/25) Upgrade pbbson 0.1.3 → 0.1.5
- [#20](https://gitlab.com/saas-rs/sdk/-/issues/20) Run SessionStore integration tests with Redis during CI
- [#18](https://gitlab.com/saas-rs/sdk/-/issues/18) Run ConfigStore integration tests with MongoDB during CI

### Fixed
- [#21](https://gitlab.com/saas-rs/sdk/-/issues/21) After Redis SessionStore adapter stores a Protobuf Timestamp, it is unable to rehydrate the field from Redis

## [0.1.7] - 2025-05-28
### Added
- [#17](https://gitlab.com/saas-rs/sdk/-/issues/17) Provide IdentityProvider handlers for GitHub and GitLab
- [#16](https://gitlab.com/saas-rs/sdk/-/issues/16) Publish an IdentityProvider trait
- [#10](https://gitlab.com/saas-rs/sdk/-/issues/10) Provide a SessionStore adapter for Redis

### Changed
- [#13](https://gitlab.com/saas-rs/sdk/-/issues/13) Export pbbson crate, in case a caller requires it for compatibility

### Fixed
- [#15](https://gitlab.com/saas-rs/sdk/-/issues/15) mod.rs files should not contain trait definitions or other logic
- [#12](https://gitlab.com/saas-rs/sdk/-/issues/12) MongoDbObjectStore is private

## [0.1.6] - 2025-05-23
### Added
- [#11](https://gitlab.com/saas-rs/sdk/-/issues/11) Provide an ObjectStore adapter for service unavailable (none configured)
- [#9](https://gitlab.com/saas-rs/sdk/-/issues/9) Provide an ObjectStore adapter for MongoDB
- [#8](https://gitlab.com/saas-rs/sdk/-/issues/8) Provide a ConfigStore adapter for MongoDB
- [#7](https://gitlab.com/saas-rs/sdk/-/issues/7) Provide a ConfigStore adapter for memory
- [#6](https://gitlab.com/saas-rs/sdk/-/issues/6) Provide a SessionStore adapter for memory

### Changed
- [#5](https://gitlab.com/saas-rs/sdk/-/issues/5) Support specifying a TTL in SessionStore storage fns

## [0.1.5] - 2025-05-22
### Added
- [#4](https://gitlab.com/saas-rs/sdk/-/issues/4) Publish a ConfigStore trait
- [#3](https://gitlab.com/saas-rs/sdk/-/issues/3) Publish an ObjectStore trait
- [#2](https://gitlab.com/saas-rs/sdk/-/issues/2) Publish a SessionStore trait

## [0.1.4] - 2025-05-21
### Added
- [#1](https://gitlab.com/saas-rs/sdk/-/issues/1) Publish BelongsTo and HasMany association definition holders
