diff --git a/.release-please-manifest.json b/.release-please-manifest.json index aebbc8bc..f70d9978 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.101.0" + ".": "0.102.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 4f6855e4..c41d7639 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 168 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-529662462c00af160f74568fe26dbe576cf1fdc9f427e11bb1939bd8acdcb43f.yml -openapi_spec_hash: a98631dfc66716d41ada4ddb199f7028 -config_hash: 2d501901f343d00775037fcec4121983 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-aca56b6e4da5b97e586e66392dd3cf433208cb964e25081a661dd41cf456a88a.yml +openapi_spec_hash: 297b9f330d31db8e5832463a0ce455ba +config_hash: 99dad20b4a7d4a1390670762b9da4231 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e80fdc2..e0694b18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 0.102.0 (2025-08-13) + +Full Changelog: [v0.101.0...v0.102.0](https://github.com/lithic-com/lithic-python/compare/v0.101.0...v0.102.0) + +### Features + +* **api:** adds detailed 3DS challenge statuses ([c08b37a](https://github.com/lithic-com/lithic-python/commit/c08b37ad7fdbf81f76df2bf5b7714c9cc8c4eb60)) + + +### Chores + +* **internal:** fix ruff target version ([5c7644d](https://github.com/lithic-com/lithic-python/commit/5c7644d6d1a3bb820c12a0f5d85c2479c659879c)) +* **internal:** update comment in script ([88dcc8c](https://github.com/lithic-com/lithic-python/commit/88dcc8c88838f024ed2d8538a0832aa3fe038864)) +* update @stainless-api/prism-cli to v5.15.0 ([9d53118](https://github.com/lithic-com/lithic-python/commit/9d53118b6ef04ab98b1bda7b76f312f69d2d83a7)) + ## 0.101.0 (2025-08-04) Full Changelog: [v0.100.0...v0.101.0](https://github.com/lithic-com/lithic-python/compare/v0.100.0...v0.101.0) diff --git a/pyproject.toml b/pyproject.toml index e2e16fca..646fa7ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lithic" -version = "0.101.0" +version = "0.102.0" description = "The official Python library for the lithic API" dynamic = ["readme"] license = "Apache-2.0" @@ -159,7 +159,7 @@ reportPrivateUsage = false [tool.ruff] line-length = 120 output-format = "grouped" -target-version = "py37" +target-version = "py38" [tool.ruff.format] docstring-code-format = true diff --git a/scripts/mock b/scripts/mock index d2814ae6..0b28f6ea 100755 --- a/scripts/mock +++ b/scripts/mock @@ -21,7 +21,7 @@ echo "==> Starting mock server with URL ${URL}" # Run prism mock on the given spec if [ "$1" == "--daemon" ]; then - npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" &> .prism.log & + npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" &> .prism.log & # Wait for server to come online echo -n "Waiting for server" @@ -37,5 +37,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" + npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" fi diff --git a/scripts/test b/scripts/test index 2b878456..dbeda2d2 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! prism_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the prism command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stoplight/prism-cli@~5.3.2 -- prism mock path/to/your.openapi.yml${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock path/to/your.openapi.yml${NC}" echo exit 1 diff --git a/src/lithic/_version.py b/src/lithic/_version.py index 8fd6a8f9..7b3ec7b5 100644 --- a/src/lithic/_version.py +++ b/src/lithic/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "lithic" -__version__ = "0.101.0" # x-release-please-version +__version__ = "0.102.0" # x-release-please-version diff --git a/src/lithic/resources/account_holders.py b/src/lithic/resources/account_holders.py index 785e258f..728609a7 100644 --- a/src/lithic/resources/account_holders.py +++ b/src/lithic/resources/account_holders.py @@ -123,7 +123,7 @@ def create( external_id: A user provided id that can be used to link an account holder with an external system - kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYC was completed on the + kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. @@ -1112,7 +1112,7 @@ async def create( external_id: A user provided id that can be used to link an account holder with an external system - kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYC was completed on the + kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. diff --git a/src/lithic/types/account_holder_create_params.py b/src/lithic/types/account_holder_create_params.py index bc242c85..bfa6d1b3 100644 --- a/src/lithic/types/account_holder_create_params.py +++ b/src/lithic/types/account_holder_create_params.py @@ -76,7 +76,7 @@ class KYB(TypedDict, total=False): kyb_passed_timestamp: str """ - An RFC 3339 timestamp indicating when precomputed KYC was completed on the + An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. diff --git a/src/lithic/types/account_holder_simulate_enrollment_review_response.py b/src/lithic/types/account_holder_simulate_enrollment_review_response.py index cdf84631..a8af35c4 100644 --- a/src/lithic/types/account_holder_simulate_enrollment_review_response.py +++ b/src/lithic/types/account_holder_simulate_enrollment_review_response.py @@ -241,6 +241,12 @@ class VerificationApplication(BaseModel): updated: datetime """Timestamp of when the application was last updated.""" + ky_passed_at: Optional[datetime] = None + """Timestamp of when the application passed the verification process. + + Only present if `status` is `ACCEPTED` + """ + class AccountHolderSimulateEnrollmentReviewResponse(BaseModel): token: Optional[str] = None diff --git a/src/lithic/types/account_holder_update_response.py b/src/lithic/types/account_holder_update_response.py index e97edf3e..bbe58a3d 100644 --- a/src/lithic/types/account_holder_update_response.py +++ b/src/lithic/types/account_holder_update_response.py @@ -244,6 +244,12 @@ class KYBKYCPatchResponseVerificationApplication(BaseModel): updated: datetime """Timestamp of when the application was last updated.""" + ky_passed_at: Optional[datetime] = None + """Timestamp of when the application passed the verification process. + + Only present if `status` is `ACCEPTED` + """ + class KYBKYCPatchResponse(BaseModel): token: Optional[str] = None diff --git a/src/lithic/types/kyb_param.py b/src/lithic/types/kyb_param.py index a799e1f7..78e04e29 100644 --- a/src/lithic/types/kyb_param.py +++ b/src/lithic/types/kyb_param.py @@ -200,7 +200,7 @@ class KYBParam(TypedDict, total=False): kyb_passed_timestamp: str """ - An RFC 3339 timestamp indicating when precomputed KYC was completed on the + An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. diff --git a/src/lithic/types/three_ds/authentication_retrieve_response.py b/src/lithic/types/three_ds/authentication_retrieve_response.py index 98e22a19..d202af6c 100644 --- a/src/lithic/types/three_ds/authentication_retrieve_response.py +++ b/src/lithic/types/three_ds/authentication_retrieve_response.py @@ -295,6 +295,35 @@ class ChallengeMetadata(BaseModel): method_type: Literal["SMS_OTP", "OUT_OF_BAND"] """The type of challenge method used for authentication.""" + status: Literal[ + "SUCCESS", + "PENDING", + "SMS_DELIVERY_FAILED", + "CARDHOLDER_TIMEOUT", + "CANCELED_VIA_CHALLENGE_UI", + "CANCELED_OOB", + "ATTEMPTS_EXCEEDED", + "ABORTED", + "ERROR", + ] + """Indicates the status of the challenge + + - SUCCESS - Cardholder completed the challenge successfully + - PENDING - Challenge was issued to the cardholder and was not completed yet + - SMS_DELIVERY_FAILED - Lithic confirmed undeliverability of the SMS to the + provided phone number. Relevant only for SMS_OTP method + - CARDHOLDER_TIMEOUT - Cardholder failed to complete the challenge within the + given challenge TTL + - CANCELED_VIA_CHALLENGE_UI - Cardholder canceled the challenge by selecting + "cancel" on the challenge UI + - CANCELED_OOB - Cardholder canceled the challenge out of band + - ATTEMPTS_EXCEEDED - Cardholder failed the challenge by either entering an + incorrect OTP more than the allowed number of times or requesting a new OTP + more than the allowed number of times + - ABORTED - Merchant aborted authentication after a challenge was requested + - ERROR - The challenge failed for a reason different than those documented + """ + phone_number: Optional[str] = None """The phone number used for delivering the OTP. Relevant only for SMS_OTP method."""