{"version":3,"sources":["../src/api/account.api.ts"],"names":["API_KEY_HEADER","AccountApi","apiKey","gatewayUrl","tokenStore","version_default","authorizationCode","invariant","response","NaluriAccountError","data","refreshToken"],"mappings":";sHAMA,IAAMA,EAAiB,YAUVC,EAAN,KAAiB,CACL,OAEA,WAEA,WAEjB,YAAY,CAAE,OAAAC,EAAQ,WAAAC,EAAY,WAAAC,CAAW,EAAmB,CAC9D,KAAK,OAASF,EACd,KAAK,WAAaC,EAElB,KAAK,WAAaC,CACpB,CAEU,mBAAoB,CAC5B,MAAO,CACL,CAACJ,CAAc,EAAG,KAAK,OACvB,OAAQ,mBACR,eAAgB,mBAChB,mBAAoBK,EACpB,aAAc,yBAAyBA,CAAO,IAChD,CACF,CAEA,MAAa,MAAMC,EAA2B,CAC5CC,EAAUD,EAAmB,gCAAgC,EAE7D,IAAME,EAAW,MAAM,MAAM,GAAG,KAAK,UAAU,cAAe,CAC5D,OAAQ,OACR,QAAS,KAAK,kBAAkB,EAChC,KAAM,KAAK,UAAU,CACnB,kBAAAF,CACF,CAAC,CACH,CAAC,EAED,GAAI,CAACE,EAAS,GACZ,MAAM,IAAIC,EAAmB,CAC3B,QAAS,iBACX,CAAC,EAGH,IAAMC,EAAQ,MAAMF,EAAS,KAAK,EAIlC,YAAK,WAAW,QAAQ,cAAeE,EAAK,WAAW,EACvD,KAAK,WAAW,QAAQ,eAAgBA,EAAK,YAAY,EAElDA,CACT,CAEA,MAAa,QAAQC,EAAsB,CACzCJ,EAAUI,EAAc,2BAA2B,EAEnD,IAAMH,EAAW,MAAM,MAAM,GAAG,KAAK,UAAU,gBAAiB,CAC9D,OAAQ,OACR,QAAS,KAAK,kBAAkB,EAChC,KAAM,KAAK,UAAU,CACnB,aAAAG,CACF,CAAC,CACH,CAAC,EAED,GAAI,CAACH,EAAS,GACZ,MAAM,IAAIC,EAAmB,CAC3B,QAAS,yBACX,CAAC,EAKH,OAFc,MAAMD,EAAS,KAAK,CAGpC,CAEA,MAAa,OAAOG,EAAsB,CACxCJ,EAAUI,EAAc,2BAA2B,EAEnD,IAAMH,EAAW,MAAM,MAAM,GAAG,KAAK,UAAU,eAAgB,CAC7D,OAAQ,OACR,QAAS,CACP,GAAG,KAAK,kBAAkB,EAC1B,CAACR,CAAc,EAAG,KAAK,MACzB,EACA,KAAM,KAAK,UAAU,CACnB,aAAAW,CACF,CAAC,CACH,CAAC,EAED,GAAI,CAACH,EAAS,GACZ,MAAM,IAAIC,EAAmB,CAC3B,QAAS,kBACX,CAAC,EAGH,OAAOD,EAAS,EAClB,CACF","sourcesContent":["import { NaluriAccountError } from '@/errors';\nimport type { AccountUser, TokenPayload } from '@/types/account';\nimport { invariant } from '@/utils/invariant';\nimport { TokenStore } from '@/utils/tokenStore';\nimport version from '@/utils/version';\n\nconst API_KEY_HEADER = 'x-api-key';\n\nexport interface AccountOptions {\n  apiKey: string;\n  gatewayUrl: string;\n  tokenStore: TokenStore;\n  timeoutMs?: number;\n  onRefreshTokenError?: () => void | Promise<void>;\n}\n\nexport class AccountApi {\n  private readonly apiKey: string;\n\n  private readonly gatewayUrl: string;\n\n  private readonly tokenStore: TokenStore;\n\n  constructor({ apiKey, gatewayUrl, tokenStore }: AccountOptions) {\n    this.apiKey = apiKey;\n    this.gatewayUrl = gatewayUrl;\n\n    this.tokenStore = tokenStore;\n  }\n\n  protected getDefaultHeaders() {\n    return {\n      [API_KEY_HEADER]: this.apiKey,\n      Accept: 'application/json',\n      'Content-Type': 'application/json',\n      'x-nl-sdk-version': version,\n      'User-Agent': `Naluri Video SDK /JS (${version}})`,\n    };\n  }\n\n  public async login(authorizationCode: string) {\n    invariant(authorizationCode, 'Authorization code is required');\n\n    const response = await fetch(`${this.gatewayUrl}/auth/login`, {\n      method: 'POST',\n      headers: this.getDefaultHeaders(),\n      body: JSON.stringify({\n        authorizationCode,\n      }),\n    });\n\n    if (!response.ok) {\n      throw new NaluriAccountError({\n        message: 'Failed to login',\n      });\n    }\n\n    const data = (await response.json()) as TokenPayload & {\n      user: AccountUser;\n    };\n\n    this.tokenStore.setItem('accessToken', data.accessToken);\n    this.tokenStore.setItem('refreshToken', data.refreshToken);\n\n    return data;\n  }\n\n  public async refresh(refreshToken: string) {\n    invariant(refreshToken, 'Refresh token is required');\n\n    const response = await fetch(`${this.gatewayUrl}/auth/refresh`, {\n      method: 'POST',\n      headers: this.getDefaultHeaders(),\n      body: JSON.stringify({\n        refreshToken,\n      }),\n    });\n\n    if (!response.ok) {\n      throw new NaluriAccountError({\n        message: 'Failed to refresh token',\n      });\n    }\n\n    const data = (await response.json()) as TokenPayload;\n\n    return data;\n  }\n\n  public async logout(refreshToken: string) {\n    invariant(refreshToken, 'Refresh token is required');\n\n    const response = await fetch(`${this.gatewayUrl}/auth/logout`, {\n      method: 'POST',\n      headers: {\n        ...this.getDefaultHeaders(),\n        [API_KEY_HEADER]: this.apiKey,\n      },\n      body: JSON.stringify({\n        refreshToken,\n      }),\n    });\n\n    if (!response.ok) {\n      throw new NaluriAccountError({\n        message: 'Failed to logout',\n      });\n    }\n\n    return response.ok;\n  }\n}\n"]}