0.0.36 • Published 6 months ago

use-tokenpass v0.0.36

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

use-tokenpass

Hook for using TokenPass in react apps. Authenticates users via local TokenPass instance.

bsv-wasm dependency

Depending on your setup, it may be necessary to make some changes to your webpack config to get bsv-wasm to work corretly with your build process for the browser. The following is an example of how to replace the path module with path-browserify and bsv-wasm with bsv-wasm-web using the webpack-plugin-replace-npm plugin in a next.js project, but the same applies to any webpack project.

Install additional dev dependencies:

yarn add replace-module-webpack-plugin bsv-wasm-web --dev

Then add the plugin to your next.config.js:

const WebpackPluginReplaceNpm = require("replace-module-webpack-plugin");

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  experimental: {
    fallbackNodePolyfills: false,
  },
  webpack: (config, { isServer }) => {
    if (!isServer) {
      config.resolve.fallback = {
        dns: false,
        fs: false,
        module: false,
        crypto: false,
        os: false,
        stream: false,
        http: false,
        https: false,
        net: false,
      };
    }

    config.plugins = [
      ...config.plugins,
      new WebpackPluginReplaceNpm({
        rules: [
          {
            originModule: "path",
            replaceModule: "path-browserify",
          },
          {
            originModule: "bsv-wasm",
            replaceModule: "bsv-wasm-web",
          },
        ],
      }),
    ];

    return config;
  },
};

module.exports = nextConfig;

You may also need to add the "use client" directive to the top of any pages using the context provider:

"use client";

...

const { auth } = useTokenPass();

...

Usage

Import the useTokenPass hook

import { useTokenPass } from "use-tokenpass";

Add to your AppContext:

import React, { ReactNode } from "react";
import { Options, TokenPassProvider } from "./tokenpass";

interface Props {
  children: ReactNode;
}

const AppContext: React.FC<Props> = ({ children }) => {
  // tokenpass profiver config
  const tokenPassConfig = {
    host: "http://localhost:21000",
    loginMode: "auto",
  } as Options;

  return (
    <TokenPassProvider options={tokenPassConfig}>{children}</TokenPassProvider>
  );
};

export default AppContext;

Use in your component.

import { useTokenPass } from "use-tokenpass";

const { auth } = useTokenPass();

useEffect(() => {
  if (auth) {
    const { address, error, errorURL } = auth;

    if (error) {
      window.location.href = errorURL;
    } else {
      console.log({ address });
    }
  }
}, [auth]);

The auth object

Weather authenticated with TokenPass or not the auth object will be set upon calling the hook.

{
  address: string;
  message: string;
  sig: string;
  ts: string;
  error?: string;
  errorURL?: string;
}

useTokenPass also provides functions for getting/setting the user's profile, and logging out.

type ContextValue = {
    auth: Auth | undefined;
    getProfile: () => Promise<void>;
    saveProfile: (profile: Profile) => Promise<void>;
    profile: Profile | undefined;
    logout: () => Promise<boolean>;
};
0.0.30

6 months ago

0.0.31

6 months ago

0.0.32

6 months ago

0.0.33

6 months ago

0.0.34

6 months ago

0.0.35

6 months ago

0.0.36

6 months ago

0.0.28

6 months ago

0.0.29

6 months ago

0.0.27

9 months ago

0.0.26

9 months ago

0.0.25

9 months ago

0.0.23

9 months ago

0.0.22

9 months ago

0.0.21

9 months ago

0.0.20

9 months ago

0.0.19

9 months ago

0.0.18

9 months ago

0.0.17

9 months ago

0.0.16

9 months ago

0.0.15

9 months ago

0.0.14

9 months ago

0.0.13

9 months ago

0.0.12

9 months ago

0.0.11

9 months ago

0.0.10

9 months ago

0.0.9

9 months ago

0.0.8

9 months ago

0.0.7

9 months ago

0.0.6

9 months ago

0.0.5

9 months ago

0.0.4

9 months ago

0.0.3

9 months ago

0.0.2

9 months ago

0.0.1

9 months ago