diff --git a/packages/walletkit/src/core/TonWalletKit.ts b/packages/walletkit/src/core/TonWalletKit.ts index 2f7eb742..179fba4a 100644 --- a/packages/walletkit/src/core/TonWalletKit.ts +++ b/packages/walletkit/src/core/TonWalletKit.ts @@ -29,6 +29,7 @@ import type { EventRouter } from './EventRouter'; import type { RequestProcessor } from './RequestProcessor'; import { JettonsManager } from './JettonsManager'; import type { JettonsAPI } from '../types/jettons'; +import { ConnectHandler } from '../handlers/ConnectHandler'; import { SwapManager } from '../defi/swap'; import type { RawBridgeEventConnect, @@ -522,6 +523,24 @@ export class TonWalletKit implements ITonWalletKit { this.eventRouter.removeErrorCallback(); } + // === URL Parsing API === + + /** + * Allow to convert url to ConnectionRequestEvent to use inline way + */ + async connectionEventFromUrl(url: string): Promise { + await this.ensureInitialized(); + + try { + const bridgeEvent = this.parseBridgeConnectEventFromUrl(url); + const handler = new ConnectHandler(() => {}, this.config, this.analyticsManager); + return await handler.handle(bridgeEvent); + } catch (error) { + log.error('Failed to create connection event from URL', { error, url }); + throw error; + } + } + // === URL Processing API === /** @@ -532,25 +551,7 @@ export class TonWalletKit implements ITonWalletKit { await this.ensureInitialized(); try { - // Parse and validate the TON Connect URL - const parsedUrl = this.parseTonConnectUrl(url); - if (!parsedUrl) { - throw new WalletKitError(ERROR_CODES.VALIDATION_ERROR, 'Invalid TON Connect URL format', undefined, { - url, - }); - } - - // Create a bridge event from the parsed URL - const bridgeEvent = this.createConnectEventFromUrl(parsedUrl); - if (!bridgeEvent) { - throw new WalletKitError( - ERROR_CODES.VALIDATION_ERROR, - 'Invalid TON Connect URL - unable to create bridge event', - undefined, - { parsedUrl }, - ); - } - + const bridgeEvent = this.parseBridgeConnectEventFromUrl(url); await this.eventRouter.routeEvent(bridgeEvent); } catch (error) { log.error('Failed to handle TON Connect URL', { error, url }); @@ -578,6 +579,30 @@ export class TonWalletKit implements ITonWalletKit { await this.eventRouter.routeEvent(bridgeEvent); } + /** + * Parse and validate TON Connect URL into a RawBridgeEventConnect + */ + private parseBridgeConnectEventFromUrl(url: string): RawBridgeEventConnect { + const parsedUrl = this.parseTonConnectUrl(url); + if (!parsedUrl) { + throw new WalletKitError(ERROR_CODES.VALIDATION_ERROR, 'Invalid TON Connect URL format', undefined, { + url, + }); + } + + const bridgeEvent = this.createConnectEventFromUrl(parsedUrl); + if (!bridgeEvent) { + throw new WalletKitError( + ERROR_CODES.VALIDATION_ERROR, + 'Invalid TON Connect URL - unable to create bridge event', + undefined, + { parsedUrl }, + ); + } + + return bridgeEvent; + } + /** * Parse TON Connect URL to extract connection parameters */ diff --git a/packages/walletkit/src/types/kit.ts b/packages/walletkit/src/types/kit.ts index 6159043e..308791a4 100644 --- a/packages/walletkit/src/types/kit.ts +++ b/packages/walletkit/src/types/kit.ts @@ -75,6 +75,13 @@ export interface ITonWalletKit { /** List all active sessions */ listSessions(): Promise; + // === URL Parsing API === + + /** + * Allow to convert url to ConnectionRequestEvent to use inline way + */ + connectionEventFromUrl(url: string): Promise; + // === URL Processing === /** Handle pasted TON Connect URL/link */