@farcaster/frame-sdk 0.0.15 → 0.0.17
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/README.md +0 -1
- package/dist/endpoint.js +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +3 -3
- package/dist/provider.d.ts +1 -1
- package/dist/provider.js +16 -11
- package/dist/sdk.js +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/endpoint.ts +3 -3
- package/src/provider.ts +26 -17
- package/src/sdk.ts +5 -5
- package/src/types.ts +11 -7
package/src/provider.ts
CHANGED
|
@@ -8,9 +8,12 @@ const store = RpcRequest.createStore();
|
|
|
8
8
|
type GenericProviderRpcError = {
|
|
9
9
|
code: number;
|
|
10
10
|
details?: string;
|
|
11
|
-
}
|
|
11
|
+
};
|
|
12
12
|
|
|
13
|
-
export function toProviderRpcError({
|
|
13
|
+
export function toProviderRpcError({
|
|
14
|
+
code,
|
|
15
|
+
details,
|
|
16
|
+
}: GenericProviderRpcError): Provider.ProviderRpcError {
|
|
14
17
|
switch (code) {
|
|
15
18
|
case 4001:
|
|
16
19
|
return new Provider.UserRejectedRequestError();
|
|
@@ -23,7 +26,10 @@ export function toProviderRpcError({ code, details }: GenericProviderRpcError):
|
|
|
23
26
|
case 4901:
|
|
24
27
|
return new Provider.ChainDisconnectedError();
|
|
25
28
|
default:
|
|
26
|
-
return new Provider.ProviderRpcError(
|
|
29
|
+
return new Provider.ProviderRpcError(
|
|
30
|
+
code,
|
|
31
|
+
details ?? "Unknown provider RPC error",
|
|
32
|
+
);
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
35
|
|
|
@@ -34,19 +40,21 @@ export const provider: Provider.Provider = Provider.from({
|
|
|
34
40
|
const request = store.prepare(args);
|
|
35
41
|
|
|
36
42
|
try {
|
|
37
|
-
const response = await frameHost
|
|
38
|
-
request
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
const response = await frameHost
|
|
44
|
+
.ethProviderRequestV2(request)
|
|
45
|
+
.then((res) => RpcResponse.parse(res, { request, raw: true }));
|
|
41
46
|
|
|
42
47
|
if (response.error) {
|
|
43
|
-
throw toProviderRpcError(response.error)
|
|
48
|
+
throw toProviderRpcError(response.error);
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
return response.result;
|
|
47
52
|
} catch (e) {
|
|
48
53
|
// ethProviderRequestV2 not supported, fall back to v1
|
|
49
|
-
if (
|
|
54
|
+
if (
|
|
55
|
+
e instanceof Error &&
|
|
56
|
+
e.message.match(/cannot read property 'apply'/i)
|
|
57
|
+
) {
|
|
50
58
|
return await frameHost.ethProviderRequest(request);
|
|
51
59
|
}
|
|
52
60
|
|
|
@@ -57,32 +65,33 @@ export const provider: Provider.Provider = Provider.from({
|
|
|
57
65
|
throw e;
|
|
58
66
|
}
|
|
59
67
|
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
throw new RpcResponse.InternalError({
|
|
69
|
+
message: e instanceof Error ? e.message : undefined,
|
|
70
|
+
});
|
|
62
71
|
}
|
|
63
|
-
}
|
|
72
|
+
},
|
|
64
73
|
});
|
|
65
74
|
|
|
66
75
|
// Required to pass SSR
|
|
67
|
-
if (typeof document !==
|
|
76
|
+
if (typeof document !== "undefined") {
|
|
68
77
|
// react native webview events
|
|
69
78
|
document.addEventListener("FarcasterFrameEthProviderEvent", (event) => {
|
|
70
79
|
if (event instanceof MessageEvent) {
|
|
71
80
|
const ethProviderEvent = event.data as EthProviderWireEvent;
|
|
72
|
-
// @ts-expect-error
|
|
81
|
+
// @ts-expect-error
|
|
73
82
|
emitter.emit(ethProviderEvent.event, ...ethProviderEvent.params);
|
|
74
83
|
}
|
|
75
84
|
});
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
// Required to pass SSR
|
|
79
|
-
if (typeof window !==
|
|
88
|
+
if (typeof window !== "undefined") {
|
|
80
89
|
// web events
|
|
81
90
|
window.addEventListener("message", (event) => {
|
|
82
91
|
if (event instanceof MessageEvent) {
|
|
83
|
-
if (event.data.type ===
|
|
92
|
+
if (event.data.type === "frameEthProviderEvent") {
|
|
84
93
|
const ethProviderEvent = event.data as EthProviderWireEvent;
|
|
85
|
-
// @ts-expect-error
|
|
94
|
+
// @ts-expect-error
|
|
86
95
|
emitter.emit(ethProviderEvent.event, ...ethProviderEvent.params);
|
|
87
96
|
}
|
|
88
97
|
}
|
package/src/sdk.ts
CHANGED
|
@@ -36,17 +36,17 @@ export const sdk: FrameSDK = {
|
|
|
36
36
|
ready: frameHost.ready.bind(frameHost),
|
|
37
37
|
close: frameHost.close.bind(frameHost),
|
|
38
38
|
openUrl: (url: string) => {
|
|
39
|
-
return frameHost.openUrl(url.trim())
|
|
39
|
+
return frameHost.openUrl(url.trim());
|
|
40
40
|
},
|
|
41
41
|
addFrame: frameHost.addFrame.bind(frameHost),
|
|
42
42
|
},
|
|
43
43
|
wallet: {
|
|
44
44
|
ethProvider: provider,
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
// Required to pass SSR
|
|
49
|
-
if (typeof document !==
|
|
49
|
+
if (typeof document !== "undefined") {
|
|
50
50
|
// react native webview events
|
|
51
51
|
document.addEventListener("FarcasterFrameEvent", (event) => {
|
|
52
52
|
if (event instanceof MessageEvent) {
|
|
@@ -58,11 +58,11 @@ if (typeof document !== 'undefined') {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
// Required to pass SSR
|
|
61
|
-
if (typeof window !==
|
|
61
|
+
if (typeof window !== "undefined") {
|
|
62
62
|
// web events
|
|
63
63
|
window.addEventListener("message", (event) => {
|
|
64
64
|
if (event instanceof MessageEvent) {
|
|
65
|
-
if (event.data.type ===
|
|
65
|
+
if (event.data.type === "frameEvent") {
|
|
66
66
|
if (event.data.event === "primaryButtonClicked") {
|
|
67
67
|
emitter.emit("primaryButtonClicked");
|
|
68
68
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { EventEmitter } from "eventemitter3";
|
|
2
2
|
import type { Provider } from "ox";
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
FrameContext,
|
|
5
|
+
AddFrame,
|
|
6
|
+
ReadyOptions,
|
|
7
|
+
} from "@farcaster/frame-core";
|
|
4
8
|
|
|
5
9
|
declare global {
|
|
6
10
|
interface Window {
|
|
@@ -22,10 +26,10 @@ export type EventMap = {
|
|
|
22
26
|
export type Emitter = Compute<EventEmitter<EventMap>>;
|
|
23
27
|
|
|
24
28
|
export type SetPrimaryButton = (options: {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
text: string;
|
|
30
|
+
loading?: boolean;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
hidden?: boolean;
|
|
29
33
|
}) => Promise<void>;
|
|
30
34
|
|
|
31
35
|
export type FrameSDK = {
|
|
@@ -35,9 +39,9 @@ export type FrameSDK = {
|
|
|
35
39
|
openUrl: (url: string) => Promise<void>;
|
|
36
40
|
close: () => Promise<void>;
|
|
37
41
|
setPrimaryButton: SetPrimaryButton;
|
|
38
|
-
addFrame: AddFrame
|
|
42
|
+
addFrame: AddFrame;
|
|
39
43
|
};
|
|
40
44
|
wallet: {
|
|
41
|
-
ethProvider: Provider.Provider
|
|
45
|
+
ethProvider: Provider.Provider;
|
|
42
46
|
};
|
|
43
47
|
} & Emitter;
|