Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to pass a custom Bitcoin provider #14

Merged
merged 2 commits into from
Jul 6, 2023

Conversation

olistic
Copy link
Contributor

@olistic olistic commented Jun 30, 2023

Summary

This PR extends sats-connect in a non-breaking way to allow passing a custom BitcoinProvider instance, instead of relying on wallets injecting in window.BitcoinProvider.

All functions that previously accessed window.BitcoinProvider now accept a getProvider option. This is an async function that must resolve to a BitcoinProvider. If the option is not passed, it defaults to () => window.BitcoinProvider.

Motivation

Injecting in window.BitcoinProvider is a bad practice (popularized by MetaMask injecting in window.ethereum) which leads to namespace collision and poor UX for people with multiple wallets installed in their browser. Alternative mechanisms for wallet injection and detection are preferable.

Wallet Standard (and its Bitcoin extensions) were created to solve this problem. With this PR, dApps can detect an standard Bitcoin wallet, extract the provider from it and pass in to the sats-connect functions.

Copy link
Member

@victorkirov victorkirov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really good overall. If you could please just address the 1 minor comment 🙏

Sorry for the delay in reviewing. I'll review the other 2 as we merge in their dependencies.

src/address/types.ts Outdated Show resolved Hide resolved
@olistic olistic requested a review from victorkirov July 5, 2023 21:49
@olistic
Copy link
Contributor Author

olistic commented Jul 6, 2023

Thanks @victorkirov & @yknl. Once this is merged I'll rebase #15.

@victorkirov victorkirov merged commit 138b2d8 into secretkeylabs:develop Jul 6, 2023
@olistic olistic deleted the get-provider branch August 4, 2023 17:00
m-aboelenein added a commit that referenced this pull request Aug 29, 2023
* added signMessage method to provider

* throw error on missing options

* Include send btc transaction function

* Remove console.log

* convert to amountSats

* make message optional

* Allow to pass a custom Bitcoin provider (#14)

* Allow to pass a custom Bitcoin provider

* Extract GetBitcoinProviderFunc type

* Add senderAddress and allow multiple recipients (#10)

* Add senderAddress and allow multiple recipients

* Use Recipient in payload

* Use bigint type for amountSats

* Improve readability and error messages (#15)

* Improve readability

* Clean up error messages

* Remove duplicate line

* Improve error message

---------

Co-authored-by: Victor Kirov <victor.kirov@gmail.com>

* Add NPM pull request preview publish github workflow (#22)

* Add NPM pull request preview publish github workflow

* Add NPM pull request preview publish github workflow

* fix build script

* add npmrc file

* add npm token

* add npmrc file

* change package repository to npm

* update release workflow

* release v0.5.0 (#23)

* Improve APIs and types (BREAKING) (#16)

* Remove unused type

* Rename AddressPurposes enum for best practices

* Extract call types into separate file

* Remove unused CallMethod enum

* Extract provider types into separate file

* Rename directories for consistency

* Rename sendBtcTransaction -> sendTransaction

* Extract transactions types to separate file

* Extract networks module

* Improve types

* Use [] instead of Array<> for consistency

* Fix copy-paste oversight

* Move index.ts inside src

* Use import type for types

* Revert sendBtcTransaction -> sendTransaction renaming

* Simplify types

---------

Co-authored-by: Victor Kirov <victor.kirov@gmail.com>

* Fix bigInt serialisation Issue (#25)

* serialize recipient array

* Fix AddressPurposes type

* Revert AddressPurpose name change

* Rename const

* Check recipient type

* chore: npm publish with prerelease tag if prerelease option selected (#27)

* chore: update release-package.yml syntax (#28)

* Release v1.0.0 (#24)

release v1.0.0

Co-authored-by: Tim Man <tim@secretkeylabs.com>

---------

Co-authored-by: Ken Liao <yukanliao@gmail.com>
Co-authored-by: Imamah-Zafar <imamah.zafar@tintash.com>
Co-authored-by: Duska.T <55587184+DuskaT021@users.noreply.github.com>
Co-authored-by: Matías Olivera <moliverafreire@gmail.com>
Co-authored-by: Imamah-Zafar <88320460+Imamah-Zafar@users.noreply.github.com>
Co-authored-by: Victor Kirov <victor.kirov@gmail.com>
Co-authored-by: Tim Man <tim@secretkeylabs.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants