astrajs icon indicating copy to clipboard operation
astrajs copied to clipboard

Add TypeScript types

Open SferaDev opened this issue 1 year ago • 2 comments

Something similar to:

declare module "@astrajs/rest" {
  import { AxiosRequestConfig } from "axios";

  interface AstraClientOptions {
    configFile?: string;
    configSection?: string;
    baseApiPath?: string;
    baseUrl?: string;
    authUrl?: string;
    authToken?: string;
    applicationToken?: string;
    autoReconnect?: boolean;
    getAuthToken?: () => Promise<string>;
    setAuthToken?: (authToken: string) => Promise<void>;
    username?: string;
    password?: string;
    debug?: boolean;
    authHeaderName?: string;
    astraDatabaseId?: string;
    astraDatabaseRegion?: string;
  }

  interface AstraClient extends AstraClientOptions {
    get: (
      path: string,
      options?: AxiosRequestConfig
    ) => Promise<{ status: number; data: any }>;
    post: (
      path: string,
      data: any,
      options?: AxiosRequestConfig
    ) => Promise<{ status: number; data: any }>;
    put: (
      path: string,
      data: any,
      options?: AxiosRequestConfig
    ) => Promise<{ status: number; data: any }>;
    patch: (
      path: string,
      data: any,
      options?: AxiosRequestConfig
    ) => Promise<{ status: number; data: any }>;
    delete: (
      path: string,
      options?: AxiosRequestConfig
    ) => Promise<{ status: number; data: any }>;
  }

  export function createClient(
    options: AstraClientOptions
  ): Promise<AstraClient>;

  export function axiosRequest(
    options: AxiosRequestConfig & {
      authToken?: string;
      applicationToken?: string;
      authHeaderName?: string;
    }
  ): Promise<{ status: number; data: any }>;
}

Of course types could be improved further, but this at least offers a first step.

Disclaimer: Copilot chat might have or might have not generated this dts file.

SferaDev avatar Oct 11 '23 16:10 SferaDev