{"version":3,"file":"Auth.js","sources":["../../src/Auth.ts"],"sourcesContent":["import { HTTP } from \"./HTTP\";\nimport { getItem, removeItem, setItem } from \"./Storage\";\nimport { createNanoEvents } from './core/nanoevents';\n\nexport interface AuthSettings {\n    path: string;\n    key: string;\n}\n\nexport interface PopupSettings {\n    prefix: string;\n    width: number;\n    height: number;\n}\n\nexport interface AuthData {\n    user: any;\n    token: string;\n}\n\nexport class Auth {\n    settings: AuthSettings = {\n        path: \"/auth\",\n        key: \"colyseus-auth-token\",\n    };\n\n    #_initialized = false;\n    #_initializationPromise: Promise<void>;\n    #_signInWindow = undefined;\n    #_events = createNanoEvents();\n\n    constructor(protected http: HTTP) {\n        getItem(this.settings.key, (token) => this.token = token);\n    }\n\n    public set token(token: string) {\n        this.http.authToken = token;\n    }\n\n    public get token(): string {\n        return this.http.authToken;\n    }\n\n    public onChange(callback: (response: AuthData) => void) {\n        const unbindChange = this.#_events.on(\"change\", callback);\n        if (!this.#_initialized) {\n            this.#_initializationPromise = new Promise<void>((resolve, reject) => {\n                this.getUserData().then((userData) => {\n                    this.emitChange({ ...userData, token: this.token });\n\n                }).catch((e) => {\n                    // user is not logged in, or service is down\n                    this.emitChange({ user: null, token: undefined });\n\n                }).finally(() => {\n                    resolve();\n                });\n            });\n        }\n        this.#_initialized = true;\n        return unbindChange;\n    }\n\n    public async getUserData() {\n        if (this.token) {\n            return (await this.http.get(`${this.settings.path}/userdata`)).data;\n        } else {\n            throw new Error(\"missing auth.token\");\n        }\n    }\n\n    public async registerWithEmailAndPassword(email: string, password: string, options?: any) {\n        const data = (await this.http.post(`${this.settings.path}/register`, {\n            body: { email, password, options, },\n        })).data;\n\n        this.emitChange(data);\n\n        return data;\n    }\n\n    public async signInWithEmailAndPassword(email: string, password: string) {\n        const data = (await this.http.post(`${this.settings.path}/login`, {\n            body: { email, password, },\n        })).data;\n\n        this.emitChange(data);\n\n        return data;\n    }\n\n    public async signInAnonymously(options?: any) {\n        const data = (await this.http.post(`${this.settings.path}/anonymous`, {\n            body: { options, }\n        })).data;\n\n        this.emitChange(data);\n\n        return data;\n    }\n\n    public async sendPasswordResetEmail(email: string) {\n        return (await this.http.post(`${this.settings.path}/forgot-password`, {\n            body: { email, }\n        })).data;\n    }\n\n    public async signInWithProvider(providerName: string, settings: Partial<PopupSettings> = {}) {\n        return new Promise((resolve, reject) => {\n            const w = settings.width || 480;\n            const h = settings.height || 768;\n\n            // forward existing token for upgrading\n            const upgradingToken = this.token ? `?token=${this.token}` : \"\";\n\n            // Capitalize first letter of providerName\n            const title = `Login with ${(providerName[0].toUpperCase() + providerName.substring(1))}`;\n            const url = this.http['client']['getHttpEndpoint'](`${(settings.prefix || `${this.settings.path}/provider`)}/${providerName}${upgradingToken}`);\n\n            const left = (screen.width / 2) - (w / 2);\n            const top = (screen.height / 2) - (h / 2);\n\n            this.#_signInWindow = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);\n\n            const onMessage = (event: MessageEvent) => {\n                // TODO: it is a good idea to check if event.origin can be trusted!\n                // if (event.origin.indexOf(window.location.hostname) === -1) { return; }\n\n                // require 'user' and 'token' inside received data.\n                if (event.data.user === undefined && event.data.token === undefined) { return; }\n\n                clearInterval(rejectionChecker);\n                this.#_signInWindow.close();\n                this.#_signInWindow = undefined;\n\n                window.removeEventListener(\"message\", onMessage);\n\n                if (event.data.error !== undefined) {\n                    reject(event.data.error);\n\n                } else {\n                    resolve(event.data);\n                    this.emitChange(event.data);\n                }\n            }\n\n            const rejectionChecker = setInterval(() => {\n                if (!this.#_signInWindow || this.#_signInWindow.closed) {\n                    this.#_signInWindow = undefined;\n                    reject(\"cancelled\");\n                    window.removeEventListener(\"message\", onMessage);\n                }\n            }, 200);\n\n            window.addEventListener(\"message\", onMessage);\n        });\n    }\n\n    public async signOut() {\n        this.emitChange({ user: null, token: null });\n    }\n\n    private emitChange(authData: Partial<AuthData>) {\n        if (authData.token !== undefined) {\n            this.token = authData.token;\n\n            if (authData.token === null) {\n                removeItem(this.settings.key);\n\n            } else {\n                // store key in localStorage\n                setItem(this.settings.key, authData.token);\n            }\n        }\n\n        this.#_events.emit(\"change\", authData);\n    }\n\n}\n"],"names":["createNanoEvents","getItem","__classPrivateFieldGet","__classPrivateFieldSet","removeItem","setItem"],"mappings":";;;;;;;;MAoBa,IAAI,CAAA;AAWb,IAAA,WAAA,CAAsB,IAAU,EAAA;QAAV,IAAI,CAAA,IAAA,GAAJ,IAAI;AAV1B,QAAA,IAAA,CAAA,QAAQ,GAAiB;AACrB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,qBAAqB;SAC7B;AAED,QAAA,kBAAA,CAAA,GAAA,CAAA,IAAA,EAAgB,KAAK,CAAC;QACtB,4BAAuC,CAAA,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACvC,QAAA,mBAAA,CAAA,GAAA,CAAA,IAAA,EAAiB,SAAS,CAAC;QAC3B,aAAW,CAAA,GAAA,CAAA,IAAA,EAAAA,2BAAgB,EAAE,CAAC;AAG1B,QAAAC,eAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;IAG7D,IAAW,KAAK,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK;;AAG/B,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;;AAGvB,IAAA,QAAQ,CAAC,QAAsC,EAAA;AAClD,QAAA,MAAM,YAAY,GAAGC,4BAAA,CAAA,IAAI,EAAS,aAAA,EAAA,GAAA,CAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACzD,QAAA,IAAI,CAACA,4BAAA,CAAA,IAAI,EAAA,kBAAA,EAAA,GAAA,CAAc,EAAE;YACrBC,4BAAA,CAAA,IAAI,EAA2B,4BAAA,EAAA,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;gBACjE,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;oBACjC,IAAI,CAAC,UAAU,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,QAAQ,CAAA,EAAA,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAA,CAAA,CAAG;AAEvD,iBAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI;;AAEX,oBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAErD,iBAAC,CAAC,CAAC,OAAO,CAAC,MAAK;AACZ,oBAAA,OAAO,EAAE;AACb,iBAAC,CAAC;aACL,CAAC,MAAA;;AAEN,QAAAA,4BAAA,CAAA,IAAI,EAAA,kBAAA,EAAiB,IAAI,EAAA,GAAA,CAAA;AACzB,QAAA,OAAO,YAAY;;IAGV,WAAW,GAAA;;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,SAAA,CAAW,CAAC,EAAE,IAAI;;iBAChE;AACH,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;;SAE5C,CAAA;AAAA;AAEY,IAAA,4BAA4B,CAAC,KAAa,EAAE,QAAgB,EAAE,OAAa,EAAA;;AACpF,YAAA,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE;AACjE,gBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG;aACtC,CAAC,EAAE,IAAI;AAER,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAErB,YAAA,OAAO,IAAI;SACd,CAAA;AAAA;IAEY,0BAA0B,CAAC,KAAa,EAAE,QAAgB,EAAA;;AACnE,YAAA,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE;AAC9D,gBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG;aAC7B,CAAC,EAAE,IAAI;AAER,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAErB,YAAA,OAAO,IAAI;SACd,CAAA;AAAA;AAEY,IAAA,iBAAiB,CAAC,OAAa,EAAA;;AACxC,YAAA,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE;gBAClE,IAAI,EAAE,EAAE,OAAO;aAClB,CAAC,EAAE,IAAI;AAER,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAErB,YAAA,OAAO,IAAI;SACd,CAAA;AAAA;AAEY,IAAA,sBAAsB,CAAC,KAAa,EAAA;;AAC7C,YAAA,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE;gBAClE,IAAI,EAAE,EAAE,KAAK;aAChB,CAAC,EAAE,IAAI;SACX,CAAA;AAAA;IAEY,kBAAkB,CAAA,cAAA,EAAA;mEAAC,YAAoB,EAAE,WAAmC,EAAE,EAAA;YACvF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,GAAG;AAC/B,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG;;AAGhC,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,CAAU,OAAA,EAAA,IAAI,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE;;gBAG/D,MAAM,KAAK,GAAG,CAAc,WAAA,GAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AACzF,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAA,GAAI,QAAQ,CAAC,MAAM,IAAI,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA,SAAA,CAAW,EAAC,CAAA,EAAI,YAAY,CAAA,EAAG,cAAc,CAAA,CAAE,CAAC;AAE/I,gBAAA,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAA,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEzCA,4BAAA,CAAA,IAAI,EAAkB,mBAAA,EAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,qHAAqH,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,EAAA,GAAA,CAAA;AAE9N,gBAAA,MAAM,SAAS,GAAG,CAAC,KAAmB,KAAI;;;;AAKtC,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;wBAAE;;oBAEvE,aAAa,CAAC,gBAAgB,CAAC;AAC/B,oBAAAD,4BAAA,CAAA,IAAI,EAAA,mBAAA,EAAA,GAAA,CAAe,CAAC,KAAK,EAAE;AAC3B,oBAAAC,4BAAA,CAAA,IAAI,EAAA,mBAAA,EAAkB,SAAS,EAAA,GAAA,CAAA;AAE/B,oBAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;oBAEhD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;AAChC,wBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;;yBAErB;AACH,wBAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AACnB,wBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEnC,iBAAC;AAED,gBAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;oBACtC,IAAI,CAACD,4BAAA,CAAA,IAAI,EAAe,mBAAA,EAAA,GAAA,CAAA,IAAIA,4BAAA,CAAA,IAAI,EAAe,mBAAA,EAAA,GAAA,CAAA,CAAC,MAAM,EAAE;AACpD,wBAAAC,4BAAA,CAAA,IAAI,EAAA,mBAAA,EAAkB,SAAS,EAAA,GAAA,CAAA;wBAC/B,MAAM,CAAC,WAAW,CAAC;AACnB,wBAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;;iBAEvD,EAAE,GAAG,CAAC;AAEP,gBAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AACjD,aAAC,CAAC;SACL,CAAA;AAAA;IAEY,OAAO,GAAA;;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC/C,CAAA;AAAA;AAEO,IAAA,UAAU,CAAC,QAA2B,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;AAE3B,YAAA,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE;AACzB,gBAAAC,kBAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;;iBAE1B;;gBAEHC,eAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;;;QAIlDH,4BAAA,CAAA,IAAI,qBAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAG7C;;;;;"}