Skip to content

Commit e043c7a

Browse files
authored
Merge pull request #200 from kernel/release-please--branches--main--changes--next
release: 0.130.0
2 parents 208bef1 + 8729e1e commit e043c7a

24 files changed

Lines changed: 395 additions & 28 deletions

‎.release-please-manifest.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.129.0"
2+
".": "0.130.0"
33
}

‎CHANGELOG.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Changelog
22

3+
## [0.130.0](https://github.com/kernel/kernel-python-sdk/compare/v0.129.0...v0.130.0) (2026-10-24)
4+
5+
6+
### Features
7+
8+
* Fall back to aliases after network token enrollment failures ([5930892](https://github.com/kernel/kernel-python-sdk/commit/5930892a91a3f212f27dfdaab4412bf972a4973f))
9+
10+
11+
### Bug Fixes
12+
13+
* continue offset pagination past empty pages ([80908e4](https://github.com/kernel/kernel-python-sdk/commit/80908e4a5fae05aedc1db65f67b70a34781273d2))
14+
* follow offset cursors in either direction ([bfcfa9a](https://github.com/kernel/kernel-python-sdk/commit/bfcfa9aac5a1420fced2960757ce80f197be257a))
15+
316
## [0.129.0](https://github.com/kernel/kernel-python-sdk/compare/v0.128.0...v0.129.0) (2026-10-21)
417

518

‎api.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,8 @@ from kernel.types.vaults import (
602602
KernelCredentialVaultItemState,
603603
KernelWalletState,
604604
KernelWalletVaultItemSpec,
605+
LinkShippingAddress,
606+
LinkUserInfo,
605607
ManagedAuthCredentialVaultField,
606608
ManagedAuthCredentialVaultItemSpec,
607609
ManagedAuthCredentialVaultItemSpecInput,

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "kernel"
3-
version = "0.129.0"
3+
version = "0.130.0"
44
description = "The official Python library for the kernel API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

‎src/kernel/_version.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "kernel"
4-
__version__ = "0.129.0" # x-release-please-version
4+
__version__ = "0.130.0" # x-release-please-version

‎src/kernel/pagination.py‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def has_next_page(self) -> bool:
114114
if has_more is not None and has_more is False:
115115
return False
116116

117-
return super().has_next_page()
117+
return self.next_page_info() is not None
118118

119119
@override
120120
def next_page_info(self) -> Optional[PageInfo]:
@@ -133,6 +133,12 @@ def next_page_info(self) -> Optional[PageInfo]:
133133
if next_offset == 0:
134134
return None
135135

136+
# Cursors can move in either direction. Stop only when the server repeats
137+
# the cursor and would re-request the same page.
138+
request_offset = self._options.params.get("offset")
139+
if isinstance(request_offset, int) and next_offset == request_offset:
140+
return None
141+
136142
return PageInfo(params={"offset": next_offset})
137143

138144
@classmethod
@@ -165,7 +171,7 @@ def has_next_page(self) -> bool:
165171
if has_more is not None and has_more is False:
166172
return False
167173

168-
return super().has_next_page()
174+
return self.next_page_info() is not None
169175

170176
@override
171177
def next_page_info(self) -> Optional[PageInfo]:
@@ -184,6 +190,12 @@ def next_page_info(self) -> Optional[PageInfo]:
184190
if next_offset == 0:
185191
return None
186192

193+
# Cursors can move in either direction. Stop only when the server repeats
194+
# the cursor and would re-request the same page.
195+
request_offset = self._options.params.get("offset")
196+
if isinstance(request_offset, int) and next_offset == request_offset:
197+
return None
198+
187199
return PageInfo(params={"offset": next_offset})
188200

189201
@classmethod

‎src/kernel/resources/vaults/items.py‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def retrieve(
6666
key: str,
6767
*,
6868
id_or_name: str,
69-
expand: List[Literal["payment_methods"]] | Omit = omit,
69+
expand: List[Literal["payment_methods", "link_user_info", "link_shipping_addresses"]] | Omit = omit,
7070
wait: int | Omit = omit,
7171
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
7272
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -746,7 +746,8 @@ def perform_operation(
746746
prefix or glob matching. When an item allows omitting it, the browser must have
747747
exactly one open page.
748748
749-
timeout_ms: Total operation deadline in milliseconds, not a per-field timeout.
749+
timeout_ms: Ignored. Fill sets no operation deadline; typing pace adapts to the length of
750+
the values instead. Accepted for compatibility.
750751
751752
extra_headers: Send extra headers
752753
@@ -1447,7 +1448,7 @@ async def retrieve(
14471448
key: str,
14481449
*,
14491450
id_or_name: str,
1450-
expand: List[Literal["payment_methods"]] | Omit = omit,
1451+
expand: List[Literal["payment_methods", "link_user_info", "link_shipping_addresses"]] | Omit = omit,
14511452
wait: int | Omit = omit,
14521453
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
14531454
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -2127,7 +2128,8 @@ async def perform_operation(
21272128
prefix or glob matching. When an item allows omitting it, the browser must have
21282129
exactly one open page.
21292130
2130-
timeout_ms: Total operation deadline in milliseconds, not a per-field timeout.
2131+
timeout_ms: Ignored. Fill sets no operation deadline; typing pace adapts to the length of
2132+
the values instead. Accepted for compatibility.
21312133
21322134
extra_headers: Send extra headers
21332135

‎src/kernel/types/vaults/__init__.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
from .vault_item import VaultItem as VaultItem
6+
from .link_user_info import LinkUserInfo as LinkUserInfo
67
from .vault_item_event import VaultItemEvent as VaultItemEvent
78
from .kernel_card_state import KernelCardState as KernelCardState
89
from .vault_item_action import VaultItemAction as VaultItemAction
@@ -18,6 +19,7 @@
1819
from .vault_payment_method import VaultPaymentMethod as VaultPaymentMethod
1920
from .card_vault_item_state import CardVaultItemState as CardVaultItemState
2021
from .credential_vault_item import CredentialVaultItem as CredentialVaultItem
22+
from .link_shipping_address import LinkShippingAddress as LinkShippingAddress
2123
from .vault_fill_field_param import VaultFillFieldParam as VaultFillFieldParam
2224
from .wallet_vault_item_spec import WalletVaultItemSpec as WalletVaultItemSpec
2325
from .vault_fill_field_result import VaultFillFieldResult as VaultFillFieldResult

‎src/kernel/types/vaults/card_vault_item_spec.py‎

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"LinkCardVaultItemSpec",
1313
"LinkCardVaultItemSpecLineItem",
1414
"LinkCardVaultItemSpecLineItemTotal",
15+
"LinkCardVaultItemSpecRecurring",
1516
"LinkCardVaultItemSpecTotal",
1617
"AgentCardCardVaultItemSpec",
1718
]
@@ -47,6 +48,18 @@ class LinkCardVaultItemSpecLineItem(BaseModel):
4748
url: Optional[str] = None
4849

4950

51+
class LinkCardVaultItemSpecRecurring(BaseModel):
52+
"""Recurring terms for a subscription or other repeated purchase.
53+
54+
The amount becomes the spending limit for each period of interval_count intervals, for example every 2 weeks. The merchant schedules charges. The card stays ready after each charge until it expires or is deleted; do not create a new card each period. Deleting the card, its wallet or its vault first cancels the credential with Link, so later charges decline; if Link cannot be reached, deletion returns 409 provider_revocation_pending and should be retried. Deletion does not cancel the subscription with the merchant. Recurring terms cannot be changed once the card is authorized.
55+
"""
56+
57+
interval: Literal["day", "week", "month", "year"]
58+
59+
interval_count: Optional[int] = None
60+
"""Number of intervals per period. Link defaults it to 1."""
61+
62+
5063
class LinkCardVaultItemSpecTotal(BaseModel):
5164
amount: int
5265
"""Total amount in minor currency units."""
@@ -63,7 +76,10 @@ class LinkCardVaultItemSpec(BaseModel):
6376
"""
6477

6578
amount: int
66-
"""Integer amount in minor currency units, at most 50000."""
79+
"""Integer amount in minor currency units, at most 50000.
80+
81+
With recurring, the spending limit per period, not a lifetime total.
82+
"""
6783

6884
context: str
6985

@@ -89,6 +105,19 @@ class LinkCardVaultItemSpec(BaseModel):
89105

90106
metadata: Optional[Dict[str, str]] = None
91107

108+
recurring: Optional[LinkCardVaultItemSpecRecurring] = None
109+
"""Recurring terms for a subscription or other repeated purchase.
110+
111+
The amount becomes the spending limit for each period of interval_count
112+
intervals, for example every 2 weeks. The merchant schedules charges. The card
113+
stays ready after each charge until it expires or is deleted; do not create a
114+
new card each period. Deleting the card, its wallet or its vault first cancels
115+
the credential with Link, so later charges decline; if Link cannot be reached,
116+
deletion returns 409 provider_revocation_pending and should be retried. Deletion
117+
does not cancel the subscription with the merchant. Recurring terms cannot be
118+
changed once the card is authorized.
119+
"""
120+
92121
totals: Optional[List[LinkCardVaultItemSpecTotal]] = None
93122

94123

‎src/kernel/types/vaults/card_vault_item_spec_param.py‎

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"LinkCardVaultItemSpec",
1313
"LinkCardVaultItemSpecLineItem",
1414
"LinkCardVaultItemSpecLineItemTotal",
15+
"LinkCardVaultItemSpecRecurring",
1516
"LinkCardVaultItemSpecTotal",
1617
"AgentCardCardVaultItemSpec",
1718
]
@@ -47,6 +48,18 @@ class LinkCardVaultItemSpecLineItem(TypedDict, total=False):
4748
url: str
4849

4950

51+
class LinkCardVaultItemSpecRecurring(TypedDict, total=False):
52+
"""Recurring terms for a subscription or other repeated purchase.
53+
54+
The amount becomes the spending limit for each period of interval_count intervals, for example every 2 weeks. The merchant schedules charges. The card stays ready after each charge until it expires or is deleted; do not create a new card each period. Deleting the card, its wallet or its vault first cancels the credential with Link, so later charges decline; if Link cannot be reached, deletion returns 409 provider_revocation_pending and should be retried. Deletion does not cancel the subscription with the merchant. Recurring terms cannot be changed once the card is authorized.
55+
"""
56+
57+
interval: Required[Literal["day", "week", "month", "year"]]
58+
59+
interval_count: int
60+
"""Number of intervals per period. Link defaults it to 1."""
61+
62+
5063
class LinkCardVaultItemSpecTotal(TypedDict, total=False):
5164
amount: Required[int]
5265
"""Total amount in minor currency units."""
@@ -63,7 +76,10 @@ class LinkCardVaultItemSpec(TypedDict, total=False):
6376
"""
6477

6578
amount: Required[int]
66-
"""Integer amount in minor currency units, at most 50000."""
79+
"""Integer amount in minor currency units, at most 50000.
80+
81+
With recurring, the spending limit per period, not a lifetime total.
82+
"""
6783

6884
context: Required[str]
6985

@@ -89,6 +105,19 @@ class LinkCardVaultItemSpec(TypedDict, total=False):
89105

90106
metadata: Dict[str, str]
91107

108+
recurring: LinkCardVaultItemSpecRecurring
109+
"""Recurring terms for a subscription or other repeated purchase.
110+
111+
The amount becomes the spending limit for each period of interval_count
112+
intervals, for example every 2 weeks. The merchant schedules charges. The card
113+
stays ready after each charge until it expires or is deleted; do not create a
114+
new card each period. Deleting the card, its wallet or its vault first cancels
115+
the credential with Link, so later charges decline; if Link cannot be reached,
116+
deletion returns 409 provider_revocation_pending and should be retried. Deletion
117+
does not cancel the subscription with the merchant. Recurring terms cannot be
118+
changed once the card is authorized.
119+
"""
120+
92121
totals: Iterable[LinkCardVaultItemSpecTotal]
93122

94123

0 commit comments

Comments
 (0)