{"version":3,"file":"sso.cjs","sources":["../../src/sso.ts"],"sourcesContent":["import { MetricsConnection } from './connection'\nimport { Units } from './constants'\nimport Metrics from './core'\nimport { ClientSideActionPrevented } from './error'\nimport { DecodeJWT } from './lib/jwt'\nimport { GlobalAccessControl, GlobalAccessControlData } from './models/globalAccessControl'\nimport { OAuthProviders } from './models/oauthService'\nimport { Gender } from './models/profile'\nimport { ExchangeableUserResponse } from './models/user'\nimport { CheckReturnRouteResponse, RedirectResponse, UserSession } from './session'\n\nexport default class MetricsSSO extends Metrics {\n  async isReturnRouteValid (params: {returnUrl: string}) {\n    const response = await this._connection.action('auth:validateReturnRoute', params) as CheckReturnRouteResponse\n    return response.valid\n  }\n\n  async authenticateWithToken (params: { token: string }) {\n    const response = await this._connection.action('auth:exchangeInit', { authorization: params.token }) as ExchangeableUserResponse\n    return new ExchangeableUserSession(response, this._connection)\n  }\n\n  async authenticateWithCredentials (params: { email: string, password: string, refreshable?: boolean, requiresElevated?: boolean}) {\n    const response = await this._connection.action('auth:login', { refreshable: true, ...params, apiVersion: 1 }) as ExchangeableUserResponse\n    return new ExchangeableUserSession(response, this._connection)\n  }\n\n  async initializeUserCreation (params: { email: string, returnUrl: string, requiresElevated?: boolean, name?: string, birthday?: string, gender?: Gender, language?: string, units?: Units, metricWeight?: number, metricHeight?: number }) {\n    await this._connection.action('auth:userInit', params)\n  }\n\n  async initiatePasswordReset (params: { email: string, returnUrl: string, requiresElevated?: boolean }) {\n    await this._connection.action('auth:resetRequest', { ...params, apiVersion: 1 })\n  }\n\n  async fulfillUserCreation (params: { authorizationCode: string, password: string, refreshable?: boolean, requiresElevated?: boolean, acceptedTermsRevision: string, name: string, birthday: string, gender: Gender, language?: string, units: Units, metricWeight?: number, metricHeight?: number}) {\n    const response = await this._connection.action('auth:userInitFulfillment', { refreshable: true, ...params }) as ExchangeableUserResponse\n    return new ExchangeableUserSession(response, this._connection)\n  }\n\n  async authenticateWithWelcomeToken (params: { welcomeToken: string, password: string, refreshable?: boolean }) {\n    const response = await this._connection.action('auth:facilityWelcomeFulfillment', { refreshable: true, ...params }) as ExchangeableUserResponse\n    return new ExchangeableUserSession(response, this._connection)\n  }\n\n  async initiateOAuthWithFacebook (params: { redirect: string }) {\n    const response = await this._connection.action('oauth:initiate', { ...params, type: 'login', service: OAuthProviders.Facebook }) as RedirectResponse\n    return { redirectUrl: response.url }\n  }\n\n  async initiateOAuthWithGoogle (params: { redirect: string }) {\n    const response = await this._connection.action('oauth:initiate', { ...params, type: 'login', service: OAuthProviders.Google }) as RedirectResponse\n    return { redirectUrl: response.url }\n  }\n\n  async initiateOAuthWithApple (params: { redirect: string }) {\n    const response = await this._connection.action('oauth:initiate', { ...params, type: 'login', service: OAuthProviders.Apple }) as RedirectResponse\n    return { redirectUrl: response.url }\n  }\n\n  async authenticateWithResetToken (params: { resetToken: string, password: string, refreshable?: boolean, requiresElevated?: boolean}) {\n    const response = await this._connection.action('auth:resetFulfillment', { refreshable: true, ...params, apiVersion: 1 }) as ExchangeableUserResponse\n    return new ExchangeableUserSession(response, this._connection)\n  }\n\n  async elevateUserSession (userSession: UserSession, params: { otpToken: string, refreshable?: boolean }) {\n    const response = await userSession.sessionHandler.action('auth:elevate', { refreshable: true, ...params }) as ExchangeableUserResponse\n    const accessToken = DecodeJWT(response.accessToken)\n    if (typeof accessToken.globalAccessControl === 'undefined' || accessToken.globalAccessControl === null) {\n      throw new ClientSideActionPrevented({ explanation: 'Session token is not valid for admin session.' })\n    }\n    return new ExchangeableAdminSession(response, userSession.sessionHandler.connection, accessToken.globalAccessControl)\n  }\n}\n\nexport class ExchangeableUserSession extends UserSession {\n  protected readonly _exchangeToken: string\n\n  constructor (exchangeableUserResponse: ExchangeableUserResponse, connection: MetricsConnection) {\n    super(exchangeableUserResponse, connection)\n    this._exchangeToken = exchangeableUserResponse.exchangeToken\n  }\n\n  get exchangeToken () {\n    return this._exchangeToken\n  }\n}\n\nexport class ExchangeableAdminSession extends ExchangeableUserSession {\n  private readonly _globalAccessControl: GlobalAccessControl\n\n  constructor (exchangeableUserResponse: ExchangeableUserResponse, connection: MetricsConnection, globalAccessControlData: GlobalAccessControlData) {\n    super(exchangeableUserResponse, connection)\n    this._globalAccessControl = new GlobalAccessControl(globalAccessControlData, this.sessionHandler)\n  }\n\n  get globalAccessControl () {\n    return this._globalAccessControl\n  }\n}\n"],"names":["Metrics","OAuthProviders","DecodeJWT","ClientSideActionPrevented","UserSession","GlobalAccessControl"],"mappings":"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"}