diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b4da64f27..4a1242df8 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.132.0" + ".": "0.133.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index a57158191..fa0f5509e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 214 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-59c09c7355b21b663e001d2ee1086ebd0a70d9b5433823282bca296eedff9eb0.yml -openapi_spec_hash: d9c3b932c810809abc6e973d662ad376 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic/lithic-c150a226e74fdd73925fcba89261022e91a6d4f57dbb305a54063499641427ae.yml +openapi_spec_hash: 1df81bae378c3cbf265b0fb4cefa2969 config_hash: 337a99d8cc30006358b7bc2531401669 diff --git a/CHANGELOG.md b/CHANGELOG.md index e62e0e027..34aed7bac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 0.133.0 (2026-08-05) + +Full Changelog: [v0.132.0...v0.133.0](https://github.com/lithic-com/lithic-java/compare/v0.132.0...v0.133.0) + +### Features + +* **api:** add blockchain_addresses field to FinancialAccount and webhook events ([3ac1807](https://github.com/lithic-com/lithic-java/commit/3ac18071466c0d8e43570f4cdf878ec1a506a40c)) +* **api:** add limitCashAmount/limitCashCount fields to VelocityLimitParams ([9507834](https://github.com/lithic-com/lithic-java/commit/9507834f2c34614684d100e960b40a1dca2ce9c5)) + + +### Chores + +* **internal:** codegen related update ([39e4623](https://github.com/lithic-com/lithic-java/commit/39e4623d63b58bc9f048cc6a2592e657cf1706b8)) + + +### Documentation + +* **api:** update CVV field descriptions to note AMEX uses 4 digits ([2892515](https://github.com/lithic-com/lithic-java/commit/28925154b2b09da8cfc8e8a01d38886698df0156)) + ## 0.132.0 (2026-08-03) Full Changelog: [v0.131.0...v0.132.0](https://github.com/lithic-com/lithic-java/compare/v0.131.0...v0.132.0) diff --git a/README.md b/README.md index e0cf94193..067a2deca 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ -[![Maven Central](https://img.shields.io/maven-central/v/com.lithic.api/lithic-java)](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.132.0) -[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.132.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.132.0) +[![Maven Central](https://img.shields.io/maven-central/v/com.lithic.api/lithic-java)](https://central.sonatype.com/artifact/com.lithic.api/lithic-java/0.133.0) +[![javadoc](https://javadoc.io/badge2/com.lithic.api/lithic-java/0.133.0/javadoc.svg)](https://javadoc.io/doc/com.lithic.api/lithic-java/0.133.0) @@ -22,7 +22,7 @@ Use the Lithic MCP Server to enable AI assistants to interact with this API, all -The REST API documentation can be found on [docs.lithic.com](https://docs.lithic.com). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.lithic.api/lithic-java/0.132.0). +The REST API documentation can be found on [docs.lithic.com](https://docs.lithic.com). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.lithic.api/lithic-java/0.133.0). @@ -33,7 +33,7 @@ The REST API documentation can be found on [docs.lithic.com](https://docs.lithic ### Gradle ```kotlin -implementation("com.lithic.api:lithic-java:0.132.0") +implementation("com.lithic.api:lithic-java:0.133.0") ``` ### Maven @@ -42,7 +42,7 @@ implementation("com.lithic.api:lithic-java:0.132.0") com.lithic.api lithic-java - 0.132.0 + 0.133.0 ``` diff --git a/build.gradle.kts b/build.gradle.kts index 3f9804eaf..9d85f0e19 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ repositories { allprojects { group = "com.lithic.api" - version = "0.132.0" // x-release-please-version + version = "0.133.0" // x-release-please-version } subprojects { diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt index 3a5dc5710..86cb54599 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/Card.kt @@ -434,7 +434,7 @@ private constructor( fun substatus(): Optional = substatus.getOptional("substatus") /** - * Three digit cvv printed on the back of the card. + * Three or four digit CVV printed on the card. Amex cards use four digit CVVs * * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -1241,7 +1241,7 @@ private constructor( this.substatus = substatus } - /** Three digit cvv printed on the back of the card. */ + /** Three or four digit CVV printed on the card. Amex cards use four digit CVVs */ fun cvv(cvv: String) = cvv(JsonField.of(cvv)) /** diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt index 74626780e..91d86a59a 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccount.kt @@ -12,6 +12,7 @@ import com.lithic.api.core.JsonField import com.lithic.api.core.JsonMissing import com.lithic.api.core.JsonValue import com.lithic.api.core.checkRequired +import com.lithic.api.core.toImmutable import com.lithic.api.errors.LithicInvalidDataException import java.time.OffsetDateTime import java.util.Collections @@ -34,6 +35,7 @@ private constructor( private val updated: JsonField, private val userDefinedStatus: JsonField, private val accountNumber: JsonField, + private val blockchainAddresses: JsonField, private val routingNumber: JsonField, private val additionalProperties: MutableMap, ) { @@ -70,6 +72,9 @@ private constructor( @JsonProperty("account_number") @ExcludeMissing accountNumber: JsonField = JsonMissing.of(), + @JsonProperty("blockchain_addresses") + @ExcludeMissing + blockchainAddresses: JsonField = JsonMissing.of(), @JsonProperty("routing_number") @ExcludeMissing routingNumber: JsonField = JsonMissing.of(), @@ -86,6 +91,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, mutableMapOf(), ) @@ -173,6 +179,16 @@ private constructor( */ fun accountNumber(): Optional = accountNumber.getOptional("account_number") + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun blockchainAddresses(): Optional = + blockchainAddresses.getOptional("blockchain_addresses") + /** * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -279,6 +295,16 @@ private constructor( @ExcludeMissing fun _accountNumber(): JsonField = accountNumber + /** + * Returns the raw JSON value of [blockchainAddresses]. + * + * Unlike [blockchainAddresses], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("blockchain_addresses") + @ExcludeMissing + fun _blockchainAddresses(): JsonField = blockchainAddresses + /** * Returns the raw JSON value of [routingNumber]. * @@ -338,6 +364,7 @@ private constructor( private var updated: JsonField? = null private var userDefinedStatus: JsonField? = null private var accountNumber: JsonField = JsonMissing.of() + private var blockchainAddresses: JsonField = JsonMissing.of() private var routingNumber: JsonField = JsonMissing.of() private var additionalProperties: MutableMap = mutableMapOf() @@ -355,6 +382,7 @@ private constructor( updated = financialAccount.updated userDefinedStatus = financialAccount.userDefinedStatus accountNumber = financialAccount.accountNumber + blockchainAddresses = financialAccount.blockchainAddresses routingNumber = financialAccount.routingNumber additionalProperties = financialAccount.additionalProperties.toMutableMap() } @@ -534,6 +562,30 @@ private constructor( this.accountNumber = accountNumber } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the + * blockchain network that each address belongs to + */ + fun blockchainAddresses(blockchainAddresses: BlockchainAddresses?) = + blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) + + /** + * Alias for calling [Builder.blockchainAddresses] with `blockchainAddresses.orElse(null)`. + */ + fun blockchainAddresses(blockchainAddresses: Optional) = + blockchainAddresses(blockchainAddresses.getOrNull()) + + /** + * Sets [Builder.blockchainAddresses] to an arbitrary JSON value. + * + * You should usually call [Builder.blockchainAddresses] with a well-typed + * [BlockchainAddresses] value instead. This method is primarily for setting the field to an + * undocumented or not yet supported value. + */ + fun blockchainAddresses(blockchainAddresses: JsonField) = apply { + this.blockchainAddresses = blockchainAddresses + } + fun routingNumber(routingNumber: String?) = routingNumber(JsonField.ofNullable(routingNumber)) @@ -607,6 +659,7 @@ private constructor( checkRequired("updated", updated), checkRequired("userDefinedStatus", userDefinedStatus), accountNumber, + blockchainAddresses, routingNumber, additionalProperties.toMutableMap(), ) @@ -639,6 +692,7 @@ private constructor( updated() userDefinedStatus() accountNumber() + blockchainAddresses().ifPresent { it.validate() } routingNumber() validated = true } @@ -670,6 +724,7 @@ private constructor( (if (updated.asKnown().isPresent) 1 else 0) + (if (userDefinedStatus.asKnown().isPresent) 1 else 0) + (if (accountNumber.asKnown().isPresent) 1 else 0) + + (blockchainAddresses.asKnown().getOrNull()?.validity() ?: 0) + (if (routingNumber.asKnown().isPresent) 1 else 0) class FinancialAccountCreditConfig @@ -1776,6 +1831,120 @@ private constructor( override fun toString() = value.toString() } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + */ + class BlockchainAddresses + @JsonCreator + private constructor( + @com.fasterxml.jackson.annotation.JsonValue + private val additionalProperties: Map + ) { + + @JsonAnyGetter + @ExcludeMissing + fun _additionalProperties(): Map = additionalProperties + + fun toBuilder() = Builder().from(this) + + companion object { + + /** Returns a mutable builder for constructing an instance of [BlockchainAddresses]. */ + @JvmStatic fun builder() = Builder() + } + + /** A builder for [BlockchainAddresses]. */ + class Builder internal constructor() { + + private var additionalProperties: MutableMap = mutableMapOf() + + @JvmSynthetic + internal fun from(blockchainAddresses: BlockchainAddresses) = apply { + additionalProperties = blockchainAddresses.additionalProperties.toMutableMap() + } + + fun additionalProperties(additionalProperties: Map) = apply { + this.additionalProperties.clear() + putAllAdditionalProperties(additionalProperties) + } + + fun putAdditionalProperty(key: String, value: JsonValue) = apply { + additionalProperties.put(key, value) + } + + fun putAllAdditionalProperties(additionalProperties: Map) = apply { + this.additionalProperties.putAll(additionalProperties) + } + + fun removeAdditionalProperty(key: String) = apply { additionalProperties.remove(key) } + + fun removeAllAdditionalProperties(keys: Set) = apply { + keys.forEach(::removeAdditionalProperty) + } + + /** + * Returns an immutable instance of [BlockchainAddresses]. + * + * Further updates to this [Builder] will not mutate the returned instance. + */ + fun build(): BlockchainAddresses = + BlockchainAddresses(additionalProperties.toImmutable()) + } + + private var validated: Boolean = false + + /** + * Validates that the types of all values in this object match their expected types + * recursively. + * + * This method is _not_ forwards compatible with new types from the API for existing fields. + * + * @throws LithicInvalidDataException if any value type in this object doesn't match its + * expected type. + */ + fun validate(): BlockchainAddresses = apply { + if (validated) { + return@apply + } + + validated = true + } + + fun isValid(): Boolean = + try { + validate() + true + } catch (e: LithicInvalidDataException) { + false + } + + /** + * Returns a score indicating how many valid values are contained in this object + * recursively. + * + * Used for best match union deserialization. + */ + @JvmSynthetic + internal fun validity(): Int = + additionalProperties.count { (_, value) -> !value.isNull() && !value.isMissing() } + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is BlockchainAddresses && + additionalProperties == other.additionalProperties + } + + private val hashCode: Int by lazy { Objects.hash(additionalProperties) } + + override fun hashCode(): Int = hashCode + + override fun toString() = "BlockchainAddresses{additionalProperties=$additionalProperties}" + } + override fun equals(other: Any?): Boolean { if (this === other) { return true @@ -1794,6 +1963,7 @@ private constructor( updated == other.updated && userDefinedStatus == other.userDefinedStatus && accountNumber == other.accountNumber && + blockchainAddresses == other.blockchainAddresses && routingNumber == other.routingNumber && additionalProperties == other.additionalProperties } @@ -1812,6 +1982,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, additionalProperties, ) @@ -1820,5 +1991,5 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "FinancialAccount{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, routingNumber=$routingNumber, additionalProperties=$additionalProperties}" + "FinancialAccount{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, blockchainAddresses=$blockchainAddresses, routingNumber=$routingNumber, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt index 1e252bc70..7955d55a2 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEvent.kt @@ -34,6 +34,7 @@ private constructor( private val updated: JsonField, private val userDefinedStatus: JsonField, private val accountNumber: JsonField, + private val blockchainAddresses: JsonField, private val routingNumber: JsonField, private val eventType: JsonField, private val additionalProperties: MutableMap, @@ -74,6 +75,9 @@ private constructor( @JsonProperty("account_number") @ExcludeMissing accountNumber: JsonField = JsonMissing.of(), + @JsonProperty("blockchain_addresses") + @ExcludeMissing + blockchainAddresses: JsonField = JsonMissing.of(), @JsonProperty("routing_number") @ExcludeMissing routingNumber: JsonField = JsonMissing.of(), @@ -93,6 +97,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, mutableMapOf(), @@ -112,6 +117,7 @@ private constructor( .updated(updated) .userDefinedStatus(userDefinedStatus) .accountNumber(accountNumber) + .blockchainAddresses(blockchainAddresses) .routingNumber(routingNumber) .build() @@ -199,6 +205,16 @@ private constructor( */ fun accountNumber(): Optional = accountNumber.getOptional("account_number") + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun blockchainAddresses(): Optional = + blockchainAddresses.getOptional("blockchain_addresses") + /** * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -314,6 +330,17 @@ private constructor( @ExcludeMissing fun _accountNumber(): JsonField = accountNumber + /** + * Returns the raw JSON value of [blockchainAddresses]. + * + * Unlike [blockchainAddresses], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("blockchain_addresses") + @ExcludeMissing + fun _blockchainAddresses(): JsonField = + blockchainAddresses + /** * Returns the raw JSON value of [routingNumber]. * @@ -383,6 +410,8 @@ private constructor( private var updated: JsonField? = null private var userDefinedStatus: JsonField? = null private var accountNumber: JsonField = JsonMissing.of() + private var blockchainAddresses: JsonField = + JsonMissing.of() private var routingNumber: JsonField = JsonMissing.of() private var eventType: JsonField? = null private var additionalProperties: MutableMap = mutableMapOf() @@ -403,6 +432,7 @@ private constructor( updated = financialAccountCreatedWebhookEvent.updated userDefinedStatus = financialAccountCreatedWebhookEvent.userDefinedStatus accountNumber = financialAccountCreatedWebhookEvent.accountNumber + blockchainAddresses = financialAccountCreatedWebhookEvent.blockchainAddresses routingNumber = financialAccountCreatedWebhookEvent.routingNumber eventType = financialAccountCreatedWebhookEvent.eventType additionalProperties = @@ -588,6 +618,31 @@ private constructor( this.accountNumber = accountNumber } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the + * blockchain network that each address belongs to + */ + fun blockchainAddresses(blockchainAddresses: FinancialAccount.BlockchainAddresses?) = + blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) + + /** + * Alias for calling [Builder.blockchainAddresses] with `blockchainAddresses.orElse(null)`. + */ + fun blockchainAddresses( + blockchainAddresses: Optional + ) = blockchainAddresses(blockchainAddresses.getOrNull()) + + /** + * Sets [Builder.blockchainAddresses] to an arbitrary JSON value. + * + * You should usually call [Builder.blockchainAddresses] with a well-typed + * [FinancialAccount.BlockchainAddresses] value instead. This method is primarily for + * setting the field to an undocumented or not yet supported value. + */ + fun blockchainAddresses( + blockchainAddresses: JsonField + ) = apply { this.blockchainAddresses = blockchainAddresses } + fun routingNumber(routingNumber: String?) = routingNumber(JsonField.ofNullable(routingNumber)) @@ -674,6 +729,7 @@ private constructor( checkRequired("updated", updated), checkRequired("userDefinedStatus", userDefinedStatus), accountNumber, + blockchainAddresses, routingNumber, checkRequired("eventType", eventType), additionalProperties.toMutableMap(), @@ -707,6 +763,7 @@ private constructor( updated() userDefinedStatus() accountNumber() + blockchainAddresses().ifPresent { it.validate() } routingNumber() eventType().validate() validated = true @@ -739,6 +796,7 @@ private constructor( (if (updated.asKnown().isPresent) 1 else 0) + (if (userDefinedStatus.asKnown().isPresent) 1 else 0) + (if (accountNumber.asKnown().isPresent) 1 else 0) + + (blockchainAddresses.asKnown().getOrNull()?.validity() ?: 0) + (if (routingNumber.asKnown().isPresent) 1 else 0) + (eventType.asKnown().getOrNull()?.validity() ?: 0) @@ -891,6 +949,7 @@ private constructor( updated == other.updated && userDefinedStatus == other.userDefinedStatus && accountNumber == other.accountNumber && + blockchainAddresses == other.blockchainAddresses && routingNumber == other.routingNumber && eventType == other.eventType && additionalProperties == other.additionalProperties @@ -910,6 +969,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, additionalProperties, @@ -919,5 +979,5 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "FinancialAccountCreatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" + "FinancialAccountCreatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, blockchainAddresses=$blockchainAddresses, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt index 48d29c4ca..0285afdf5 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEvent.kt @@ -34,6 +34,7 @@ private constructor( private val updated: JsonField, private val userDefinedStatus: JsonField, private val accountNumber: JsonField, + private val blockchainAddresses: JsonField, private val routingNumber: JsonField, private val eventType: JsonField, private val additionalProperties: MutableMap, @@ -74,6 +75,9 @@ private constructor( @JsonProperty("account_number") @ExcludeMissing accountNumber: JsonField = JsonMissing.of(), + @JsonProperty("blockchain_addresses") + @ExcludeMissing + blockchainAddresses: JsonField = JsonMissing.of(), @JsonProperty("routing_number") @ExcludeMissing routingNumber: JsonField = JsonMissing.of(), @@ -93,6 +97,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, mutableMapOf(), @@ -112,6 +117,7 @@ private constructor( .updated(updated) .userDefinedStatus(userDefinedStatus) .accountNumber(accountNumber) + .blockchainAddresses(blockchainAddresses) .routingNumber(routingNumber) .build() @@ -199,6 +205,16 @@ private constructor( */ fun accountNumber(): Optional = accountNumber.getOptional("account_number") + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the blockchain + * network that each address belongs to + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun blockchainAddresses(): Optional = + blockchainAddresses.getOptional("blockchain_addresses") + /** * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the * server responded with an unexpected value). @@ -314,6 +330,17 @@ private constructor( @ExcludeMissing fun _accountNumber(): JsonField = accountNumber + /** + * Returns the raw JSON value of [blockchainAddresses]. + * + * Unlike [blockchainAddresses], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("blockchain_addresses") + @ExcludeMissing + fun _blockchainAddresses(): JsonField = + blockchainAddresses + /** * Returns the raw JSON value of [routingNumber]. * @@ -383,6 +410,8 @@ private constructor( private var updated: JsonField? = null private var userDefinedStatus: JsonField? = null private var accountNumber: JsonField = JsonMissing.of() + private var blockchainAddresses: JsonField = + JsonMissing.of() private var routingNumber: JsonField = JsonMissing.of() private var eventType: JsonField? = null private var additionalProperties: MutableMap = mutableMapOf() @@ -403,6 +432,7 @@ private constructor( updated = financialAccountUpdatedWebhookEvent.updated userDefinedStatus = financialAccountUpdatedWebhookEvent.userDefinedStatus accountNumber = financialAccountUpdatedWebhookEvent.accountNumber + blockchainAddresses = financialAccountUpdatedWebhookEvent.blockchainAddresses routingNumber = financialAccountUpdatedWebhookEvent.routingNumber eventType = financialAccountUpdatedWebhookEvent.eventType additionalProperties = @@ -588,6 +618,31 @@ private constructor( this.accountNumber = accountNumber } + /** + * Provisioned blockchain deposit addresses for this financial account, keyed by the + * blockchain network that each address belongs to + */ + fun blockchainAddresses(blockchainAddresses: FinancialAccount.BlockchainAddresses?) = + blockchainAddresses(JsonField.ofNullable(blockchainAddresses)) + + /** + * Alias for calling [Builder.blockchainAddresses] with `blockchainAddresses.orElse(null)`. + */ + fun blockchainAddresses( + blockchainAddresses: Optional + ) = blockchainAddresses(blockchainAddresses.getOrNull()) + + /** + * Sets [Builder.blockchainAddresses] to an arbitrary JSON value. + * + * You should usually call [Builder.blockchainAddresses] with a well-typed + * [FinancialAccount.BlockchainAddresses] value instead. This method is primarily for + * setting the field to an undocumented or not yet supported value. + */ + fun blockchainAddresses( + blockchainAddresses: JsonField + ) = apply { this.blockchainAddresses = blockchainAddresses } + fun routingNumber(routingNumber: String?) = routingNumber(JsonField.ofNullable(routingNumber)) @@ -674,6 +729,7 @@ private constructor( checkRequired("updated", updated), checkRequired("userDefinedStatus", userDefinedStatus), accountNumber, + blockchainAddresses, routingNumber, checkRequired("eventType", eventType), additionalProperties.toMutableMap(), @@ -707,6 +763,7 @@ private constructor( updated() userDefinedStatus() accountNumber() + blockchainAddresses().ifPresent { it.validate() } routingNumber() eventType().validate() validated = true @@ -739,6 +796,7 @@ private constructor( (if (updated.asKnown().isPresent) 1 else 0) + (if (userDefinedStatus.asKnown().isPresent) 1 else 0) + (if (accountNumber.asKnown().isPresent) 1 else 0) + + (blockchainAddresses.asKnown().getOrNull()?.validity() ?: 0) + (if (routingNumber.asKnown().isPresent) 1 else 0) + (eventType.asKnown().getOrNull()?.validity() ?: 0) @@ -891,6 +949,7 @@ private constructor( updated == other.updated && userDefinedStatus == other.userDefinedStatus && accountNumber == other.accountNumber && + blockchainAddresses == other.blockchainAddresses && routingNumber == other.routingNumber && eventType == other.eventType && additionalProperties == other.additionalProperties @@ -910,6 +969,7 @@ private constructor( updated, userDefinedStatus, accountNumber, + blockchainAddresses, routingNumber, eventType, additionalProperties, @@ -919,5 +979,5 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "FinancialAccountUpdatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" + "FinancialAccountUpdatedWebhookEvent{token=$token, accountToken=$accountToken, created=$created, creditConfiguration=$creditConfiguration, isForBenefitOf=$isForBenefitOf, nickname=$nickname, status=$status, substatus=$substatus, type=$type, updated=$updated, userDefinedStatus=$userDefinedStatus, accountNumber=$accountNumber, blockchainAddresses=$blockchainAddresses, routingNumber=$routingNumber, eventType=$eventType, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt index 5602cccc7..86b6c8987 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/TokenizationSimulateParams.kt @@ -33,7 +33,7 @@ private constructor( ) : Params { /** - * The three digit cvv for the card. + * The three or four digit CVV for the card. AMEX cards use four digit CVVs. * * @throws LithicInvalidDataException if the JSON field has an unexpected type or is * unexpectedly missing or null (e.g. if the server responded with an unexpected value). @@ -213,7 +213,7 @@ private constructor( */ fun body(body: Body) = apply { this.body = body.toBuilder() } - /** The three digit cvv for the card. */ + /** The three or four digit CVV for the card. AMEX cards use four digit CVVs. */ fun cvv(cvv: String) = apply { body.cvv(cvv) } /** @@ -519,7 +519,7 @@ private constructor( ) /** - * The three digit cvv for the card. + * The three or four digit CVV for the card. AMEX cards use four digit CVVs. * * @throws LithicInvalidDataException if the JSON field has an unexpected type or is * unexpectedly missing or null (e.g. if the server responded with an unexpected value). @@ -713,7 +713,7 @@ private constructor( additionalProperties = body.additionalProperties.toMutableMap() } - /** The three digit cvv for the card. */ + /** The three or four digit CVV for the card. AMEX cards use four digit CVVs. */ fun cvv(cvv: String) = cvv(JsonField.of(cvv)) /** diff --git a/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt b/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt index 58113d288..b5c0d3e10 100644 --- a/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt +++ b/lithic-java-core/src/main/kotlin/com/lithic/api/models/VelocityLimitParams.kt @@ -25,6 +25,8 @@ private constructor( private val scope: JsonField, private val filters: JsonField, private val limitAmount: JsonField, + private val limitCashAmount: JsonField, + private val limitCashCount: JsonField, private val limitCount: JsonField, private val additionalProperties: MutableMap, ) { @@ -41,8 +43,23 @@ private constructor( @JsonProperty("limit_amount") @ExcludeMissing limitAmount: JsonField = JsonMissing.of(), + @JsonProperty("limit_cash_amount") + @ExcludeMissing + limitCashAmount: JsonField = JsonMissing.of(), + @JsonProperty("limit_cash_count") + @ExcludeMissing + limitCashCount: JsonField = JsonMissing.of(), @JsonProperty("limit_count") @ExcludeMissing limitCount: JsonField = JsonMissing.of(), - ) : this(period, scope, filters, limitAmount, limitCount, mutableMapOf()) + ) : this( + period, + scope, + filters, + limitAmount, + limitCashAmount, + limitCashCount, + limitCount, + mutableMapOf(), + ) /** * Velocity over the current day since 00:00 / 12 AM in Eastern Time @@ -75,6 +92,29 @@ private constructor( */ fun limitAmount(): Optional = limitAmount.getOptional("limit_amount") + /** + * The maximum amount of cash spend velocity allowed in the period in minor units (the smallest + * unit of a currency, e.g. cents for USD). Cash spend covers ATM withdrawals, cash + * disbursements, and purchases with cashback. Transactions exceeding this limit will be + * declined. + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun limitCashAmount(): Optional = limitCashAmount.getOptional("limit_cash_amount") + + /** + * The number of cash spend velocity impacting transactions may not exceed this limit in the + * period. Transactions exceeding this limit will be declined. A cash velocity impacting + * transaction is an ATM withdrawal, cash disbursement, or purchase with cashback that has been + * authorized, and optionally settled, or a force post (a transaction that settled without prior + * authorization). + * + * @throws LithicInvalidDataException if the JSON field has an unexpected type (e.g. if the + * server responded with an unexpected value). + */ + fun limitCashCount(): Optional = limitCashCount.getOptional("limit_cash_count") + /** * The number of spend velocity impacting transactions may not exceed this limit in the period. * Transactions exceeding this limit will be declined. A spend velocity impacting transaction is @@ -116,6 +156,24 @@ private constructor( */ @JsonProperty("limit_amount") @ExcludeMissing fun _limitAmount(): JsonField = limitAmount + /** + * Returns the raw JSON value of [limitCashAmount]. + * + * Unlike [limitCashAmount], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("limit_cash_amount") + @ExcludeMissing + fun _limitCashAmount(): JsonField = limitCashAmount + + /** + * Returns the raw JSON value of [limitCashCount]. + * + * Unlike [limitCashCount], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("limit_cash_count") + @ExcludeMissing + fun _limitCashCount(): JsonField = limitCashCount + /** * Returns the raw JSON value of [limitCount]. * @@ -156,6 +214,8 @@ private constructor( private var scope: JsonField? = null private var filters: JsonField = JsonMissing.of() private var limitAmount: JsonField = JsonMissing.of() + private var limitCashAmount: JsonField = JsonMissing.of() + private var limitCashCount: JsonField = JsonMissing.of() private var limitCount: JsonField = JsonMissing.of() private var additionalProperties: MutableMap = mutableMapOf() @@ -165,6 +225,8 @@ private constructor( scope = velocityLimitParams.scope filters = velocityLimitParams.filters limitAmount = velocityLimitParams.limitAmount + limitCashAmount = velocityLimitParams.limitCashAmount + limitCashCount = velocityLimitParams.limitCashCount limitCount = velocityLimitParams.limitCount additionalProperties = velocityLimitParams.additionalProperties.toMutableMap() } @@ -262,6 +324,69 @@ private constructor( */ fun limitAmount(limitAmount: JsonField) = apply { this.limitAmount = limitAmount } + /** + * The maximum amount of cash spend velocity allowed in the period in minor units (the + * smallest unit of a currency, e.g. cents for USD). Cash spend covers ATM withdrawals, cash + * disbursements, and purchases with cashback. Transactions exceeding this limit will be + * declined. + */ + fun limitCashAmount(limitCashAmount: Long?) = + limitCashAmount(JsonField.ofNullable(limitCashAmount)) + + /** + * Alias for [Builder.limitCashAmount]. + * + * This unboxed primitive overload exists for backwards compatibility. + */ + fun limitCashAmount(limitCashAmount: Long) = limitCashAmount(limitCashAmount as Long?) + + /** Alias for calling [Builder.limitCashAmount] with `limitCashAmount.orElse(null)`. */ + fun limitCashAmount(limitCashAmount: Optional) = + limitCashAmount(limitCashAmount.getOrNull()) + + /** + * Sets [Builder.limitCashAmount] to an arbitrary JSON value. + * + * You should usually call [Builder.limitCashAmount] with a well-typed [Long] value instead. + * This method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun limitCashAmount(limitCashAmount: JsonField) = apply { + this.limitCashAmount = limitCashAmount + } + + /** + * The number of cash spend velocity impacting transactions may not exceed this limit in the + * period. Transactions exceeding this limit will be declined. A cash velocity impacting + * transaction is an ATM withdrawal, cash disbursement, or purchase with cashback that has + * been authorized, and optionally settled, or a force post (a transaction that settled + * without prior authorization). + */ + fun limitCashCount(limitCashCount: Long?) = + limitCashCount(JsonField.ofNullable(limitCashCount)) + + /** + * Alias for [Builder.limitCashCount]. + * + * This unboxed primitive overload exists for backwards compatibility. + */ + fun limitCashCount(limitCashCount: Long) = limitCashCount(limitCashCount as Long?) + + /** Alias for calling [Builder.limitCashCount] with `limitCashCount.orElse(null)`. */ + fun limitCashCount(limitCashCount: Optional) = + limitCashCount(limitCashCount.getOrNull()) + + /** + * Sets [Builder.limitCashCount] to an arbitrary JSON value. + * + * You should usually call [Builder.limitCashCount] with a well-typed [Long] value instead. + * This method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun limitCashCount(limitCashCount: JsonField) = apply { + this.limitCashCount = limitCashCount + } + /** * The number of spend velocity impacting transactions may not exceed this limit in the * period. Transactions exceeding this limit will be declined. A spend velocity impacting @@ -326,6 +451,8 @@ private constructor( checkRequired("scope", scope), filters, limitAmount, + limitCashAmount, + limitCashCount, limitCount, additionalProperties.toMutableMap(), ) @@ -350,6 +477,8 @@ private constructor( scope().validate() filters().ifPresent { it.validate() } limitAmount() + limitCashAmount() + limitCashCount() limitCount() validated = true } @@ -373,6 +502,8 @@ private constructor( (scope.asKnown().getOrNull()?.validity() ?: 0) + (filters.asKnown().getOrNull()?.validity() ?: 0) + (if (limitAmount.asKnown().isPresent) 1 else 0) + + (if (limitCashAmount.asKnown().isPresent) 1 else 0) + + (if (limitCashCount.asKnown().isPresent) 1 else 0) + (if (limitCount.asKnown().isPresent) 1 else 0) /** The scope the velocity is calculated for */ @@ -524,16 +655,27 @@ private constructor( scope == other.scope && filters == other.filters && limitAmount == other.limitAmount && + limitCashAmount == other.limitCashAmount && + limitCashCount == other.limitCashCount && limitCount == other.limitCount && additionalProperties == other.additionalProperties } private val hashCode: Int by lazy { - Objects.hash(period, scope, filters, limitAmount, limitCount, additionalProperties) + Objects.hash( + period, + scope, + filters, + limitAmount, + limitCashAmount, + limitCashCount, + limitCount, + additionalProperties, + ) } override fun hashCode(): Int = hashCode override fun toString() = - "VelocityLimitParams{period=$period, scope=$scope, filters=$filters, limitAmount=$limitAmount, limitCount=$limitCount, additionalProperties=$additionalProperties}" + "VelocityLimitParams{period=$period, scope=$scope, filters=$filters, limitAmount=$limitAmount, limitCashAmount=$limitCashAmount, limitCashCount=$limitCashCount, limitCount=$limitCount, additionalProperties=$additionalProperties}" } diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt index 4b0ee89a9..be975bc13 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountCreatedWebhookEventTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -40,6 +41,14 @@ internal class FinancialAccountCreatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) .build() @@ -79,6 +88,15 @@ internal class FinancialAccountCreatedWebhookEventTest { assertThat(financialAccountCreatedWebhookEvent.userDefinedStatus()) .contains("user_defined_status") assertThat(financialAccountCreatedWebhookEvent.accountNumber()).contains("account_number") + assertThat(financialAccountCreatedWebhookEvent.blockchainAddresses()) + .contains( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) assertThat(financialAccountCreatedWebhookEvent.routingNumber()).contains("routing_number") assertThat(financialAccountCreatedWebhookEvent.eventType()) .isEqualTo(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) @@ -115,6 +133,14 @@ internal class FinancialAccountCreatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt index d145b6c5c..fe20ef1ab 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountListPageResponseTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -44,6 +45,14 @@ internal class FinancialAccountListPageResponseTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() ) @@ -79,6 +88,14 @@ internal class FinancialAccountListPageResponseTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() ) @@ -120,6 +137,14 @@ internal class FinancialAccountListPageResponseTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() ) diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt index 98eb1f5ac..c2b6a0fc6 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -40,6 +41,14 @@ internal class FinancialAccountTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() @@ -74,6 +83,15 @@ internal class FinancialAccountTest { .isEqualTo(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) assertThat(financialAccount.userDefinedStatus()).contains("user_defined_status") assertThat(financialAccount.accountNumber()).contains("account_number") + assertThat(financialAccount.blockchainAddresses()) + .contains( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) assertThat(financialAccount.routingNumber()).contains("routing_number") } @@ -108,6 +126,14 @@ internal class FinancialAccountTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt index 79e2cac6d..155ce8fe0 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/FinancialAccountUpdatedWebhookEventTest.kt @@ -3,6 +3,7 @@ package com.lithic.api.models import com.fasterxml.jackson.module.kotlin.jacksonTypeRef +import com.lithic.api.core.JsonValue import com.lithic.api.core.jsonMapper import java.time.OffsetDateTime import org.assertj.core.api.Assertions.assertThat @@ -40,6 +41,14 @@ internal class FinancialAccountUpdatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) .build() @@ -79,6 +88,15 @@ internal class FinancialAccountUpdatedWebhookEventTest { assertThat(financialAccountUpdatedWebhookEvent.userDefinedStatus()) .contains("user_defined_status") assertThat(financialAccountUpdatedWebhookEvent.accountNumber()).contains("account_number") + assertThat(financialAccountUpdatedWebhookEvent.blockchainAddresses()) + .contains( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) assertThat(financialAccountUpdatedWebhookEvent.routingNumber()).contains("routing_number") assertThat(financialAccountUpdatedWebhookEvent.eventType()) .isEqualTo(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) @@ -115,6 +133,14 @@ internal class FinancialAccountUpdatedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) .build() diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt index de53b7467..313ef7d2a 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/ParsedWebhookEventTest.kt @@ -7239,6 +7239,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED) .build() @@ -7348,6 +7356,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType( FinancialAccountCreatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_CREATED @@ -7394,6 +7410,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType(FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED) .build() @@ -7503,6 +7527,14 @@ internal class ParsedWebhookEventTest { .updated(OffsetDateTime.parse("2019-12-27T18:11:19.117Z")) .userDefinedStatus("user_defined_status") .accountNumber("account_number") + .blockchainAddresses( + FinancialAccount.BlockchainAddresses.builder() + .putAdditionalProperty( + "ETH", + JsonValue.from("0x5f2b9e8a1c4d7f0e3a6b9c2d5e8f1a4b7c0d3e6f"), + ) + .build() + ) .routingNumber("routing_number") .eventType( FinancialAccountUpdatedWebhookEvent.EventType.FINANCIAL_ACCOUNT_UPDATED diff --git a/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt b/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt index 91d3b1462..41610a04a 100644 --- a/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt +++ b/lithic-java-core/src/test/kotlin/com/lithic/api/models/VelocityLimitParamsTest.kt @@ -30,6 +30,8 @@ internal class VelocityLimitParamsTest { .build() ) .limitAmount(10000L) + .limitCashAmount(5000L) + .limitCashCount(0L) .limitCount(0L) .build() @@ -54,6 +56,8 @@ internal class VelocityLimitParamsTest { .build() ) assertThat(velocityLimitParams.limitAmount()).contains(10000L) + assertThat(velocityLimitParams.limitCashAmount()).contains(5000L) + assertThat(velocityLimitParams.limitCashCount()).contains(0L) assertThat(velocityLimitParams.limitCount()).contains(0L) } @@ -79,6 +83,8 @@ internal class VelocityLimitParamsTest { .build() ) .limitAmount(10000L) + .limitCashAmount(5000L) + .limitCashCount(0L) .limitCount(0L) .build() diff --git a/scripts/upload-artifacts b/scripts/upload-artifacts index 10f3c7055..5c1fbefc4 100755 --- a/scripts/upload-artifacts +++ b/scripts/upload-artifacts @@ -91,6 +91,7 @@ generate_instructions() { Maven Repo +

Stainless SDK Maven Repository