@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.
@@ -1,8 +1,2 @@
1
- import { Provider } from "ox";
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 "ox";
2
- import { frameHost } from "./frameHost";
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
- export function toProviderRpcError({ code, details, }) {
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 ?? "Unknown provider RPC error");
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 !== "undefined") {
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("FarcasterFrameEthProviderEvent", (event) => {
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 !== "undefined") {
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("message", (event) => {
91
+ window.addEventListener('message', (event) => {
66
92
  if (event instanceof MessageEvent) {
67
- if (event.data.type === "frameEthProviderEvent") {
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
@@ -1,3 +1,3 @@
1
- import { FrameSDK, Emitter } from "./types";
1
+ import type { Emitter, FrameSDK } from './types';
2
2
  export declare function createEmitter(): Emitter;
3
3
  export declare const sdk: FrameSDK;
package/dist/sdk.js CHANGED
@@ -1,7 +1,7 @@
1
- import { EventEmitter } from "eventemitter3";
2
- import { frameHost } from "./frameHost";
3
- import { provider } from "./provider";
4
- import { SignIn } from "@farcaster/frame-core";
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 === "rejected_by_user") {
39
+ if (response.error.type === 'rejected_by_user') {
41
40
  throw new SignIn.RejectedByUser();
42
41
  }
43
- throw new Error("Unreachable");
42
+ throw new Error('Unreachable');
44
43
  },
45
44
  openUrl: (url) => {
46
45
  return frameHost.openUrl(url.trim());
47
46
  },
48
- addFrame: frameHost.addFrame.bind(frameHost),
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 !== "undefined") {
66
+ if (typeof document !== 'undefined') {
56
67
  // react native webview events
57
- document.addEventListener("FarcasterFrameEvent", (event) => {
68
+ document.addEventListener('FarcasterFrameEvent', (event) => {
58
69
  if (event instanceof MessageEvent) {
59
70
  const frameEvent = event.data;
60
- if (frameEvent.event === "primary_button_clicked") {
61
- emitter.emit("primaryButtonClicked");
71
+ if (frameEvent.event === 'primary_button_clicked') {
72
+ emitter.emit('primaryButtonClicked');
62
73
  }
63
- else if (frameEvent.event === "frame_added") {
64
- emitter.emit("frameAdded", {
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 === "frame_add_rejected") {
69
- emitter.emit("frameAddRejected", { reason: frameEvent.reason });
79
+ else if (frameEvent.event === 'frame_add_rejected') {
80
+ emitter.emit('frameAddRejected', { reason: frameEvent.reason });
70
81
  }
71
- else if (frameEvent.event === "frame_removed") {
72
- emitter.emit("frameRemoved");
82
+ else if (frameEvent.event === 'frame_removed') {
83
+ emitter.emit('frameRemoved');
73
84
  }
74
- else if (frameEvent.event === "notifications_enabled") {
75
- emitter.emit("notificationsEnabled", {
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 === "notifications_disabled") {
80
- emitter.emit("notificationsDisabled");
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 !== "undefined") {
97
+ if (typeof window !== 'undefined') {
87
98
  // web events
88
- window.addEventListener("message", (event) => {
99
+ window.addEventListener('message', (event) => {
89
100
  if (event instanceof MessageEvent) {
90
- if (event.data.type === "frameEvent") {
101
+ if (event.data.type === 'frameEvent') {
91
102
  const frameEvent = event.data.event;
92
- if (frameEvent.event === "primary_button_clicked") {
93
- emitter.emit("primaryButtonClicked");
103
+ if (frameEvent.event === 'primary_button_clicked') {
104
+ emitter.emit('primaryButtonClicked');
94
105
  }
95
- else if (frameEvent.event === "frame_added") {
96
- emitter.emit("frameAdded", {
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 === "frame_add_rejected") {
101
- emitter.emit("frameAddRejected", { reason: frameEvent.reason });
111
+ else if (frameEvent.event === 'frame_add_rejected') {
112
+ emitter.emit('frameAddRejected', { reason: frameEvent.reason });
102
113
  }
103
- else if (frameEvent.event === "frame_removed") {
104
- emitter.emit("frameRemoved");
114
+ else if (frameEvent.event === 'frame_removed') {
115
+ emitter.emit('frameRemoved');
105
116
  }
106
- else if (frameEvent.event === "notifications_enabled") {
107
- emitter.emit("notificationsEnabled", {
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 === "notifications_disabled") {
112
- emitter.emit("notificationsDisabled");
122
+ else if (frameEvent.event === 'notifications_disabled') {
123
+ emitter.emit('notificationsDisabled');
113
124
  }
114
125
  }
115
126
  }