From ce3378da5549e3ca5f4e9518a27a7df9105c5d27 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 04:13:08 +0000 Subject: [PATCH 1/5] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index 8ae82e5..f0950f5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 57 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-0b411dea232f8dd039e007e441b19f1ba1e868ffb0d649e69a7f7a5054340725.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-82078049e66ce9935b13d50c1c3cd285d2bf5ce771e505522f581d7cc5073bcf.yml openapi_spec_hash: ab781dbf1a15580b8f87b4493b952052 config_hash: bd2fa008de5444a955c7186113b74955 From 47c3af943377feb7fffc71b87789b358ab858a75 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 18:18:01 +0000 Subject: [PATCH 2/5] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index f0950f5..7ef5605 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 57 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-82078049e66ce9935b13d50c1c3cd285d2bf5ce771e505522f581d7cc5073bcf.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-001f1dd1fc491aaf408943a45e209c218b5fd184fd01a17b351bcad2c3fe5529.yml openapi_spec_hash: ab781dbf1a15580b8f87b4493b952052 -config_hash: bd2fa008de5444a955c7186113b74955 +config_hash: 6f938d0f7e35ade87ce5236f25f53e2c From 822bf194eb629ca425d35f1a80032589ed73774f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 07:22:28 +0000 Subject: [PATCH 3/5] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 7ef5605..03a8d91 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 57 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-001f1dd1fc491aaf408943a45e209c218b5fd184fd01a17b351bcad2c3fe5529.yml -openapi_spec_hash: ab781dbf1a15580b8f87b4493b952052 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-a0f7bbd3d10a35e0bcba6b5a9fb3de10633907542bd0c26dc01fa0a403ccf026.yml +openapi_spec_hash: 79624b2774b1fa57d050b2ac9b9c6762 config_hash: 6f938d0f7e35ade87ce5236f25f53e2c From ae9b669a64fddf136e4809818a576c12f85e2ee6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 06:12:30 +0000 Subject: [PATCH 4/5] refactor(triggers): align with the MCP Events spec proposal (breaking) (#2201) --- .stats.yml | 8 +- api.md | 40 +--- src/client.ts | 23 -- src/resources/connections/connections.ts | 42 ++-- src/resources/connections/index.ts | 19 +- src/resources/connections/subscriptions.ts | 132 ----------- src/resources/connections/triggers.ts | 215 ++++++++++-------- src/resources/index.ts | 10 - src/resources/subscriptions.ts | 167 -------------- .../connections/subscriptions.test.ts | 75 ------ .../connections/triggers.test.ts | 67 +++--- tests/api-resources/subscriptions.test.ts | 62 ----- 12 files changed, 175 insertions(+), 685 deletions(-) delete mode 100644 src/resources/connections/subscriptions.ts delete mode 100644 src/resources/subscriptions.ts delete mode 100644 tests/api-resources/connections/subscriptions.test.ts delete mode 100644 tests/api-resources/subscriptions.test.ts diff --git a/.stats.yml b/.stats.yml index 03a8d91..462f1ea 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 57 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-a0f7bbd3d10a35e0bcba6b5a9fb3de10633907542bd0c26dc01fa0a403ccf026.yml -openapi_spec_hash: 79624b2774b1fa57d050b2ac9b9c6762 -config_hash: 6f938d0f7e35ade87ce5236f25f53e2c +configured_endpoints: 50 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/smithery/smithery-103fdd6319cf0037bc9f0faa6fc595c13ee91397edc22c085ba91c7fbfa3dd0b.yml +openapi_spec_hash: e32081028e9ae6d63fba5aaaf6d9c9e7 +config_hash: f11b7bb2bae11f389798bfecb58745e4 diff --git a/api.md b/api.md index 8a4efeb..390f242 100644 --- a/api.md +++ b/api.md @@ -178,22 +178,6 @@ Methods: - client.tokens.create({ ...params }) -> CreateTokenResponse -# Subscriptions - -Types: - -- CreateSubscriptionRequest -- CreateSubscriptionResponse -- Subscription -- SubscriptionList -- SubscriptionDeleteResponse - -Methods: - -- client.subscriptions.create(namespace, { ...params }) -> Subscription -- client.subscriptions.list(namespace) -> SubscriptionList -- client.subscriptions.delete(subscriptionID, { ...params }) -> SubscriptionDeleteResponse - # Connections Types: @@ -226,32 +210,22 @@ Methods: - client.connections.tools.call(toolPath, { ...params }) -> ToolCallResponse - client.connections.tools.get(toolPath, { ...params }) -> ToolResponse -## Subscriptions - -Types: - -- SubscriptionDeleteResponse - -Methods: - -- client.connections.subscriptions.create(connectionID, { ...params }) -> Subscription -- client.connections.subscriptions.list(connectionID, { ...params }) -> SubscriptionList -- client.connections.subscriptions.delete(subscriptionID, { ...params }) -> SubscriptionDeleteResponse - ## Triggers Types: - CreateTriggerRequest +- DeleteTriggerRequest - TriggerDefinition - TriggerDefinitionList -- TriggerInstance -- TriggerDeleteResponse +- TriggerDelivery +- TriggerSubscription +- UnsubscribeDelivery +- TriggerUnsubscribeResponse Methods: -- client.connections.triggers.create(triggerName, { ...params }) -> TriggerInstance - client.connections.triggers.list(connectionID, { ...params }) -> TriggerDefinitionList -- client.connections.triggers.delete(triggerID, { ...params }) -> TriggerDeleteResponse - client.connections.triggers.get(triggerName, { ...params }) -> TriggerDefinition -- client.connections.triggers.getInstance(triggerID, { ...params }) -> TriggerInstance +- client.connections.triggers.subscribe(triggerName, { ...params }) -> TriggerSubscription +- client.connections.triggers.unsubscribe(triggerName, { ...params }) -> TriggerUnsubscribeResponse diff --git a/src/client.ts b/src/client.ts index 5898f85..754bab1 100644 --- a/src/client.ts +++ b/src/client.ts @@ -49,16 +49,6 @@ import { SkillUploadResponse, Skills, } from './resources/skills'; -import { - CreateSubscriptionRequest, - CreateSubscriptionResponse, - Subscription, - SubscriptionCreateParams, - SubscriptionDeleteParams, - SubscriptionDeleteResponse, - SubscriptionList, - Subscriptions, -} from './resources/subscriptions'; import { Constraint, CreateTokenRequest, @@ -848,7 +838,6 @@ export class Smithery { namespaces: API.Namespaces = new API.Namespaces(this); organizations: API.Organizations = new API.Organizations(this); tokens: API.Tokens = new API.Tokens(this); - subscriptions: API.Subscriptions = new API.Subscriptions(this); connections: API.Connections = new API.Connections(this); } @@ -858,7 +847,6 @@ Smithery.Skills = Skills; Smithery.Namespaces = Namespaces; Smithery.Organizations = Organizations; Smithery.Tokens = Tokens; -Smithery.Subscriptions = Subscriptions; Smithery.Connections = Connections; export declare namespace Smithery { @@ -937,17 +925,6 @@ export declare namespace Smithery { type TokenCreateParams as TokenCreateParams, }; - export { - Subscriptions as Subscriptions, - type CreateSubscriptionRequest as CreateSubscriptionRequest, - type CreateSubscriptionResponse as CreateSubscriptionResponse, - type Subscription as Subscription, - type SubscriptionList as SubscriptionList, - type SubscriptionDeleteResponse as SubscriptionDeleteResponse, - type SubscriptionCreateParams as SubscriptionCreateParams, - type SubscriptionDeleteParams as SubscriptionDeleteParams, - }; - export { Connections as Connections, type Connection as Connection, diff --git a/src/resources/connections/connections.ts b/src/resources/connections/connections.ts index 4982085..8b4a5a9 100644 --- a/src/resources/connections/connections.ts +++ b/src/resources/connections/connections.ts @@ -1,14 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; -import * as SubscriptionsAPI from './subscriptions'; -import { - SubscriptionCreateParams, - SubscriptionDeleteParams, - SubscriptionDeleteResponse, - SubscriptionListParams, - Subscriptions, -} from './subscriptions'; import * as ToolsAPI from './tools'; import { Tool, @@ -23,16 +15,18 @@ import { import * as TriggersAPI from './triggers'; import { CreateTriggerRequest, - TriggerCreateParams, + DeleteTriggerRequest, TriggerDefinition, TriggerDefinitionList, - TriggerDeleteParams, - TriggerDeleteResponse, - TriggerGetInstanceParams, + TriggerDelivery, TriggerGetParams, - TriggerInstance, TriggerListParams, + TriggerSubscribeParams, + TriggerSubscription, + TriggerUnsubscribeParams, + TriggerUnsubscribeResponse, Triggers, + UnsubscribeDelivery, } from './triggers'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; @@ -40,7 +34,6 @@ import { path } from '../../internal/utils/path'; export class Connections extends APIResource { tools: ToolsAPI.Tools = new ToolsAPI.Tools(this._client); - subscriptions: SubscriptionsAPI.Subscriptions = new SubscriptionsAPI.Subscriptions(this._client); triggers: TriggersAPI.Triggers = new TriggersAPI.Triggers(this._client); /** @@ -552,7 +545,6 @@ export namespace ConnectionSetParams { } Connections.Tools = Tools; -Connections.Subscriptions = Subscriptions; Connections.Triggers = Triggers; export declare namespace Connections { @@ -579,25 +571,19 @@ export declare namespace Connections { type ToolGetParams as ToolGetParams, }; - export { - Subscriptions as Subscriptions, - type SubscriptionDeleteResponse as SubscriptionDeleteResponse, - type SubscriptionCreateParams as SubscriptionCreateParams, - type SubscriptionListParams as SubscriptionListParams, - type SubscriptionDeleteParams as SubscriptionDeleteParams, - }; - export { Triggers as Triggers, type CreateTriggerRequest as CreateTriggerRequest, + type DeleteTriggerRequest as DeleteTriggerRequest, type TriggerDefinition as TriggerDefinition, type TriggerDefinitionList as TriggerDefinitionList, - type TriggerInstance as TriggerInstance, - type TriggerDeleteResponse as TriggerDeleteResponse, - type TriggerCreateParams as TriggerCreateParams, + type TriggerDelivery as TriggerDelivery, + type TriggerSubscription as TriggerSubscription, + type UnsubscribeDelivery as UnsubscribeDelivery, + type TriggerUnsubscribeResponse as TriggerUnsubscribeResponse, type TriggerListParams as TriggerListParams, - type TriggerDeleteParams as TriggerDeleteParams, type TriggerGetParams as TriggerGetParams, - type TriggerGetInstanceParams as TriggerGetInstanceParams, + type TriggerSubscribeParams as TriggerSubscribeParams, + type TriggerUnsubscribeParams as TriggerUnsubscribeParams, }; } diff --git a/src/resources/connections/index.ts b/src/resources/connections/index.ts index aefb460..3694b3d 100644 --- a/src/resources/connections/index.ts +++ b/src/resources/connections/index.ts @@ -12,13 +12,6 @@ export { type ConnectionGetParams, type ConnectionSetParams, } from './connections'; -export { - Subscriptions, - type SubscriptionDeleteResponse, - type SubscriptionCreateParams, - type SubscriptionListParams, - type SubscriptionDeleteParams, -} from './subscriptions'; export { Tools, type Tool, @@ -32,13 +25,15 @@ export { export { Triggers, type CreateTriggerRequest, + type DeleteTriggerRequest, type TriggerDefinition, type TriggerDefinitionList, - type TriggerInstance, - type TriggerDeleteResponse, - type TriggerCreateParams, + type TriggerDelivery, + type TriggerSubscription, + type UnsubscribeDelivery, + type TriggerUnsubscribeResponse, type TriggerListParams, - type TriggerDeleteParams, type TriggerGetParams, - type TriggerGetInstanceParams, + type TriggerSubscribeParams, + type TriggerUnsubscribeParams, } from './triggers'; diff --git a/src/resources/connections/subscriptions.ts b/src/resources/connections/subscriptions.ts deleted file mode 100644 index 58dd9b7..0000000 --- a/src/resources/connections/subscriptions.ts +++ /dev/null @@ -1,132 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../../core/resource'; -import * as SubscriptionsAPI from '../subscriptions'; -import { APIPromise } from '../../core/api-promise'; -import { RequestOptions } from '../../internal/request-options'; -import { path } from '../../internal/utils/path'; - -export class Subscriptions extends APIResource { - /** - * Create a connection-scoped subscription that receives events from one - * connection. - * - * @example - * ```ts - * const subscription = - * await client.connections.subscriptions.create( - * 'connectionId', - * { - * namespace: 'namespace', - * secret: - * 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', - * url: 'https://my-app.example.com/events', - * }, - * ); - * ``` - */ - create( - connectionID: string, - params: SubscriptionCreateParams, - options?: RequestOptions, - ): APIPromise { - const { namespace, ...body } = params; - return this._client.post(path`/${namespace}/${connectionID}/.subscriptions`, { - body, - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } - - /** - * List trigger subscriptions scoped to a single connection. - * - * @example - * ```ts - * const subscriptionList = - * await client.connections.subscriptions.list( - * 'connectionId', - * { namespace: 'namespace' }, - * ); - * ``` - */ - list( - connectionID: string, - params: SubscriptionListParams, - options?: RequestOptions, - ): APIPromise { - const { namespace } = params; - return this._client.get(path`/${namespace}/${connectionID}/.subscriptions`, { - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } - - /** - * Delete a connection-scoped trigger subscription. - * - * @example - * ```ts - * const subscription = - * await client.connections.subscriptions.delete( - * 'subscriptionId', - * { - * namespace: 'namespace', - * connectionId: 'connectionId', - * }, - * ); - * ``` - */ - delete( - subscriptionID: string, - params: SubscriptionDeleteParams, - options?: RequestOptions, - ): APIPromise { - const { namespace, connectionId } = params; - return this._client.delete(path`/${namespace}/${connectionId}/.subscriptions/${subscriptionID}`, { - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } -} - -export interface SubscriptionDeleteResponse { - success: true; -} - -export interface SubscriptionCreateParams { - /** - * Path param - */ - namespace: string; - - /** - * Body param: Standard Webhooks signing secret generated and stored by the - * receiver - */ - secret: string; - - /** - * Body param: HTTPS webhook destination - */ - url: string; -} - -export interface SubscriptionListParams { - namespace: string; -} - -export interface SubscriptionDeleteParams { - namespace: string; - - connectionId: string; -} - -export declare namespace Subscriptions { - export { - type SubscriptionDeleteResponse as SubscriptionDeleteResponse, - type SubscriptionCreateParams as SubscriptionCreateParams, - type SubscriptionListParams as SubscriptionListParams, - type SubscriptionDeleteParams as SubscriptionDeleteParams, - }; -} diff --git a/src/resources/connections/triggers.ts b/src/resources/connections/triggers.ts index f179fa2..2ec0605 100644 --- a/src/resources/connections/triggers.ts +++ b/src/resources/connections/triggers.ts @@ -6,32 +6,6 @@ import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; export class Triggers extends APIResource { - /** - * Create a trigger instance for a connection using the trigger's declared params. - * - * @example - * ```ts - * const triggerInstance = - * await client.connections.triggers.create('triggerName', { - * namespace: 'namespace', - * connectionId: 'connectionId', - * params: { foo: 'bar' }, - * }); - * ``` - */ - create( - triggerName: string, - params: TriggerCreateParams, - options?: RequestOptions, - ): APIPromise { - const { namespace, connectionId, ...body } = params; - return this._client.post(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, { - body, - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } - /** * List trigger types exposed by a connection. * @@ -56,79 +30,92 @@ export class Triggers extends APIResource { } /** - * Delete a trigger instance and deregister its upstream webhook. + * Get the schema for a single trigger type. * * @example * ```ts - * const trigger = await client.connections.triggers.delete( - * 'triggerId', - * { + * const triggerDefinition = + * await client.connections.triggers.get('triggerName', { * namespace: 'namespace', * connectionId: 'connectionId', - * triggerName: 'triggerName', - * }, - * ); + * }); * ``` */ - delete( - triggerID: string, - params: TriggerDeleteParams, + get( + triggerName: string, + params: TriggerGetParams, options?: RequestOptions, - ): APIPromise { - const { namespace, connectionId, triggerName } = params; - return this._client.delete(path`/${namespace}/${connectionId}/.triggers/${triggerName}/${triggerID}`, { + ): APIPromise { + const { namespace, connectionId } = params; + return this._client.get(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, { defaultBaseURL: 'https://smithery.run', ...options, }); } /** - * Get the schema for a single trigger type. + * Subscribe to (or refresh) a trigger. Supplying the same (params, delivery.url) + * refreshes the TTL and may rotate the secret. * * @example * ```ts - * const triggerDefinition = - * await client.connections.triggers.get('triggerName', { - * namespace: 'namespace', - * connectionId: 'connectionId', - * }); + * const triggerSubscription = + * await client.connections.triggers.subscribe( + * 'triggerName', + * { + * namespace: 'namespace', + * connectionId: 'connectionId', + * delivery: { + * secret: + * 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', + * url: 'https://my-app.example.com/events', + * }, + * params: { foo: 'bar' }, + * }, + * ); * ``` */ - get( + subscribe( triggerName: string, - params: TriggerGetParams, + params: TriggerSubscribeParams, options?: RequestOptions, - ): APIPromise { - const { namespace, connectionId } = params; - return this._client.get(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, { + ): APIPromise { + const { namespace, connectionId, ...body } = params; + return this._client.post(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, { + body, defaultBaseURL: 'https://smithery.run', ...options, }); } /** - * Get a specific trigger instance for a connection. + * Unsubscribe by subscription key (params + delivery.url). Eager teardown — + * subscriptions also expire naturally on TTL. * * @example * ```ts - * const triggerInstance = - * await client.connections.triggers.getInstance( - * 'triggerId', + * const response = + * await client.connections.triggers.unsubscribe( + * 'triggerName', * { * namespace: 'namespace', * connectionId: 'connectionId', - * triggerName: 'triggerName', + * delivery: { + * url: 'https://my-app.example.com/events', + * }, + * params: { foo: 'bar' }, * }, * ); * ``` */ - getInstance( - triggerID: string, - params: TriggerGetInstanceParams, + unsubscribe( + triggerName: string, + params: TriggerUnsubscribeParams, options?: RequestOptions, - ): APIPromise { - const { namespace, connectionId, triggerName } = params; - return this._client.get(path`/${namespace}/${connectionId}/.triggers/${triggerName}/${triggerID}`, { + ): APIPromise { + const { namespace, connectionId, ...body } = params; + return this._client.delete(path`/${namespace}/${connectionId}/.triggers/${triggerName}`, { + body, defaultBaseURL: 'https://smithery.run', ...options, }); @@ -136,12 +123,23 @@ export class Triggers extends APIResource { } export interface CreateTriggerRequest { + delivery: TriggerDelivery; + /** * Trigger-specific parameters defined by the trigger inputSchema */ params: { [key: string]: unknown }; } +export interface DeleteTriggerRequest { + delivery: UnsubscribeDelivery; + + /** + * The same params used at subscribe time. Forms part of the subscription key. + */ + params: { [key: string]: unknown }; +} + export interface TriggerDefinition { /** * Supported delivery modes @@ -168,38 +166,55 @@ export interface TriggerDefinition { export type TriggerDefinitionList = Array; -export interface TriggerInstance { +export interface TriggerDelivery { /** - * Stable trigger instance id generated by Smithery + * Standard Webhooks signing secret (whsec\_). The + * upstream MCP server signs each delivery with this. */ - id: string; + secret: string; /** - * Connection id the trigger belongs to + * HTTPS webhook destination where the upstream MCP server delivers events. */ - connection_id: string; + url: string; +} +export interface TriggerSubscription { /** - * ISO 8601 timestamp + * Stable subscription id derived from (namespace, connection, name, params, + * delivery.url). Used by the receiver to route via X-MCP-Subscription-Id. */ - created_at: string; + id: string; /** - * Trigger name + * ISO 8601 timestamp at which the subscription expires unless refreshed. */ - name: string; + refreshBefore: string; +} +export interface UnsubscribeDelivery { /** - * Trigger instance parameters + * The delivery URL of the subscription to remove. Together with name+params it + * forms the subscription key. */ - params: { [key: string]: unknown }; + url: string; } -export interface TriggerDeleteResponse { +export interface TriggerUnsubscribeResponse { success: true; } -export interface TriggerCreateParams { +export interface TriggerListParams { + namespace: string; +} + +export interface TriggerGetParams { + namespace: string; + + connectionId: string; +} + +export interface TriggerSubscribeParams { /** * Path param */ @@ -210,49 +225,53 @@ export interface TriggerCreateParams { */ connectionId: string; + /** + * Body param + */ + delivery: TriggerDelivery; + /** * Body param: Trigger-specific parameters defined by the trigger inputSchema */ params: { [key: string]: unknown }; } -export interface TriggerListParams { - namespace: string; -} - -export interface TriggerDeleteParams { - namespace: string; - - connectionId: string; - - triggerName: string; -} - -export interface TriggerGetParams { +export interface TriggerUnsubscribeParams { + /** + * Path param + */ namespace: string; + /** + * Path param + */ connectionId: string; -} - -export interface TriggerGetInstanceParams { - namespace: string; - connectionId: string; + /** + * Body param + */ + delivery: UnsubscribeDelivery; - triggerName: string; + /** + * Body param: The same params used at subscribe time. Forms part of the + * subscription key. + */ + params: { [key: string]: unknown }; } export declare namespace Triggers { export { type CreateTriggerRequest as CreateTriggerRequest, + type DeleteTriggerRequest as DeleteTriggerRequest, type TriggerDefinition as TriggerDefinition, type TriggerDefinitionList as TriggerDefinitionList, - type TriggerInstance as TriggerInstance, - type TriggerDeleteResponse as TriggerDeleteResponse, - type TriggerCreateParams as TriggerCreateParams, + type TriggerDelivery as TriggerDelivery, + type TriggerSubscription as TriggerSubscription, + type UnsubscribeDelivery as UnsubscribeDelivery, + type TriggerUnsubscribeResponse as TriggerUnsubscribeResponse, type TriggerListParams as TriggerListParams, - type TriggerDeleteParams as TriggerDeleteParams, type TriggerGetParams as TriggerGetParams, - type TriggerGetInstanceParams as TriggerGetInstanceParams, + type TriggerSubscribeParams as TriggerSubscribeParams, + type TriggerUnsubscribeParams as TriggerUnsubscribeParams, }; } diff --git a/src/resources/index.ts b/src/resources/index.ts index 87c4092..74c53ea 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -57,16 +57,6 @@ export { type SkillUploadParams, type SkillListResponsesSkillsPage, } from './skills'; -export { - Subscriptions, - type CreateSubscriptionRequest, - type CreateSubscriptionResponse, - type Subscription, - type SubscriptionList, - type SubscriptionDeleteResponse, - type SubscriptionCreateParams, - type SubscriptionDeleteParams, -} from './subscriptions'; export { Tokens, type Constraint, diff --git a/src/resources/subscriptions.ts b/src/resources/subscriptions.ts deleted file mode 100644 index 4733ec4..0000000 --- a/src/resources/subscriptions.ts +++ /dev/null @@ -1,167 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../core/resource'; -import { APIPromise } from '../core/api-promise'; -import { RequestOptions } from '../internal/request-options'; -import { path } from '../internal/utils/path'; - -export class Subscriptions extends APIResource { - /** - * Create a namespace-scoped subscription that receives events from every - * connection in the namespace. - * - * @example - * ```ts - * const subscription = await client.subscriptions.create( - * 'namespace', - * { - * secret: - * 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', - * url: 'https://my-app.example.com/events', - * }, - * ); - * ``` - */ - create( - namespace: string, - body: SubscriptionCreateParams, - options?: RequestOptions, - ): APIPromise { - return this._client.post(path`/${namespace}/.subscriptions`, { - body, - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } - - /** - * List namespace-scoped trigger subscriptions for all connections in the - * namespace. - * - * @example - * ```ts - * const subscriptionList = await client.subscriptions.list( - * 'namespace', - * ); - * ``` - */ - list(namespace: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/${namespace}/.subscriptions`, { - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } - - /** - * Delete a namespace-scoped trigger subscription. - * - * @example - * ```ts - * const subscription = await client.subscriptions.delete( - * 'subscriptionId', - * { namespace: 'namespace' }, - * ); - * ``` - */ - delete( - subscriptionID: string, - params: SubscriptionDeleteParams, - options?: RequestOptions, - ): APIPromise { - const { namespace } = params; - return this._client.delete(path`/${namespace}/.subscriptions/${subscriptionID}`, { - defaultBaseURL: 'https://smithery.run', - ...options, - }); - } -} - -export interface CreateSubscriptionRequest { - /** - * Standard Webhooks signing secret generated and stored by the receiver - */ - secret: string; - - /** - * HTTPS webhook destination - */ - url: string; -} - -export interface CreateSubscriptionResponse { - /** - * Stable subscription id generated by Smithery - */ - id: string; - - /** - * Connection scope. Null for namespace-wide subscriptions. - */ - connection_id: string | null; - - /** - * ISO 8601 timestamp - */ - created_at: string; - - /** - * Destination URL for webhook deliveries - */ - url: string; -} - -export interface Subscription { - /** - * Stable subscription id generated by Smithery - */ - id: string; - - /** - * Connection scope. Null for namespace-wide subscriptions. - */ - connection_id: string | null; - - /** - * ISO 8601 timestamp - */ - created_at: string; - - /** - * Destination URL for webhook deliveries - */ - url: string; -} - -export type SubscriptionList = Array; - -export interface SubscriptionDeleteResponse { - success: true; -} - -export interface SubscriptionCreateParams { - /** - * Standard Webhooks signing secret generated and stored by the receiver - */ - secret: string; - - /** - * HTTPS webhook destination - */ - url: string; -} - -export interface SubscriptionDeleteParams { - namespace: string; -} - -export declare namespace Subscriptions { - export { - type CreateSubscriptionRequest as CreateSubscriptionRequest, - type CreateSubscriptionResponse as CreateSubscriptionResponse, - type Subscription as Subscription, - type SubscriptionList as SubscriptionList, - type SubscriptionDeleteResponse as SubscriptionDeleteResponse, - type SubscriptionCreateParams as SubscriptionCreateParams, - type SubscriptionDeleteParams as SubscriptionDeleteParams, - }; -} diff --git a/tests/api-resources/connections/subscriptions.test.ts b/tests/api-resources/connections/subscriptions.test.ts deleted file mode 100644 index d14c9fe..0000000 --- a/tests/api-resources/connections/subscriptions.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import Smithery from '@smithery/api'; - -const client = new Smithery({ - apiKey: 'My API Key', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource subscriptions', () => { - // Mock server tests are disabled - test.skip('create: only required params', async () => { - const responsePromise = client.connections.subscriptions.create('connectionId', { - namespace: 'namespace', - secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', - url: 'https://my-app.example.com/events', - }); - 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('create: required and optional params', async () => { - const response = await client.connections.subscriptions.create('connectionId', { - namespace: 'namespace', - secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', - url: 'https://my-app.example.com/events', - }); - }); - - // Mock server tests are disabled - test.skip('list: only required params', async () => { - const responsePromise = client.connections.subscriptions.list('connectionId', { namespace: 'namespace' }); - 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: required and optional params', async () => { - const response = await client.connections.subscriptions.list('connectionId', { namespace: 'namespace' }); - }); - - // Mock server tests are disabled - test.skip('delete: only required params', async () => { - const responsePromise = client.connections.subscriptions.delete('subscriptionId', { - namespace: 'namespace', - connectionId: 'connectionId', - }); - 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.connections.subscriptions.delete('subscriptionId', { - namespace: 'namespace', - connectionId: 'connectionId', - }); - }); -}); diff --git a/tests/api-resources/connections/triggers.test.ts b/tests/api-resources/connections/triggers.test.ts index d5e2097..fd6a961 100644 --- a/tests/api-resources/connections/triggers.test.ts +++ b/tests/api-resources/connections/triggers.test.ts @@ -8,31 +8,6 @@ const client = new Smithery({ }); describe('resource triggers', () => { - // Mock server tests are disabled - test.skip('create: only required params', async () => { - const responsePromise = client.connections.triggers.create('triggerName', { - namespace: 'namespace', - connectionId: 'connectionId', - params: { foo: 'bar' }, - }); - 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('create: required and optional params', async () => { - const response = await client.connections.triggers.create('triggerName', { - namespace: 'namespace', - connectionId: 'connectionId', - params: { foo: 'bar' }, - }); - }); - // Mock server tests are disabled test.skip('list: only required params', async () => { const responsePromise = client.connections.triggers.list('connectionId', { namespace: 'namespace' }); @@ -51,11 +26,10 @@ describe('resource triggers', () => { }); // Mock server tests are disabled - test.skip('delete: only required params', async () => { - const responsePromise = client.connections.triggers.delete('triggerId', { + test.skip('get: only required params', async () => { + const responsePromise = client.connections.triggers.get('triggerName', { namespace: 'namespace', connectionId: 'connectionId', - triggerName: 'triggerName', }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -67,19 +41,23 @@ describe('resource triggers', () => { }); // Mock server tests are disabled - test.skip('delete: required and optional params', async () => { - const response = await client.connections.triggers.delete('triggerId', { + test.skip('get: required and optional params', async () => { + const response = await client.connections.triggers.get('triggerName', { namespace: 'namespace', connectionId: 'connectionId', - triggerName: 'triggerName', }); }); // Mock server tests are disabled - test.skip('get: only required params', async () => { - const responsePromise = client.connections.triggers.get('triggerName', { + test.skip('subscribe: only required params', async () => { + const responsePromise = client.connections.triggers.subscribe('triggerName', { namespace: 'namespace', connectionId: 'connectionId', + delivery: { + secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', + url: 'https://my-app.example.com/events', + }, + params: { foo: 'bar' }, }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -91,19 +69,25 @@ describe('resource triggers', () => { }); // Mock server tests are disabled - test.skip('get: required and optional params', async () => { - const response = await client.connections.triggers.get('triggerName', { + test.skip('subscribe: required and optional params', async () => { + const response = await client.connections.triggers.subscribe('triggerName', { namespace: 'namespace', connectionId: 'connectionId', + delivery: { + secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', + url: 'https://my-app.example.com/events', + }, + params: { foo: 'bar' }, }); }); // Mock server tests are disabled - test.skip('getInstance: only required params', async () => { - const responsePromise = client.connections.triggers.getInstance('triggerId', { + test.skip('unsubscribe: only required params', async () => { + const responsePromise = client.connections.triggers.unsubscribe('triggerName', { namespace: 'namespace', connectionId: 'connectionId', - triggerName: 'triggerName', + delivery: { url: 'https://my-app.example.com/events' }, + params: { foo: 'bar' }, }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -115,11 +99,12 @@ describe('resource triggers', () => { }); // Mock server tests are disabled - test.skip('getInstance: required and optional params', async () => { - const response = await client.connections.triggers.getInstance('triggerId', { + test.skip('unsubscribe: required and optional params', async () => { + const response = await client.connections.triggers.unsubscribe('triggerName', { namespace: 'namespace', connectionId: 'connectionId', - triggerName: 'triggerName', + delivery: { url: 'https://my-app.example.com/events' }, + params: { foo: 'bar' }, }); }); }); diff --git a/tests/api-resources/subscriptions.test.ts b/tests/api-resources/subscriptions.test.ts deleted file mode 100644 index d2487ca..0000000 --- a/tests/api-resources/subscriptions.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import Smithery from '@smithery/api'; - -const client = new Smithery({ - apiKey: 'My API Key', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource subscriptions', () => { - // Mock server tests are disabled - test.skip('create: only required params', async () => { - const responsePromise = client.subscriptions.create('namespace', { - secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', - url: 'https://my-app.example.com/events', - }); - 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('create: required and optional params', async () => { - const response = await client.subscriptions.create('namespace', { - secret: 'whsec_dGVzdF9zZWNyZXRfMjRfYnl0ZXNfbWluaW11bSE=', - url: 'https://my-app.example.com/events', - }); - }); - - // Mock server tests are disabled - test.skip('list', async () => { - const responsePromise = client.subscriptions.list('namespace'); - 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.subscriptions.delete('subscriptionId', { namespace: 'namespace' }); - 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.subscriptions.delete('subscriptionId', { namespace: 'namespace' }); - }); -}); From c58fb33f8b38131350ef1aab605f889912329212 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 06:12:49 +0000 Subject: [PATCH 5/5] release: 0.64.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- src/version.ts | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ca03ce2..957c388 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.64.1" + ".": "0.64.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f983466..1109c3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.64.2 (2026-05-03) + +Full Changelog: [v0.64.1...v0.64.2](https://github.com/smithery-ai/typescript-api/compare/v0.64.1...v0.64.2) + +### Refactors + +* **triggers:** align with the MCP Events spec proposal (breaking) ([#2201](https://github.com/smithery-ai/typescript-api/issues/2201)) ([ae9b669](https://github.com/smithery-ai/typescript-api/commit/ae9b669a64fddf136e4809818a576c12f85e2ee6)) + ## 0.64.1 (2026-04-30) Full Changelog: [v0.64.0...v0.64.1](https://github.com/smithery-ai/typescript-api/compare/v0.64.0...v0.64.1) diff --git a/package-lock.json b/package-lock.json index ca4e9bb..05b3a43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@smithery/api", - "version": "0.64.1", + "version": "0.64.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@smithery/api", - "version": "0.64.1", + "version": "0.64.2", "license": "Apache-2.0", "devDependencies": { "@arethetypeswrong/cli": "^0.17.0", diff --git a/package.json b/package.json index 53e8537..df819b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@smithery/api", - "version": "0.64.1", + "version": "0.64.2", "description": "The official TypeScript library for the Smithery API", "author": "Smithery ", "types": "dist/index.d.ts", diff --git a/src/version.ts b/src/version.ts index 336f807..8bea9d7 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.64.1'; // x-release-please-version +export const VERSION = '0.64.2'; // x-release-please-version