Skip to content

Commit

Permalink
Resolve popup close with token payload (#20)
Browse files Browse the repository at this point in the history
* Resolve popup close with token payload
  • Loading branch information
chrisfisher committed Oct 4, 2022
1 parent 058fce5 commit 8596c03
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 51 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@authsignal/browser",
"type": "module",
"version": "0.0.15",
"version": "0.0.16",
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
"types": "dist/index.d.ts",
Expand Down
57 changes: 23 additions & 34 deletions src/authsignal.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import {v4 as uuidv4} from "uuid";

import {setCookie, getCookieDomain, getCookie} from "./helpers";
import {AuthsignalOptions, AuthsignalWindowMessage, MfaInput, ChallengeInput, LaunchOptions} from "./types";
import {
AuthsignalOptions,
AuthsignalWindowMessage,
AuthsignalWindowMessageData,
LaunchOptions,
TokenPayload,
} from "./types";
import {PopupHandler} from "./popup-handler";

const DEFAULT_COOKIE_NAME = "__as_aid";
Expand All @@ -12,6 +18,8 @@ export class Authsignal {
anonymousIdCookieName = "";
publishableKey = "";

private _token: string | undefined = undefined;

constructor({publishableKey, cookieDomain, cookieName}: AuthsignalOptions) {
this.publishableKey = publishableKey;
this.cookieDomain = cookieDomain || getCookieDomain();
Expand All @@ -34,32 +42,8 @@ export class Authsignal {
}
}

/**
* @deprecated Use launch() instead.
*/
mfa(challenge: {mode?: "redirect"} & MfaInput): undefined;
mfa(challenge: {mode: "popup"} & MfaInput): Promise<boolean>;
mfa({mode, url}: MfaInput) {
if (mode === "popup") {
return this.launch(url, {mode});
}
return this.launch(url, {mode});
}

/**
* @deprecated Use launch() instead.
*/
challenge(challenge: {mode?: "redirect"} & ChallengeInput): undefined;
challenge(challenge: {mode: "popup"} & ChallengeInput): Promise<boolean>;
challenge({mode, challengeUrl: url}: ChallengeInput) {
if (mode === "popup") {
return this.launch(url, {mode});
}
return this.launch(url, {mode});
}

launch(url: string, options?: {mode?: "redirect"} & LaunchOptions): undefined;
launch(url: string, options?: {mode: "popup"} & LaunchOptions): Promise<boolean>;
launch(url: string, options?: {mode: "popup"} & LaunchOptions): Promise<TokenPayload>;
launch(url: string, options?: LaunchOptions) {
const mode = options?.mode || "redirect";

Expand All @@ -72,24 +56,29 @@ export class Authsignal {

Popup.show({url: popupUrl});

return new Promise<boolean>((resolve) => {
return new Promise<TokenPayload>((resolve) => {
const onMessage = (event: MessageEvent) => {
if (event.data === AuthsignalWindowMessage.AUTHSIGNAL_CLOSE_POPUP) {
let data: AuthsignalWindowMessageData | null = null;

try {
data = JSON.parse(event.data) as AuthsignalWindowMessageData;
} catch {
// Ignore if the event data is not valid JSON
}

if (data?.event === AuthsignalWindowMessage.AUTHSIGNAL_CLOSE_POPUP) {
this._token = data.token;

Popup.close();
}
};

Popup.on("hide", () => {
resolve(true);
resolve({token: this._token});
});

window.addEventListener("message", onMessage, false);
});
}
}
}

/**
* @deprecated Use Authsignal
*/
export class AuthsignalBrowser extends Authsignal {}
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export {AuthsignalBrowser, Authsignal} from "./authsignal";
export {Authsignal} from "./authsignal";
export * from "./types";
19 changes: 9 additions & 10 deletions src/types.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,3 @@
export type ChallengeInput = {
challengeUrl: string;
mode?: "popup" | "redirect";
};

export type MfaInput = {
url: string;
mode?: "popup" | "redirect";
};

export type LaunchOptions = {
/**
* How the Authsignal Prebuilt MFA page should launch.
Expand Down Expand Up @@ -42,3 +32,12 @@ export type AuthsignalOptions = {
export enum AuthsignalWindowMessage {
AUTHSIGNAL_CLOSE_POPUP = "AUTHSIGNAL_CLOSE_POPUP",
}

export type AuthsignalWindowMessageData = {
event: AuthsignalWindowMessage;
token: string;
};

export type TokenPayload = {
token?: string;
};
5 changes: 0 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,6 @@
estree-walker "^2.0.1"
picomatch "^2.2.2"

"@types/basiclightbox@^5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@types/basiclightbox/-/basiclightbox-5.0.1.tgz#59f3a38015246c9c0e87dfc4aaddd49ac4b79ad8"
integrity sha512-77kVrFQyD76bD6uMlYiAAUjZkbO0YrOWT/fYYxHzFtR+CQ32jVhwClCkIbkQJ81uYFaBgJZhyzxKIrd8s85B3A==

"@types/estree@*":
version "0.0.51"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
Expand Down

0 comments on commit 8596c03

Please sign in to comment.