{"version":3,"file":"index.mjs","sources":["../src/loginWithPassword.ts","../src/loginWithOAuthServiceToken.ts","../src/loginWithResumeToken.ts","../src/Api.ts","../src/utils/constants.ts","../src/utils/getRCAppBaseURL.ts","../src/utils/getRCAppInfo.ts","../src/utils/getRCAuthorizeURL.ts","../src/loginWithRocketChatOAuth.ts","../src/RocketChatAuth.ts","../src/auth.ts"],"sourcesContent":["import { Api } from \"./Api\";\n\nconst loginWithPassword = async (\n  config: {\n    api: Api;\n  },\n  {\n    user,\n    password,\n    code,\n  }: {\n    user: string;\n    password: string;\n    code?: string | number;\n  }\n) => {\n  const response = await config.api.post(\"/api/v1/login\", {\n    user,\n    password,\n    code,\n  });\n  return response.data;\n};\n\nexport default loginWithPassword;\n","import { Api } from \"./Api\";\n\nconst loginWithOAuthServiceToken = async (\n  config: {\n    api: Api;\n  },\n  credentials: {\n    service: string;\n    access_token: string;\n    [key: string]: string;\n  }\n) => {\n  console.log(credentials, 'credentials');\n  \n  const response = await config.api.post(\"/api/v1/login\", credentials);\n  return response.data;\n};\n\nexport default loginWithOAuthServiceToken;\n","import { Api } from \"./Api\";\n\nconst loginWithResumeToken = async (\n  config: {\n    api: Api;\n  },\n  credentials: {\n    resume: string;\n  }\n) => {\n  const response = await config.api.post(\"/api/v1/login\", credentials);\n  return response.data;\n};\n\nexport default loginWithResumeToken;\n","export class ApiError extends Error {\n  response: Response;\n  constructor(\n    response: Response,\n    message?: string | undefined,\n    options?: ErrorOptions | undefined,\n    ...other: any[]\n  ) {\n    super(message, options, ...(other as []));\n    this.response = response;\n  }\n}\n\nexport class Api {\n  baseUrl: string;\n  constructor(baseUrl: string) {\n    this.baseUrl = baseUrl;\n  }\n  getFetchConfig = (config: RequestInit) => {\n    const headers = {\n      \"Content-Type\": \"application/json\",\n      ...(config?.headers || {}),\n    };\n    const requestInit: RequestInit = {\n      ...config,\n      headers,\n    };\n    return requestInit;\n  };\n  async request(\n    method: string = \"GET\",\n    endpoint: string,\n    data: any,\n    config: RequestInit\n  ) {\n    const url = new URL(endpoint, this.baseUrl).toString();\n    const response = await fetch(url, {\n      body: data ? JSON.stringify(data) : undefined,\n      method,\n      headers: {\n        ...config.headers,\n      },\n    });\n    if (!response.ok) {\n      throw new ApiError(response, \"Failed Api Request for \" + endpoint);\n    }\n    const jsonData = await response.json();\n    return { data: jsonData };\n  }\n\n  async post(endpoint: string, data: any, config: RequestInit = {}) {\n    return this.request(\"POST\", endpoint, data, this.getFetchConfig(config));\n  }\n  async get(endpoint: string, config: RequestInit = {}) {\n    return this.request(\"GET\", endpoint, null, this.getFetchConfig(config));\n  }\n  async put(endpoint: string, data: any, config: RequestInit = {}) {\n    return this.request(\"PUT\", endpoint, data, this.getFetchConfig(config));\n  }\n  async delete(endpoint: string, config: RequestInit = {}) {\n    return this.request(\"DELETE\", endpoint, null, this.getFetchConfig(config));\n  }\n}\n","export const ROCKETCHAT_APP_ID = \"4c977b2e-eda2-4627-8bfe-2d0358304a79\";\n","import { ROCKETCHAT_APP_ID } from \"./constants\";\n\nexport const getRCAppBaseURL = (host: string) => {\n  const url = new URL(`api/apps/public/${ROCKETCHAT_APP_ID}`, host);\n  return url.toString();\n};\n","import { getRCAppBaseURL } from \"./getRCAppBaseURL\";\n\nexport const getRCAppInfo = async (host: string) => {\n  const rcAppBaseUrl = getRCAppBaseURL(host);\n  const infoUrl = rcAppBaseUrl + \"/info\";\n  const response = await fetch(infoUrl.toString());\n  if (!response.ok) {\n    return null;\n  }\n  const info = await response.json();\n  return info;\n};\n","export const getRCAuthorizeURL = (\n  host: string,\n  redirectUri: string,\n  clientId: string\n) => {\n  const url = new URL(`oauth/authorize`, host);\n  url.searchParams.set(\"response_type\", \"code\");\n  url.searchParams.set(\"client_id\", clientId);\n  url.searchParams.set(\"redirect_uri\", redirectUri);\n  url.searchParams.set(\"state\", encodeURIComponent(window.location.origin));\n  return url.toString();\n};\n","import { Api } from \"./Api\";\nimport { getRCAppInfo } from \"./utils/getRCAppInfo\";\nimport { getRCAuthorizeURL } from \"./utils/getRCAuthorizeURL\";\n\nconst loginWithRocketChatOAuth = async (config: { api: Api }) => {\n  const appInfo = await getRCAppInfo(config.api.baseUrl);\n  if (!appInfo) {\n    throw new Error(\"EmbeddedChatApp not found on server\");\n  }\n  const { client_id, serviceName, allowedOrigins, redirect_uri } =\n    appInfo.config;\n\n  if (!client_id) {\n    throw new Error(\n      \"client_id not found. Make sure you have configured the EmbeddedChatApp on Rocket.Chat server\"\n    );\n  }\n  if (!serviceName) {\n    throw new Error(\n      \"custom_oauth_name not found. Make sure you have configured the EmbeddedChatApp on Rocket.Chat server\"\n    );\n  }\n  if (!redirect_uri) {\n    throw new Error(\n      \"redirect_uri not found. Make sure you have configured the EmbeddedChatApp on Rocket.Chat server\"\n    );\n  }\n  if (\n    allowedOrigins.length &&\n    allowedOrigins.includes(window.location.origin)\n  ) {\n    throw new Error(\n      \"Origin not allowed. Make sure you have configured the EmbeddedChatApp on Rocket.Chat server\"\n    );\n  }\n  const authorizeUrl = await getRCAuthorizeURL(\n    config.api.baseUrl,\n    redirect_uri,\n    client_id\n  );\n  let params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,\nwidth=800,height=600,left=-1000,top=-1000,rel=opener`;\n  const popup = window.open(authorizeUrl, \"Login\", params);\n\n  return new Promise<any>((resolve) => {\n    if (popup) {\n      const onMessage = async (e: MessageEvent) => {\n        if (e.data.type === \"rc-oauth-callback\") {\n          const { accessToken, expiresIn, serviceName } = e.data.credentials;\n          const response = await config.api.post(\"/api/v1/login\", {\n            accessToken,\n            expiresIn,\n            serviceName,\n          });\n          popup.close();\n          resolve(response.data);\n        }\n      };\n      window.addEventListener(\"message\", onMessage);\n      const checkInterval = setInterval(() => {\n        if (popup.closed) {\n          clearInterval(checkInterval);\n          window.removeEventListener(\"message\", onMessage);\n        }\n      }, 1000);\n    } else {\n      throw new Error(\"Popup blocked\");\n    }\n  });\n};\n\nexport default loginWithRocketChatOAuth;\n","import loginWithPassword from \"./loginWithPassword\";\nimport loginWithOAuthServiceToken from \"./loginWithOAuthServiceToken\";\nimport loginWithResumeToken from \"./loginWithResumeToken\";\nimport { IRocketChatAuthOptions } from \"./IRocketChatAuthOptions\";\nimport { Api, ApiError } from \"./Api\";\nimport loginWithRocketChatOAuth from \"./loginWithRocketChatOAuth\";\n\nclass RocketChatAuth {\n  host: string;\n  api: Api;\n  currentUser: any;\n  lastFetched: Date;\n  authListeners: ((user: object | null) => void)[] = [];\n  deleteToken: () => Promise<void>;\n  saveToken: (token: string) => Promise<void>;\n  getToken: () => Promise<string>;\n  constructor({\n    host,\n    saveToken,\n    getToken,\n    deleteToken,\n    autoLogin = true,\n  }: IRocketChatAuthOptions) {\n    this.host = host;\n    this.api = new Api(host);\n    this.lastFetched = new Date(0);\n    this.currentUser = null;\n    this.getToken = getToken;\n    this.saveToken = saveToken;\n    this.deleteToken = deleteToken;\n    if (autoLogin) {\n      this.load();\n    }\n  }\n\n  /**\n   * Add a callback that will be called when user login status changes\n   * @param callback\n   */\n  async onAuthChange(callback: (user: object | null) => void) {\n    this.authListeners.push(callback);\n    const user = await this.getCurrentUser();\n    callback(user);\n  }\n\n  async removeAuthListener(callback: (user: object | null) => void) {\n    this.authListeners = this.authListeners.filter((cb) => cb !== callback);\n  }\n\n  notifyAuthListeners() {\n    this.authListeners.forEach((cb) => cb(this.currentUser));\n  }\n\n  /**\n   * Login with username and password\n   * @param credentials\n   * @returns\n   */\n  async loginWithPassword({\n    user,\n    password,\n    code,\n  }: {\n    user: string;\n    password: string;\n    code?: string | number;\n  }) {\n    const response = await loginWithPassword(\n      {\n        api: this.api,\n      },\n      {\n        user,\n        password,\n        code,\n      }\n    );\n    this.setUser(response.data);\n    return this.currentUser;\n  }\n\n  /**\n   * Login with OAuthService's accessToken. The service must be configured in RocketChat.\n   * @param credentials\n   * @returns\n   */\n  async loginWithOAuthServiceToken(credentials: {\n    [key: string]: string;\n    service: string;\n    access_token: string;\n  }) {\n    console.log(this.api, \"this.api\");\n    console.log(credentials, \"credentials\");\n\n    const response = await loginWithOAuthServiceToken(\n      {\n        api: this.api,\n      },\n      credentials\n    );\n\n    this.setUser(response.data);\n    return this.currentUser;\n  }\n\n  /**\n   * Login with RocketChat OAuth. The EmbeddedChatApp must be installed and configured in RocketChat.\n   * @returns\n   */\n  async loginWithRocketChatOAuth() {\n    if (typeof window === \"undefined\") {\n      throw new Error(\"loginWithRocketChatOAuth can only be called in browser\");\n    }\n    const response = await loginWithRocketChatOAuth({\n      api: this.api,\n    });\n    this.setUser(response.data);\n    return this.currentUser;\n  }\n\n  /**\n   * Login with resume token\n   * @param resume Previous issued authToken\n   * @returns\n   */\n  async loginWithResumeToken(resume: string) {\n    const response = await loginWithResumeToken(\n      {\n        api: this.api,\n      },\n      {\n        resume,\n      }\n    );\n    this.setUser(response.data);\n    return this.currentUser;\n  }\n\n  /**\n   * Get current user.\n   * @param refresh\n   * @returns\n   */\n  async getCurrentUser(refresh = false) {\n    if (this.currentUser && this.currentUser.authToken) {\n      if (\n        refresh ||\n        new Date() >= new Date(this.lastFetched.getTime() + 3540000)\n      ) {\n        // 59 minutes\n        try {\n          await this.loginWithResumeToken(this.currentUser.authToken);\n        } catch (e) {\n          if (e instanceof ApiError && e.response?.status === 401) {\n            // token cannot be refreshed as the resume token is no longer valid.\n            await this.logout();\n          }\n        }\n      }\n    }\n    return this.currentUser;\n  }\n\n  /**\n   * Set current user\n   * @param user\n   */\n  async setUser(user: object) {\n    this.lastFetched = new Date();\n    this.currentUser = user;\n    await this.save();\n  }\n\n  async save() {\n    // localStorage.setItem(\"ec_user\", JSON.stringify({\n    // \tuser: this.currentUser,\n    // \tlastFetched: this.lastFetched\n    // }))\n    await this.saveToken(this.currentUser.authToken);\n    this.notifyAuthListeners();\n  }\n\n  /**\n   * Load current user from localStorage\n   */\n  async load() {\n    // const {user, lastFetched} = JSON.parse(localStorage.getItem(\"ec_user\") || \"{}\");\n    try {\n      const token = await this.getToken();\n      if (token) {\n        const user = await this.loginWithResumeToken(token); // will notifyAuthListeners on successful login\n        if (user) {\n          this.lastFetched = new Date();\n          await this.getCurrentUser(); // refresh the token if needed\n        }\n      }\n    } catch (e) {\n      console.log(\"Failed to login user on initial load. Sign in.\");\n      this.notifyAuthListeners();\n    }\n  }\n\n  /**\n   * Logout current user\n   */\n  async logout() {\n    try {\n      await this.api.post(`/api/v1/logout`, undefined, {\n        headers: {\n          \"X-Auth-Token\": this.currentUser.authToken,\n          \"X-User-Id\": this.currentUser.userId,\n        },\n      });\n    } catch (err) {\n      console.error(err);\n    } finally {\n      await this.deleteToken();\n    }\n    // localStorage.removeItem(\"ec_user\");\n    this.lastFetched = new Date(0);\n    this.currentUser = null;\n    this.notifyAuthListeners();\n  }\n}\n\nexport default RocketChatAuth;\n","import { IRocketChatAuthOptions } from \"./IRocketChatAuthOptions\";\nimport RocketChatAuth from \"./RocketChatAuth\";\n\nconst rocketChatAuth = ({\n  host,\n  saveToken,\n  getToken,\n  deleteToken,\n  autoLogin,\n}: IRocketChatAuthOptions) => {\n  console.log(host, 'host');\n  \n  return new RocketChatAuth({\n    host,\n    saveToken,\n    getToken,\n    deleteToken,\n    autoLogin,\n  });\n};\n\nexport { rocketChatAuth };\n"],"names":["serviceName"],"mappings":"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"}