Skip to content

NPM Modules for proving and verifying using TLSNotary in the browser

Notifications You must be signed in to change notification settings

tlsnotary/tlsn-js

Repository files navigation

MIT licensed Apache licensed

tlsn-js

NPM Modules for proving and verifying using TLSNotary in the browser.

The prover requires a notary-server and a websocket proxy.

Important

The primary purpose of tlsn-js is to support the development of the TLSNotary browser extension.
Please do not treat this as a public API (yet).

Important

tlsn-js is developed for the usage of TLSNotary in the Browser. This module does not work in nodejs.

License

This repository is licensed under either of

at your option.

Examples

tlsn-js can be used in many different modes, depending on your use case.

The ./demo folder contains three demos of tlsn-js:

  • react-ts-webpack: create an attestation with a Notary and render the result.
  • interactive-demo: prove data interactively to a Verifier.
  • web-to-web-p2p: prove data between two peers, in the browser.

Running a local websocket proxy

In the demos, we attest data from the https://swapi.dev website. Because the browser does not allow for TCP connections, you need to set up a websocket proxy:

  1. Install websocat:

    Tool Command
    cargo cargo install websocat
    brew brew install websocat
    source https://github.com/vi/websocat
  2. Run a websocket proxy for https://swapi.dev:

websocat --binary -v ws-l:0.0.0.0:55688 tcp:swapi.dev:443

Install as NPM Package

npm install tlsn-js

Development

# make sure you have rust installed
# https://www.rust-lang.org/tools/install
npm install

# this serves a page that will execute the example code at http://localhost:3001
npm run dev

Build for NPM

npm install
npm run build

Adding a new test

  1. Create a new new-test.spec.ts file in the test/ directory.
  2. Add your spec file to the entry object in webpack.web.dev.config.js.
  3. Add a new div block to test/test.ejs like this: <div>Testing "new-test":<div id="new-test"></div></div>. The div id must be the same as the filename.