{"version":3,"file":"Auth.mjs","sources":["../../src/Auth.ts"],"sourcesContent":["const Fly = require(\"flyio/dist/npm/wx\");\n\nconst http = new Fly();\n\nimport { getItem, setItem, removeItem } from \"./Storage\";\n\nconst TOKEN_STORAGE = \"colyseus-auth-token\";\n\nexport enum Platform {\n    ios = \"ios\",\n    android = \"android\",\n}\n\nexport interface Device {\n    id: string;\n    platform: Platform;\n}\n\nexport interface IStatus {\n    status: boolean;\n}\n\nexport interface IUser {\n    _id: string;\n    username: string;\n    displayName: string;\n    avatarUrl: string;\n\n    isAnonymous: boolean;\n    email: string;\n\n    lang: string;\n    location: string;\n    timezone: string;\n    metadata: any;\n\n    devices: Device[];\n\n    facebookId: string;\n    twitterId: string;\n    googleId: string;\n    gameCenterId: string;\n    steamId: string;\n\n    friendIds: string[];\n    blockedUserIds: string[];\n\n    createdAt: Date;\n    updatedAt: Date;\n}\n\nexport class Auth implements IUser {\n    _id: string = undefined;\n    username: string = undefined;\n    displayName: string = undefined;\n    avatarUrl: string = undefined;\n\n    isAnonymous: boolean = undefined;\n    email: string = undefined;\n\n    lang: string = undefined;\n    location: string = undefined;\n    timezone: string = undefined;\n    metadata: any = undefined;\n\n    devices: Device[] = undefined;\n\n    facebookId: string = undefined;\n    twitterId: string = undefined;\n    googleId: string = undefined;\n    gameCenterId: string = undefined;\n    steamId: string = undefined;\n\n    friendIds: string[] = undefined;\n    blockedUserIds: string[] = undefined;\n\n    createdAt: Date = undefined;\n    updatedAt: Date = undefined;\n\n    // auth token\n    token: string = undefined;\n\n    protected endpoint: string;\n    protected keepOnlineInterval: any;\n\n    constructor(endpoint: string) {\n        this.endpoint = endpoint.replace(\"ws\", \"http\");\n        getItem(TOKEN_STORAGE, (token) => (this.token = token));\n    }\n\n    get hasToken() {\n        return !!this.token;\n    }\n\n    async login(\n        options: {\n            accessToken?: string;\n            deviceId?: string;\n            platform?: string;\n            email?: string;\n            password?: string;\n        } = {}\n    ) {\n        const queryParams: any = Object.assign({}, options);\n\n        if (this.hasToken) {\n            queryParams.token = this.token;\n        }\n\n        const data = await this.request(\"post\", \"/auth\", queryParams);\n\n        // set & cache token\n        this.token = data.token;\n        setItem(TOKEN_STORAGE, this.token);\n\n        for (let attr in data) {\n            if (this.hasOwnProperty(attr)) {\n                this[attr] = data[attr];\n            }\n        }\n\n        this.registerPingService();\n\n        return this;\n    }\n\n    async save() {\n        await this.request(\n            \"put\",\n            \"/auth\",\n            {},\n            {\n                username: this.username,\n                displayName: this.displayName,\n                avatarUrl: this.avatarUrl,\n                lang: this.lang,\n                location: this.location,\n                timezone: this.timezone,\n            }\n        );\n\n        return this;\n    }\n\n    async getFriends() {\n        return (await this.request(\"get\", \"/friends/all\")) as IUser[];\n    }\n\n    async getOnlineFriends() {\n        return (await this.request(\"get\", \"/friends/online\")) as IUser[];\n    }\n\n    async getFriendRequests() {\n        return (await this.request(\"get\", \"/friends/requests\")) as IUser[];\n    }\n\n    async sendFriendRequest(friendId: string) {\n        return (await this.request(\"post\", \"/friends/requests\", {\n            userId: friendId,\n        })) as IStatus;\n    }\n\n    async acceptFriendRequest(friendId: string) {\n        return (await this.request(\"put\", \"/friends/requests\", {\n            userId: friendId,\n        })) as IStatus;\n    }\n\n    async declineFriendRequest(friendId: string) {\n        return (await this.request(\"del\", \"/friends/requests\", {\n            userId: friendId,\n        })) as IStatus;\n    }\n\n    async blockUser(friendId: string) {\n        return (await this.request(\"post\", \"/friends/block\", {\n            userId: friendId,\n        })) as IStatus;\n    }\n\n    async unblockUser(friendId: string) {\n        return (await this.request(\"put\", \"/friends/block\", {\n            userId: friendId,\n        })) as IStatus;\n    }\n\n    async request(\n        method: \"get\" | \"post\" | \"put\" | \"del\",\n        segments: string,\n        query: { [key: string]: number | string } = {},\n        body?: any,\n        headers: { [key: string]: string } = {}\n    ) {\n        headers[\"Accept\"] = \"application/json\";\n        if (this.hasToken) {\n            headers[\"Authorization\"] = \"Bearer \" + this.token;\n        }\n\n        const queryParams: string[] = [];\n        for (const name in query) {\n            queryParams.push(`${name}=${query[name]}`);\n        }\n\n        const queryString =\n            queryParams.length > 0 ? `?${queryParams.join(\"&\")}` : \"\";\n\n        const opts: any = { headers };\n\n        return (\n            await http[method](\n                `${this.endpoint}${segments}${queryString}`,\n                body,\n                opts\n            )\n        ).data;\n    }\n\n    logout() {\n        this.token = undefined;\n        removeItem(TOKEN_STORAGE);\n        this.unregisterPingService();\n    }\n\n    registerPingService(timeout: number = 15000) {\n        this.unregisterPingService();\n\n        this.keepOnlineInterval = setInterval(\n            () => this.request(\"get\", \"/auth\"),\n            timeout\n        );\n    }\n\n    unregisterPingService() {\n        clearInterval(this.keepOnlineInterval);\n    }\n}\n"],"names":[],"mappings":"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"}