From c393d37d72171e841f1ebf8ce0a9720f5ae271d8 Mon Sep 17 00:00:00 2001 From: "kernel-internal[bot]" <260533166+kernel-internal[bot]@users.noreply.github.com> Date: Thu, 3 Sep 2026 14:24:22 +0000 Subject: [PATCH 1/3] feat: Expose OTLP destination delivery health Stainless-Generated-From: 1e679cbc44b2a9df185702266e0fd950180e2438 --- src/resources/telemetry/destinations.ts | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/resources/telemetry/destinations.ts b/src/resources/telemetry/destinations.ts index 0c5b8ada..0fd62129 100644 --- a/src/resources/telemetry/destinations.ts +++ b/src/resources/telemetry/destinations.ts @@ -92,6 +92,13 @@ export type OtlpDestinationsOffsetPagination = OffsetPagination export interface OtlpDestination { id: string; + /** + * Failed deliveries since the last success, as observed by the relay process that + * wrote the latest outcome. Zero means the most recently recorded outcome + * succeeded. + */ + consecutive_failures: number; + created_at: string; /** @@ -116,6 +123,26 @@ export interface OtlpDestination { updated_at: string; description?: string; + + /** + * Sanitized class of the delivery failure recorded at `last_error_at`. It is + * retained after a later success, so its presence does not mean the destination is + * currently failing. Response bodies, endpoint URLs, credentials, and raw + * transport errors are never returned. + */ + last_error?: string; + + /** + * Timestamp of the most recent failed delivery. It is retained after a later + * success, so it can predate `last_export_at`. Read `consecutive_failures` to tell + * whether the destination is currently failing. + */ + last_error_at?: string; + + /** + * Timestamp of the most recent successful delivery. Moves only on success. + */ + last_export_at?: string; } export interface DestinationCreateParams { From c6a1099b453b25a67f54154fadec6f5b0586b472 Mon Sep 17 00:00:00 2001 From: "kernel-internal[bot]" <260533166+kernel-internal[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:19:09 +0000 Subject: [PATCH 2/3] feat: Repair Vault SDK custom-code seals Stainless-Generated-From: a3fb6c81211b70d3cfc303a2bc585bbd169e08f1 --- .stats.yml | 2 +- api.md | 41 + src/client.ts | 19 + src/resources/browser-pools.ts | 11 + src/resources/browsers/browsers.ts | 60 ++ src/resources/browsers/index.ts | 1 + .../config-registry/config-registry.ts | 25 +- src/resources/index.ts | 8 + src/resources/invocations.ts | 11 + src/resources/vaults.ts | 3 + src/resources/vaults/index.ts | 30 + src/resources/vaults/items.ts | 780 ++++++++++++++++++ src/resources/vaults/vaults.ts | 125 +++ tests/api-resources/browsers/browsers.test.ts | 1 + tests/api-resources/vaults/items.test.ts | 214 +++++ tests/api-resources/vaults/vaults.test.ts | 71 ++ 16 files changed, 1390 insertions(+), 12 deletions(-) create mode 100644 src/resources/vaults.ts create mode 100644 src/resources/vaults/index.ts create mode 100644 src/resources/vaults/items.ts create mode 100644 src/resources/vaults/vaults.ts create mode 100644 tests/api-resources/vaults/items.test.ts create mode 100644 tests/api-resources/vaults/vaults.test.ts diff --git a/.stats.yml b/.stats.yml index a867372d..5fe5772a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1 +1 @@ -configured_endpoints: 147 +configured_endpoints: 158 diff --git a/api.md b/api.md index 9f4e5a6c..4093cf9b 100644 --- a/api.md +++ b/api.md @@ -108,6 +108,7 @@ Types: - BrowserUsage - Profile - Tags +- VaultReference - BrowserCreateResponse - BrowserRetrieveResponse - BrowserUpdateResponse @@ -432,6 +433,46 @@ Methods: - client.browserPools.flush(idOrName) -> void - client.browserPools.release(idOrName, { ...params }) -> void +# Vaults + +Types: + +- Vault + +Methods: + +- client.vaults.retrieve(idOrName) -> Vault +- client.vaults.list({ ...params }) -> VaultsOffsetPagination +- client.vaults.delete(idOrName) -> void +- client.vaults.upsert({ ...params }) -> Vault + +## Items + +Types: + +- AgentcardCheckoutAuthorization +- CardVaultItemSpec +- CardVaultItemState +- VaultCardAliases +- VaultItem +- VaultItemAction +- VaultItemEvent +- VaultPaymentMethod +- WalletVaultItemSpec +- WalletVaultItemState +- ItemListResponse +- ItemEventsResponse + +Methods: + +- client.vaults.items.retrieve(key, { ...params }) -> VaultItem +- client.vaults.items.update(key, { ...params }) -> VaultItem +- client.vaults.items.list(idOrName) -> ItemListResponse +- client.vaults.items.delete(key, { ...params }) -> void +- client.vaults.items.events(key, { ...params }) -> ItemEventsResponse +- client.vaults.items.performOperation(key, { ...params }) -> VaultItem +- client.vaults.items.upsert(key, { ...params }) -> VaultItem + # Credentials Types: diff --git a/src/client.ts b/src/client.ts index c66a88d0..20013d6e 100644 --- a/src/client.ts +++ b/src/client.ts @@ -168,6 +168,7 @@ import { Browsers, Profile, Tags, + VaultReference, } from './resources/browsers/browsers'; import { Analysis, @@ -202,6 +203,13 @@ import { UpdateProjectRequest, } from './resources/projects/projects'; import { Telemetry } from './resources/telemetry/telemetry'; +import { + Vault, + VaultListParams, + VaultUpsertParams, + Vaults, + VaultsOffsetPagination, +} from './resources/vaults/vaults'; import { type Fetch } from './internal/builtin-types'; import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers'; import { FinalRequestOptions, RequestOptions } from './internal/request-options'; @@ -1059,6 +1067,7 @@ export class Kernel { * Create and manage browser pools for acquiring and releasing browsers. */ browserPools: API.BrowserPools = new API.BrowserPools(this); + vaults: API.Vaults = new API.Vaults(this); /** * Create and manage credentials for authentication. */ @@ -1096,6 +1105,7 @@ Kernel.Telemetry = Telemetry; Kernel.Proxies = Proxies; Kernel.Extensions = Extensions; Kernel.BrowserPools = BrowserPools; +Kernel.Vaults = Vaults; Kernel.Credentials = Credentials; Kernel.Projects = Projects; Kernel.Organization = Organization; @@ -1188,6 +1198,7 @@ export declare namespace Kernel { type BrowserUsage as BrowserUsage, type Profile as Profile, type Tags as Tags, + type VaultReference as VaultReference, type BrowserCreateResponse as BrowserCreateResponse, type BrowserRetrieveResponse as BrowserRetrieveResponse, type BrowserUpdateResponse as BrowserUpdateResponse, @@ -1252,6 +1263,14 @@ export declare namespace Kernel { type BrowserPoolReleaseParams as BrowserPoolReleaseParams, }; + export { + Vaults as Vaults, + type Vault as Vault, + type VaultsOffsetPagination as VaultsOffsetPagination, + type VaultListParams as VaultListParams, + type VaultUpsertParams as VaultUpsertParams, + }; + export { Credentials as Credentials, type CreateCredentialRequest as CreateCredentialRequest, diff --git a/src/resources/browser-pools.ts b/src/resources/browser-pools.ts index dc0ed128..e61cbc90 100644 --- a/src/resources/browser-pools.ts +++ b/src/resources/browser-pools.ts @@ -501,6 +501,17 @@ export interface BrowserPoolAcquireResponse { */ usage?: BrowsersAPI.BrowserUsage; + /** + * Whether final usage billing is still pending or complete. Only present for + * deleted sessions. + */ + usage_status?: 'pending' | 'ready'; + + /** + * Vaults linked when the browser session was created. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is diff --git a/src/resources/browsers/browsers.ts b/src/resources/browsers/browsers.ts index c1adfabc..cd3e2ca5 100644 --- a/src/resources/browsers/browsers.ts +++ b/src/resources/browsers/browsers.ts @@ -479,6 +479,15 @@ export interface Profile { */ export type Tags = { [key: string]: string }; +/** + * Reference to a project-scoped vault. Provide exactly one of id or name. + */ +export interface VaultReference { + id?: string; + + name?: string; +} + export interface BrowserCreateResponse { /** * Websocket URL for Chrome DevTools Protocol connections to the browser session @@ -622,6 +631,17 @@ export interface BrowserCreateResponse { */ usage?: BrowserUsage; + /** + * Whether final usage billing is still pending or complete. Only present for + * deleted sessions. + */ + usage_status?: 'pending' | 'ready'; + + /** + * Vaults linked when the browser session was created. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is @@ -782,6 +802,17 @@ export interface BrowserRetrieveResponse { */ usage?: BrowserUsage; + /** + * Whether final usage billing is still pending or complete. Only present for + * deleted sessions. + */ + usage_status?: 'pending' | 'ready'; + + /** + * Vaults linked when the browser session was created. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is @@ -942,6 +973,17 @@ export interface BrowserUpdateResponse { */ usage?: BrowserUsage; + /** + * Whether final usage billing is still pending or complete. Only present for + * deleted sessions. + */ + usage_status?: 'pending' | 'ready'; + + /** + * Vaults linked when the browser session was created. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is @@ -1102,6 +1144,17 @@ export interface BrowserListResponse { */ usage?: BrowserUsage; + /** + * Whether final usage billing is still pending or complete. Only present for + * deleted sessions. + */ + usage_status?: 'pending' | 'ready'; + + /** + * Vaults linked when the browser session was created. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is @@ -1270,6 +1323,12 @@ export interface BrowserCreateParams { */ timeout_seconds?: number; + /** + * Project-scoped vaults to link to the browser session. Links are immutable after + * creation. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is @@ -1657,6 +1716,7 @@ export declare namespace Browsers { type BrowserUsage as BrowserUsage, type Profile as Profile, type Tags as Tags, + type VaultReference as VaultReference, type BrowserCreateResponse as BrowserCreateResponse, type BrowserRetrieveResponse as BrowserRetrieveResponse, type BrowserUpdateResponse as BrowserUpdateResponse, diff --git a/src/resources/browsers/index.ts b/src/resources/browsers/index.ts index 7742988a..6b89a0a5 100644 --- a/src/resources/browsers/index.ts +++ b/src/resources/browsers/index.ts @@ -12,6 +12,7 @@ export { type BrowserUsage, type Profile, type Tags, + type VaultReference, type BrowserCreateResponse, type BrowserRetrieveResponse, type BrowserUpdateResponse, diff --git a/src/resources/config-registry/config-registry.ts b/src/resources/config-registry/config-registry.ts index 8e05c8c2..8ac23ee6 100644 --- a/src/resources/config-registry/config-registry.ts +++ b/src/resources/config-registry/config-registry.ts @@ -15,8 +15,8 @@ export class ConfigRegistry extends APIResource { analyses: AnalysesAPI.Analyses = new AnalysesAPI.Analyses(this._client); /** - * Lists unique domains previously analyzed by the selected project with their - * current domain-level recommendations. + * Lists unique exact targets previously analyzed by the selected project with the + * recommendation produced by each target's latest analysis. * * @example * ```ts @@ -431,22 +431,24 @@ export type RecommendationResult = Recommendation | NoRecommendation; export interface RecommendationSummary { /** - * ID of the most recently requested analysis for this domain. + * ID of the most recently requested analysis for this exact target. */ analysis_id: string; /** - * Lifecycle status of the most recently requested analysis for this domain. + * Lifecycle status of the most recently requested analysis for this exact target. */ analysis_status: 'running' | 'completed' | 'failed' | 'canceled'; /** - * Most recent time the selected project requested an analysis for this domain. + * Most recent time the selected project requested an analysis for this exact + * target. */ last_requested_at: string; /** - * Current domain-level recommendation. Null when no eligible knowledge exists. + * Recommendation produced by the latest analysis. Null when that analysis did not + * produce one. */ recommendation: Recommendation | null; @@ -456,13 +458,14 @@ export interface RecommendationSummary { recommended_config_label: string | null; /** - * Success rate for the recommended configuration. Null when no eligible knowledge - * exists. + * Success rate for the recommended configuration. Null when the latest analysis + * did not produce one. */ success_rate: number | null; /** - * Registrable domain previously analyzed by the selected project. + * Normalized exact target previously analyzed by the selected project, including + * scheme, host, port, and path. */ target: string; } @@ -500,8 +503,8 @@ export interface Target { export interface ConfigRegistryListParams extends OffsetPaginationParams { /** - * Case-insensitive domain search. Full URLs are reduced to their registrable - * domain. + * Case-insensitive substring search over normalized targets, including domain, + * subdomain, and path. */ search?: string; diff --git a/src/resources/index.ts b/src/resources/index.ts index fb5554a1..d1837dd1 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -50,6 +50,7 @@ export { type BrowserUsage, type Profile, type Tags, + type VaultReference, type BrowserCreateResponse, type BrowserRetrieveResponse, type BrowserUpdateResponse, @@ -179,3 +180,10 @@ export { type ProxyListResponsesOffsetPagination, } from './proxies'; export { Telemetry } from './telemetry/telemetry'; +export { + Vaults, + type Vault, + type VaultListParams, + type VaultUpsertParams, + type VaultsOffsetPagination, +} from './vaults/vaults'; diff --git a/src/resources/invocations.ts b/src/resources/invocations.ts index 34b690a9..0ba6cd88 100644 --- a/src/resources/invocations.ts +++ b/src/resources/invocations.ts @@ -561,6 +561,17 @@ export namespace InvocationListBrowsersResponse { */ usage?: BrowsersAPI.BrowserUsage; + /** + * Whether final usage billing is still pending or complete. Only present for + * deleted sessions. + */ + usage_status?: 'pending' | 'ready'; + + /** + * Vaults linked when the browser session was created. + */ + vaults?: Array; + /** * Initial browser window size in pixels with optional refresh rate. If omitted, * image defaults apply (1920x1080@25). For GPU images, the default is diff --git a/src/resources/vaults.ts b/src/resources/vaults.ts new file mode 100644 index 00000000..a89c5e13 --- /dev/null +++ b/src/resources/vaults.ts @@ -0,0 +1,3 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export * from './vaults/index'; diff --git a/src/resources/vaults/index.ts b/src/resources/vaults/index.ts new file mode 100644 index 00000000..190af0eb --- /dev/null +++ b/src/resources/vaults/index.ts @@ -0,0 +1,30 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +export { + Items, + type AgentcardCheckoutAuthorization, + type CardVaultItemSpec, + type CardVaultItemState, + type VaultCardAliases, + type VaultItem, + type VaultItemAction, + type VaultItemEvent, + type VaultPaymentMethod, + type WalletVaultItemSpec, + type WalletVaultItemState, + type ItemListResponse, + type ItemEventsResponse, + type ItemRetrieveParams, + type ItemUpdateParams, + type ItemDeleteParams, + type ItemEventsParams, + type ItemPerformOperationParams, + type ItemUpsertParams, +} from './items'; +export { + Vaults, + type Vault, + type VaultListParams, + type VaultUpsertParams, + type VaultsOffsetPagination, +} from './vaults'; diff --git a/src/resources/vaults/items.ts b/src/resources/vaults/items.ts new file mode 100644 index 00000000..011cff6a --- /dev/null +++ b/src/resources/vaults/items.ts @@ -0,0 +1,780 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import * as ItemsAPI from './items'; +import { APIPromise } from '../../core/api-promise'; +import { buildHeaders } from '../../internal/headers'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; + +export class Items extends APIResource { + /** + * The response advertises operations that are valid in the item's current state + * and live data that can be requested through `expand`. Read each operation's + * description before using it. Expanded data is fetched from the provider and is + * not persisted in the vault item. Requesting an unavailable expansion returns 409 + * instead of a partial item. + */ + retrieve(key: string, params: ItemRetrieveParams, options?: RequestOptions): APIPromise { + const { id_or_name, ...query } = params; + return this._client.get(path`/vaults/${id_or_name}/items/${key}`, { query, ...options }); + } + + /** + * Update a card specification before or between authorizations + */ + update(key: string, params: ItemUpdateParams, options?: RequestOptions): APIPromise { + const { id_or_name, ...body } = params; + return this._client.patch(path`/vaults/${id_or_name}/items/${key}`, { body, ...options }); + } + + /** + * List vault items without secret values + */ + list(idOrName: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/vaults/${idOrName}/items`, options); + } + + /** + * Delete a vault item and invalidate its secret value + */ + delete(key: string, params: ItemDeleteParams, options?: RequestOptions): APIPromise { + const { id_or_name } = params; + return this._client.delete(path`/vaults/${id_or_name}/items/${key}`, { + ...options, + headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + }); + } + + /** + * List immutable audit events for a vault item + */ + events(key: string, params: ItemEventsParams, options?: RequestOptions): APIPromise { + const { id_or_name, ...query } = params; + return this._client.get(path`/vaults/${id_or_name}/items/${key}/events`, { query, ...options }); + } + + /** + * Retrieve the item first and invoke only an operation listed in + * `available_operations`, following its natural-language description. Operations + * may call an external provider and can return the item's updated state. + */ + performOperation( + key: string, + params: ItemPerformOperationParams, + options?: RequestOptions, + ): APIPromise { + const { id_or_name, ...body } = params; + return this._client.post(path`/vaults/${id_or_name}/items/${key}/operations`, { body, ...options }); + } + + /** + * Create or retrieve an identical vault item by immutable key + */ + upsert(key: string, params: ItemUpsertParams, options?: RequestOptions): APIPromise { + const { id_or_name, ...body } = params; + return this._client.put(path`/vaults/${id_or_name}/items/${key}`, { body, ...options }); + } +} + +/** + * The in-flight or most recent checkout authorization. Present while a checkout is + * pending approval and after it settles. + */ +export interface AgentcardCheckoutAuthorization { + id: string; + + amount_cents: number; + + created_at: string; + + currency: string; + + merchant: string; + + psp: string; + + status: 'awaiting_approval' | 'approved' | 'declined' | 'expired'; + + actual_cents?: number; + + /** + * Display amount shown on the approval screen. + */ + amount?: string; + + amount_authority?: 'display_only' | 'stripe_payment_intent'; + + amount_verified?: boolean; + + approval_url?: string; + + /** + * Browser session that submitted the checkout. + */ + browser_id?: string; + + charged_amount_cents?: number; + + charged_currency?: string; + + charged_kind?: 'captured' | 'authorized' | 'none'; + + expected_cents?: number; + + expires_at?: string; + + psp_error_code?: string; + + reason?: string; + + replay_attempted?: boolean; + + /** + * Whether the processor response was delivered to the browser. + */ + replay_delivered?: boolean; + + /** + * HTTP status of the replayed processor response. + */ + replay_status?: number; +} + +/** + * AgentCard reusable card. Each checkout creates an approval-gated authorization + * for spec.merchant / spec.amount. The card stays ready after each authorization. + */ +export type CardVaultItemSpec = + | CardVaultItemSpec.LinkCardVaultItemSpec + | CardVaultItemSpec.AgentCardCardVaultItemSpec; + +export namespace CardVaultItemSpec { + export interface LinkCardVaultItemSpec { + /** + * Integer amount in minor currency units. + */ + amount: number; + + context: string; + + currency: string; + + merchant_name: string; + + merchant_url: string; + + /** + * Payment-method ID returned by the referenced wallet's payment-method listing. + * The provider decides whether the selected funding method can satisfy the card + * request. + */ + payment_method_id: string; + + provider: 'link'; + + /** + * Whether Link should return test credentials instead of a live payment + * credential. + */ + test: boolean; + + /** + * Wallet item key used to mint this card. + */ + wallet: string; + + expires_at?: number; + + line_items?: Array; + + metadata?: { [key: string]: string }; + + totals?: Array; + } + + export namespace LinkCardVaultItemSpec { + export interface LineItem { + name: string; + + description?: string; + + image_url?: string; + + product_url?: string; + + quantity?: number; + + sku?: string; + + totals?: Array; + + /** + * Unit amount in minor currency units. + */ + unit_amount?: number; + + url?: string; + } + + export namespace LineItem { + export interface Total { + /** + * Total amount in minor currency units. + */ + amount: number; + + display_text: string; + + type: string; + } + } + + export interface Total { + /** + * Total amount in minor currency units. + */ + amount: number; + + display_text: string; + + type: string; + } + } + + /** + * AgentCard reusable card. Each checkout creates an approval-gated authorization + * for spec.merchant / spec.amount. The card stays ready after each authorization. + */ + export interface AgentCardCardVaultItemSpec { + /** + * Integer amount in minor currency units. + */ + amount: number; + + currency: string; + + /** + * Merchant name shown on the cardholder's approval screen. + */ + merchant: string; + + provider: 'agentcard'; + + /** + * Wallet item key used to authorize checkouts. + */ + wallet: string; + + /** + * AgentCard vaulted card to pay with. Omitted, the cardholder picks on the + * approval screen. + */ + card_id?: string; + } +} + +export type CardVaultItemState = CardVaultItemState.LinkCardState | CardVaultItemState.AgentCardCardState; + +export namespace CardVaultItemState { + export interface LinkCardState { + provider: 'link'; + + status: 'requested' | 'pending_authorization' | 'ready' | 'consumed' | 'expired' | 'declined'; + + aliases?: ItemsAPI.VaultCardAliases; + + domains?: Array; + + masks?: LinkCardState.Masks; + + status_reason?: string; + } + + export namespace LinkCardState { + export interface Masks { + brand?: string; + + last4?: string; + + [k: string]: string | undefined; + } + } + + export interface AgentCardCardState { + provider: 'agentcard'; + + status: 'requested' | 'ready' | 'pending_approval' | 'degraded'; + + aliases?: ItemsAPI.VaultCardAliases; + + /** + * The in-flight or most recent checkout authorization. Present while a checkout is + * pending approval and after it settles. + */ + authorization?: ItemsAPI.AgentcardCheckoutAuthorization; + + masks?: AgentCardCardState.Masks; + + status_reason?: string; + } + + export namespace AgentCardCardState { + export interface Masks { + brand?: string; + + last4?: string; + + [k: string]: string | undefined; + } + } +} + +export interface VaultCardAliases { + cvc: string; + + exp_month: string; + + exp_year: string; + + number: string; +} + +export type VaultItem = VaultItem.WalletVaultItem | VaultItem.CardVaultItem; + +export namespace VaultItem { + export interface WalletVaultItem { + id: string; + + available_expansions: Array; + + available_operations: Array; + + created_at: string; + + /** + * Immutable item key assigned when the item is created. + */ + key: string; + + /** + * AgentCard wallet. Mode (sandbox vs live) is fixed by the deployment's AgentCard + * credential; there is no per-item test flag. user_id may only reference a user + * already enrolled by a wallet in this organization. + */ + spec: ItemsAPI.WalletVaultItemSpec; + + state: ItemsAPI.WalletVaultItemState; + + type: 'wallet'; + + updated_at: string; + + action?: ItemsAPI.VaultItemAction; + + /** + * Live, non-persisted data requested through the item GET expand parameter. + */ + expanded?: WalletVaultItem.Expanded; + + expires_at?: string; + } + + export namespace WalletVaultItem { + /** + * Live data that can currently be requested by passing its type to the item GET + * expand parameter. + */ + export interface AvailableExpansion { + description: string; + + type: 'payment_methods'; + } + + /** + * An operation that is currently valid for this item. Read the description before + * invoking it through the item operations endpoint. + */ + export interface AvailableOperation { + description: string; + + type: 'authorize'; + } + + /** + * Live, non-persisted data requested through the item GET expand parameter. + */ + export interface Expanded { + payment_methods?: Array; + } + } + + export interface CardVaultItem { + id: string; + + available_expansions: Array; + + available_operations: Array; + + created_at: string; + + /** + * Immutable item key assigned when the item is created. + */ + key: string; + + /** + * AgentCard reusable card. Each checkout creates an approval-gated authorization + * for spec.merchant / spec.amount. The card stays ready after each authorization. + */ + spec: ItemsAPI.CardVaultItemSpec; + + state: ItemsAPI.CardVaultItemState; + + type: 'card'; + + updated_at: string; + + action?: ItemsAPI.VaultItemAction; + + expires_at?: string; + } + + export namespace CardVaultItem { + /** + * Live data that can currently be requested by passing its type to the item GET + * expand parameter. + */ + export interface AvailableExpansion { + description: string; + + type: 'payment_methods'; + } + + /** + * An operation that is currently valid for this item. Read the description before + * invoking it through the item operations endpoint. + */ + export interface AvailableOperation { + description: string; + + type: 'authorize'; + } + } +} + +export type VaultItemAction = + | VaultItemAction.LinkOAuthAction + | VaultItemAction.SpendApprovalAction + | VaultItemAction.PushApprovalAction + | VaultItemAction.CollectAction + | VaultItemAction.MfaAction + | VaultItemAction.EmbeddedCeremonyAction + | VaultItemAction.CardEnrollmentAction; + +export namespace VaultItemAction { + export interface LinkOAuthAction { + name: 'link_oauth'; + + url: string; + } + + export interface SpendApprovalAction { + name: 'spend_approval'; + + url: string; + } + + export interface PushApprovalAction { + name: 'push_approval'; + } + + export interface CollectAction { + name: 'collect'; + } + + export interface MfaAction { + name: 'mfa'; + } + + export interface EmbeddedCeremonyAction { + name: 'embedded_ceremony'; + } + + export interface CardEnrollmentAction { + name: 'card_enrollment'; + + url: string; + } +} + +export interface VaultItemEvent { + id: string; + + created_at: string; + + name: string; + + /** + * Browser session associated with the event, when applicable. + */ + browser_id?: string; + + data?: { [key: string]: unknown }; +} + +export interface VaultPaymentMethod { + id: string; + + /** + * Provider-reported advisory capabilities. A missing capability is unknown, not + * ineligible; only eligible=false is an explicit negative signal. + */ + capabilities: VaultPaymentMethod.Capabilities; + + display: VaultPaymentMethod.Display; + + is_default: boolean; + + /** + * Provider that issued this payment-method ID. + */ + provider: string; + + /** + * Provider-neutral payment-method type normalized to lowercase. + */ + type: string; +} + +export namespace VaultPaymentMethod { + /** + * Provider-reported advisory capabilities. A missing capability is unknown, not + * ineligible; only eligible=false is an explicit negative signal. + */ + export interface Capabilities { + single_use_card?: Capabilities.SingleUseCard; + } + + export namespace Capabilities { + export interface SingleUseCard { + eligible: boolean; + + reasons: Array; + } + } + + export interface Display { + brand?: string; + + label?: string; + + last4?: string; + } +} + +/** + * AgentCard wallet. Mode (sandbox vs live) is fixed by the deployment's AgentCard + * credential; there is no per-item test flag. user_id may only reference a user + * already enrolled by a wallet in this organization. + */ +export type WalletVaultItemSpec = + | WalletVaultItemSpec.LinkWalletVaultItemSpec + | WalletVaultItemSpec.AgentCardWalletVaultItemSpec; + +export namespace WalletVaultItemSpec { + export interface LinkWalletVaultItemSpec { + authorization: LinkWalletVaultItemSpec.Authorization; + + provider: 'link'; + } + + export namespace LinkWalletVaultItemSpec { + export interface Authorization { + client: Authorization.Client; + + method: 'oauth'; + } + + export namespace Authorization { + export interface Client { + type: 'kernel_managed'; + } + } + } + + /** + * AgentCard wallet. Mode (sandbox vs live) is fixed by the deployment's AgentCard + * credential; there is no per-item test flag. user_id may only reference a user + * already enrolled by a wallet in this organization. + */ + export interface AgentCardWalletVaultItemSpec { + provider: 'agentcard'; + + user_id?: string; + } +} + +export type WalletVaultItemState = + | WalletVaultItemState.LinkWalletState + | WalletVaultItemState.AgentCardWalletState; + +export namespace WalletVaultItemState { + export interface LinkWalletState { + provider: 'link'; + + status: 'pending_authorization' | 'connected' | 'declined' | 'reconnect_required' | 'degraded'; + + status_reason?: string; + } + + export interface AgentCardWalletState { + provider: 'agentcard'; + + status: 'pending_authorization' | 'connected' | 'degraded'; + + status_reason?: string; + + /** + * AgentCard user id linked to this wallet. Present once connected. + */ + user_id?: string; + } +} + +export type ItemListResponse = Array; + +export type ItemEventsResponse = Array; + +export interface ItemRetrieveParams { + /** + * Path param + */ + id_or_name: string; + + /** + * Query param: Live fields advertised by `available_expansions` to include in + * `expanded`. + */ + expand?: Array<'payment_methods'>; + + /** + * Query param: Hold for up to this many seconds while the item is pending + * authorization or approval. + */ + wait?: number; +} + +export interface ItemUpdateParams { + /** + * Path param + */ + id_or_name: string; + + /** + * Body param: AgentCard reusable card. Each checkout creates an approval-gated + * authorization for spec.merchant / spec.amount. The card stays ready after each + * authorization. + */ + spec: CardVaultItemSpec; +} + +export interface ItemDeleteParams { + id_or_name: string; +} + +export interface ItemEventsParams { + /** + * Path param + */ + id_or_name: string; + + /** + * Query param: Return events after this event ID. + */ + after?: string; + + /** + * Query param: Long-poll for new events for up to this many seconds. + */ + wait?: number; +} + +export interface ItemPerformOperationParams { + /** + * Path param + */ + id_or_name: string; + + /** + * Body param + */ + type: 'authorize'; +} + +export type ItemUpsertParams = + | ItemUpsertParams.WalletVaultItemRequest + | ItemUpsertParams.CardVaultItemRequest; + +export declare namespace ItemUpsertParams { + export interface WalletVaultItemRequest { + /** + * Path param + */ + id_or_name: string; + + /** + * Body param: AgentCard wallet. Mode (sandbox vs live) is fixed by the + * deployment's AgentCard credential; there is no per-item test flag. user_id may + * only reference a user already enrolled by a wallet in this organization. + */ + spec: WalletVaultItemSpec; + + /** + * Body param + */ + type: 'wallet'; + } + + export interface CardVaultItemRequest { + /** + * Path param + */ + id_or_name: string; + + /** + * Body param: AgentCard reusable card. Each checkout creates an approval-gated + * authorization for spec.merchant / spec.amount. The card stays ready after each + * authorization. + */ + spec: CardVaultItemSpec; + + /** + * Body param + */ + type: 'card'; + } +} + +export declare namespace Items { + export { + type AgentcardCheckoutAuthorization as AgentcardCheckoutAuthorization, + type CardVaultItemSpec as CardVaultItemSpec, + type CardVaultItemState as CardVaultItemState, + type VaultCardAliases as VaultCardAliases, + type VaultItem as VaultItem, + type VaultItemAction as VaultItemAction, + type VaultItemEvent as VaultItemEvent, + type VaultPaymentMethod as VaultPaymentMethod, + type WalletVaultItemSpec as WalletVaultItemSpec, + type WalletVaultItemState as WalletVaultItemState, + type ItemListResponse as ItemListResponse, + type ItemEventsResponse as ItemEventsResponse, + type ItemRetrieveParams as ItemRetrieveParams, + type ItemUpdateParams as ItemUpdateParams, + type ItemDeleteParams as ItemDeleteParams, + type ItemEventsParams as ItemEventsParams, + type ItemPerformOperationParams as ItemPerformOperationParams, + type ItemUpsertParams as ItemUpsertParams, + }; +} diff --git a/src/resources/vaults/vaults.ts b/src/resources/vaults/vaults.ts new file mode 100644 index 00000000..3031f0b3 --- /dev/null +++ b/src/resources/vaults/vaults.ts @@ -0,0 +1,125 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../../core/resource'; +import * as ItemsAPI from './items'; +import { + AgentcardCheckoutAuthorization, + CardVaultItemSpec, + CardVaultItemState, + ItemDeleteParams, + ItemEventsParams, + ItemEventsResponse, + ItemListResponse, + ItemPerformOperationParams, + ItemRetrieveParams, + ItemUpdateParams, + ItemUpsertParams, + Items, + VaultCardAliases, + VaultItem, + VaultItemAction, + VaultItemEvent, + VaultPaymentMethod, + WalletVaultItemSpec, + WalletVaultItemState, +} from './items'; +import { APIPromise } from '../../core/api-promise'; +import { OffsetPagination, type OffsetPaginationParams, PagePromise } from '../../core/pagination'; +import { buildHeaders } from '../../internal/headers'; +import { RequestOptions } from '../../internal/request-options'; +import { path } from '../../internal/utils/path'; + +export class Vaults extends APIResource { + items: ItemsAPI.Items = new ItemsAPI.Items(this._client); + + /** + * Get a vault + */ + retrieve(idOrName: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/vaults/${idOrName}`, options); + } + + /** + * List vaults in the current project + */ + list( + query: VaultListParams | null | undefined = {}, + options?: RequestOptions, + ): PagePromise { + return this._client.getAPIList('/vaults', OffsetPagination, { query, ...options }); + } + + /** + * Delete a vault and invalidate its items + */ + delete(idOrName: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/vaults/${idOrName}`, { + ...options, + headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), + }); + } + + /** + * Create or retrieve a vault by immutable name + */ + upsert(body: VaultUpsertParams, options?: RequestOptions): APIPromise { + return this._client.post('/vaults', { body, ...options }); + } +} + +export type VaultsOffsetPagination = OffsetPagination; + +export interface Vault { + id: string; + + created_at: string; + + /** + * Immutable name assigned when the vault is created. + */ + name: string; + + updated_at: string; +} + +export interface VaultListParams extends OffsetPaginationParams {} + +export interface VaultUpsertParams { + /** + * Immutable name used to create or retrieve the vault. + */ + name: string; +} + +Vaults.Items = Items; + +export declare namespace Vaults { + export { + type Vault as Vault, + type VaultsOffsetPagination as VaultsOffsetPagination, + type VaultListParams as VaultListParams, + type VaultUpsertParams as VaultUpsertParams, + }; + + export { + Items as Items, + type AgentcardCheckoutAuthorization as AgentcardCheckoutAuthorization, + type CardVaultItemSpec as CardVaultItemSpec, + type CardVaultItemState as CardVaultItemState, + type VaultCardAliases as VaultCardAliases, + type VaultItem as VaultItem, + type VaultItemAction as VaultItemAction, + type VaultItemEvent as VaultItemEvent, + type VaultPaymentMethod as VaultPaymentMethod, + type WalletVaultItemSpec as WalletVaultItemSpec, + type WalletVaultItemState as WalletVaultItemState, + type ItemListResponse as ItemListResponse, + type ItemEventsResponse as ItemEventsResponse, + type ItemRetrieveParams as ItemRetrieveParams, + type ItemUpdateParams as ItemUpdateParams, + type ItemDeleteParams as ItemDeleteParams, + type ItemEventsParams as ItemEventsParams, + type ItemPerformOperationParams as ItemPerformOperationParams, + type ItemUpsertParams as ItemUpsertParams, + }; +} diff --git a/tests/api-resources/browsers/browsers.test.ts b/tests/api-resources/browsers/browsers.test.ts index 4c60d15e..e78d621f 100644 --- a/tests/api-resources/browsers/browsers.test.ts +++ b/tests/api-resources/browsers/browsers.test.ts @@ -75,6 +75,7 @@ describe('resource browsers', () => { }, }, timeout_seconds: 10, + vaults: [{ id: 'id', name: 'x' }], viewport: { height: 800, width: 1280, diff --git a/tests/api-resources/vaults/items.test.ts b/tests/api-resources/vaults/items.test.ts new file mode 100644 index 00000000..b5ee0ded --- /dev/null +++ b/tests/api-resources/vaults/items.test.ts @@ -0,0 +1,214 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import Kernel from '@onkernel/sdk'; + +const client = new Kernel({ + apiKey: 'My API Key', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource items', () => { + // Mock server tests are disabled + test.skip('retrieve: only required params', async () => { + const responsePromise = client.vaults.items.retrieve('x', { id_or_name: 'id_or_name' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('retrieve: required and optional params', async () => { + const response = await client.vaults.items.retrieve('x', { + id_or_name: 'id_or_name', + expand: ['payment_methods'], + wait: 0, + }); + }); + + // Mock server tests are disabled + test.skip('update: only required params', async () => { + const responsePromise = client.vaults.items.update('x', { + id_or_name: 'id_or_name', + spec: { + amount: 1, + context: + 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + currency: 'bFx', + merchant_name: 'x', + merchant_url: 'https://example.com', + payment_method_id: 'x', + provider: 'link', + test: true, + wallet: 'wallet', + }, + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('update: required and optional params', async () => { + const response = await client.vaults.items.update('x', { + id_or_name: 'id_or_name', + spec: { + amount: 1, + context: + 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + currency: 'bFx', + merchant_name: 'x', + merchant_url: 'https://example.com', + payment_method_id: 'x', + provider: 'link', + test: true, + wallet: 'wallet', + expires_at: 0, + line_items: [ + { + name: 'name', + description: 'description', + image_url: 'image_url', + product_url: 'product_url', + quantity: 1, + sku: 'sku', + totals: [ + { + amount: 0, + display_text: 'display_text', + type: 'type', + }, + ], + unit_amount: 0, + url: 'url', + }, + ], + metadata: { foo: 'string' }, + totals: [ + { + amount: 0, + display_text: 'display_text', + type: 'type', + }, + ], + }, + }); + }); + + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.vaults.items.list('id_or_name'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('delete: only required params', async () => { + const responsePromise = client.vaults.items.delete('x', { id_or_name: 'id_or_name' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('delete: required and optional params', async () => { + const response = await client.vaults.items.delete('x', { id_or_name: 'id_or_name' }); + }); + + // Mock server tests are disabled + test.skip('events: only required params', async () => { + const responsePromise = client.vaults.items.events('key', { id_or_name: 'id_or_name' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('events: required and optional params', async () => { + const response = await client.vaults.items.events('key', { + id_or_name: 'id_or_name', + after: 'after', + wait: 0, + }); + }); + + // Mock server tests are disabled + test.skip('performOperation: only required params', async () => { + const responsePromise = client.vaults.items.performOperation('key', { + id_or_name: 'id_or_name', + type: 'authorize', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('performOperation: required and optional params', async () => { + const response = await client.vaults.items.performOperation('key', { + id_or_name: 'id_or_name', + type: 'authorize', + }); + }); + + // Mock server tests are disabled + test.skip('upsert: only required params', async () => { + const responsePromise = client.vaults.items.upsert('x', { + id_or_name: 'id_or_name', + spec: { + authorization: { + client: { type: 'kernel_managed' }, + method: 'oauth', + }, + provider: 'link', + }, + type: 'wallet', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('upsert: required and optional params', async () => { + const response = await client.vaults.items.upsert('x', { + id_or_name: 'id_or_name', + spec: { + authorization: { + client: { type: 'kernel_managed' }, + method: 'oauth', + }, + provider: 'link', + }, + type: 'wallet', + }); + }); +}); diff --git a/tests/api-resources/vaults/vaults.test.ts b/tests/api-resources/vaults/vaults.test.ts new file mode 100644 index 00000000..b8348efe --- /dev/null +++ b/tests/api-resources/vaults/vaults.test.ts @@ -0,0 +1,71 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import Kernel from '@onkernel/sdk'; + +const client = new Kernel({ + apiKey: 'My API Key', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource vaults', () => { + // Mock server tests are disabled + test.skip('retrieve', async () => { + const responsePromise = client.vaults.retrieve('id_or_name'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list', async () => { + const responsePromise = client.vaults.list(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.vaults.list({ limit: 1, offset: 0 }, { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Kernel.NotFoundError); + }); + + // Mock server tests are disabled + test.skip('delete', async () => { + const responsePromise = client.vaults.delete('id_or_name'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('upsert: only required params', async () => { + const responsePromise = client.vaults.upsert({ name: 'name' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Mock server tests are disabled + test.skip('upsert: required and optional params', async () => { + const response = await client.vaults.upsert({ name: 'name' }); + }); +}); From 90057b5671ae3001e53bb1e26a8a2a26750ff8a0 Mon Sep 17 00:00:00 2001 From: "kernel-internal[bot]" <260533166+kernel-internal[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:23:23 +0000 Subject: [PATCH 3/3] release: 0.99.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ package.json | 2 +- src/version.ts | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 3c1df308..7c57a5df 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.98.0" + ".": "0.99.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index a3e18e2b..21991d46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.99.0](https://github.com/kernel/kernel-node-sdk/compare/v0.98.0...v0.99.0) (2026-09-04) + + +### Features + +* Expose OTLP destination delivery health ([c393d37](https://github.com/kernel/kernel-node-sdk/commit/c393d37d72171e841f1ebf8ce0a9720f5ae271d8)) +* Repair Vault SDK custom-code seals ([c6a1099](https://github.com/kernel/kernel-node-sdk/commit/c6a1099b453b25a67f54154fadec6f5b0586b472)) + ## [0.98.0](https://github.com/kernel/kernel-node-sdk/compare/v0.97.0...v0.98.0) (2026-09-02) diff --git a/package.json b/package.json index 1708299a..bda9379c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@onkernel/sdk", - "version": "0.98.0", + "version": "0.99.0", "description": "The official TypeScript library for the Kernel API", "author": "Kernel <>", "types": "dist/index.d.ts", diff --git a/src/version.ts b/src/version.ts index f94f8b86..7b4f2ce4 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.98.0'; // x-release-please-version +export const VERSION = '0.99.0'; // x-release-please-version