npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

msafe-iframe

v1.1.7

Published

iframe sdk of msafe

Downloads

44

Readme

Msafe Iframe SDK

Msafe Iframe SDK is used to integrate any dapp into msafe multi-sign wallet.
The frontend of dapp will run in a sub-iframe of msafe, this SDK can be used for the interaction between dapp and msafe wallet.

Install

Installation of the npm package:

> npm install --save msafe-iframe

Usage(Dapp Side)

Init msafe wallet

You should initialize it once and use it later.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();

Connect/Disconnect to a msafe account

Connect/Disconnect to an account.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const account = await msafe.connect(); // {addres:string, publicKey:string}
await msafe.isConnected(); // true
await msafe.disconnect();
await msafe.isConnected(); // false

Get Network

Get current network.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const network:string = await msafe.network(); // mainnet

Get Account

Get current msafe account.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const account:Account = await msafe.account();
console.log("address:", account.address);
console.log("public key:", account.publicKey);

Get ChainId

Get current ChainId.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const account = await msafe.chainId();  // 1

Submit Transaction

Request a signature and send a transaction to the blockchain.

  • payload - mandatory parameter containing the transaction body.
  • option - optional parameter that overrides transaction parameters.
  • For arguments of type vector, you can pass in an array.
  • For vector<u8>, you can pass in Uint8Array.
  • You can also pass in a BCS serialized transaction as payload(Uint8Array), which ignores option.
import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const payload = {
    function: "0x1::coin::transfer",
    type_arguments: ["0x1::aptos_coin::AptosCoin"],
    arguments: ["0x997b38d2127711011462bc42e788a537eae77806404769188f20d3dc46d72750", 50]
};
const option = {
   sender: account.address,
   sequence_number: "1",
   max_gas_amount: "4000",
   gas_unit_price: "1",
   // Unix timestamp, in seconds + 10 seconds
   expiration_timestamp_secs: (Math.floor(Date.now() / 1000) + 10).toString(),
}
const txid:Uint8Array = await msafe.signAndSubmit(payload, option); // 32 bytes tx hash

Sign Transaction

Request a signature of transaction.

  • payload - mandatory parameter containing the transaction body.
  • option - optional parameter that overrides transaction parameters.
  • For arguments of type vector, you can pass in an array.
  • For vector<u8>, you can pass in Uint8Array.
  • You can also pass in a BCS serialized transaction as payload(Uint8Array), which ignores option.
import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const payload = {
    function: "0x1::coin::transfer",
    type_arguments: ["0x1::aptos_coin::AptosCoin"],
    arguments: ["0x997b38d2127711011462bc42e788a537eae77806404769188f20d3dc46d72750", 50]
};
const option = {
   sender: msafeAddress.hex(),
   sequence_number: "1",
   max_gas_amount: "4000",
   gas_unit_price: "1",
   // Unix timestamp, in seconds + 10 seconds
   expiration_timestamp_secs: (Math.floor(Date.now() / 1000) + 10).toString(),
}
const signedTxn:Uint8Array = await msafe.signTransaction(payload, option); // BCS serialized signed transaction

Sign Message

Unsupported now.

Network Change Event

Network change event.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
msafe.onChangeAccount((network:string)=>{
    console.log("network change to:", network)
});

Account Change Event

Account change event.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
msafe.onChangeAccount((account:Account)=>{
    console.log("address:", account.address);
    console.log("public key:", account.publicKey);
});

Usage(Msafe Server Side)

Accept dapp connection

import { Connector,MsafeServer } from "msafe-iframe";
// cleaner is a function that used to remove listener.
const cleaner = Connector.accepts(dappUrl, (connector:Connector) => {

})

Create Msafe Wallet Service

import { Connector,MsafeServer,WalletAPI } from "msafe-iframe";
const connector:Connector = await Connector.accept(dappUrl);
const server = new MsafeServer(connector, {
    async connect(): Promise<Account> {
        // ...
        return {address:'0x1', publicKey:'0x1234...'};
    },
    // ... signAndSubmit(),signTransaction()
    async signMessage(
        message: string | Uint8Array
    ): Promise<Uint8Array> {
        throw Error("unsupport");
    },
} as WalletAPI);

Emit Network Change Event

import { Connector,MsafeServer,WalletAPI } from "msafe-iframe";
const server = new MsafeServer(...);
await server.changeNetwork('Testnet');

Emit Account Change Event

import { Connector,MsafeServer,WalletAPI } from "msafe-iframe";
const server = new MsafeServer(...);
await server.changeAccount({address:'0x1234...', publicKey:'0xabce...'});

Development

# Install dependencies
> npm install

# Build
> npm run build

# Test
> npm run test

# Publish
> npm publish