@arc-publishing/sdk-identity
Version:
JS Identity SDK for working with Identity API
85 lines • 4.31 kB
JavaScript
import { __assign, __awaiter, __generator } from "tslib";
import { headers as defaultHeaders, logPrefix } from './constants';
import Identity from './identity';
import { isUserIdentity } from './userIdentity';
import JSONResponseHandler from '../serviceHelpers/JSONResponseHandler';
export function isOIDCToken(object) {
return object.access_token !== undefined;
}
export default function signInWithOIDCPKCE(_a) {
var client_id = _a.client_id, code_verifier = _a.code_verifier, redirect_uri = _a.redirect_uri, code = _a.code;
return __awaiter(this, void 0, void 0, function () {
var headers, formData, response, identityTokens, userIdentity, err_1;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
headers = __assign({}, defaultHeaders);
if (!(Identity.userIdentity &&
Identity.userIdentity.accessToken &&
Identity.userIdentity.refreshToken)) return [3, 2];
return [4, Identity.heartbeat()];
case 1:
_b.sent();
headers['Authorization'] = "Bearer ".concat(Identity.userIdentity.accessToken);
_b.label = 2;
case 2:
formData = new FormData();
formData.append('grant_type', 'authorization_code');
formData.append('client_id', client_id);
formData.append('code_verifier', code_verifier);
formData.append('redirect_uri', redirect_uri);
formData.append('code', code);
_b.label = 3;
case 3:
_b.trys.push([3, 6, , 7]);
return [4, fetch("".concat(Identity.apiOrigin, "/identity/public/v2/oidc/provider/token"), {
method: 'POST',
headers: new Headers(),
body: formData
}).then(JSONResponseHandler)];
case 4:
response = _b.sent();
if (isOIDCToken(response)) {
Identity.userIdentity = {
accessToken: response.access_token,
refreshToken: response.refresh_token,
idToken: response.id_token,
expiresIn: response.expires_in
};
window.postMessage({ type: 'ARC_LOGIN_SUCCESS', grantType: 'OIDC' }, '*');
}
else {
throw response;
}
return [4, fetch("".concat(Identity.apiOrigin, "/identity/public/v1/auth/token"), {
method: 'POST',
headers: headers,
body: JSON.stringify({
token: response.refresh_token,
grantType: 'refresh-token'
})
}).then(JSONResponseHandler)];
case 5:
identityTokens = _b.sent();
if (isUserIdentity(identityTokens)) {
userIdentity = __assign(__assign({}, Identity.userIdentity), { uuid: identityTokens.uuid, accessToken: identityTokens.accessToken, refreshToken: identityTokens.refreshToken || Identity.userIdentity.refreshToken });
Identity.userIdentity = userIdentity;
return [2, Identity.userIdentity];
}
else {
if (identityTokens.code) {
console.warn("".concat(logPrefix, " code:\"").concat(identityTokens.code, "\", message:\"").concat(identityTokens.message, "\""));
}
Identity.clearSession();
throw identityTokens;
}
return [3, 7];
case 6:
err_1 = _b.sent();
throw err_1;
case 7: return [2];
}
});
});
}
//# sourceMappingURL=signInWithOIDCPKCE.js.map