UNPKG

@daml/hub-react

Version:

Daml React functions for Daml Hub

202 lines 11 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DamlHubLogin = exports.damlHubLogout = void 0; var react_1 = __importDefault(require("react")); var PartyToken_1 = require("../party-token/PartyToken"); var log_1 = __importDefault(require("../log")); var utils_1 = require("../utils"); var PartiesInput_1 = require("./PartiesInput"); var DABL_LEDGER_ACCESS_TOKEN = 'DABL_LEDGER_ACCESS_TOKEN'; var DAMLHUB_LEDGER_ACCESS_TOKEN = 'DAMLHUB_LEDGER_ACCESS_TOKEN'; var damlHubLogout = function () { if ((0, utils_1.detectAppDomainType)() === utils_1.DomainType.APP_DOMAIN) { (0, utils_1.deleteCookie)(DAMLHUB_LEDGER_ACCESS_TOKEN); } }; exports.damlHubLogout = damlHubLogout; /** * * DamlHubLogin component. Provides three different * login method props: `withButton`, `withToken`, or `withParties`. * * Provides a callback with credentials after a login. */ var DamlHubLogin = function (props) { return (react_1.default.createElement("div", { id: "daml-hub-login" }, react_1.default.createElement(ButtonLogin, __assign({}, props)), react_1.default.createElement(FileLogin, __assign({}, props)), react_1.default.createElement(TokenLogin, __assign({}, props)))); }; exports.DamlHubLogin = DamlHubLogin; var normalizeDisplayOpt = function (props) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; var options = props.options, withButton = props.withButton, withToken = props.withToken, withFile = props.withFile; var showToken = !!withToken || !!((_b = (_a = options === null || options === void 0 ? void 0 : options.method) === null || _a === void 0 ? void 0 : _a.token) === null || _b === void 0 ? void 0 : _b.render) || !!((_d = (_c = options === null || options === void 0 ? void 0 : options.method) === null || _c === void 0 ? void 0 : _c.token) === null || _d === void 0 ? void 0 : _d.text); var showFile = !!withFile || !!((_f = (_e = options === null || options === void 0 ? void 0 : options.method) === null || _e === void 0 ? void 0 : _e.file) === null || _f === void 0 ? void 0 : _f.render) || !!((_h = (_g = options === null || options === void 0 ? void 0 : options.method) === null || _g === void 0 ? void 0 : _g.file) === null || _h === void 0 ? void 0 : _h.text); var showButton = showToken || showFile ? !!withButton || !!((_k = (_j = options === null || options === void 0 ? void 0 : options.method) === null || _j === void 0 ? void 0 : _j.button) === null || _k === void 0 ? void 0 : _k.text) || !!((_m = (_l = options === null || options === void 0 ? void 0 : options.method) === null || _l === void 0 ? void 0 : _l.button) === null || _m === void 0 ? void 0 : _m.render) : true; return { button: showButton, token: showToken, file: showFile, }; }; var ButtonLogin = function (props) { var _a, _b, _c, _d; var showButton = normalizeDisplayOpt(props).button; var options = props.options, onLogin = props.onLogin; var text = ((_b = (_a = options === null || options === void 0 ? void 0 : options.method) === null || _a === void 0 ? void 0 : _a.button) === null || _b === void 0 ? void 0 : _b.text) || 'Log in with Daml Hub'; react_1.default.useEffect(function () { var DAMLHUB_LEDGER_ACCESS_TOKEN = (0, utils_1.getCookieValue)('DAMLHUB_LEDGER_ACCESS_TOKEN'); var DABL_LEDGER_ACCESS_TOKEN = (0, utils_1.getCookieValue)('DABL_LEDGER_ACCESS_TOKEN'); var tokenFromCookie = DAMLHUB_LEDGER_ACCESS_TOKEN || DABL_LEDGER_ACCESS_TOKEN; (0, log_1.default)('button-login:effect').info(!!tokenFromCookie ? "Found token in browser cookie" : 'No cookie found - user has not authenticated'); if (tokenFromCookie) { try { var at = new PartyToken_1.PartyToken(tokenFromCookie); onLogin && onLogin(at); } catch (error) { onLogin && onLogin(undefined, JSON.stringify(error)); } } }, [window.location]); var handleButtonLogin = function () { var _a; var damlHubCookieToken = (0, utils_1.getCookieValue)(DAMLHUB_LEDGER_ACCESS_TOKEN); var legacyCookieToken = (0, utils_1.getCookieValue)(DABL_LEDGER_ACCESS_TOKEN); var tokenFromCookie = damlHubCookieToken || legacyCookieToken; (0, log_1.default)('button-login:click-handler').info(!!tokenFromCookie ? "Found token in browser cookie" : 'No cookie found - user has not authenticated'); if (!tokenFromCookie) { if ((0, utils_1.detectAppDomainType)() === utils_1.DomainType.APP_DOMAIN) { window.location.assign("/.hub/v1/auth/login"); } else { var ledgerId = window.location.hostname.split('.')[0]; var hostname = ((_a = (0, utils_1.damlHubEnvironment)()) === null || _a === void 0 ? void 0 : _a.hostname) || 'projectdabl.com'; window.location.assign("https://login.".concat(hostname, "/auth/login?ledgerId=").concat(ledgerId)); } } else { onLogin && onLogin(new PartyToken_1.PartyToken(tokenFromCookie)); } }; if (showButton) { if ((_d = (_c = options === null || options === void 0 ? void 0 : options.method) === null || _c === void 0 ? void 0 : _c.button) === null || _d === void 0 ? void 0 : _d.render) { var comp = options.method.button.render(); return react_1.default.cloneElement(comp, { onClick: handleButtonLogin, children: __spreadArray(__spreadArray([], react_1.default.Children.toArray(comp.props.children), true), [ react_1.default.createElement("span", { key: "damlhub-login-custom-button-text" }, text), ], false), }); } else { return (react_1.default.createElement("a", { id: "log-in-with-hub", onClick: handleButtonLogin }, text)); } } else { return null; } }; var FileLogin = function (props) { var _a, _b, _c, _d; var _e = normalizeDisplayOpt(props), showFile = _e.file, showButton = _e.button; var options = props.options, onPartiesLoad = props.onPartiesLoad, partiesJson = props.partiesJson; var text = ((_b = (_a = options === null || options === void 0 ? void 0 : options.method) === null || _a === void 0 ? void 0 : _a.file) === null || _b === void 0 ? void 0 : _b.text) || (react_1.default.createElement("span", null, "Alternatively, login with ", react_1.default.createElement("code", { className: "link" }, "parties.json"), " located in the Daml Hub Identities tab:")); if (showFile && !onPartiesLoad) { (0, log_1.default)('login').warn('<DamlHubLogin> supplied with `withParties`, but not `onPartiesLoad`'); } if (showFile && onPartiesLoad) { var baseComponent = (react_1.default.createElement(react_1.default.Fragment, { key: "damlhub-login-parties-input" }, showButton && react_1.default.createElement("p", null, text), react_1.default.createElement(PartiesInput_1.PartiesInput, { partiesJson: partiesJson, onPartiesLoad: function (creds, err) { onPartiesLoad(creds, err); } }))); if ((_d = (_c = options === null || options === void 0 ? void 0 : options.method) === null || _c === void 0 ? void 0 : _c.file) === null || _d === void 0 ? void 0 : _d.render) { var comp = options.method.file.render(); return (react_1.default.createElement(react_1.default.Fragment, null, showButton && react_1.default.createElement("p", null, text), react_1.default.cloneElement(comp, { children: __spreadArray([baseComponent], react_1.default.Children.toArray(comp.props.children), true), }))); } else { return baseComponent; } } else { return null; } }; var TokenLogin = function (props) { var _a, _b, _c, _d; var showToken = normalizeDisplayOpt(props).token; var options = props.options, onLogin = props.onLogin; var _e = react_1.default.useState(''), jwtInput = _e[0], setJwtInput = _e[1]; var text = ((_b = (_a = options === null || options === void 0 ? void 0 : options.method) === null || _a === void 0 ? void 0 : _a.token) === null || _b === void 0 ? void 0 : _b.text) || 'Log in with Access Token'; var handleTokenLogin = function () { try { var at = new PartyToken_1.PartyToken(jwtInput); onLogin && onLogin(at); } catch (error) { onLogin && onLogin(undefined, JSON.stringify(error)); } }; if (showToken) { if ((_d = (_c = options === null || options === void 0 ? void 0 : options.method) === null || _c === void 0 ? void 0 : _c.token) === null || _d === void 0 ? void 0 : _d.render) { var comp = options.method.token.render(handleTokenLogin); return react_1.default.cloneElement(comp, { children: __spreadArray([ react_1.default.createElement("label", { key: "damlhub-login-token-label", htmlFor: "token" }, text, ":") ], react_1.default.Children.toArray(comp.props.children), true), }); } else { return (react_1.default.createElement("form", { id: "log-in-with-token" }, react_1.default.createElement("label", { htmlFor: "token" }, text, ":"), react_1.default.createElement("input", { type: "password", name: "token", value: jwtInput, onChange: function (e) { return setJwtInput(e.target.value); }, placeholder: "JWT Token" }), react_1.default.createElement("button", { type: "submit", onClick: handleTokenLogin }, "Submit"))); } } else { return null; } }; //# sourceMappingURL=DamlHubLogin.js.map