{"version":3,"file":"clarify.cjs","sources":["../src/authenticators/client-credentials.ts","../src/identifer.ts","../src/rpc.ts","../src/client.ts","../src/models/duration.ts","../src/utilities/data-frame-response.ts"],"sourcesContent":["import { type ClientCredentialsAuthentication, type AccessToken } from \"../client\";\nimport fetch from 'node-fetch';\nimport {type Agent} from 'https';\n\ninterface TokenPayload {\n  access_token: string;\n  scope: string;\n  expires_in: number;\n  token_type: 'Bearer';\n}\n\ntype AuthenticatorStatus = {\n  type: 'initial',\n} | {\n  type: 'authenticating',\n  result: Promise<AccessToken>,\n} | {\n  type: 'authenticated',\n  accessToken: AccessToken,\n} | {\n  type: 'failed';\n  error: unknown;\n}\n\nexport class ClientCredentialsAuthenticator {\n\n  private status: AuthenticatorStatus = {type: 'initial'};\n\n  constructor(private credentials: ClientCredentialsAuthentication, private audience: string, private authenticationURL: string, private agent?: Agent) {\n  }\n\n  async authenticate() {\n    let accessToken = await this.retriveAccessToken();\n    return [\n      [\"Authorization\", `Bearer ${accessToken.token}`]\n    ];\n  } \n\n  private async retriveAccessToken(): Promise<AccessToken> {\n    switch (this.status.type) {\n      case 'authenticating':\n        return await this.status.result;\n      case 'authenticated':\n        if (new Date() < this.status.accessToken.expiresAt) {\n          return this.status.accessToken;\n        }      \n    }\n    let result = this.refresh();\n    this.status = {type: 'authenticating', result};\n    try {\n      let accessToken = await result;\n      this.status = {type: 'authenticated', accessToken};\n      return accessToken;\n    } catch (error) {\n      this.status = {type: 'failed', error};\n      return Promise.reject(error);\n    }\n  }\n\n  private async refresh() {\n    let response = await fetch(this.authenticationURL, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n      },\n      body: new URLSearchParams({\n        grant_type: 'client_credentials',\n        client_id: this.credentials.clientId,\n        client_secret: this.credentials.clientSecret,\n        audience: this.audience,\n      }),\n      agent: this.agent,\n    });\n\n    let payload = await response.json() as TokenPayload;\n    if (payload && payload.access_token && payload.expires_in) {\n      let expiresIn = payload.expires_in;\n      try {\n        let parts = payload.access_token.split('.');\n        let decoded = Buffer.from(parts[1], 'base64').toString();\n        let accessToken = {\n          payload: JSON.parse(decoded),\n          token: payload.access_token,\n          expiresAt: new Date(Date.now() + expiresIn * 1000),\n        };\n        return accessToken;\n      } catch (error) {\n        return Promise.reject(error);\n      }\n    }\n    return Promise.reject(new Error('Unknown payload'));\n  }\n}\n","let identifier = 0;\n\nexport default () => {\n  return `clarify-${++identifier}`;\n};\n","import fetch, {Headers, RequestInfo, RequestInit} from 'node-fetch';\nimport type {AbortSignal} from 'node-fetch/externals';\n\nexport enum RPCErrorCode {\n  parseError = -32700,\n  invalidRequest = -32600,\n  methodNotFound = -32601,\n  invalidParams = -32602,\n  internalError = -32603,\n  serverError = -32000,\n  conflict = -32009,\n  operationNotPermitted = -32003,\n  partialFailure = -32021,\n}\n\ntype RPCOptions = {\n  timeout: number;\n  userAgent: string;\n}\n\nexport class RPCError<T extends RPCMethod> extends Error {\n  code: RPCErrorCode;\n  data: T['errorType'] | null;\n\n  constructor(rpcError: RPCErrorResponse<T>) {\n    super(rpcError.message);\n    Object.setPrototypeOf(this, RPCError.prototype);\n    this.name = 'RPCError';\n    this.code = rpcError.code;\n    this.data = rpcError.data;\n  }\n\n  toString() {\n    return `RPCError(code: ${this.code} type: ${this.type} trace: ${this.data && this.data.trace}): ${this.message}`;\n  }\n\n  get type() {\n    switch (this.code) {\n      case RPCErrorCode.parseError:\n        return 'parseError';\n      case RPCErrorCode.methodNotFound:\n        return 'methodNotFound';\n      case RPCErrorCode.invalidParams:\n        return 'invalidParams';\n      case RPCErrorCode.internalError:\n        return 'internalError';\n      case RPCErrorCode.serverError:\n        return 'serverError';\n      case RPCErrorCode.conflict:\n        return 'conflict';\n      case RPCErrorCode.operationNotPermitted:\n        return 'operationNotPermitted';\n      case RPCErrorCode.partialFailure:\n        return 'partialFailure';\n      default:\n        return 'unknown';\n    }\n  }\n}\n\nexport type RPCIdentifier = string | number | null;\n\nexport type RPCRequestInfo<T extends RPCMethod> = {\n  id: RPCIdentifier;\n  version: string;\n  method: string;\n  parameters: T['parameters'];\n};\n\nexport interface RPCMethod {\n  method: string;\n  parameters: {} | null;\n  resultType: {};\n  errorType: {\n    trace?: string\n  };\n}\n\nexport type RPCReturnType<T extends RPCMethod> =\n  | {type: 'result'; result: T['resultType']}\n  | {type: 'error'; error: RPCError<T>};\n\nexport interface RPCRequest<T extends RPCMethod> {\n  jsonrpc: '2.0';\n  id: RPCIdentifier;\n  method: string;\n  params: T['parameters'];\n}\n\nexport interface RPCResponse<T extends RPCMethod> {\n  jsonrpc: '2.0';\n  id: RPCIdentifier;\n  result?: T['resultType'];\n  error?: RPCErrorResponse<T>;\n}\n\nexport interface RPCErrorResponse<T extends RPCMethod> {\n  code: RPCErrorCode | number;\n  message: string;\n  data: T['errorType'] | null;\n}\n\nexport async function execute<T extends RPCMethod>(\n  input: RequestInfo,\n  init: RequestInit,\n  request: RPCRequestInfo<T>,\n  {timeout, userAgent}: RPCOptions,\n): Promise<RPCReturnType<T>> {\n  const AbortController = globalThis.AbortController || (await import('abort-controller')).default;\n\n  let payload = {\n    jsonrpc: '2.0',\n    method: request.method,\n    params: request.parameters,\n    id: request.id,\n  };\n\n  let cancelController = new AbortController();\n  let cancelTimeout = setTimeout(() => {\n    cancelController.abort();\n  }, timeout);\n\n  let headers = new Headers(init.headers);\n  headers.append('User-Agent', userAgent);\n  headers.append('Content-Type', 'application/json');\n  headers.append('X-API-Version', request.version);\n\n  let requestInit = {\n    ...init,\n    body: JSON.stringify(payload),\n    method: 'POST',\n    signal: cancelController.signal as AbortSignal,\n    headers: headers,\n  };\n\n  try {\n    let response = await fetch(input, requestInit);\n    if (response.status === 200) {\n      let data = await response.json() as RPCResponse<T>;\n      if (data.jsonrpc === '2.0' && data.id === request.id) {\n        if (data.result) {\n          return {type: 'result', result: data.result};\n        } else if (data.error) {\n          return {type: 'error', error: new RPCError(data.error)};\n        }  \n      } \n    }\n    return Promise.reject(new Error('Unexpected error'));\n  } catch (error) {\n    return Promise.reject(error);\n  } finally {\n    clearTimeout(cancelTimeout);\n  }\n}\n","import { ClientCredentialsAuthenticator } from \"./authenticators/client-credentials\";\nimport identifer from \"./identifer\";\nimport { Insert } from \"./requests/insert\";\nimport { SaveSignals } from \"./requests/save-signals\";\nimport { SelectItems, SelectItemsRelationships } from \"./requests/select-items\";\nimport {RPCMethod, RPCRequestInfo, execute} from \"./rpc\";\nimport {Headers, RequestInit} from 'node-fetch';\nimport { Agent } from \"https\";\nimport { DataFrame as DataFrameRequest, ItemRegister } from \"./requests/data-frame\";\nimport { EvaluateRegister, Evaluate } from \"./requests/evaluate\";\n\ninterface ClarifyAccessToken {\n  exp: number;\n  aud: string[];\n  azp: string;\n  iat: number;\n  iss: string;\n  scope: string;\n  sub: string;\n}\n\nexport interface AccessToken {\n  /// The parsed access token\n  payload: ClarifyAccessToken;\n  /// The access token\n  token: string;\n  /// Date in local time, when the access token expires\n  expiresAt: Date;\n}\n\nexport type ClientCredentialsAuthentication = {\n  clientId: string,\n  clientSecret: string,\n  type: 'client-credentials',\n};\n\nexport type Authentication = ClientCredentialsAuthentication | {\n  username: string;\n  password: string;\n  type: 'password',\n}\n\ntype Credential = {\n  credentials: Authentication;\n  integration: string;\n  apiUrl: string;\n}\n\ntype Options = {\n  timeout: number;\n  userAgent: string;\n}\n\n/**\n * Clarify’s API Client helps you execute our API and handles basic operations like authentication and error handling. \n */\nexport class ClarifyAPI {\n\n  declare authenticator: ClientCredentialsAuthenticator;\n  declare credential: Credential;\n\n  options: Options;\n  agent = new Agent({keepAlive: true});\n\n  constructor(credential: Credential, options: Partial<Options> = {}) {\n    this.options = {\n      timeout: 30000,\n      userAgent: `@clarify/api/CLARIFY_API_JS_VERSION`,\n      ...options,\n    };\n    this.setCredential(credential);\n  }\n\n  private get apiUrl() {\n    return this.credential.apiUrl;\n  }\n\n  private setCredential(credential: Credential) {\n    this.credential = credential;\n    switch (credential.credentials.type) {\n      case 'client-credentials':\n        this.authenticator = new ClientCredentialsAuthenticator(\n          credential.credentials,\n          credential.apiUrl,\n          `${credential.apiUrl}oauth/token`,\n          this.agent);\n        break;\n      case 'password':\n        throw new Error('Unsupported authenticaton');\n      default: \n        throw new Error('Unsupported authenticaton');\n    }\n  }\n\n  private async rpc<T extends RPCMethod>(\n    input: string,\n    init: RequestInit,\n    request: RPCRequestInfo<T>) {\n    let headers = new Headers(init ? init.headers : undefined);\n    let authenticationHeaders = await this.authenticator.authenticate();\n    for (let [key, value] of authenticationHeaders) {\n      headers.append(key, value);\n    }\n  \n    let requestInit = {\n      ...init,\n      agent: this.agent,\n      headers: headers,\n    };\n\n    return execute(input, requestInit, request, {\n      timeout: this.options.timeout,\n      userAgent: this.options.userAgent,\n    });\n\n  }\n\n  async selectItems<IncludeTypes extends keyof SelectItemsRelationships = keyof SelectItemsRelationships>(parameters: SelectItems<IncludeTypes>['parameters']): Promise<SelectItems<IncludeTypes>['resultType']> {\n    let id = identifer();\n    let request: RPCRequestInfo<SelectItems<IncludeTypes>> = {\n      method: 'clarify.SelectItems',\n      version: '1.1',\n      id,\n      parameters,\n    };\n    return this.perform(`${this.apiUrl}rpc`, {}, request);\n  }\n\n  /**\n   * A data method for inserting time-series data to signals using an input key \n   * that's unique in combination with an integration ID. If no signal with a \n   * given key exists for the integration, it's automatically created. The input \n   * is made available on each signal as a read-only attribute. An integration \n   * can only interact with it's own signals using this call.\n   */\n  async insert(parameters: Omit<Insert['parameters'], 'integration'>): Promise<Insert['resultType']> {\n    let request: RPCRequestInfo<Insert> = {\n      method: 'integration.Insert',\n      version: '1.1',\n      id: identifer(),\n      parameters: {\n        ...parameters,\n        integration: this.credential.integration,\n      },\n    }\n\n    return this.perform(`${this.apiUrl}rpc`, {}, request);\n  }\n\n  async saveSignals<T extends string>(parameters: Omit<SaveSignals<T>['parameters'], 'integration'>): Promise<SaveSignals<T>['resultType']> {\n    let request: RPCRequestInfo<SaveSignals<T>> = {\n      method: 'integration.SaveSignals',\n      version: '1.1',\n      id: identifer(),\n      parameters: {\n        ...parameters,\n        integration: this.credential.integration,\n      }\n    }\n    return this.perform(`${this.apiUrl}rpc`, {}, request);\n  }\n\n  /**\n   * A data method for selecting item time-series data. Associated items can be side-loaded.\n   */\n  async dataFrame<IncludeTypes extends keyof ItemRegister = keyof ItemRegister>(parameters: DataFrameRequest<IncludeTypes>['parameters']): Promise<DataFrameRequest<IncludeTypes>['resultType']> {\n    let id = identifer();\n    let request: RPCRequestInfo<DataFrameRequest<IncludeTypes>> = {\n      method: 'clarify.dataFrame',\n      version: '1.1',\n      id,\n      parameters,\n    };\n    return this.perform(`${this.apiUrl}rpc`, {}, request);\n  }\n\n  /**\n  * A data method for selecting and evaluating item time-series data. Associated items can be side-loaded.\n  */\n  async evaluate<IncludeTypes extends keyof EvaluateRegister = keyof EvaluateRegister>(parameters: Evaluate<IncludeTypes>['parameters']): Promise<Evaluate<IncludeTypes>['resultType']> {\n    let id = identifer();\n    let request: RPCRequestInfo<Evaluate<IncludeTypes>> = {\n      method: 'clarify.evaluate',\n      version: '1.1',\n      id,\n      parameters,\n    };\n    return this.perform(`${this.apiUrl}rpc`, {}, request);\n  }\n\n  async perform<T extends RPCMethod>(url: string, init: RequestInit, request: RPCRequestInfo<T>) {\n    let response = await this.rpc(url, init, request);\n    if (response.type === 'result') {\n      return response.result;\n    }\n    return Promise.reject(response.error);\n  }\n}","const numbers = '\\\\d+(?:[\\\\.,]\\\\d+)?';\nconst datePattern = `(${numbers}D)?`;\nconst timePattern = `T(${numbers}H)?(${numbers}M)?(${numbers}S)?`;\nconst duration = new RegExp(`^P(?:${datePattern}(?:${timePattern})?)$`);\n\nexport default class Duration {\n  constructor(\n    public days: number,\n    public hours: number,\n    public minutes: number,\n    public seconds: number,\n    public milliseconds: number,\n  ) {}\n\n  valueOf() {\n    return this.days * 86400000 + this.hours * 3600000 + this.minutes * 60000 + this.seconds * 1000 + this.milliseconds;\n  }\n\n  toJSON() {\n    let values = ['P'];\n    if (this.days) {\n      values.push(`${this.days}D`);\n    }\n    values.push('T');\n    if (this.hours) {\n      values.push(`${this.hours}H`);\n    }\n    if (this.minutes) {\n      values.push(`${this.minutes}M`);\n    }\n    if (this.seconds || this.milliseconds) {\n      values.push(`${this.seconds}S`);\n    }\n    return values.join('');\n  }\n\n  static fromMilliseconds(raw: number) {\n    let value = Math.abs(raw);\n    let days = Math.floor(value / 86400000);\n    let hours = Math.floor(value / 3600000) % 24;\n    let minutes = Math.floor(value / 60000) % 60;\n    let seconds = Math.floor(value / 1000) % 60;\n    let milliseconds = Math.floor(value) % 1000;\n    return new Duration(days, hours, minutes, seconds, milliseconds);\n  }\n\n  static parse(string: string): Duration | null {\n    let match = string.match(duration);\n    if (match) {\n      let [days, hours, minutes, seconds] = match.slice(1);\n      let daysValue = days ? parseFloat(days.slice(0, -1)) : 0;\n      let hoursValue = hours ? parseFloat(hours.slice(0, -1)) : 0;\n      let minutesValue = minutes ? parseFloat(minutes.slice(0, -1)) : 0;\n      let secondsValue = seconds ? parseFloat(seconds.slice(0, -1)) : 0;\n      let raw = secondsValue * 1000;\n      let s = Math.floor(raw / 1000) % 60;\n      let ms = Math.floor(raw) % 1000;\n\n      return new Duration(daysValue, hoursValue, minutesValue, s, ms);\n    }\n    return null;\n  }\n}","import { DataFrame, DataPoint } from \"../models/data-frame\";\n\nexport enum Aggregation {\n  min = 'min',\n  max = 'max',\n  average = 'avg',\n  count = 'count',\n  sum = 'sum',\n}\n\nclass DataFrameTime {\n  constructor(public dataFrame: DataFrame, public index: number) {\n\n  }\n\n  get time() {\n    return new Date(Date.parse(this.dataFrame.times[this.index]));\n  }\n\n  valueForSerie(serie: string) {\n    return this.valueForItem(serie);\n  }\n\n  valueForItem(id: string, method?: Aggregation) {\n    let key = method ? `${id}_${method}` : `${id}`;\n    if (key in this.dataFrame.series) {\n      return this.dataFrame.series[key][this.index];\n    }\n    throw new RangeError(`Serie not found`);\n  }\n}\n\nexport class DataFrameResponse {\n  constructor(public dataFrame: DataFrame) {\n\n  }\n\n  dataForSerie(serie: string) {\n    return this.dataSerieForItem(serie);\n  }\n\n  dataSerieForItem(id: string, aggregation?: Aggregation) {\n    let dataFrame = this.dataFrame;\n    let key = aggregation ? `${id}_${aggregation}` : `${id}`;\n    if (key in this.dataFrame.series) {\n      let serie = this.dataFrame.series[key];\n      return {\n        *[Symbol.iterator]() {\n          for (let [index, time] of dataFrame.times.entries()) {\n            let date = new Date(Date.parse(time));\n            yield [date, serie[index]] as [Date, DataPoint];\n          }\n        }\n      }\n    }\n    throw new RangeError(`Serie not found`);\n  }\n\n  get times() {\n    let dataFrame = this.dataFrame;\n    return {\n      *[Symbol.iterator]() {\n        for (let [index] of dataFrame.times.entries()) {\n          yield new DataFrameTime(dataFrame, index);\n        } \n      }\n    }\n  }\n}"],"names":["fetch","RPCErrorCode","Headers","Agent"],"mappings":"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"}