@farcaster/frame-sdk 0.0.22 → 0.0.24
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/endpoint.d.ts +1 -1
- package/dist/endpoint.js +5 -5
- package/dist/frameHost.d.ts +1 -1
- package/dist/frameHost.js +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +4 -4
- package/dist/provider.d.ts +1 -7
- package/dist/provider.js +48 -9
- package/dist/sdk.d.ts +1 -1
- package/dist/sdk.js +48 -37
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +9 -13
- package/package.json +6 -5
- package/src/endpoint.ts +10 -10
- package/src/frameHost.ts +4 -4
- package/src/index.ts +4 -4
- package/src/provider.ts +95 -35
- package/src/sdk.ts +71 -57
- package/src/types.ts +33 -36
package/dist/provider.d.ts
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
import { Provider } from
|
|
2
|
-
type GenericProviderRpcError = {
|
|
3
|
-
code: number;
|
|
4
|
-
details?: string;
|
|
5
|
-
};
|
|
6
|
-
export declare function toProviderRpcError({ code, details, }: GenericProviderRpcError): Provider.ProviderRpcError;
|
|
1
|
+
import { Provider } from 'ox';
|
|
7
2
|
export declare const provider: Provider.Provider;
|
|
8
|
-
export {};
|
package/dist/provider.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Provider, RpcRequest, RpcResponse } from
|
|
2
|
-
import { frameHost } from
|
|
1
|
+
import { Provider, RpcRequest, RpcResponse } from 'ox';
|
|
2
|
+
import { frameHost } from './frameHost';
|
|
3
3
|
const emitter = Provider.createEmitter();
|
|
4
4
|
const store = RpcRequest.createStore();
|
|
5
|
-
|
|
5
|
+
function toProviderRpcError({ code, details, }) {
|
|
6
6
|
switch (code) {
|
|
7
7
|
case 4001:
|
|
8
8
|
return new Provider.UserRejectedRequestError();
|
|
@@ -15,7 +15,7 @@ export function toProviderRpcError({ code, details, }) {
|
|
|
15
15
|
case 4901:
|
|
16
16
|
return new Provider.ChainDisconnectedError();
|
|
17
17
|
default:
|
|
18
|
-
return new Provider.ProviderRpcError(code, details ??
|
|
18
|
+
return new Provider.ProviderRpcError(code, details ?? 'Unknown provider RPC error');
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
export const provider = Provider.from({
|
|
@@ -48,27 +48,66 @@ export const provider = Provider.from({
|
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
});
|
|
51
|
+
function announceProvider(detail) {
|
|
52
|
+
const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });
|
|
53
|
+
window.dispatchEvent(event);
|
|
54
|
+
const handler = () => window.dispatchEvent(event);
|
|
55
|
+
window.addEventListener('eip6963:requestProvider', handler);
|
|
56
|
+
return () => window.removeEventListener('eip6963:requestProvider', handler);
|
|
57
|
+
}
|
|
51
58
|
// Required to pass SSR
|
|
52
|
-
if (typeof document !==
|
|
59
|
+
if (typeof document !== 'undefined') {
|
|
60
|
+
// forward eip6963:requestProvider events to the host
|
|
61
|
+
document.addEventListener('eip6963:requestProvider', () => {
|
|
62
|
+
frameHost.eip6963RequestProvider();
|
|
63
|
+
});
|
|
53
64
|
// react native webview events
|
|
54
|
-
document.addEventListener(
|
|
65
|
+
document.addEventListener('FarcasterFrameEthProviderEvent', (event) => {
|
|
55
66
|
if (event instanceof MessageEvent) {
|
|
56
67
|
const ethProviderEvent = event.data;
|
|
57
68
|
// @ts-expect-error
|
|
58
69
|
emitter.emit(ethProviderEvent.event, ...ethProviderEvent.params);
|
|
59
70
|
}
|
|
60
71
|
});
|
|
72
|
+
document.addEventListener('FarcasterFrameEvent', (event) => {
|
|
73
|
+
if (event instanceof MessageEvent) {
|
|
74
|
+
const frameEvent = event.data;
|
|
75
|
+
if (frameEvent.event === 'eip6963:announceProvider') {
|
|
76
|
+
announceProvider({
|
|
77
|
+
info: frameEvent.info,
|
|
78
|
+
provider: provider,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
61
83
|
}
|
|
62
84
|
// Required to pass SSR
|
|
63
|
-
if (typeof window !==
|
|
85
|
+
if (typeof window !== 'undefined') {
|
|
86
|
+
// forward eip6963:requestProvider events to the host
|
|
87
|
+
window.addEventListener('eip6963:requestProvider', () => {
|
|
88
|
+
frameHost.eip6963RequestProvider();
|
|
89
|
+
});
|
|
64
90
|
// web events
|
|
65
|
-
window.addEventListener(
|
|
91
|
+
window.addEventListener('message', (event) => {
|
|
66
92
|
if (event instanceof MessageEvent) {
|
|
67
|
-
if (event.data.type ===
|
|
93
|
+
if (event.data.type === 'frameEthProviderEvent') {
|
|
68
94
|
const ethProviderEvent = event.data;
|
|
69
95
|
// @ts-expect-error
|
|
70
96
|
emitter.emit(ethProviderEvent.event, ...ethProviderEvent.params);
|
|
71
97
|
}
|
|
72
98
|
}
|
|
73
99
|
});
|
|
100
|
+
window.addEventListener('message', (event) => {
|
|
101
|
+
if (event instanceof MessageEvent) {
|
|
102
|
+
if (event.data.type === 'frameEvent') {
|
|
103
|
+
const frameEvent = event.data.event;
|
|
104
|
+
if (frameEvent.event === 'eip6963:announceProvider') {
|
|
105
|
+
announceProvider({
|
|
106
|
+
info: frameEvent.info,
|
|
107
|
+
provider: provider,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
74
113
|
}
|
package/dist/sdk.d.ts
CHANGED
package/dist/sdk.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { AddFrame, SignIn } from '@farcaster/frame-core';
|
|
2
|
+
import { EventEmitter } from 'eventemitter3';
|
|
3
|
+
import { frameHost } from './frameHost';
|
|
4
|
+
import { provider } from './provider';
|
|
5
5
|
export function createEmitter() {
|
|
6
6
|
const emitter = new EventEmitter();
|
|
7
7
|
return {
|
|
@@ -33,83 +33,94 @@ export const sdk = {
|
|
|
33
33
|
close: frameHost.close.bind(frameHost),
|
|
34
34
|
signIn: async (options) => {
|
|
35
35
|
const response = await frameHost.signIn(options);
|
|
36
|
-
console.log(response);
|
|
37
36
|
if (response.result) {
|
|
38
37
|
return response.result;
|
|
39
38
|
}
|
|
40
|
-
if (response.error.type ===
|
|
39
|
+
if (response.error.type === 'rejected_by_user') {
|
|
41
40
|
throw new SignIn.RejectedByUser();
|
|
42
41
|
}
|
|
43
|
-
throw new Error(
|
|
42
|
+
throw new Error('Unreachable');
|
|
44
43
|
},
|
|
45
44
|
openUrl: (url) => {
|
|
46
45
|
return frameHost.openUrl(url.trim());
|
|
47
46
|
},
|
|
48
|
-
addFrame:
|
|
47
|
+
addFrame: async () => {
|
|
48
|
+
const response = await frameHost.addFrame();
|
|
49
|
+
if (response.result) {
|
|
50
|
+
return response.result;
|
|
51
|
+
}
|
|
52
|
+
if (response.error.type === 'invalid_domain_manifest') {
|
|
53
|
+
throw new AddFrame.InvalidDomainManifest();
|
|
54
|
+
}
|
|
55
|
+
if (response.error.type === 'rejected_by_user') {
|
|
56
|
+
throw new AddFrame.RejectedByUser();
|
|
57
|
+
}
|
|
58
|
+
throw new Error('Unreachable');
|
|
59
|
+
},
|
|
49
60
|
},
|
|
50
61
|
wallet: {
|
|
51
62
|
ethProvider: provider,
|
|
52
63
|
},
|
|
53
64
|
};
|
|
54
65
|
// Required to pass SSR
|
|
55
|
-
if (typeof document !==
|
|
66
|
+
if (typeof document !== 'undefined') {
|
|
56
67
|
// react native webview events
|
|
57
|
-
document.addEventListener(
|
|
68
|
+
document.addEventListener('FarcasterFrameEvent', (event) => {
|
|
58
69
|
if (event instanceof MessageEvent) {
|
|
59
70
|
const frameEvent = event.data;
|
|
60
|
-
if (frameEvent.event ===
|
|
61
|
-
emitter.emit(
|
|
71
|
+
if (frameEvent.event === 'primary_button_clicked') {
|
|
72
|
+
emitter.emit('primaryButtonClicked');
|
|
62
73
|
}
|
|
63
|
-
else if (frameEvent.event ===
|
|
64
|
-
emitter.emit(
|
|
74
|
+
else if (frameEvent.event === 'frame_added') {
|
|
75
|
+
emitter.emit('frameAdded', {
|
|
65
76
|
notificationDetails: frameEvent.notificationDetails,
|
|
66
77
|
});
|
|
67
78
|
}
|
|
68
|
-
else if (frameEvent.event ===
|
|
69
|
-
emitter.emit(
|
|
79
|
+
else if (frameEvent.event === 'frame_add_rejected') {
|
|
80
|
+
emitter.emit('frameAddRejected', { reason: frameEvent.reason });
|
|
70
81
|
}
|
|
71
|
-
else if (frameEvent.event ===
|
|
72
|
-
emitter.emit(
|
|
82
|
+
else if (frameEvent.event === 'frame_removed') {
|
|
83
|
+
emitter.emit('frameRemoved');
|
|
73
84
|
}
|
|
74
|
-
else if (frameEvent.event ===
|
|
75
|
-
emitter.emit(
|
|
85
|
+
else if (frameEvent.event === 'notifications_enabled') {
|
|
86
|
+
emitter.emit('notificationsEnabled', {
|
|
76
87
|
notificationDetails: frameEvent.notificationDetails,
|
|
77
88
|
});
|
|
78
89
|
}
|
|
79
|
-
else if (frameEvent.event ===
|
|
80
|
-
emitter.emit(
|
|
90
|
+
else if (frameEvent.event === 'notifications_disabled') {
|
|
91
|
+
emitter.emit('notificationsDisabled');
|
|
81
92
|
}
|
|
82
93
|
}
|
|
83
94
|
});
|
|
84
95
|
}
|
|
85
96
|
// Required to pass SSR
|
|
86
|
-
if (typeof window !==
|
|
97
|
+
if (typeof window !== 'undefined') {
|
|
87
98
|
// web events
|
|
88
|
-
window.addEventListener(
|
|
99
|
+
window.addEventListener('message', (event) => {
|
|
89
100
|
if (event instanceof MessageEvent) {
|
|
90
|
-
if (event.data.type ===
|
|
101
|
+
if (event.data.type === 'frameEvent') {
|
|
91
102
|
const frameEvent = event.data.event;
|
|
92
|
-
if (frameEvent.event ===
|
|
93
|
-
emitter.emit(
|
|
103
|
+
if (frameEvent.event === 'primary_button_clicked') {
|
|
104
|
+
emitter.emit('primaryButtonClicked');
|
|
94
105
|
}
|
|
95
|
-
else if (frameEvent.event ===
|
|
96
|
-
emitter.emit(
|
|
106
|
+
else if (frameEvent.event === 'frame_added') {
|
|
107
|
+
emitter.emit('frameAdded', {
|
|
97
108
|
notificationDetails: frameEvent.notificationDetails,
|
|
98
109
|
});
|
|
99
110
|
}
|
|
100
|
-
else if (frameEvent.event ===
|
|
101
|
-
emitter.emit(
|
|
111
|
+
else if (frameEvent.event === 'frame_add_rejected') {
|
|
112
|
+
emitter.emit('frameAddRejected', { reason: frameEvent.reason });
|
|
102
113
|
}
|
|
103
|
-
else if (frameEvent.event ===
|
|
104
|
-
emitter.emit(
|
|
114
|
+
else if (frameEvent.event === 'frame_removed') {
|
|
115
|
+
emitter.emit('frameRemoved');
|
|
105
116
|
}
|
|
106
|
-
else if (frameEvent.event ===
|
|
107
|
-
emitter.emit(
|
|
117
|
+
else if (frameEvent.event === 'notifications_enabled') {
|
|
118
|
+
emitter.emit('notificationsEnabled', {
|
|
108
119
|
notificationDetails: frameEvent.notificationDetails,
|
|
109
120
|
});
|
|
110
121
|
}
|
|
111
|
-
else if (frameEvent.event ===
|
|
112
|
-
emitter.emit(
|
|
122
|
+
else if (frameEvent.event === 'notifications_disabled') {
|
|
123
|
+
emitter.emit('notificationsDisabled');
|
|
113
124
|
}
|
|
114
125
|
}
|
|
115
126
|
}
|