Skip to content

Commit

Permalink
fix: improve connection logic to not force install
Browse files Browse the repository at this point in the history
  • Loading branch information
hugomrdias committed Jun 14, 2024
1 parent acd8662 commit 6cc4f1f
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 26 deletions.
4 changes: 2 additions & 2 deletions packages/adapter/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ export { FilsnapAdapter } from './snap'
export { filForwarderMetadata } from 'filsnap/filforwarder'
export type { SnapConfig, AccountInfo } from 'filsnap'

export { getRequestProvider } from './get-request-provider'
export type { Provider } from './get-request-provider'
export { getRequestProvider } from './utils'
export type { Provider } from './utils'
26 changes: 3 additions & 23 deletions packages/adapter/src/snap.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { FilSnapMethods, Network, SnapConfig } from 'filsnap'
import { RPC } from 'iso-filecoin/rpc'
import type { Provider } from './get-request-provider'
import { getRequestProvider } from './get-request-provider'
import type { Provider } from './utils'
import { getRequestProvider, getSnap } from './utils'

export class FilsnapAdapter {
readonly snapId: string
Expand Down Expand Up @@ -94,28 +94,8 @@ export class FilsnapAdapter {
}

const provider = await FilsnapAdapter.getProvider()
const snaps = await provider.request({
method: 'wallet_requestSnaps',
params: {
[snapId]: {
version: snapVersion,
},
},
})
const snap = snaps[snapId]

if (snap == null) {
throw new Error(`Failed to connect to snap ${snapId} ${snapVersion}`)
}

if ('error' in snap) {
throw new Error(
`Failed to connect to snap ${snapId} ${snapVersion} with error ${snap.error.message}`
)
}

const snap = await getSnap(provider, snapId, snapVersion)
const adapter = new FilsnapAdapter(snapId, snap.version)

const result = await adapter.configure(config)

if (result.error) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { RequestWithFilSnap } from 'filsnap'
import type { RequestWithFilSnap, Snap } from 'filsnap'

export interface Provider {
isMetaMask: boolean
Expand Down Expand Up @@ -58,3 +58,62 @@ export async function getRequestProvider(timeout = 1000): Promise<Provider> {
}, timeout)
})
}

export async function getSnap(
provider: Provider,
snapId = 'npm:filsnap',
snapVersion = '*'
): Promise<Snap> {
const snaps = await provider.request({ method: 'wallet_getSnaps' })
const snap = snaps[snapId]

// try to install the snap
if (snap == null) {
try {
const snaps = await provider.request({
method: 'wallet_requestSnaps',
params: {
[snapId]: {
version: snapVersion,
},
},
})
const snap = snaps[snapId]
if (snap == null) {
throw new Error(`Failed to install to snap ${snapId} ${snapVersion}`)
}

if ('error' in snap) {
throw new Error(
`Failed to install to snap ${snapId} ${snapVersion} with error ${snap.error.message}`
)
}
return snap
} catch (error) {
const err = error as Error
throw new Error(
`Failed to install to snap ${snapId} ${snapVersion} with error ${err.message}`
)
}
}

if ('error' in snap) {
throw new Error(
`Failed to connect to snap ${snapId} ${snapVersion} with error ${snap.error.message}`
)
}

if (snap.blocked === true) {
throw new Error(`Snap ${snapId} ${snapVersion} is blocked`)
}

if (snap.enabled === false) {
throw new Error(`Snap ${snapId} ${snapVersion} is not enabled`)
}

// if (snapVersion !== '*' && snap.version !== snapVersion) {
// throw new Error(`Snap ${snapId} ${snapVersion} is not the correct version`)
// }

return snap
}

0 comments on commit 6cc4f1f

Please sign in to comment.