{"version":3,"file":"index.cjs","names":["status: number","statusText: string","data?: any","config: RefreshTokenRequest","token?: AccessToken","body: FetchBody | undefined","errorData: any","FormData"],"sources":["../src/resources/oauth.ts","../src/request.ts","../src/resources/activities.ts","../src/resources/athletes.ts","../src/resources/clubs.ts","../src/resources/gears.ts","../src/resources/routes.ts","../src/resources/runningRaces.ts","../src/resources/segmentEfforts.ts","../src/resources/segments.ts","../src/resources/streams.ts","../src/resources/subscriptions.ts","../src/resources/uploads.ts","../src/enums/activityZoneType.ts","../src/enums/followerStatus.ts","../src/enums/membership.ts","../src/enums/resourceState.ts","../src/enums/routeType.ts","../src/enums/routeSubType.ts","../src/enums/sex.ts","../src/enums/unitSystem.ts","../src/index.ts"],"sourcesContent":["import { AppConfig, RefreshTokenRequest, RefreshTokenResponse } from '../types'\n\nexport class Oauth {\n  async refreshTokens(\n    token: RefreshTokenRequest,\n  ): Promise<RefreshTokenResponse> {\n    if (!token) {\n      throw new Error('No token provided')\n    }\n    return await Oauth.oauthRequest(\n      new URLSearchParams({\n        client_id: token.client_id,\n        client_secret: token.client_secret,\n        refresh_token: token.refresh_token,\n        grant_type: 'refresh_token',\n      }),\n    )\n  }\n\n  static async tokenExchange(\n    config: AppConfig,\n    code: string,\n  ): Promise<RefreshTokenResponse> {\n    if (!code) {\n      throw new Error('No code provided')\n    }\n    return await Oauth.oauthRequest(\n      new URLSearchParams({\n        client_id: config.client_id,\n        client_secret: config.client_secret,\n        code,\n        grant_type: 'authorization_code',\n      }),\n    )\n  }\n\n  private static async oauthRequest(\n    body: URLSearchParams,\n  ): Promise<RefreshTokenResponse> {\n    const response = await fetch(`https://www.strava.com/oauth/token`, {\n      body,\n      method: 'post',\n    })\n    if (!response.ok) {\n      throw response\n    }\n    return (await response.json()) as RefreshTokenResponse\n  }\n}\n","import { AccessToken, RateLimit, RefreshTokenRequest } from './types'\nimport { Oauth } from './resources/oauth'\n\ntype RequestParams = {\n  query?: Record<string, any>\n  body?: Record<string, any> | any\n  headers?: Record<string, any>\n  access_token?: string\n}\n\ntype FetchBody = string | URLSearchParams | FormData | any\n\ntype HttpMethod = 'get' | 'post' | 'put' | 'delete' | 'patch'\n\nfunction buildQueryString(params: Record<string, any>): string {\n  const searchParams = new URLSearchParams()\n\n  for (const [key, value] of Object.entries(params)) {\n    if (value === undefined || value === null) continue\n\n    if (Array.isArray(value)) {\n      value.forEach((item) => searchParams.append(key, String(item)))\n    } else {\n      searchParams.append(key, String(value))\n    }\n  }\n\n  return searchParams.toString()\n}\n\nfunction parseRateLimitHeader(header: string | null): [number, number] | null {\n  if (!header) return null\n  const parts = header.split(',').map((s) => parseInt(s.trim(), 10))\n  if (parts.length === 2 && !parts.some(isNaN)) {\n    return [parts[0], parts[1]]\n  }\n  return null\n}\n\nexport class StravaApiError extends Error {\n  constructor(\n    public status: number,\n    public statusText: string,\n    public data?: any,\n  ) {\n    super(`Strava API Error ${status}: ${statusText}`)\n    this.name = 'StravaApiError'\n  }\n}\n\nexport class Request {\n  private static readonly TOKEN_EXPIRY_BUFFER_SECONDS: number = 300 // 5 minutes\n  readonly oauth: Oauth = new Oauth()\n  private rateLimit: RateLimit | null = null\n\n  constructor(\n    readonly config: RefreshTokenRequest,\n    private token?: AccessToken,\n  ) {}\n\n  private async getAccessToken(): Promise<string> {\n    const now = new Date().getTime() / 1000\n    const expiryWithBuffer =\n      (this.token?.expires_at ?? 0) - Request.TOKEN_EXPIRY_BUFFER_SECONDS\n\n    if (!this.token || expiryWithBuffer < now) {\n      const token = await this.oauth.refreshTokens({\n        client_id: this.config.client_id,\n        client_secret: this.config.client_secret,\n        refresh_token: this.token?.refresh_token || this.config.refresh_token,\n      })\n      this.token = token\n      this.config.on_token_refresh?.(token)\n    }\n    return this.token.access_token\n  }\n\n  private updateRateLimitFromHeaders(headers: Headers): void {\n    const limitHeader = headers.get('x-ratelimit-limit')\n    const usageHeader = headers.get('x-ratelimit-usage')\n\n    const limits = parseRateLimitHeader(limitHeader)\n    const usage = parseRateLimitHeader(usageHeader)\n\n    if (limits && usage) {\n      this.rateLimit = {\n        shortTermLimit: limits[0],\n        longTermLimit: limits[1],\n        shortTermUsage: usage[0],\n        longTermUsage: usage[1],\n        timestamp: Date.now(),\n      }\n\n      this.config.on_rate_limit_update?.(this.rateLimit)\n    }\n  }\n\n  /**\n   * Get the current rate limit information\n   * @returns Current rate limit information or null if not available yet\n   */\n  public getRateLimit(): RateLimit | null {\n    return this.rateLimit\n  }\n\n  public async makeApiRequest<T>(\n    method: HttpMethod,\n    uri: string,\n    params?: RequestParams,\n  ): Promise<T> {\n    const token = params?.access_token || (await this.getAccessToken())\n    const queryString =\n      params?.query && Object.keys(params.query).length\n        ? buildQueryString(params.query)\n        : ''\n    const query = queryString ? `?${queryString}` : ''\n    const headers = {\n      Authorization: `Bearer ${token}`,\n      'content-type': 'application/json',\n      ...(params?.headers ? params.headers : {}),\n    }\n\n    let body: FetchBody | undefined\n\n    if (params?.body) {\n      if (headers['content-type'] === 'application/json')\n        body = JSON.stringify(params.body)\n      else body = params.body\n    }\n\n    const response = await fetch(\n      `https://www.strava.com/api/v3${uri}${query}`,\n      {\n        body,\n        method,\n        headers,\n      },\n    )\n\n    // Update rate limit info from response headers\n    this.updateRateLimitFromHeaders(response.headers)\n\n    if (!response.ok) {\n      let errorData: any\n      const contentType = response.headers.get('content-type')\n\n      try {\n        if (contentType?.includes('application/json')) {\n          errorData = await response.json()\n        } else {\n          errorData = await response.text()\n        }\n      } catch {\n        errorData = undefined\n      }\n\n      throw new StravaApiError(response.status, response.statusText, errorData)\n    }\n\n    if (response.status !== 204) {\n      const contentType = response.headers.get('content-type')\n\n      if (contentType?.includes('application/json')) {\n        return (await response.json()) as T\n      }\n\n      // For non-JSON responses (like GPX/TCX files)\n      return (await response.text()) as T\n    }\n\n    return response as T\n  }\n}\n","import { ActivityType } from '../enums'\nimport {\n  ActivityZone,\n  Comment,\n  DetailedActivity,\n  Lap,\n  SummaryActivity,\n  SummaryAthlete,\n} from '../models'\nimport { Request } from '../request'\n\nexport type CreateActivityRequest = {\n  name: string\n  sport_type: ActivityType\n  start_date_local: string\n  elapsed_time: number\n  description?: string\n  distance?: number\n  trainer?: number\n  commute?: number\n}\n\nexport type GetActivityByIdRequest = {\n  id: number\n  include_all_efforts?: boolean\n}\n\nexport type GetCommentsByActivityIdRequest = {\n  id: number\n  page?: number\n  page_size?: number\n  after_cursor?: string\n}\n\nexport type GetKudoersByActivityIdRequest = {\n  id: number\n  page?: number\n  per_page?: number\n}\n\nexport type GetLapsByActivityIdRequest = {\n  id: number\n}\n\nexport type GetZonesByActivityIdRequest = {\n  id: number\n}\n\nexport type GetLoggedInAthleteActivitiesRequest = {\n  before?: number\n  after?: number\n  page?: number\n  per_page?: number\n}\n\nexport type UpdateActivityByIdRequest = {\n  id: number\n  name?: string\n  sport_type?: ActivityType\n  start_date_local?: string\n  elapsed_time?: number\n  description?: string\n  distance?: number\n  trainer?: number\n  commute?: number\n}\n\nexport class Activities {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async createActivity(\n    params: CreateActivityRequest,\n    access_token?: string,\n  ): Promise<DetailedActivity> {\n    return await this.request.makeApiRequest<DetailedActivity>(\n      'post',\n      '/activities',\n      { body: params, access_token },\n    )\n  }\n\n  async getActivityById(\n    params: GetActivityByIdRequest,\n    access_token?: string,\n  ): Promise<DetailedActivity> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<DetailedActivity>(\n      'get',\n      `/activities/${id}`,\n      { query, access_token },\n    )\n  }\n\n  async getCommentsByActivityId(\n    params: GetCommentsByActivityIdRequest,\n    access_token?: string,\n  ): Promise<Comment[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<Comment[]>(\n      'get',\n      `/activities/${id}/comments`,\n      { query, access_token },\n    )\n  }\n\n  async getKudoersByActivityId(\n    params: GetKudoersByActivityIdRequest,\n    access_token?: string,\n  ): Promise<SummaryAthlete[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<SummaryAthlete[]>(\n      'get',\n      `/activities/${id}/kudos`,\n      { query, access_token },\n    )\n  }\n\n  async getLapsByActivityId(\n    params: GetLapsByActivityIdRequest,\n  ): Promise<Lap[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<Lap[]>(\n      'get',\n      `/activities/${id}/laps`,\n      { query },\n    )\n  }\n\n  async getLoggedInAthleteActivities(\n    params?: GetLoggedInAthleteActivitiesRequest,\n  ): Promise<SummaryActivity[]> {\n    return await this.request.makeApiRequest<SummaryActivity[]>(\n      'get',\n      '/athlete/activities',\n      { query: params },\n    )\n  }\n\n  async getZonesByActivityId(\n    params: GetZonesByActivityIdRequest,\n    access_token?: string,\n  ): Promise<ActivityZone[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<ActivityZone[]>(\n      'get',\n      `/activities/${id}/zones`,\n      { query, access_token },\n    )\n  }\n\n  async updateActivityById(\n    params: UpdateActivityByIdRequest,\n    access_token?: string,\n  ): Promise<DetailedActivity> {\n    const { id, ...body } = params\n    return await this.request.makeApiRequest<DetailedActivity>(\n      'put',\n      `/activities/${id}`,\n      { body, access_token },\n    )\n  }\n}\n","import { ActivityStats, DetailedAthlete, Zones } from '../models'\nimport { Request } from '../request'\n\nexport type GetStatsRequest = {\n  id: number\n}\n\nexport type UpdateLoggedInAthleteRequest = {\n  weight: number\n}\n\nexport class Athletes {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getLoggedInAthlete(access_token?: string): Promise<DetailedAthlete> {\n    return await this.request.makeApiRequest<DetailedAthlete>(\n      'get',\n      '/athlete',\n      { access_token },\n    )\n  }\n\n  async getLoggedInAthleteZones(access_token?: string): Promise<Zones> {\n    return await this.request.makeApiRequest<Zones>('get', '/athlete/zones', {\n      access_token,\n    })\n  }\n\n  async getStats(\n    params: GetStatsRequest,\n    access_token?: string,\n  ): Promise<ActivityStats> {\n    const { id } = params\n    return await this.request.makeApiRequest<ActivityStats>(\n      'get',\n      `/athletes/${id}/stats`,\n      { access_token },\n    )\n  }\n\n  async updateLoggedInAthlete(\n    params: UpdateLoggedInAthleteRequest,\n    access_token?: string,\n  ): Promise<DetailedAthlete> {\n    return await this.request.makeApiRequest<DetailedAthlete>(\n      'put',\n      `/athlete`,\n      { body: params, access_token },\n    )\n  }\n}\n","import {\n  DetailedClub,\n  SummaryActivity,\n  SummaryAthlete,\n  SummaryClub,\n} from '../models'\nimport { Request } from '../request'\n\nexport type GetClubActivitiesByIdRequest = {\n  id: number\n  page?: number\n  per_page?: number\n}\n\nexport type GetClubAdminsByIdRequest = {\n  id: number\n  page?: number\n  per_page?: number\n}\n\nexport type GetClubByIdRequest = {\n  id: number\n}\n\nexport type GetClubMembersByIdRequest = {\n  id: number\n  page?: number\n  per_page?: number\n}\n\nexport type GetLoggedInAthleteClubsRequest = {\n  page?: number\n  per_page?: number\n}\n\nexport class Clubs {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getClubActivitiesById(\n    params: GetClubActivitiesByIdRequest,\n    access_token?: string,\n  ): Promise<SummaryActivity[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<SummaryActivity[]>(\n      'get',\n      `/clubs/${id}/activities`,\n      { query, access_token },\n    )\n  }\n\n  async getClubAdminsById(\n    params: GetClubAdminsByIdRequest,\n    access_token?: string,\n  ): Promise<SummaryAthlete[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<SummaryAthlete[]>(\n      'get',\n      `/clubs/${id}/admins`,\n      { query, access_token },\n    )\n  }\n\n  async getClubById(params: GetClubByIdRequest): Promise<DetailedClub> {\n    const { id } = params\n    return await this.request.makeApiRequest<DetailedClub>(\n      'get',\n      `/clubs/${id}`,\n    )\n  }\n\n  async getClubMembersById(\n    params: GetClubMembersByIdRequest,\n    access_token?: string,\n  ): Promise<SummaryAthlete[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<SummaryAthlete[]>(\n      'get',\n      `/clubs/${id}/members`,\n      { query, access_token },\n    )\n  }\n\n  async getLoggedInAthleteClubs(\n    params?: GetLoggedInAthleteClubsRequest,\n    access_token?: string,\n  ): Promise<SummaryClub[]> {\n    return await this.request.makeApiRequest<SummaryClub[]>(\n      'get',\n      '/athlete/clubs',\n      {\n        query: params,\n        access_token,\n      },\n    )\n  }\n}\n","import { DetailedGear } from '../models'\nimport { Request } from '../request'\n\nexport type GetGearByIdRequest = {\n  id: number\n}\n\nexport class Gears {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getGearById(\n    params: GetGearByIdRequest,\n    access_token?: string,\n  ): Promise<DetailedGear> {\n    const { id } = params\n    return await this.request.makeApiRequest<DetailedGear>(\n      'get',\n      `/gear/${id}`,\n      { access_token },\n    )\n  }\n}\n","import { Route } from '../models'\nimport { Request } from '../request'\n\nexport type GetRouteAsGPXRequest = {\n  id: number\n}\n\nexport type GetRouteAsTCXRequest = {\n  id: number\n}\n\nexport type GetRouteByIdRequest = {\n  id: number\n}\n\nexport type GetRoutesByAthleteIdRequest = {\n  id: number\n  page?: number\n  per_page?: number\n}\n\nexport class Routes {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getRouteAsGPX(\n    params: GetRouteAsGPXRequest,\n    access_token?: string,\n  ): Promise<any> {\n    const { id } = params\n    return await this.request.makeApiRequest<any>(\n      'get',\n      `/routes/${id}/export_gpx`,\n      { access_token },\n    )\n  }\n\n  async getRouteAsTCX(\n    params: GetRouteAsTCXRequest,\n    access_token?: string,\n  ): Promise<any> {\n    const { id } = params\n    return await this.request.makeApiRequest<any>(\n      'get',\n      `/routes/${id}/export_tcx`,\n      { access_token },\n    )\n  }\n\n  async getRouteById(params: GetRouteByIdRequest): Promise<Route> {\n    const { id } = params\n    return await this.request.makeApiRequest<Route>('get', `/routes/${id}`)\n  }\n\n  async getRoutesByAthleteId(\n    params: GetRoutesByAthleteIdRequest,\n  ): Promise<Route[]> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<Route[]>(\n      'get',\n      `/athletes/${id}/routes`,\n      { query },\n    )\n  }\n}\n","import { RunningRace } from '../models'\nimport { Request } from '../request'\n\nexport type GetRunningRaceByIdRequest = {\n  id: number\n}\n\nexport type GetRunningRacesRequest = {\n  year?: number\n}\n\nexport class RunningRaces {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getRunningRaceById(\n    params: GetRunningRaceByIdRequest,\n    access_token?: string,\n  ): Promise<RunningRace> {\n    const { id } = params\n    return await this.request.makeApiRequest<RunningRace>(\n      'get',\n      `/running_races/${id}`,\n      { access_token },\n    )\n  }\n\n  async getRunningRaces(\n    params?: GetRunningRacesRequest,\n    access_token?: string,\n  ): Promise<RunningRace[]> {\n    return await this.request.makeApiRequest<RunningRace[]>(\n      'get',\n      '/running_races',\n      { query: params, access_token },\n    )\n  }\n}\n","import { DetailedSegmentEffort } from '../models'\nimport { Request } from '../request'\n\nexport type GetEffortsBySegmentIdRequest = {\n  segment_id: number\n  start_date_local?: string\n  end_date_local?: string\n  per_page?: number\n}\n\nexport type GetSegmentEffortByIdRequest = {\n  id: number\n}\n\nexport class SegmentEfforts {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getEffortsBySegmentId(\n    params: GetEffortsBySegmentIdRequest,\n    access_token?: string,\n  ): Promise<DetailedSegmentEffort[]> {\n    return await this.request.makeApiRequest<DetailedSegmentEffort[]>(\n      'get',\n      '/segment_efforts',\n      { query: params, access_token },\n    )\n  }\n\n  async getSegmentEffortById(\n    params: GetSegmentEffortByIdRequest,\n    access_token?: string,\n  ): Promise<DetailedSegmentEffort> {\n    const { id } = params\n    return await this.request.makeApiRequest<DetailedSegmentEffort>(\n      'get',\n      `/segment_efforts/${id}`,\n      { access_token },\n    )\n  }\n}\n","import { DetailedSegment, ExplorerResponse, SummarySegment } from '../models'\nimport { Request } from '../request'\n\nexport type ActivityType = 'running' | 'riding'\n\nexport type ExploreSegmentsRequest = {\n  bounds: string\n  activity_type?: ActivityType\n  min_cat?: number\n  max_cat?: number\n}\n\nexport type GetLoggedInAthleteStarredSegmentsRequest = {\n  page?: number\n  per_page?: number\n}\n\nexport type GetSegmentByIdRequest = {\n  id: number\n}\n\nexport type StarSegmentRequest = {\n  id: number\n  starred: boolean\n}\n\nexport class Segments {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async exploreSegments(\n    params: ExploreSegmentsRequest,\n    access_token?: string,\n  ): Promise<ExplorerResponse> {\n    return await this.request.makeApiRequest<ExplorerResponse>(\n      'get',\n      '/segments/explore',\n      { query: params, access_token },\n    )\n  }\n\n  async getLoggedInAthleteStarredSegments(\n    params: GetLoggedInAthleteStarredSegmentsRequest,\n  ): Promise<SummarySegment[]> {\n    return await this.request.makeApiRequest<SummarySegment[]>(\n      'get',\n      '/segments/starred',\n      { query: params },\n    )\n  }\n\n  async getSegmentById(\n    params: GetSegmentByIdRequest,\n    access_token?: string,\n  ): Promise<DetailedSegment> {\n    const { id } = params\n    return await this.request.makeApiRequest<DetailedSegment>(\n      'get',\n      `/segments/${id}`,\n      { access_token },\n    )\n  }\n\n  async starSegment(\n    params: StarSegmentRequest,\n    access_token?: string,\n  ): Promise<DetailedSegment> {\n    const { id, ...body } = params\n    return await this.request.makeApiRequest<DetailedSegment>(\n      'put',\n      `/segments/${id}/starred`,\n      { body, access_token },\n    )\n  }\n}\n","import { StreamKeys } from '../enums'\nimport { StreamSet } from '../models'\nimport { Request } from '../request'\n\nexport type GetActivityStreamsRequest = {\n  id: number\n  keys: StreamKeys | StreamKeys[]\n}\n\nexport type GetRouteStreamsRequest = {\n  id: number\n}\n\nexport type GetSegmentEffortStreamsRequest = {\n  id: number\n  keys: StreamKeys | StreamKeys[]\n}\n\nexport type GetSegmentStreamsRequest = {\n  id: number\n  keys: StreamKeys | StreamKeys[]\n}\n\nexport class Streams {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async getActivityStreams(\n    params: GetActivityStreamsRequest,\n    access_token?: string,\n  ): Promise<StreamSet> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<StreamSet>(\n      'get',\n      `/activities/${id}/streams`,\n      { query: { ...query, key_by_type: true }, access_token },\n    )\n  }\n\n  async getRouteStreams(\n    params: GetRouteStreamsRequest,\n    access_token?: string,\n  ): Promise<StreamSet> {\n    const { id } = params\n    return await this.request.makeApiRequest<StreamSet>(\n      'get',\n      `/routes/${id}/streams`,\n      { access_token },\n    )\n  }\n\n  async getSegmentEffortStreams(\n    params: GetSegmentEffortStreamsRequest,\n    access_token?: string,\n  ): Promise<StreamSet> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<StreamSet>(\n      'get',\n      `/segment_efforts/${id}/streams`,\n      { query: { ...query, key_by_type: true }, access_token },\n    )\n  }\n\n  async getSegmentStreams(\n    params: GetSegmentStreamsRequest,\n    access_token?: string,\n  ): Promise<StreamSet> {\n    const { id, ...query } = params\n    return await this.request.makeApiRequest<StreamSet>(\n      'get',\n      `/segments/${id}/streams`,\n      { query: { ...query, key_by_type: true }, access_token },\n    )\n  }\n}\n","import { Request } from '../request'\n\nexport type Subscription = {\n  id: number\n}\n\nexport type SubscriptionCreationRequest = {\n  callback_url: string\n  verify_token: string\n}\n\nexport type SubscriptionCreationResponse = {\n  id: number\n}\n\nexport class Subscriptions {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async createSubscription(\n    params: SubscriptionCreationRequest,\n  ): Promise<SubscriptionCreationResponse> {\n    return this.request.makeApiRequest('post', '/push_subscriptions', {\n      body: {\n        ...params,\n        client_id: this.request.config.client_id,\n        client_secret: this.request.config.client_secret,\n      },\n    })\n  }\n\n  async deleteSubscription(id: number): Promise<any> {\n    return this.request.makeApiRequest('delete', `/push_subscriptions/${id}`, {\n      body: {\n        client_id: this.request.config.client_id,\n        client_secret: this.request.config.client_secret,\n      },\n    })\n  }\n\n  async getSubscriptions(): Promise<Subscription[]> {\n    return this.request.makeApiRequest('get', '/push_subscriptions', {\n      query: {\n        client_id: this.request.config.client_id,\n        client_secret: this.request.config.client_secret,\n      },\n    })\n  }\n}\n","import FormData from 'form-data'\nimport { ReadStream } from 'fs'\n\nimport { Upload } from '../models'\nimport { Request } from '../request'\n\nexport type CreateUploadRequest = {\n  file: ReadStream\n  data_type: 'fit' | 'fit.gz' | 'tcx' | 'tcx.gz' | 'gpx' | 'gpx.gz'\n  name?: string\n  description?: string\n  trainer?: string\n  commute?: string\n  external_id?: string\n}\n\nexport type GetUploadByIdRequest = {\n  uploadId: number\n}\n\nexport class Uploads {\n  private readonly request: Request\n\n  constructor(request: Request) {\n    this.request = request\n  }\n\n  async createUpload(params: CreateUploadRequest): Promise<Upload | void> {\n    const form = new FormData()\n    Object.entries(params).forEach(([key, value]) => {\n      form.append(key, value)\n    })\n    const headers = {\n      ...form.getHeaders(),\n      'content-length': 0,\n      host: 'www.strava.com',\n    }\n    form.getLength((error, length) => {\n      if (error) throw error\n      headers['content-length'] = length\n    })\n    return this.request.makeApiRequest<Upload>('post', '/uploads', {\n      body: form,\n      headers,\n    })\n  }\n\n  async getUploadById(\n    params: GetUploadByIdRequest,\n    access_token?: string,\n  ): Promise<Upload> {\n    const { uploadId } = params\n    return await this.request.makeApiRequest<Upload>(\n      'get',\n      `/uploads/${uploadId}`,\n      { access_token },\n    )\n  }\n}\n","export enum ActivityZoneType {\n  Heartrate = 'heartrate',\n  Power = 'power',\n}\n","export enum FollowerStatus {\n  Pending = 'pending',\n  Accepted = 'accepted',\n  Blocked = 'blocked',\n}\n","export enum Membership {\n  Member = 'member',\n  Pending = 'pending',\n}\n","export enum ResourceState {\n  Meta = 1,\n  Summary = 2,\n  Detail = 3,\n}\n","export enum RouteType {\n  Ride = 1,\n  Run = 2,\n}\n","export enum RouteSubType {\n  Road = 1,\n  MountainBike = 2,\n  Cross = 3,\n  Trail = 4,\n  Mixed = 5,\n}\n","export enum Sex {\n  Female = 'F',\n  Male = 'M',\n}\n","export enum UnitSystem {\n  Feet = 'feet',\n  Meters = 'meters',\n}\n","import { Request, StravaApiError } from './request'\nimport {\n  Activities,\n  Athletes,\n  Clubs,\n  Gears,\n  Routes,\n  RunningRaces,\n  SegmentEfforts,\n  Segments,\n  Streams,\n  Subscriptions,\n  Uploads,\n} from './resources'\nimport { Oauth } from './resources/oauth'\nimport { AccessToken, AppConfig, RefreshTokenRequest } from './types'\n\nexport * from './types'\nexport * from './enums'\nexport * from './models'\nexport { StravaApiError }\n\nexport class Strava {\n  private readonly request: Request\n  readonly activities: Activities\n  readonly athletes: Athletes\n  readonly clubs: Clubs\n  readonly gears: Gears\n  readonly oauth: Oauth\n  readonly routes: Routes\n  readonly runningRaces: RunningRaces\n  readonly segmentEfforts: SegmentEfforts\n  readonly segments: Segments\n  readonly streams: Streams\n  readonly subscriptions: Subscriptions\n  readonly uploads: Uploads\n\n  constructor(config: RefreshTokenRequest, access_token?: AccessToken)\n  constructor(config: AppConfig, access_token: AccessToken)\n  constructor(config: RefreshTokenRequest, access_token?: AccessToken) {\n    this.request = new Request(config, access_token)\n    this.activities = new Activities(this.request)\n    this.athletes = new Athletes(this.request)\n    this.clubs = new Clubs(this.request)\n    this.gears = new Gears(this.request)\n    this.oauth = this.request.oauth\n    this.routes = new Routes(this.request)\n    this.runningRaces = new RunningRaces(this.request)\n    this.segmentEfforts = new SegmentEfforts(this.request)\n    this.segments = new Segments(this.request)\n    this.streams = new Streams(this.request)\n    this.subscriptions = new Subscriptions(this.request)\n    this.uploads = new Uploads(this.request)\n  }\n\n  static async createFromTokenExchange(\n    config: AppConfig,\n    code: string,\n  ): Promise<Strava> {\n    const tokenExchangeResponse = await Oauth.tokenExchange(config, code)\n    config.on_token_refresh?.(tokenExchangeResponse)\n    return new Strava(config, tokenExchangeResponse)\n  }\n\n  /**\n   * Get the current API rate limit information\n   * @returns Current rate limit information or null if no API calls have been made yet\n   */\n  getRateLimit() {\n    return this.request.getRateLimit()\n  }\n}\n"],"mappings":"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"}