@e280/authlocal
Version:
User-sovereign login system for everybody
36 lines (28 loc) • 704 B
text/typescript
import {Messenger, WindowConduit} from "@e280/renraku"
import {makeAppFns} from "./app-fns.js"
import {Session} from "../concepts/session/types.js"
//
// this facilitates postMessages,
// and is installed on the consumer app side
//
export function setupInApp(
appWindow: Window,
popupWindow: WindowProxy,
popupOrigin: string,
login: (session: Session | null) => Promise<void>,
) {
const conduit = new WindowConduit({
localWindow: appWindow,
targetWindow: popupWindow,
targetOrigin: popupOrigin,
allow: e => e.origin === popupOrigin,
})
new Messenger({
conduit,
timeout: Infinity,
rpc: async() => makeAppFns(login),
})
return {
dispose: () => conduit.dispose(),
}
}