{"version":3,"file":"client.mjs","sources":["../../../../../../../../lib/clients/admin/rest/client.ts"],"sourcesContent":["import {\n  AdminRestApiClient,\n  createAdminRestApiClient,\n} from '@shopify/admin-api-client';\nimport * as LosslessJSON from 'lossless-json';\n\nimport {\n  clientLoggerFactory,\n  getUserAgent,\n  throwFailedRequest,\n} from '../../common';\nimport {\n  HashFormat,\n  NormalizedRequest,\n  abstractFetch,\n  canonicalizeHeaders,\n  createSHA256HMAC,\n  getHeader,\n} from '../../../../runtime';\nimport {ConfigInterface} from '../../../base-types';\nimport * as ShopifyErrors from '../../../error';\nimport {logger} from '../../../logger';\nimport {\n  RestRequestReturn,\n  PageInfo,\n  RestClientParams,\n  PageInfoParams,\n} from '../types';\nimport type {\n  RequestParams,\n  GetRequestParams,\n  PutRequestParams,\n  PostRequestParams,\n  DeleteRequestParams,\n} from '../../types';\nimport {ApiVersion, Method} from '../../../types';\nimport {Session} from '../../../session/session';\n\nexport interface RestClientClassParams {\n  config: ConfigInterface;\n  formatPaths?: boolean;\n}\n\ninterface DeprecationInterface {\n  message: string | null;\n  path: string;\n  body?: string;\n}\n\nexport class RestClient {\n  public static config: ConfigInterface;\n  public static formatPaths: boolean;\n\n  static LINK_HEADER_REGEXP = /<([^<]+)>; rel=\"([^\"]+)\"/;\n  static DEFAULT_LIMIT = '50';\n  static RETRY_WAIT_TIME = 1000;\n\n  static readonly DEPRECATION_ALERT_DELAY = 300000;\n  loggedDeprecations: Record<string, number> = {};\n\n  readonly client: AdminRestApiClient;\n  readonly session: Session;\n  readonly apiVersion: ApiVersion;\n\n  public constructor({session, apiVersion}: RestClientParams) {\n    const config = this.restClass().config;\n\n    if (!config.isCustomStoreApp && !session.accessToken) {\n      throw new ShopifyErrors.MissingRequiredArgument(\n        'Missing access token when creating REST client',\n      );\n    }\n\n    if (apiVersion) {\n      const message =\n        apiVersion === config.apiVersion\n          ? `REST client has a redundant API version override to the default ${apiVersion}`\n          : `REST client overriding default API version ${config.apiVersion} with ${apiVersion}`;\n\n      logger(config).debug(message);\n    }\n\n    const customStoreAppAccessToken =\n      config.adminApiAccessToken ?? config.apiSecretKey;\n\n    this.session = session;\n    this.apiVersion = apiVersion ?? config.apiVersion;\n    this.client = createAdminRestApiClient({\n      scheme: config.hostScheme,\n      storeDomain: session.shop,\n      apiVersion: apiVersion ?? config.apiVersion,\n      accessToken: config.isCustomStoreApp\n        ? customStoreAppAccessToken\n        : session.accessToken!,\n      customFetchApi: abstractFetch,\n      logger: clientLoggerFactory(config),\n      userAgentPrefix: getUserAgent(config),\n      defaultRetryTime: this.restClass().RETRY_WAIT_TIME,\n      formatPaths: this.restClass().formatPaths,\n      isTesting: config.isTesting,\n    });\n  }\n\n  /**\n   * Performs a GET request on the given path.\n   */\n  public async get<T = any>(params: GetRequestParams) {\n    return this.request<T>({method: Method.Get, ...params});\n  }\n\n  /**\n   * Performs a POST request on the given path.\n   */\n  public async post<T = any>(params: PostRequestParams) {\n    return this.request<T>({method: Method.Post, ...params});\n  }\n\n  /**\n   * Performs a PUT request on the given path.\n   */\n  public async put<T = any>(params: PutRequestParams) {\n    return this.request<T>({method: Method.Put, ...params});\n  }\n\n  /**\n   * Performs a DELETE request on the given path.\n   */\n  public async delete<T = any>(params: DeleteRequestParams) {\n    return this.request<T>({method: Method.Delete, ...params});\n  }\n\n  protected async request<T = any>(\n    params: RequestParams,\n  ): Promise<RestRequestReturn<T>> {\n    const requestParams = {\n      headers: {\n        ...params.extraHeaders,\n        ...(params.type ? {'Content-Type': params.type.toString()} : {}),\n      },\n      retries: params.tries ? params.tries - 1 : undefined,\n      searchParams: params.query,\n    };\n\n    let response: Response;\n    switch (params.method) {\n      case Method.Get:\n        response = await this.client.get(params.path, requestParams);\n        break;\n      case Method.Put:\n        response = await this.client.put(params.path, {\n          ...requestParams,\n          data: params.data!,\n        });\n        break;\n      case Method.Post:\n        response = await this.client.post(params.path, {\n          ...requestParams,\n          data: params.data!,\n        });\n        break;\n      case Method.Delete:\n        response = await this.client.delete(params.path, requestParams);\n        break;\n      default:\n        throw new ShopifyErrors.InvalidRequestError(\n          `Unsupported request method '${params.method}'`,\n        );\n    }\n\n    const bodyString: string = await response.text();\n\n    // Some DELETE requests return an empty body but are still valid responses, we want those to go through\n    const body: any =\n      params.method === Method.Delete && bodyString === ''\n        ? {}\n        : this.parseJsonWithLosslessNumbers(bodyString);\n\n    const responseHeaders = canonicalizeHeaders(\n      Object.fromEntries(response.headers.entries()),\n    );\n\n    if (!response.ok) {\n      throwFailedRequest(body, (params.tries ?? 1) > 1, response);\n    }\n\n    const requestReturn: RestRequestReturn<T> = {\n      body,\n      headers: responseHeaders,\n    };\n\n    await this.logDeprecations(\n      {\n        method: params.method,\n        url: params.path,\n        headers: requestParams.headers,\n        body: params.data ? JSON.stringify(params.data) : undefined,\n      },\n      requestReturn,\n    );\n\n    const link = response.headers.get('Link');\n    if (link !== undefined) {\n      const pageInfo: PageInfo = {\n        limit: params.query?.limit\n          ? params.query?.limit.toString()\n          : RestClient.DEFAULT_LIMIT,\n      };\n\n      if (link) {\n        const links = link.split(', ');\n\n        for (const link of links) {\n          const parsedLink = link.match(RestClient.LINK_HEADER_REGEXP);\n          if (!parsedLink) {\n            continue;\n          }\n\n          const linkRel = parsedLink[2];\n          const linkUrl = new URL(parsedLink[1]);\n          const linkFields = linkUrl.searchParams.get('fields');\n          const linkPageToken = linkUrl.searchParams.get('page_info');\n\n          if (!pageInfo.fields && linkFields) {\n            pageInfo.fields = linkFields.split(',');\n          }\n\n          if (linkPageToken) {\n            switch (linkRel) {\n              case 'previous':\n                pageInfo.previousPageUrl = parsedLink[1];\n                pageInfo.prevPage = this.buildRequestParams(parsedLink[1]);\n                break;\n              case 'next':\n                pageInfo.nextPageUrl = parsedLink[1];\n                pageInfo.nextPage = this.buildRequestParams(parsedLink[1]);\n                break;\n            }\n          }\n        }\n      }\n\n      requestReturn.pageInfo = pageInfo;\n    }\n\n    return requestReturn;\n  }\n\n  private restClass() {\n    return this.constructor as typeof RestClient;\n  }\n\n  /**\n   * Parse JSON with lossless-json to preserve numeric precision.\n   * Converts all ID fields (ending with _id, _ids, or named 'id') to strings.\n   */\n  private parseJsonWithLosslessNumbers(jsonString: string): any {\n    // Parse with lossless-json first to preserve precision\n    const parsed = LosslessJSON.parse(jsonString);\n\n    // Recursively process the parsed object to convert IDs to strings\n    const processValue = (value: any, key?: string): any => {\n      if (value === null || value === undefined) {\n        return value;\n      }\n\n      // Handle LosslessNumber instances\n      if (value && value.isLosslessNumber === true) {\n        const keyLower = (key || '').toLowerCase();\n        // Always convert ID fields to strings\n        if (keyLower === 'id' || keyLower.endsWith('_id')) {\n          return value.toString();\n        }\n        // For non-ID fields, always convert to regular JavaScript number\n        // The IDs have already been handled, so we can use standard conversion\n        return Number(value.value);\n      }\n\n      // Handle arrays - special case for _ids arrays\n      if (Array.isArray(value)) {\n        const isIdsArray = key && key.toLowerCase().endsWith('_ids');\n        return value.map((item) => {\n          // If this is an _ids array and item is a LosslessNumber, convert to string\n          if (isIdsArray && item && item.isLosslessNumber === true) {\n            return item.toString();\n          }\n          return processValue(item);\n        });\n      }\n\n      // Handle objects\n      if (typeof value === 'object') {\n        const result: any = {};\n        for (const objKey in value) {\n          if (Object.prototype.hasOwnProperty.call(value, objKey)) {\n            result[objKey] = processValue(value[objKey], objKey);\n          }\n        }\n        return result;\n      }\n\n      return value;\n    };\n\n    return processValue(parsed);\n  }\n\n  private buildRequestParams(newPageUrl: string): PageInfoParams {\n    const pattern = `^/admin/api/[^/]+/(.*).json$`;\n\n    const url = new URL(newPageUrl);\n    const path = url.pathname.replace(new RegExp(pattern), '$1');\n    return {\n      path,\n      query: Object.fromEntries(url.searchParams.entries()),\n    };\n  }\n\n  private async logDeprecations(\n    request: NormalizedRequest,\n    response: RestRequestReturn,\n  ) {\n    const config = this.restClass().config;\n\n    const deprecationReason = getHeader(\n      response.headers,\n      'X-Shopify-API-Deprecated-Reason',\n    );\n    if (deprecationReason) {\n      const deprecation: DeprecationInterface = {\n        message: deprecationReason,\n        path: request.url,\n      };\n\n      if (request.body) {\n        // This can only be a string, since we're always converting the body before calling this method\n        deprecation.body = `${(request.body as string).substring(0, 100)}...`;\n      }\n\n      const depHash = await createSHA256HMAC(\n        config.apiSecretKey,\n        JSON.stringify(deprecation),\n        HashFormat.Hex,\n      );\n\n      if (\n        !Object.keys(this.loggedDeprecations).includes(depHash) ||\n        Date.now() - this.loggedDeprecations[depHash] >=\n          RestClient.DEPRECATION_ALERT_DELAY\n      ) {\n        this.loggedDeprecations[depHash] = Date.now();\n\n        const stack = new Error().stack;\n        const message = `API Deprecation Notice ${new Date().toLocaleString()} : ${JSON.stringify(\n          deprecation,\n        )}  -  Stack Trace: ${stack}`;\n        await logger(config).warning(message);\n      }\n    }\n  }\n}\n\nexport function restClientClass(\n  params: RestClientClassParams,\n): typeof RestClient {\n  const {config, formatPaths} = params;\n\n  class NewRestClient extends RestClient {\n    public static config = config;\n    public static formatPaths = formatPaths === undefined ? true : formatPaths;\n  }\n\n  Reflect.defineProperty(NewRestClient, 'name', {\n    value: 'RestClient',\n  });\n\n  return NewRestClient as typeof RestClient;\n}\n"],"names":["ShopifyErrors.MissingRequiredArgument","ShopifyErrors.InvalidRequestError"],"mappings":"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"}