UNPKG

ic-auth

Version:

A simple to use, modular package for integrating Internet Computer authentication providers into your app.

65 lines (64 loc) 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InternetIdentity = void 0; const react_1 = require("react"); const principal_1 = require("@dfinity/principal"); const auth_client_1 = require("@dfinity/auth-client"); const agent_1 = require("@dfinity/agent"); const helloIDL = require("../interfaces/hello"); const dfinity_png_1 = require("../assets/logos/dfinity.png"); require("../assets/index.css"); function InternetIdentity(props) { const changeProvider = props.changeProvider; const [plugButtonText, setPlugButtonText] = (0, react_1.useState)("Identity"); const [loggedIn, setLoggedIn] = (0, react_1.useState)(false); const buttonState = (0, react_1.useRef)(null); const plugStatus = (0, react_1.useRef)(null); const manageLogin = async () => { let identity; let actor; const authClient = await auth_client_1.AuthClient.create(); await authClient.login({ identityProvider: "https://identity.ic0.app", onSuccess: async () => { identity = await authClient.getIdentity(); const theUserPrincipal = principal_1.Principal.from(identity.getPrincipal()).toText(); changeProvider(theUserPrincipal); plugStatus.current.style.backgroundColor = "#42ff0f"; setPlugButtonText("Connected!"); setLoggedIn(true); buttonState.current.disabled = true; actor = await createInternetIdentityActor(identity); try { const result = await actor.hello_world(); console.log(result); } catch (error) { console.log(error); return; } }, onError: async (error) => { console.log("Login Failed:\n\n" + error); return "Error"; }, }); }; const createInternetIdentityActor = async (user) => { let actor; const identity = user; const host = "https://ic0.app"; const idlFactory = helloIDL.idlFactory; actor = await agent_1.Actor.createActor(idlFactory, { agent: new agent_1.HttpAgent({ identity, host }), canisterId: "oyjva-2yaaa-aaaam-qbaya-cai" }); return actor; }; return (react_1.default.createElement("div", { className: "walletContainer" }, react_1.default.createElement("button", { ref: buttonState, onClick: !loggedIn ? manageLogin : undefined, id: 'plugMenu' }, react_1.default.createElement("img", { src: dfinity_png_1.default }), react_1.default.createElement("p", null, plugButtonText), react_1.default.createElement("div", { ref: plugStatus, className: 'statusBubble', id: 'statusBubble' })))); } exports.InternetIdentity = InternetIdentity;