# @protonprotocol/proton-link

> Persistent, fast and secure signature provider for Proton chain built on top of [EOSIO Signing Requests (EEP-7)](https://github.com/greymass/eosio-signing-request). This was forked from the [Anchor Link](https://github.com/greymass/anchor-link) module, mu

Latest version **2.5.8** (published 2020-12-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install @protonprotocol/proton-link
pnpm add @protonprotocol/proton-link
yarn add @protonprotocol/proton-link
bun add @protonprotocol/proton-link
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.5.8 |
| Published | 2020-12-10 |
| First published | 2020-09-14 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=10 |
| Dependencies | 7 |
| Unpacked size | 591.6 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | jafri |
| Maintainers | cindymetal, jacobmetal, jafri |

## Links

- npm: https://www.npmjs.com/package/@protonprotocol/proton-link
- npm.io page: https://npm.io/package/@protonprotocol/proton-link

## Dependencies (7)

- [ws](https://npm.io/package/ws.md) ^7.3.1
- [pako](https://npm.io/package/pako.md) ^1.0.11
- [uuid](https://npm.io/package/uuid.md) ^8.3.1
- [eosjs-ecc](https://npm.io/package/eosjs-ecc.md) ^4.0.7
- [isomorphic-ws](https://npm.io/package/isomorphic-ws.md) ^4.0.1
- [@protonprotocol/protonjs](https://npm.io/package/@protonprotocol/protonjs.md) ^21.0.21
- [@protonprotocol/proton-signing-request](https://npm.io/package/@protonprotocol/proton-signing-request.md) ^2.5.4

## Recent versions

- 2.5.8 (latest) — 2020-12-10
- 2.5.7 — 2020-12-03
- 2.5.6 — 2020-11-07
- 2.5.5 — 2020-10-30
- 2.5.4 — 2020-10-30
- 2.5.2 — 2020-10-24
- 2.4.13 — 2020-10-16
- 2.4.12 — 2020-10-07
- 2.4.11 — 2020-10-01
- 2.4.10 — 2020-10-01
- 2.4.9 — 2020-10-01
- 2.4.7 — 2020-10-01
- 2.4.6 — 2020-10-01
- 2.4.5 — 2020-10-01
- 2.4.4 — 2020-09-30
- … 6 more at https://npm.io/package/@protonprotocol/proton-link/versions

## README

# Proton Link [!![Package Version](https://img.shields.io/npm/v/@protonprotocol/https://www.npmjs.com/package/@protonprotocol/proton-link.svg?style=flat-square](https://www.npmjs.com/package/@protonprotocol/proton-link) ![License](https://img.shields.io/npm/l/@protonprotocol/proton-link.svg?style=flat-square)

Persistent, fast and secure signature provider for Proton chain built on top of [EOSIO Signing Requests (EEP-7)](https://github.com/greymass/eosio-signing-request). This was forked from the [Anchor Link](https://github.com/greymass/anchor-link) module, much of the documentation from Anchor Link still applies.

Key features:
  - Persistent sessions
  - Cross device signing
  - End to end encryption
  - Open standard

Resources:
  - [API Documentation](https://greymass.github.io/anchor-link)
  - [Protocol specification](./protocol.md)
  - [Usage examples](./examples)

## Installation

The `proton-link` package is distributed as a module on [npm](https://www.npmjs.com/package/@protonprotocol/proton-link)

### Browser using a bundler (recommended)

Install Proton Link and a [transport](#transports):

```
yarn add proton-link proton-browser-transport
# or
npm install --save proton-link proton-browser-transport
```

Import them into your project:

```js
import ProtonLink from 'proton-link'
import ProtonLinkBrowserTransport from 'proton-browser-transport'
```

### Using node.js

Using node.js

```
yarn add @protonprotocol/proton-link @protonprotocol/proton-browser-transport
# or
npm install --save @protonprotocol/proton-link @protonprotocol/proton-browser-transport
```

Import them into your project:

```js
const ProtonLink = require('proton-link')
const ProtonLinkBrowserTransport = require('proton-browser-transport')
```

## Basic usage

First you need to instantiate your transport and the link.

```ts
const transport = new ProtonLinkBrowserTransport()
const link = new ProtonLink({transport})
```

For more customization, please see [Proton Browser Transport](https://github.com/ProtonProtocol/ProtonWeb/tree/develop/packages/proton-browser-transport)

Now you're ready to create signing requests for Proton main-net.

```ts
const action = {
    account: 'xtokens',
    name: 'transfer',
    authorization: [{
        actor: '............1', // ............1 will be resolved to the signing accounts permission
        permission: '............2' // ............2 will be resolved to the signing accounts authority
    }],
    data: {
        from: '............1',
        to: targetAccount,
        quantity: '0.01000000 XUSDT',
        memo: 'Taskly'
    }
}
link.transact({action}).then((result) => {
    console.log(`Transaction broadcast! Transaction id: ${ result.processed.id }`)
})
```

See the [Link.transact API docs](https://greymass.github.io/anchor-link/classes/link.html#transact) for all options and return values.

To create a persistent login session use [Link.login](https://greymass.github.io/anchor-link/classes/link.html#login), example:

```ts
link.login('mydapp').then(({session}) => {
    session.transact({action}).then((result) => {
        console.log(`Transaction broadcast! Transaction id: ${ result.processed.id }`)
    })
})
```

You can find more examples in the [examples directory](./examples) in the root of this repository.

## Transports

Transports in Anchor Link are responsible for getting signature requests to the users wallet when establishing a session or when using anchor link without logging in.

Available transports:

 Package | Description
---------| ---------------
 [proton-browser-transport](https://www.npmjs.com/package/@protonprotocol/proton-browser-transport) | Browser overlay that generates QR codes or triggers local URI handler if available

See the [`LinkTransport` documentation](https://greymass.github.io/anchor-link/interfaces/linktransport.html) for details on how to implement custom transports.

## Protocol

The Proton Link protocol uses EEP-7 identity requests to establish a channel to compatible wallets using an untrusted HTTP POST to WebSocket forwarder (see [buoy node.js](https://github.com/greymass/buoy-nodejs) and [buoy golang](https://github.com/greymass/buoy-golang)).

A session key and unique channel URL is generated by the client which is attached to the identity request and sent to the wallet (see [transports](#transports)). The wallet signs the identity proof and sends it back along with its own channel URL and session key. Subsequent signature requests can now be encrypted to a shared secret derived from the two keys and pushed directly to the wallet channel.

[📘 Protocol specification](./protocol.md)

## Developing

You need [Make](https://www.gnu.org/software/make/), [node.js](https://nodejs.org/en/) and [yarn](https://classic.yarnpkg.com/en/docs/install) installed.

Clone the repository and run `make` to checkout all dependencies and build the project. See the [Makefile](./Makefile) for other useful targets. Before submitting a pull request make sure to run `make lint`.

## Implementation Details

Proton Web SDK is a cross-device authentication and signing protocol built on top of ESR (EOSIO Signing Requests / EEP-7).

More information in the [Proton Web SDK](https://github.com/ProtonProtocol/ProtonWeb)

## License

[MIT](./LICENSE.md)

---

Made with ☕️&❤️ by [team Greymass](https://greymass.com) and [Proton](https://protonchain.com).

---
_Source: https://npm.io/package/@protonprotocol/proton-link · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
