Skip to content

Commit 8fcebae

Browse files
austinJake Wood
authored andcommitted
fix: login bug and naming
1 parent a257f42 commit 8fcebae

7 files changed

Lines changed: 53 additions & 38 deletions

File tree

src/config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { LoginRequestEvent, NavigateRequestEvent } from "./messaging/incoming";
1+
import { LoginEvent, NavigateEvent } from "./messaging/incoming";
22

33
export interface TestBoxConfig {
44
allowFullStory?: boolean;
@@ -8,8 +8,8 @@ export interface TestBoxConfig {
88
healthCheckInterval?: number;
99
window?: Window;
1010

11-
onNavigateRequest?: (url: NavigateRequestEvent) => void;
12-
onLoginRequest?: (props: LoginRequestEvent) => void;
11+
onNavigate?: (url: NavigateEvent) => void;
12+
onLogin?: (props: LoginEvent) => void;
1313
}
1414

1515
declare global {

src/index.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,18 @@ export function startTestBox(config?: TestBoxConfig) {
1818

1919
window.__tbxConfig = config;
2020

21-
if (window.__tbxConfig.onNavigateRequest) {
22-
messageHandlers["navigate-request"] = [
23-
window.__tbxConfig.onNavigateRequest,
21+
if (window.__tbxConfig.onNavigate) {
22+
messageHandlers["navigate"] = [window.__tbxConfig.onNavigate];
23+
} else {
24+
messageHandlers["navigate"] = [
25+
(data) => {
26+
window.location.href = data.url;
27+
},
2428
];
2529
}
26-
if (window.__tbxConfig.onLoginRequest) {
27-
messageHandlers["login-request"] = [window.__tbxConfig.onLoginRequest];
30+
31+
if (window.__tbxConfig.onLogin) {
32+
messageHandlers["login"] = [window.__tbxConfig.onLogin];
2833
}
2934

3035
window.addEventListener("message", (ev) => {

src/initialize.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import {
77
INITIALIZE_FAIL,
88
INITIALIZE_SUCCESS,
99
} from "./messaging/outgoing";
10-
import { InitializeRequestEvent } from "./messaging/incoming";
10+
import { InitializeEvent } from "./messaging/incoming";
1111
import { getConfigItem } from "./config";
1212

13-
export function initializeTestBox(data: InitializeRequestEvent) {
13+
export function initializeTestBox(data: InitializeEvent) {
1414
try {
1515
sendMessageToTestBox(INITIALIZE_ACK);
1616
initializeCookies();

src/messaging/incoming.ts

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,36 @@ export const VALID_INCOMING_EVENTS = [NAVIGATE, INITIALIZE, LOGIN];
1111
// events due to a this issue in TypeScript:
1212
// https://github.com/microsoft/TypeScript/issues/33014
1313

14-
export type InitializeRequestEvent = {
14+
export type InitializeEvent = {
1515
optInFullStory: boolean;
1616
};
1717

18-
export type InitializeRequestMessage = TestBoxMessage<
18+
export type InitializeMessage = TestBoxMessage<
1919
typeof INITIALIZE,
20-
InitializeRequestEvent
20+
InitializeEvent
2121
>;
2222

23-
export type NavigateRequestEvent = {
23+
export type NavigateEvent = {
2424
url: string;
2525
};
2626

27-
export type NavigateRequestMessage = TestBoxMessage<
28-
typeof NAVIGATE,
29-
NavigateRequestEvent
30-
>;
27+
export type NavigateMessage = TestBoxMessage<typeof NAVIGATE, NavigateEvent>;
3128

32-
export type LoginRequestEvent = {
29+
export type LoginEvent = {
3330
username?: string;
3431
password?: string;
3532
totpCode?: string;
3633
};
3734

38-
export type LoginRequestMessage = TestBoxMessage<
39-
typeof LOGIN,
40-
LoginRequestEvent
41-
>;
35+
export type LoginMessage = TestBoxMessage<typeof LOGIN, LoginEvent>;
4236

4337
export type UnionedIncomingMessages =
44-
| InitializeRequestMessage
45-
| NavigateRequestMessage
46-
| LoginRequestMessage;
38+
| InitializeMessage
39+
| NavigateMessage
40+
| LoginMessage;
4741

4842
export type IncomingEventMap = {
49-
[INITIALIZE]: InitializeRequestEvent;
50-
[NAVIGATE]: NavigateRequestEvent;
51-
[LOGIN]: LoginRequestEvent;
43+
[INITIALIZE]: InitializeEvent;
44+
[NAVIGATE]: NavigateEvent;
45+
[LOGIN]: LoginEvent;
5246
};

src/messaging/outgoing.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export const LOGIN_ACK = "login-ack";
1111
export const LOGIN_SUCCESS = "login-success";
1212
export const LOGIN_FAIL = "login-fail";
1313

14+
export const NAVIGATE_ACK = "navigate-ack";
15+
1416
type HealthCheckEvent = {
1517
url: string;
1618
};
@@ -31,4 +33,5 @@ export interface TestBoxOutgoingEvents {
3133
[LOGIN_ACK]: undefined;
3234
[LOGIN_SUCCESS]: undefined;
3335
[LOGIN_FAIL]: undefined;
36+
[NAVIGATE_ACK]: undefined;
3437
}

src/router.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,18 @@ import {
99
} from "./messaging/incoming";
1010
import { info, warn } from "./utils/logging";
1111
import { autoLogin } from "./utils/login";
12+
import { sendMessageToTestBox } from "./messaging";
13+
import { INITIALIZE_ACK, LOGIN_ACK, NAVIGATE_ACK } from "./messaging/outgoing";
1214

1315
export type TestBoxEventRouter = {
1416
[K in keyof IncomingEventMap]?: ((data: IncomingEventMap[K]) => void)[];
1517
};
1618

1719
// Note to future selves: you cannot destructure testbox here, the
1820
// type narrowing does not work correctly if you do so here.
21+
let loggingIn = false;
22+
let navigateUrl = "";
23+
1924
export function routeMessage(
2025
{ testbox }: UnionedIncomingMessages,
2126
router: TestBoxEventRouter
@@ -24,15 +29,27 @@ export function routeMessage(
2429
if (VALID_INCOMING_EVENTS.includes(event)) {
2530
switch (event) {
2631
case INITIALIZE:
32+
sendMessageToTestBox(INITIALIZE_ACK);
2733
initializeTestBox(data);
2834
break;
2935
case NAVIGATE:
30-
window.location.href = data.url;
36+
sendMessageToTestBox(NAVIGATE_ACK);
37+
if (loggingIn) {
38+
navigateUrl = data.url;
39+
} else {
40+
const navigateFunc = router["navigate"][0];
41+
navigateFunc(data);
42+
}
3143
break;
3244
case LOGIN:
45+
loggingIn = true;
46+
sendMessageToTestBox(LOGIN_ACK);
3347
autoLogin(data, router).then((nextUrl) => {
34-
if (nextUrl && nextUrl !== window.location.href) {
35-
window.location.href = nextUrl;
48+
loggingIn = false;
49+
const goTo = navigateUrl || nextUrl;
50+
if (goTo && goTo !== window.location.href) {
51+
const navigateFunc = router["navigate"][0];
52+
navigateFunc({ url: goTo });
3653
}
3754
});
3855
break;

src/utils/login.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { sendMessageToTestBox } from "../messaging";
2-
import { LOGIN_ACK, LOGIN_FAIL, LOGIN_SUCCESS } from "../messaging/outgoing";
2+
import { LOGIN_FAIL, LOGIN_SUCCESS } from "../messaging/outgoing";
33

4-
export let loggingIn = false;
54
export async function autoLogin(data, router) {
6-
loggingIn = true;
7-
sendMessageToTestBox(LOGIN_ACK);
85
let nextUrl;
96
try {
10-
const funcs = router["login-request"];
7+
const funcs = router["login"];
118
if (!funcs) {
129
console.log("No login callback exists!");
1310
sendMessageToTestBox(LOGIN_FAIL);
@@ -18,7 +15,6 @@ export async function autoLogin(data, router) {
1815
console.log(e);
1916
nextUrl = false;
2017
}
21-
loggingIn = false;
2218

2319
if (nextUrl === false) {
2420
sendMessageToTestBox(LOGIN_FAIL);

0 commit comments

Comments
 (0)