From 5f64accd23b2e773fbe3b156d22d7e81e8ea5650 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Wed, 17 Dec 2025 16:36:29 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `gr4vy.transactions.create()`: `request.connection_options` **Changed** **Breaking** :warning: * `gr4vy.transactions.update()`: `request.connection_options` **Changed** **Breaking** :warning: * `gr4vy.payment-links.create()`: `request.connection_options` **Changed** **Breaking** :warning: --- .speakeasy/gen.lock | 57 ++++++++++++------- .speakeasy/gen.yaml | 2 +- .speakeasy/workflow.lock | 14 ++--- RELEASES.md | 12 +++- docs/models/chaseoptions.md | 8 +++ docs/models/transactionconnectionoptions.md | 1 + docs/models/trustlyoptions.md | 3 +- pyproject.toml | 2 +- src/gr4vy/_version.py | 6 +- src/gr4vy/models/__init__.py | 5 ++ src/gr4vy/models/chaseoptions.py | 46 +++++++++++++++ .../models/transactionconnectionoptions.py | 10 ++++ src/gr4vy/models/trustlyoptions.py | 11 +--- 13 files changed, 131 insertions(+), 46 deletions(-) create mode 100644 docs/models/chaseoptions.md create mode 100644 src/gr4vy/models/chaseoptions.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 6e57caec..1e1e343d 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: 833c6a67-4a4a-4ef1-ba24-165a29264e4a management: - docChecksum: 8f81b73c43b5bdb1ea6910360d24c3a8 + docChecksum: 95677631b1e6bfbb79b295e9dfc3b271 docVersion: 1.0.0 - speakeasyVersion: 1.678.0 - generationVersion: 2.787.2 - releaseVersion: 1.10.4 - configChecksum: 1b846ea54d3d2755c912043ebcdddd62 + speakeasyVersion: 1.678.1 + generationVersion: 2.787.5 + releaseVersion: 1.10.5 + configChecksum: f505932cf38024c750733723ea1bb373 repoURL: https://github.com/gr4vy/gr4vy-python.git installationURL: https://github.com/gr4vy/gr4vy-python.git published: true persistentEdits: - generation_id: 8e3791dd-39d9-4bf8-a462-95b10705820a - pristine_commit_hash: 871b2b9d08345997b0f7ee422a181be472423202 - pristine_tree_hash: 9302eb17ace37d390dacf30366f197de94e98b13 + generation_id: 39f0891c-5588-44d7-8c3e-cd31f00df595 + pristine_commit_hash: d9997d8836655ff3b5d64e9de8b53246e364565b + pristine_tree_hash: 2fda46f5c4341409d944408dd1f0ded5b85ce9bf features: python: additionalDependencies: 1.0.0 @@ -338,6 +338,10 @@ trackedFiles: id: c5bd6fe27df2 last_write_checksum: sha1:9a27a95db941d601ea6aab7aab05dfcb0b8e3131 pristine_git_object: 421670bb7c6247b28f63f94c9df7f5fd28b38412 + docs/models/chaseoptions.md: + id: 52e385f89b96 + last_write_checksum: sha1:254f90381cbf29fd856d915293384d2f63e8d63b + pristine_git_object: 29cde10cc326050e2fb07a38b67f5f425da902ab docs/models/checkoutpayoutoptions.md: id: 92d56582a469 last_write_checksum: sha1:4ff13e2ce06c2124d47fa4a06b20443f1e24bb29 @@ -1816,8 +1820,8 @@ trackedFiles: pristine_git_object: 3ce9395068714fd740cb6d824c7262e700d58ece docs/models/transactionconnectionoptions.md: id: 4c92c21f3107 - last_write_checksum: sha1:21ecfe36c4c916f19a3fe7cdc9e6d2d5ca7ecbf3 - pristine_git_object: df82618bb94407f637467a13dd214550685ec24c + last_write_checksum: sha1:c4fd90586ecf7409d940c0e8f242df7abc754387 + pristine_git_object: 39f6d2994c5488cef87982585bef5d57c1fe9e15 docs/models/transactioncreate.md: id: 2eccca1e0d3d last_write_checksum: sha1:22a27680ea14b516797bf5439a38471fcd80888f @@ -1908,8 +1912,8 @@ trackedFiles: pristine_git_object: 417d89b46284a47fe5dc5c7da9afc69bfb0f865b docs/models/trustlyoptions.md: id: 8c6581dd10d3 - last_write_checksum: sha1:951994f2c05dc285f25c9635c24954bc748fd2fa - pristine_git_object: 50ed79a4cdca95ece911509587ea311b7535f4fb + last_write_checksum: sha1:b2fa56725fe02c68ebdb924c751500434013d32b + pristine_git_object: 89d0333e03f2f006ce58f5e0e824f22cdfc5c615 docs/models/unregisterdigitalwalletdomainglobals.md: id: 63723d1dda75 last_write_checksum: sha1:28f56bae89d8d35075076da4e469f56024aa7959 @@ -2188,8 +2192,8 @@ trackedFiles: pristine_git_object: e8cd3e85682cd3d489cf3c5be75a0563d0c9f4bf pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:75c55ed11d2b22f72c809304a9dc134d2e385962 - pristine_git_object: 43f29f881dd56c37eb12b6c3bcc775860f97e568 + last_write_checksum: sha1:c5f30e22c6ded754018a9e5908fb741d69749697 + pristine_git_object: 5bb1c5ef85477f5f34f9ead01efeb4f08d4b748a scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:63a92abbd1de3323613f0d4c1ae4412076577710 @@ -2216,8 +2220,8 @@ trackedFiles: pristine_git_object: 83a0d00f9b5b1a6d837643a32bfd0f82cd4f98ce src/gr4vy/_version.py: id: 1b5ad1da47aa - last_write_checksum: sha1:09077b3244953e1dbc1d22c54bfbf9ab7124d8f1 - pristine_git_object: 456dd44ea8ae9c6701d2054d324cfb1868a8153c + last_write_checksum: sha1:2f3eb4cf8314248c75a8ad6aee0bd325aa2507ae + pristine_git_object: 10f11eaf295e32a16ff5ce3a6c342e7de4a72b1b src/gr4vy/account_updater.py: id: 6dc8f39e2fb9 last_write_checksum: sha1:fabc79a59dd06fb927ce2d834fbafbcad5836a4b @@ -2364,8 +2368,8 @@ trackedFiles: pristine_git_object: 2d392799bbe0b66682b15c14348917eccbcd684e src/gr4vy/models/__init__.py: id: 427cc7fddfe2 - last_write_checksum: sha1:c232a25da5b6f22a4c758392b5cc83cfb98caa58 - pristine_git_object: 1dfbc6c4be46544aaa42fba1ec189a1f6f9ed71e + last_write_checksum: sha1:336eff46695ae98a6160fb495b96709a09d8e464 + pristine_git_object: d374a5f13422ade867523a1cce97ee5a2fd055ae src/gr4vy/models/accountsreceivablesreportspec.py: id: cc6a9368f988 last_write_checksum: sha1:3bbf41c27e4bea011331f20e28cf16a1109fd7dc @@ -2566,6 +2570,10 @@ trackedFiles: id: 65243967d320 last_write_checksum: sha1:b4f94e7c9d4be4514d7711f40feb299df57de6f4 pristine_git_object: 8ff1d95c57e69dff615e0a12f59de43f45dd3586 + src/gr4vy/models/chaseoptions.py: + id: 871df09f4301 + last_write_checksum: sha1:899ed9466e495525373a900ea99a48cffb72a800 + pristine_git_object: e984bf68bbcb1f9c4bb7134cd8343d6e0fafa09a src/gr4vy/models/checkoutpayoutoptions.py: id: fc0cfde95536 last_write_checksum: sha1:34a5378eced910644915df9c42604c73f8fa659e @@ -3624,8 +3632,8 @@ trackedFiles: pristine_git_object: b3dcd84a0d825fd14f5c93f34f0a256be50fa5de src/gr4vy/models/transactionconnectionoptions.py: id: e12dfa576d74 - last_write_checksum: sha1:983262d0f74bb9f57688bda85506de43edb279fe - pristine_git_object: b939ba8849852a768acfabfb6546accdd018bf30 + last_write_checksum: sha1:b825b1eea4b760fefa56e84c4eceecc2b64db821 + pristine_git_object: b5989e318a364a2988071d2660b84a65e8b5ecf1 src/gr4vy/models/transactioncreate.py: id: 640e0433670e last_write_checksum: sha1:1132913b1e55e61087652ee1ae048ca36f45b87f @@ -3712,8 +3720,8 @@ trackedFiles: pristine_git_object: acf625ec6b82297c4c9990837c88ff979b267888 src/gr4vy/models/trustlyoptions.py: id: 1fc00297f51d - last_write_checksum: sha1:48f13c2b2c80e14d5332ba104167d96c42e0c5db - pristine_git_object: ceea9c40d88d28d6d7a3edc5f8aa28d00cc8234e + last_write_checksum: sha1:a3b68ed41085c8dc618be403210e9d852daec212 + pristine_git_object: 554f24feb67d17b5762ae86d9efdcbb4ff53f583 src/gr4vy/models/unregister_digital_wallet_domainop.py: id: 7c3d4329dcb9 last_write_checksum: sha1:d2091767d7e762769fe091450bc68d876f8b3834 @@ -7386,6 +7394,11 @@ examples: application/json: {"type": "error", "code": "gateway_timeout", "status": 504, "message": "Request could not be processed"} examplesVersion: 1.0.2 generatedTests: {} +releaseNotes: | + ## Python SDK Changes: + * `gr4vy.transactions.create()`: `request.connection_options` **Changed** **Breaking** :warning: + * `gr4vy.transactions.update()`: `request.connection_options` **Changed** **Breaking** :warning: + * `gr4vy.payment-links.create()`: `request.connection_options` **Changed** **Breaking** :warning: generatedFiles: - .gitattributes - .vscode/settings.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index a4222a32..6a53854e 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -26,7 +26,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 1.10.4 + version: 1.10.5 additionalDependencies: dev: freezegun: ^1.5.1 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 9163218e..3fc67a20 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.678.0 +speakeasyVersion: 1.678.1 sources: openapi: sourceNamespace: openapi - sourceRevisionDigest: sha256:511fac91e5503ad7c417a1244c66409ca05c950971d7f0b2ddc5882a3441cce5 - sourceBlobDigest: sha256:e997839d9d7979ee9f6cfe58768bc415fe4497cdf1ed229f9077175c8fb7266f + sourceRevisionDigest: sha256:86c63ec5f8232c7bdb78c6ae1b1c9abac1a8313ce1f8744e225efad4f126f71d + sourceBlobDigest: sha256:22b2e45a967df609d5bb43af7d817b6da21ab49198f282c29396812584895d17 tags: - latest - - speakeasy-sdk-regen-1765966508 + - speakeasy-sdk-regen-1765989284 - 1.0.0 targets: python: source: openapi sourceNamespace: openapi - sourceRevisionDigest: sha256:511fac91e5503ad7c417a1244c66409ca05c950971d7f0b2ddc5882a3441cce5 - sourceBlobDigest: sha256:e997839d9d7979ee9f6cfe58768bc415fe4497cdf1ed229f9077175c8fb7266f + sourceRevisionDigest: sha256:86c63ec5f8232c7bdb78c6ae1b1c9abac1a8313ce1f8744e225efad4f126f71d + sourceBlobDigest: sha256:22b2e45a967df609d5bb43af7d817b6da21ab49198f282c29396812584895d17 codeSamplesNamespace: openapi-python-code-samples - codeSamplesRevisionDigest: sha256:04c66a8c224384d0381021c4aac45e07ab1230dfe412cf81d7e02f165a5c5b83 + codeSamplesRevisionDigest: sha256:cd1bf63f0a285e4a5658fa4e5e74c823a359b4242714a23986363505a5ce23a9 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 30aa1a46..2613b9a9 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1258,4 +1258,14 @@ Based on: ### Generated - [python v1.10.4] . ### Releases -- [PyPI v1.10.4] https://pypi.org/project/gr4vy/1.10.4 - . \ No newline at end of file +- [PyPI v1.10.4] https://pypi.org/project/gr4vy/1.10.4 - . + +## 2025-12-17 16:34:25 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.678.1 (2.787.5) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.10.5] . +### Releases +- [PyPI v1.10.5] https://pypi.org/project/gr4vy/1.10.5 - . \ No newline at end of file diff --git a/docs/models/chaseoptions.md b/docs/models/chaseoptions.md new file mode 100644 index 00000000..29cde10c --- /dev/null +++ b/docs/models/chaseoptions.md @@ -0,0 +1,8 @@ +# ChaseOptions + + +## Fields + +| Field | Type | Required | Description | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `comments` | *OptionalNullable[str]* | :heavy_minus_sign: | Custom order comment | \ No newline at end of file diff --git a/docs/models/transactionconnectionoptions.md b/docs/models/transactionconnectionoptions.md index df82618b..39f6d299 100644 --- a/docs/models/transactionconnectionoptions.md +++ b/docs/models/transactionconnectionoptions.md @@ -17,6 +17,7 @@ | `adyen_vipps` | [OptionalNullable[models.AdyenOptions]](../models/adyenoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `adyen-vipps` connector. | | `affirm_affirm` | [OptionalNullable[models.AffirmOptions]](../models/affirmoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `affirm-affirm` connector. | | `braintree_card` | [OptionalNullable[models.BraintreeOptions]](../models/braintreeoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `braintree-card` connector. | +| `chaseorbital_card` | [OptionalNullable[models.ChaseOptions]](../models/chaseoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `chaseorbital-card` connector. | | `cybersource_anti_fraud` | [OptionalNullable[models.CybersourceAntiFraudOptions]](../models/cybersourceantifraudoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `cybersource-anti-fraud` connector. | | `cybersource_card` | [OptionalNullable[models.CybersourceOptions]](../models/cybersourceoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `cybersource-card` connector. | | `cybersource_ideal` | [OptionalNullable[models.CybersourceOptions]](../models/cybersourceoptions.md) | :heavy_minus_sign: | Custom options to be passed to the `cybersource-ideal` connector. | diff --git a/docs/models/trustlyoptions.md b/docs/models/trustlyoptions.md index 50ed79a4..89d0333e 100644 --- a/docs/models/trustlyoptions.md +++ b/docs/models/trustlyoptions.md @@ -5,5 +5,4 @@ | Field | Type | Required | Description | Example | | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `refresh_split_token` | *OptionalNullable[bool]* | :heavy_minus_sign: | Indicates to Gr4vy whether or not the stored Trustly agreement needs refreshing. | true | -| `url_scheme` | *OptionalNullable[str]* | :heavy_minus_sign: | URL scheme for an app. | APP://SOME_RESOURCE | \ No newline at end of file +| `refresh_split_token` | *OptionalNullable[bool]* | :heavy_minus_sign: | Indicates to Gr4vy whether or not the stored Trustly agreement needs refreshing. | true | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 43f29f88..5bb1c5ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "gr4vy" -version = "1.10.4" +version = "1.10.5" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Gr4vy" },] readme = "README-PYPI.md" diff --git a/src/gr4vy/_version.py b/src/gr4vy/_version.py index 456dd44e..10f11eaf 100644 --- a/src/gr4vy/_version.py +++ b/src/gr4vy/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "gr4vy" -__version__: str = "1.10.4" +__version__: str = "1.10.5" __openapi_doc_version__: str = "1.0.0" -__gen_version__: str = "2.787.2" -__user_agent__: str = "speakeasy-sdk/python 1.10.4 2.787.2 1.0.0 gr4vy" +__gen_version__: str = "2.787.5" +__user_agent__: str = "speakeasy-sdk/python 1.10.5 2.787.5 1.0.0 gr4vy" try: if __package__ is not None: diff --git a/src/gr4vy/models/__init__.py b/src/gr4vy/models/__init__.py index 1dfbc6c4..d374a5f1 100644 --- a/src/gr4vy/models/__init__.py +++ b/src/gr4vy/models/__init__.py @@ -128,6 +128,7 @@ CardWithURLPaymentMethodCreateTypedDict, ) from .cartitem import CartItem, CartItemTypedDict + from .chaseoptions import ChaseOptions, ChaseOptionsTypedDict from .checkoutpayoutoptions import ( CheckoutPayoutOptions, CheckoutPayoutOptionsTypedDict, @@ -1285,6 +1286,8 @@ "CardWithURLPaymentMethodCreateTypedDict", "CartItem", "CartItemTypedDict", + "ChaseOptions", + "ChaseOptionsTypedDict", "CheckoutPayoutOptions", "CheckoutPayoutOptionsTypedDict", "CheckoutSession", @@ -2200,6 +2203,8 @@ "CardWithURLPaymentMethodCreateTypedDict": ".cardwithurlpaymentmethodcreate", "CartItem": ".cartitem", "CartItemTypedDict": ".cartitem", + "ChaseOptions": ".chaseoptions", + "ChaseOptionsTypedDict": ".chaseoptions", "CheckoutPayoutOptions": ".checkoutpayoutoptions", "CheckoutPayoutOptionsTypedDict": ".checkoutpayoutoptions", "CheckoutSession": ".checkoutsession", diff --git a/src/gr4vy/models/chaseoptions.py b/src/gr4vy/models/chaseoptions.py new file mode 100644 index 00000000..e984bf68 --- /dev/null +++ b/src/gr4vy/models/chaseoptions.py @@ -0,0 +1,46 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from gr4vy.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +from pydantic import model_serializer +from typing_extensions import NotRequired, TypedDict + + +class ChaseOptionsTypedDict(TypedDict): + comments: NotRequired[Nullable[str]] + r"""Custom order comment""" + + +class ChaseOptions(BaseModel): + comments: OptionalNullable[str] = UNSET + r"""Custom order comment""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["comments"] + nullable_fields = ["comments"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/gr4vy/models/transactionconnectionoptions.py b/src/gr4vy/models/transactionconnectionoptions.py index b939ba88..b5989e31 100644 --- a/src/gr4vy/models/transactionconnectionoptions.py +++ b/src/gr4vy/models/transactionconnectionoptions.py @@ -7,6 +7,7 @@ from .adyensepaoptions import AdyenSepaOptions, AdyenSepaOptionsTypedDict from .affirmoptions import AffirmOptions, AffirmOptionsTypedDict from .braintreeoptions import BraintreeOptions, BraintreeOptionsTypedDict +from .chaseoptions import ChaseOptions, ChaseOptionsTypedDict from .cybersourceantifraudoptions import ( CybersourceAntiFraudOptions, CybersourceAntiFraudOptionsTypedDict, @@ -66,6 +67,8 @@ class TransactionConnectionOptionsTypedDict(TypedDict): r"""Custom options to be passed to the `affirm-affirm` connector.""" braintree_card: NotRequired[Nullable[BraintreeOptionsTypedDict]] r"""Custom options to be passed to the `braintree-card` connector.""" + chaseorbital_card: NotRequired[Nullable[ChaseOptionsTypedDict]] + r"""Custom options to be passed to the `chaseorbital-card` connector.""" cybersource_anti_fraud: NotRequired[Nullable[CybersourceAntiFraudOptionsTypedDict]] r"""Custom options to be passed to the `cybersource-anti-fraud` connector.""" cybersource_card: NotRequired[Nullable[CybersourceOptionsTypedDict]] @@ -187,6 +190,11 @@ class TransactionConnectionOptions(BaseModel): ] = UNSET r"""Custom options to be passed to the `braintree-card` connector.""" + chaseorbital_card: Annotated[ + OptionalNullable[ChaseOptions], pydantic.Field(alias="chaseorbital-card") + ] = UNSET + r"""Custom options to be passed to the `chaseorbital-card` connector.""" + cybersource_anti_fraud: Annotated[ OptionalNullable[CybersourceAntiFraudOptions], pydantic.Field(alias="cybersource-anti-fraud"), @@ -352,6 +360,7 @@ def serialize_model(self, handler): "adyen-vipps", "affirm-affirm", "braintree-card", + "chaseorbital-card", "cybersource-anti-fraud", "cybersource-card", "cybersource-ideal", @@ -395,6 +404,7 @@ def serialize_model(self, handler): "adyen-vipps", "affirm-affirm", "braintree-card", + "chaseorbital-card", "cybersource-anti-fraud", "cybersource-card", "cybersource-ideal", diff --git a/src/gr4vy/models/trustlyoptions.py b/src/gr4vy/models/trustlyoptions.py index ceea9c40..554f24fe 100644 --- a/src/gr4vy/models/trustlyoptions.py +++ b/src/gr4vy/models/trustlyoptions.py @@ -10,8 +10,6 @@ class TrustlyOptionsTypedDict(TypedDict): refresh_split_token: NotRequired[Nullable[bool]] r"""Indicates to Gr4vy whether or not the stored Trustly agreement needs refreshing.""" - url_scheme: NotRequired[Nullable[str]] - r"""URL scheme for an app.""" class TrustlyOptions(BaseModel): @@ -20,15 +18,10 @@ class TrustlyOptions(BaseModel): ] = UNSET r"""Indicates to Gr4vy whether or not the stored Trustly agreement needs refreshing.""" - url_scheme: Annotated[OptionalNullable[str], pydantic.Field(alias="urlScheme")] = ( - UNSET - ) - r"""URL scheme for an app.""" - @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["refreshSplitToken", "urlScheme"] - nullable_fields = ["refreshSplitToken", "urlScheme"] + optional_fields = ["refreshSplitToken"] + nullable_fields = ["refreshSplitToken"] null_default_fields = [] serialized = handler(self) From 4a65c4755efe77c3a9f4fbb1cce32419e806cf8c Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Wed, 17 Dec 2025 16:36:41 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow