@farcaster/frame-sdk 0.0.0-canary-20250511031627 → 0.0.0-canary-20250512185912

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AddFrame, ComposeCast, Context, FrameNotificationDetails, Ready, SendToken, SetPrimaryButtonOptions, SignIn, SolanaWalletProvider, SwapToken, ViewProfile, ViewToken } from '@farcaster/frame-core';
1
+ import type { AddFrame, ComposeCast, Context, FrameNotificationDetails, GetCapabilities, Ready, SendToken, SetPrimaryButtonOptions, SignIn, SolanaWalletProvider, SwapToken, ViewProfile, ViewToken } from '@farcaster/frame-core';
2
2
  import type { EventEmitter } from 'eventemitter3';
3
3
  import type * as Provider from 'ox/Provider';
4
4
  declare global {
@@ -29,6 +29,7 @@ export type EventMap = {
29
29
  export type Emitter = Compute<EventEmitter<EventMap>>;
30
30
  type SetPrimaryButton = (options: SetPrimaryButtonOptions) => Promise<void>;
31
31
  export type FrameSDK = {
32
+ getCapabilities: GetCapabilities;
32
33
  isInMiniApp: () => Promise<boolean>;
33
34
  context: Promise<Context.FrameContext>;
34
35
  actions: {
@@ -45,10 +46,11 @@ export type FrameSDK = {
45
46
  viewToken: ViewToken.ViewToken;
46
47
  sendToken: SendToken.SendToken;
47
48
  swapToken: SwapToken.SwapToken;
48
- solanaProvider?: SolanaWalletProvider;
49
+ getSolanaProvider: () => Promise<SolanaWalletProvider | undefined>;
49
50
  };
50
51
  wallet: {
51
52
  ethProvider: Provider.Provider;
53
+ getEvmProvider: () => Promise<Provider.Provider | undefined>;
52
54
  };
53
55
  } & Emitter;
54
56
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farcaster/frame-sdk",
3
- "version": "0.0.0-canary-20250511031627",
3
+ "version": "0.0.0-canary-20250512185912",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,7 +22,7 @@
22
22
  "comlink": "^4.4.2",
23
23
  "eventemitter3": "^5.0.1",
24
24
  "ox": "^0.4.4",
25
- "@farcaster/frame-core": "0.0.0-canary-20250511031627"
25
+ "@farcaster/frame-core": "0.0.0-canary-20250512185912"
26
26
  },
27
27
  "scripts": {
28
28
  "clean": "rm -rf dist",
@@ -44,7 +44,7 @@ function toProviderRpcError({
44
44
  }
45
45
  }
46
46
 
47
- export const provider: Provider.Provider = Provider.from({
47
+ export const evmProvider: Provider.Provider = Provider.from({
48
48
  ...emitter,
49
49
  async request(args) {
50
50
  // @ts-expect-error
@@ -83,7 +83,15 @@ export const provider: Provider.Provider = Provider.from({
83
83
  },
84
84
  })
85
85
 
86
- function announceProvider(
86
+ export async function getEvmProvider(): Promise<Provider.Provider | undefined> {
87
+ const capabilities = await frameHost.getCapabilities()
88
+ if (!capabilities.includes('wallet.getEvmProvider')) {
89
+ return undefined
90
+ }
91
+ return evmProvider
92
+ }
93
+
94
+ function announceEvmProvider(
87
95
  detail: AnnounceProviderParameters,
88
96
  ): AnnounceProviderReturnType {
89
97
  const event: CustomEvent<EIP6963ProviderDetail> = new CustomEvent(
@@ -118,9 +126,9 @@ if (typeof document !== 'undefined') {
118
126
  if (event instanceof MessageEvent) {
119
127
  const frameEvent = event.data as FrameClientEvent
120
128
  if (frameEvent.event === 'eip6963:announceProvider') {
121
- announceProvider({
129
+ announceEvmProvider({
122
130
  info: frameEvent.info,
123
- provider: provider as EIP1193Provider,
131
+ provider: evmProvider as EIP1193Provider,
124
132
  })
125
133
  }
126
134
  }
@@ -150,9 +158,9 @@ if (typeof window !== 'undefined') {
150
158
  if (event.data.type === 'frameEvent') {
151
159
  const frameEvent = event.data.event as FrameClientEvent
152
160
  if (frameEvent.event === 'eip6963:announceProvider') {
153
- announceProvider({
161
+ announceEvmProvider({
154
162
  info: frameEvent.info,
155
- provider: provider as EIP1193Provider,
163
+ provider: evmProvider as EIP1193Provider,
156
164
  })
157
165
  }
158
166
  }
package/src/sdk.ts CHANGED
@@ -6,8 +6,9 @@ import {
6
6
  createSolanaWalletProvider,
7
7
  } from '@farcaster/frame-core'
8
8
  import { EventEmitter } from 'eventemitter3'
9
+ import { evmProvider, getEvmProvider } from './evmProvider'
9
10
  import { frameHost } from './frameHost'
10
- import { provider } from './provider'
11
+ import { getSolanaProvider } from './solanaProvider'
11
12
  import type { Emitter, EventMap, FrameSDK } from './types'
12
13
 
13
14
  export function createEmitter(): Emitter {
@@ -79,6 +80,7 @@ async function isInMiniApp(timeoutMs = 50): Promise<boolean> {
79
80
 
80
81
  export const sdk: FrameSDK = {
81
82
  ...emitter,
83
+ getCapabilities: frameHost.getCapabilities,
82
84
  isInMiniApp,
83
85
  context: frameHost.context,
84
86
  actions: {
@@ -126,14 +128,11 @@ export const sdk: FrameSDK = {
126
128
  viewToken: frameHost.viewToken.bind(frameHost),
127
129
  sendToken: frameHost.sendToken.bind(frameHost),
128
130
  swapToken: frameHost.swapToken.bind(frameHost),
129
- solanaProvider: frameHost.solanaProviderRequest
130
- ? createSolanaWalletProvider(
131
- frameHost.solanaProviderRequest as unknown as SolanaRequestFn,
132
- )
133
- : undefined,
131
+ getSolanaProvider,
134
132
  },
135
133
  wallet: {
136
- ethProvider: provider,
134
+ ethProvider: evmProvider,
135
+ getEvmProvider: getEvmProvider,
137
136
  },
138
137
  }
139
138
 
@@ -0,0 +1,21 @@
1
+ import {
2
+ type SolanaRequestFn,
3
+ type SolanaWalletProvider,
4
+ createSolanaWalletProvider,
5
+ } from '@farcaster/frame-core'
6
+
7
+ import { frameHost } from './frameHost'
8
+
9
+ const solanaProvider = createSolanaWalletProvider(
10
+ frameHost.solanaProviderRequest as unknown as SolanaRequestFn,
11
+ )
12
+
13
+ async function getSolanaProvider(): Promise<SolanaWalletProvider | undefined> {
14
+ const capabilities = await frameHost.getCapabilities()
15
+ if (!capabilities.includes('wallet.getSolanaProvider')) {
16
+ return undefined
17
+ }
18
+ return solanaProvider
19
+ }
20
+
21
+ export { getSolanaProvider }
package/src/types.ts CHANGED
@@ -3,6 +3,7 @@ import type {
3
3
  ComposeCast,
4
4
  Context,
5
5
  FrameNotificationDetails,
6
+ GetCapabilities,
6
7
  Ready,
7
8
  SendToken,
8
9
  SetPrimaryButtonOptions,
@@ -52,6 +53,7 @@ export type Emitter = Compute<EventEmitter<EventMap>>
52
53
  type SetPrimaryButton = (options: SetPrimaryButtonOptions) => Promise<void>
53
54
 
54
55
  export type FrameSDK = {
56
+ getCapabilities: GetCapabilities
55
57
  isInMiniApp: () => Promise<boolean>
56
58
  context: Promise<Context.FrameContext>
57
59
  actions: {
@@ -70,9 +72,11 @@ export type FrameSDK = {
70
72
  viewToken: ViewToken.ViewToken
71
73
  sendToken: SendToken.SendToken
72
74
  swapToken: SwapToken.SwapToken
73
- solanaProvider?: SolanaWalletProvider
75
+ getSolanaProvider: () => Promise<SolanaWalletProvider | undefined>
74
76
  }
75
77
  wallet: {
78
+ // Deprecated in favor of getEvmProvider
76
79
  ethProvider: Provider.Provider
80
+ getEvmProvider: () => Promise<Provider.Provider | undefined>
77
81
  }
78
82
  } & Emitter
@@ -1,2 +0,0 @@
1
- import * as Provider from 'ox/Provider';
2
- export declare const provider: Provider.Provider;