@daml/hub-react
Version:
Daml React functions for Daml Hub
202 lines • 11 kB
JavaScript
;
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