Skip to content

TON 359: new intent api design#297

Open
nikdim03 wants to merge 46 commits intomainfrom
feature/ton-359-new-intent-api-design
Open

TON 359: new intent api design#297
nikdim03 wants to merge 46 commits intomainfrom
feature/ton-359-new-intent-api-design

Conversation

@nikdim03
Copy link
Contributor

No description provided.

nikdim03 added 18 commits March 13, 2026 05:52
Add intent URL parsing, resolution, and handling pipeline:

Models:
- IntentActionItem: SendTon, SendJetton, SendNft action types
- IntentRequestEvent: Transaction, SignData, Action intent events
- IntentResponse: Transaction, SignData, and error response types
- BatchedIntentEvent: Multiple intents in a single event

Handlers:
- IntentParser: URL parsing, validation, wire-to-model mapping
- IntentResolver: Action items to TransactionRequest conversion,
  action URL fetching with jetton/NFT message building
- IntentHandler: Orchestrator with parse-resolve-emulate-emit flow,
  approval/rejection methods, pending connect request management

Integration:
- TonWalletKit: 10 public intent API methods
- BridgeManager: sendIntentResponse with ephemeral SessionCrypto
- Android bridge: Full intent API surface with event listeners
1. Action URL response parsing: handle { action_type, action } format
   per spec instead of wire intent format. sendTransaction actions
   return standard messages array, signData returns typed payload.

2. Query param: use 'address' instead of 'wallet' when appending
   wallet address to action URL (spec requirement).

3. Wire response format: convert SDK response models to spec format
   before sending via bridge:
   - txIntent/signMsg: { result: '<boc>', id }
   - signIntent: { result: { signature, address, timestamp, domain, payload }, id }
   - error: { error: { code, message }, id }

4. SignData response: add echoed payload field per spec requirement
   (MakeSignDataIntentResponseSuccess = SignDataResponseSuccess).
…ning and adjust related logic in IntentHandler
@nikdim03 nikdim03 requested a review from a team as a code owner March 13, 2026 06:06
@vercel
Copy link

vercel bot commented Mar 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
kit-demo-wallet Ready Ready Preview, Comment Mar 17, 2026 4:50am

Request Review

@nikdim03 nikdim03 changed the title Feature/ton 359 new intent api design New intent api design Mar 13, 2026
@nikdim03 nikdim03 changed the title New intent api design TON 359: new intent api design Mar 13, 2026
nikdim03 and others added 10 commits March 16, 2026 16:10
For signOnly (signMsgDraft) delivery mode, the TonConnect spec expects
{ result: { internal_boc: "<boc>" } } instead of { result: "<boc>" }
so that the SDK's signMessageDraftParser can deserialize it correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t naming

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix fetchActionUrl body stream double-consume bug
- Remove dead EventStore draft cases and unused removeEvent
- Remove draft types from EventType (never stored)
- Use static IntentParser instance for isIntentUrl pre-init
- Make onIntentRequest/removeIntentRequestCallback async
- Stop mutating input events in approveBatchedIntent
- Extract signAndSendTransaction/signSignData/resolveAndApproveAction helpers
- Rewrite approveBatchedIntent to reuse helpers (156→40 lines)
- Replace per-item as any casts with single as unknown as Feature[]
- Consistent Draft naming for bridge args types
- Add default case to IntentParser switch
- Remove unused _clientPubKeyHex param from decryptPayload
Intent features are advertised via walletManifest/deviceInfo config,
not hardcoded in adapters. The external e2e test dApp validates features
against @tonconnect/protocol which doesn't know intent feature names yet.
Adds a required `type: 'batched'` field so callers can distinguish
BatchedIntentEvent from IntentRequestEvent via a proper discriminated
union instead of duck-typing ('intents' in event).

Populates the field in both BatchedIntentEvent construction sites in
IntentHandler and updates spec helpers accordingly.
getSupportedFeatures() can return intent feature names (SendTransactionDraft,
SignMessageDraft, SendActionDraft) for internal intent discovery. However
DeviceInfo.features in the TonConnect connect response must only contain
standard protocol feature names (SendTransaction, SignData), as dApps
validate against the @tonconnect/protocol spec.

getDeviceInfoForWallet() now filters walletSupportedFeatures to only
standard TonConnect feature names before placing them in DeviceInfo.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant