sfLoginForm = function(loginHost, configurationOptions) {
const cleanConfigurationOptions = Object.assign({
label: `Sign in`
}, configurationOptions || {});
const {label} = cleanConfigurationOptions;
const form = html `<form><button name="button">${label}</button></form>`;
const signin = function() {
const targetAddress = `${loginHost}/success`;
return new Promise((resolve, reject) => {
const popup = window.open(targetAddress, '_blank');
const message = (evt) => {
evt.preventDefault();
console.log('postmessage captured', evt.origin);
if (evt.origin === loginHost) {
const sfoauth = evt.data.sfoauth;
const conn = new jsforce.Connection({
accessToken: sfoauth.access_token,
instanceUrl: sfoauth.instance_url
});
popup.close();
removeEventListener('message', message);
resolve(conn);
}
};
addEventListener('message', message);
});
}
form.button.onclick = async event => {
event.preventDefault();
try {
const sfoauth = await signin();
form.value = sfoauth;
form.button.innerText = `signed in`;
} catch (err) {
form.value = null;
}
form.dispatchEvent(new CustomEvent('input'));
};
return form;
}