Socket
Book a DemoInstallSign in
Socket

parse-siwe

Package Overview
Dependencies
Maintainers
0
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

parse-siwe

Standalone, high-performance, validating 'ERC-4361: Sign in with Ethereum' Parser

latest
Source
npmnpm
Version
2.0.0
Version published
Maintainers
0
Created
Source

parse-siwe - a "Sign in with Ethereum" Parser

ERC-4361: Sign-In with Ethereum establishes a standard for using an Ethereum account to sign into services that support the standard. ERC-4361 defines a message format for this purpose and any application implementing the standard will need to parse that message, validating each of the line items defined in it. parse-siwe is such a parser. It is designed to be simple to use and simple to integrate into either Node.js or web page applications.

Some highlights of its features:

  • it is stand alone - it has no external dependencies
  • well-tested
  • URI validation - includes a complete and well-tested URI parser
  • ERC-55 options
    • validation of Ethereum address ERC-55 encoding
    • convert the Ethereum address to ERC-55 encoding
    • ignore ERC-55 encoding
  • date time validation
  • correct handling of statement, request ID and resources
    • these optional items can be empty as well as missing or present
  • good error reporting (Well, pretty good. Usually, but not always, points out the offending message line.)
  • can be used in Node.js or web page application

Node.js Usage

import { parseSiweMessage } from 'parse-siwe';

const msg = `example.com:80 wants you to sign in with your Ethereum account:
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

Valid statement

URI: https://example.com/login
Version: 1
Chain ID: 2
Nonce: 32891756
Issued At: 2021-09-30T16:25:24Z
Request ID: someRequestId
Resources:
- ftp://myftpsite.com/
- https://example.com/mypage`;

try {
  const obj = parseSiweMessage(msg, 'validate');
  console.log('output message object');
  console.dir(obj);
} catch (e) {
  console.log(`parsing error: ${e.message}`);
}

parse-siwe exports the following functions:

parseSiweMessage()
siweObjectToString()
isUri()
keccak256()
isERC55()
toERC5()

./examples/node-app.js provides a more complete example of its usage.

Web Page Usage

src/parse-siwe-cat.js and its minimized version, src/parse-siwe-min.js, when scripted into a web page define the object _ps whose members are all of the exported functions. It is implemented as a self-executing function so that only the variable _ps is exposed to the global namespace.

_ps.parseSiweMessage()
_ps.siweObjectToString()
_ps.isUri()
_ps.keccak256()
_ps.isERC55()
_ps.toERC55()
_ps.noConflict()

./examples/web.html demonstrates all of these functions in a simple web page.

In the unlikely event that you need the variable _ps for some other purpose, we follow the jQuery.noConflict() convention. This implementation may not be as sophisticated as jQuery, however, noConflict() will remove _ps from the global namespace and return a reference to the parse-siwe object. For example,

$(document).ready(() => {
  $$$ = _ps.noConflict();
  _ps = {};
  /*
   * From here on $$$ references the parse-siwe object and _ps can be
   * used for whatever value or object your application requires.
  */
});

Documentation

The documentation is in the code as JSDoc comments. To generate the documentation use

npm run jsdoc

The documentation will be at out/index.html. Or view it online here.

License

The MIT License

Keywords

siwe

FAQs

Package last updated on 07 Jan 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts