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
JavaScript
;
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;