input-output-hk / marlowe-ts-sdk

Marlowe TypeScript SDK
https://marlowe.iohk.io/
Apache License 2.0
22 stars 11 forks source link

Initial Mobile support (ussing cip45) #179

Closed hrajchert closed 9 months ago

hrajchert commented 10 months ago

Summary

This PR adds initial Mobile support to the Marlowe TS-SDK by providing an adaptor module to the cardano-peer-connect library. You can follow the library instructions to configure a Dapp and use the new @marlowe.io/wallet/peer-connect adaptor to provide the onApiInject and onApiEject methods.

How to test

An example is provided in the examples/cip45-flow folder

  1. Build the project
    $ npm i
    $ npm run build
  2. Serve the examples folder
    $ npm run serve-dev
  3. Open the browser at http://localhost:1337/examples/cip45-flow/
Screenshot 2024-01-22 at 13 39 22
  1. Use a cip45 wallet like eternl and scan the QR code to connect to the wallet
  2. After the prompt to connect, you can click the create contract button. Screenshot 2024-01-22 at 13 42 53 Screenshot 2024-01-22 at 13 44 01 Screenshot 2024-01-22 at 13 44 47

Current limitations found:

  1. The mobile phone can connect to a dapp running on a Desktop browser, but not to a dapp running on the mobile browser. I would assume this has to do with the inject mechanism, as far as I know mobile wallets don't allow injection of code in the global window object and that is why CIP-30 cannot be implemented directly. This does pose a limitation on users, as the interactive part needs to happen from the Desktop browser and the wallet can only sign.
  2. The Desktop browser dapp can only handle a connection from one mobile wallet at a time. If a wallet is connected to the dapp and you try to connect from another wallet, you get an error. I was expecting to be able to access both wallets and coordinate a contract between them. If each mobile phone could use their own dapp from the mobile browser (limitation 1) then this wouldn't be that much of an issue.
  3. The cardano-peer-connect library doesn't seem to offer a disconnect method from the DAppPeerConnect class. So the wallet can disconnect from the dapp but the dapp can't easily disconnect from the wallet. See Issue 57

Summary by CodeRabbit

Summary by CodeRabbit

coderabbitai[bot] commented 10 months ago

Walkthrough

The updates revolve around the integration and testing of the @marlowe.io/wallet/peer-connect module for CIP45 flow in a web environment. A new example with a README, HTML interface, and JavaScript logic has been introduced to facilitate wallet connections and Marlowe contract interactions. Adjustments to the wallet package improve code visibility and maintainability, while a new peer connection module enhances wallet API management.

Changes

Files Change Summary
examples/cip45-flow/Readme.md
examples/cip45-flow/index.html
examples/cip45-flow/index.js
Introduced a work-in-progress readme, a web page, and script to test CIP45 flow, including wallet connections and contract interactions.
jsdelivr-npm-importmap.js Added a CDN entry for @marlowe.io/wallet/peer-connect module.
packages/wallet/src/browser/index.ts
packages/wallet/src/peer-connect/index.ts
Refactored named exports and added a new module for peer wallet connection management.

πŸ‡πŸŽ‰ To code anew, under the moon, Wallets connect, contracts bloom. Peer through the web, a handshake tight, Marlowe flows, in bytes take flight. πŸš€πŸŒ•

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

Tips ### Chat There are 3 ways to chat with CodeRabbit: - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit-tests for this file.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit tests for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository from git and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit tests.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - The JSON schema for the configuration file is available [here](https://coderabbit.ai/integrations/coderabbit-overrides.v2.json). - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json` ### CodeRabbit Discord Community Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback.