diff --git a/packages/frame-sdk/src/sdk.ts b/packages/frame-sdk/src/sdk.ts index 4f55a43..c475a73 100644 --- a/packages/frame-sdk/src/sdk.ts +++ b/packages/frame-sdk/src/sdk.ts @@ -1,21 +1,21 @@ -import { AddFrame, type FrameClientEvent, SignIn } from '@farcaster/frame-core' -import { EventEmitter } from 'eventemitter3' -import { frameHost } from './frameHost' -import { provider } from './provider' -import type { Emitter, EventMap, FrameSDK } from './types' +import { AddFrame, type FrameClientEvent, SignIn } from "@farcaster/frame-core"; +import { EventEmitter } from "eventemitter3"; +import { frameHost } from "./frameHost"; +import { provider } from "./provider"; +import type { Emitter, EventMap, FrameSDK } from "./types"; export function createEmitter(): Emitter { - const emitter = new EventEmitter() + const emitter = new EventEmitter(); return { get eventNames() { - return emitter.eventNames.bind(emitter) + return emitter.eventNames.bind(emitter); }, get listenerCount() { - return emitter.listenerCount.bind(emitter) + return emitter.listenerCount.bind(emitter); }, get listeners() { - return emitter.listeners.bind(emitter) + return emitter.listeners.bind(emitter); }, addListener: emitter.addListener.bind(emitter), emit: emitter.emit.bind(emitter), @@ -24,10 +24,10 @@ export function createEmitter(): Emitter { once: emitter.once.bind(emitter), removeAllListeners: emitter.removeAllListeners.bind(emitter), removeListener: emitter.removeListener.bind(emitter), - } + }; } -const emitter = createEmitter() +const emitter = createEmitter(); export const sdk: FrameSDK = { ...emitter, @@ -37,94 +37,93 @@ export const sdk: FrameSDK = { ready: frameHost.ready.bind(frameHost), close: frameHost.close.bind(frameHost), signIn: async (options) => { - const response = await frameHost.signIn(options) + const response = await frameHost.signIn(options); if (response.result) { - return response.result + return response.result; } - if (response.error.type === 'rejected_by_user') { - throw new SignIn.RejectedByUser() + if (response.error?.type === "rejected_by_user") { + throw new SignIn.RejectedByUser(); } - throw new Error('Unreachable') + throw new Error("Unreachable"); }, openUrl: (url: string) => { - return frameHost.openUrl(url.trim()) + return frameHost.openUrl(url.trim()); }, addFrame: async () => { - const response = await frameHost.addFrame() - if (response.result) { - return response.result - } - - if (response.error.type === 'invalid_domain_manifest') { - throw new AddFrame.InvalidDomainManifest() + const response = await frameHost.addFrame(); + if (response.added) { + return response.notificationDetails; // Assuming this is what you want to return } - if (response.error.type === 'rejected_by_user') { - throw new AddFrame.RejectedByUser() + switch (response.reason) { + case "invalid_domain_manifest": + throw new AddFrame.InvalidDomainManifest(); + case "rejected_by_user": + throw new AddFrame.RejectedByUser(); + default: + throw new Error("Unreachable"); } - - throw new Error('Unreachable') }, }, wallet: { ethProvider: provider, }, -} +}; // Required to pass SSR -if (typeof document !== 'undefined') { +if (typeof document !== "undefined") { // react native webview events - document.addEventListener('FarcasterFrameEvent', (event) => { + document.addEventListener("FarcasterFrameEvent", (event) => { if (event instanceof MessageEvent) { - const frameEvent = event.data as FrameClientEvent - if (frameEvent.event === 'primary_button_clicked') { - emitter.emit('primaryButtonClicked') - } else if (frameEvent.event === 'frame_added') { - emitter.emit('frameAdded', { + const frameEvent = event.data as FrameClientEvent; + if (frameEvent.event === "primary_button_clicked") { + emitter.emit("primaryButtonClicked"); + } else if (frameEvent.event === "frame_added") { + emitter.emit("frameAdded", { notificationDetails: frameEvent.notificationDetails, - }) - } else if (frameEvent.event === 'frame_add_rejected') { - emitter.emit('frameAddRejected', { reason: frameEvent.reason }) - } else if (frameEvent.event === 'frame_removed') { - emitter.emit('frameRemoved') - } else if (frameEvent.event === 'notifications_enabled') { - emitter.emit('notificationsEnabled', { + }); + } else if (frameEvent.event === "frame_add_rejected") { + emitter.emit("frameAddRejected", { reason: frameEvent.reason }); + } else if (frameEvent.event === "frame_removed") { + emitter.emit("frameRemoved"); + } else if (frameEvent.event === "notifications_enabled") { + emitter.emit("notificationsEnabled", { notificationDetails: frameEvent.notificationDetails, - }) - } else if (frameEvent.event === 'notifications_disabled') { - emitter.emit('notificationsDisabled') + }); + } else if (frameEvent.event === "notifications_disabled") { + emitter.emit("notificationsDisabled"); } } - }) + }); } // Required to pass SSR -if (typeof window !== 'undefined') { +if (typeof window !== "undefined") { // web events - window.addEventListener('message', (event) => { + window.addEventListener("message", (event) => { if (event instanceof MessageEvent) { - if (event.data.type === 'frameEvent') { - const frameEvent = event.data.event as FrameClientEvent - if (frameEvent.event === 'primary_button_clicked') { - emitter.emit('primaryButtonClicked') - } else if (frameEvent.event === 'frame_added') { - emitter.emit('frameAdded', { + if (event.data.type === "frameEvent") { + const frameEvent = event.data.event as FrameClientEvent; + if (frameEvent.event === "primary_button_clicked") { + emitter.emit("primaryButtonClicked"); + } else if (frameEvent.event === "frame_added") { + emitter.emit("frameAdded", { notificationDetails: frameEvent.notificationDetails, - }) - } else if (frameEvent.event === 'frame_add_rejected') { - emitter.emit('frameAddRejected', { reason: frameEvent.reason }) - } else if (frameEvent.event === 'frame_removed') { - emitter.emit('frameRemoved') - } else if (frameEvent.event === 'notifications_enabled') { - emitter.emit('notificationsEnabled', { + }); + } else if (frameEvent.event === "frame_add_rejected") { + emitter.emit("frameAddRejected", { reason: frameEvent.reason }); + } else if (frameEvent.event === "frame_removed") { + emitter.emit("frameRemoved"); + } else if (frameEvent.event === "notifications_enabled") { + emitter.emit("notificationsEnabled", { notificationDetails: frameEvent.notificationDetails, - }) - } else if (frameEvent.event === 'notifications_disabled') { - emitter.emit('notificationsDisabled') + }); + } else if (frameEvent.event === "notifications_disabled") { + emitter.emit("notificationsDisabled"); } } } - }) + }); }