0.2.0 • Published 7 months ago

service-creator v0.2.0

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

service-creator

A simple abstraction to create "services", plain objects that can be used to perform fetch calls in a convention over configuration fashion.

Installation

npm install service-creator

Usage

import { createService } from 'service-creator';
import { v4 as uuid } from 'uuid';

const fetcher = {
  fetch: async (url, opts) => {
    const resp = await fetch(url, opts);
    return resp.json();
  },
};

// defining the interface of the service is helpful to have good typings
// service methods are async functions that return a promise that resolves to the response
// expected to be received from the fetch/xhr calls
export interface PPService {
  getSomeData: (prompt: string) => Promise<SomeData[]>;
  getDataById: (id: string) => Promise<SomeData>; 
}

const commonHeadersFn = () => {
  const appCtx = getCtx();

  return {
    'x-req-id': uuid(),
  };
};

const service = createService({
  endpoints: {
    getSomeData: {
      method: 'GET',
      url: '/v1/get-some-data',
      body: ({ prompt }) => ({ prompt }),
      headers: commonHeadersFn,
    },
    getDataById: {
      method: 'GET',
      headers: commonHeadersFn,
      url: ({ id }) => `/v1/get-some-data-by-id/${id}`, 
    },
  },
  basePath: api,  
  fetcher,
});

const data = await service.getSomeData({ prompt: 'hello world' });

console.log(data); // expected an array of SomeData

const dataById = await service.getDataById({ id: '1' });

console.log(dataById); // expected a single SomeData

License

MIT

0.1.2

8 months ago

0.2.0

7 months ago

0.1.1

8 months ago

0.1.3

8 months ago

0.1.0

10 months ago

0.0.2

10 months ago