3.10.1 • Published 5 months ago

@mihanizm56/fetch-api v3.10.1

Weekly downloads
430
License
MIT
Repository
github
Last release
5 months ago

@mihanizm56/fetch-api

Sollution for http/1.1 isomorphic fetch

Benefits:

  • Provides validation for responses (based on @hapi/joi Schema validation)
  • Provides query-params serialize
  • Provides cancel-request if the timeout is higher than 60 seconds
  • Provides error catching (you dont need to use try/catch)
  • Provides the ability to match the exact error from errorsMap
  • Provides different kinds of the response formats to parse
  • Returns ALWAYS the hard prepared response structure
  • Works in browser and node environments

RestRequest input options:

  • endpoint(string): the request url
  • responseSchema: the response Schema that parsed by @hapi/joi (you must use the @hapi/joi in your project and insert the response Schema into this field)
  • body(JSON | FormData): the request body (you have to JSON or FormData it by youself)
  • mode('cors' | 'no-cors'): the cors type
  • parseType('json' | 'blob'): the type to parse the response (json by default)
  • queryParams(object): the object with the query parameters (they will be serialized automatically)
  • headers(object): the object with the headers
  • errorsMap(object): the object with the errors keys and translated values (TIMEOUT_ERROR and REQUEST_DEFAULT_ERROR fields are required, others must be provided according to the backend errors)

RestRequest output options:

  • error (boolean) - the flag of the response status
  • errorText (string) - the main error message from the backend
  • data (object) - the main data from the backend
  • additionalErrors (object) - the additional multiple errors from the backend

JSONRPCRequest input options:

  • the same as RestRequest input options
  • id (string | number) - the request id

JSONRPCRequest output options:

  • jsonrpc (string) - version of json-rpc
  • result (object | array) - the main data from the backend
  • error (object) - (non required, exists only if there is an error) the error object with message and code from the backend
  • id (string | number) - the request id

Examples of usage

REST API

installation

npm install @mihanizm56/fetch-api

get request

import Joi from "@hapi/joi";
import { RestRequest, IRESTResponse } from "@mihanizm56/fetch-api";

export const getContractsRequest = (): Promise<IRESTResponse> =>
  new RestRequest().getRequest({
    endpoint: "http://localhost:3000",
    errorsMap: {
      TIMEOUT_ERROR: "Превышено ожидание запроса",
      REQUEST_DEFAULT_ERROR: "Системная ошибка",
      [FORBIDDEN]: "Данное действие недоступно"
    },
    responseSchema: Joi.object({
      username: Joi.string().required(),
      password: Joi.string().required(),
      info: Joi.object({
        count: Joi.number().required(),
        killers: Joi.array().items(
          Joi.object({
            username: Joi.string().required(),
            count: Joi.number().required()
          })
        )
      })
    })
  });

post(put/patch/delete have the same format) request

import { RestRequest, IRESTResponse } from "@mihanizm56/fetch-api";

export const createReviseRequest = (someData): Promise<IRESTResponse> =>
  new RestRequest().postRequest({
    endpoint: "http://localhost:3000",
    errorsMap: {
      TIMEOUT_ERROR: "Превышено ожидание запроса",
      REQUEST_DEFAULT_ERROR: "Системная ошибка",
      [FORBIDDEN]: "Данное действие недоступно"
    },
    body: JSON.stringify(someData),
    mode: "cors",
    parseType: "blob",
    queryParams: {
      id: "test_id_123"
    },
    headers: {
      "Content-Type": "application/json"
    },
    responseSchema: Joi.object({
      username: Joi.string().required(),
      password: Joi.string().pattern(new RegExp("^[a-zA-Z0-9]{3,30}$"))
    })
  });

The usage of the request api

const { error, errorText, data, additionalErrors } = await createReviseRequest(
  someData
);

JSON-RPC API

import { JSONRPCRequest, IJSONRPCResponse } from "@mihanizm56/fetch-api";

export const createItemsRequest = ({
  someData,
  requestId
}): Promise<IJSONRPCResponse> =>
  new JSONRPCRequest().makeRequest({
    endpoint: "http://localhost:3000",
    errorsMap: {
      TIMEOUT_ERROR: "Превышено ожидание запроса",
      REQUEST_DEFAULT_ERROR: "Системная ошибка"
    },
    body: JSON.stringify({ ...someData, id: requestId }),
    mode: "cors",
    queryParams: {
      id: "123"
    },
    responseSchema: Joi.object({
      items: Joi.array().items(
        Joi.object({
          id: Joi.string().required(),
          name: Joi.string().required(),
          name: Joi.string()
        })
      )
    }),
    id: requestId
  });

The usage of the request api

const { jsonrpc, result, error, id } = await createItemsRequest({
  someData,
  requestId: "1"
});
4.0.0-beta.5

5 months ago

4.0.0-beta.4

5 months ago

4.0.0-beta.3

5 months ago

4.0.0-beta.1

5 months ago

3.10.1-beta.1

7 months ago

3.10.1

7 months ago

3.10.0

7 months ago

3.9.2-beta.5

1 year ago

3.9.2-beta.6

1 year ago

3.9.2-beta.3

1 year ago

3.9.2-beta.4

1 year ago

3.9.2-beta.9

1 year ago

3.9.2-beta.7

1 year ago

3.9.2-beta.8

1 year ago

3.9.2-beta.1

1 year ago

3.9.2-beta.2

1 year ago

3.9.0-beta.9

1 year ago

3.9.4-beta.6

1 year ago

3.9.4-beta.5

1 year ago

3.9.0-beta.5

1 year ago

3.9.0-beta.6

1 year ago

3.9.0-beta.7

1 year ago

3.9.0-beta.8

1 year ago

3.9.0-beta.1

1 year ago

3.9.0-beta.2

1 year ago

3.9.0-beta.3

1 year ago

3.9.0-beta.4

1 year ago

3.9.3

1 year ago

3.9.2

1 year ago

3.9.1

1 year ago

3.9.0

1 year ago

3.9.4

1 year ago

3.9.4-beta.4

1 year ago

3.9.4-beta.3

1 year ago

3.9.4-beta.2

1 year ago

3.9.4-beta.1

1 year ago

3.8.20

1 year ago

3.9.0-beta.10

1 year ago

3.9.0-beta.11

1 year ago

3.9.2-beta.13

1 year ago

3.9.2-beta.12

1 year ago

3.9.2-beta.11

1 year ago

3.9.2-beta.10

1 year ago

3.9.3-beta.1

1 year ago

3.9.3-beta.2

1 year ago

3.10.0-beta.2

1 year ago

3.10.0-beta.1

1 year ago

3.8.18

2 years ago

3.8.19

2 years ago

3.8.20-beta.1

2 years ago

3.8.20-beta.2

2 years ago

3.8.17

2 years ago

3.8.16

2 years ago

3.8.14

2 years ago

3.8.15

2 years ago

3.8.16-beta.1

2 years ago

3.8.17-beta.1

2 years ago

3.8.13-beta.4

2 years ago

3.8.13

2 years ago

3.8.13-beta.2

2 years ago

3.8.13-beta.3

2 years ago

3.8.13-beta.1

2 years ago

3.8.12

2 years ago

3.8.12-beta.3

2 years ago

3.8.12-beta.2

2 years ago

3.8.10

2 years ago

3.8.11

2 years ago

3.8.10-beta.1

2 years ago

3.8.9

2 years ago

3.8.12-beta.1

2 years ago

3.8.8

2 years ago

3.8.7

3 years ago

3.8.6

3 years ago

3.8.8-beta.1

2 years ago

3.8.8-beta.2

2 years ago

3.8.6-beta.2

3 years ago

3.8.6-beta.3

3 years ago

3.8.6-beta.1

3 years ago

3.8.5-beta.1

3 years ago

3.8.5

3 years ago

3.8.4-beta.1

3 years ago

3.8.4

3 years ago

3.8.3

3 years ago

3.8.2

3 years ago

3.8.2-beta.4

3 years ago

3.8.2-beta.3

3 years ago

3.8.2-beta.2

3 years ago

3.8.2-beta.1

3 years ago

3.8.1

3 years ago

3.8.1-beta.1

3 years ago

3.8.0

3 years ago

3.8.0-beta.1

3 years ago

3.7.4-beta.4

3 years ago

3.7.4

3 years ago

3.7.4-beta.3

3 years ago

3.7.4-beta.1

3 years ago

3.7.4-beta.2

3 years ago

3.7.3

3 years ago

3.7.3-beta.1

3 years ago

3.7.2

3 years ago

3.7.2-beta.2

3 years ago

3.7.2-beta.1

3 years ago

3.7.1

3 years ago

3.7.1-beta.1

3 years ago

3.7.0-beta.9

3 years ago

3.7.0-beta.8

3 years ago

3.7.0

3 years ago

3.7.0-beta.7

3 years ago

3.7.0-beta.6

3 years ago

3.7.0-beta.5

3 years ago

3.7.0-beta.4

3 years ago

3.7.0-beta.3

3 years ago

3.7.0-beta.2

3 years ago

3.7.0-beta.1

3 years ago

3.6.3

3 years ago

3.6.3-beta.0

3 years ago

4.0.0-beta.0

3 years ago

3.6.2

3 years ago

3.6.2-beta.3

3 years ago

3.6.2-beta.2

3 years ago

3.6.2-beta.1

3 years ago

3.6.1

3 years ago

3.6.1-beta.4

3 years ago

3.6.1-beta.3

3 years ago

3.6.1-beta.2

3 years ago

3.6.1-beta.1

3 years ago

3.6.0

3 years ago

3.5.2

3 years ago

3.4.6-beta.1

3 years ago

3.5.2-beta.2

3 years ago

3.4.6

3 years ago

3.5.2-beta.1

3 years ago

3.5.1

3 years ago

3.5.0

3 years ago

3.5.0-beta.4

3 years ago

3.5.0-beta.3

3 years ago

3.5.0-beta.1

3 years ago

3.5.0-beta.2

3 years ago

3.4.5

3 years ago

3.4.4

3 years ago

3.4.4-beta.1

3 years ago

3.4.3

3 years ago

3.4.3-beta.3

3 years ago

3.4.3-beta.2

3 years ago

3.4.3-beta.1

3 years ago

3.4.2-beta.2

3 years ago

3.4.2

3 years ago

3.4.2-beta.1

3 years ago

3.4.1

3 years ago

3.4.0

3 years ago

3.4.0-beta.6

4 years ago

3.3.23

4 years ago

3.4.0-beta.5

4 years ago

3.3.23-beta.1

4 years ago

3.3.21-beta.1

4 years ago

3.3.22

4 years ago

3.3.21

4 years ago

3.3.20

4 years ago

3.4.0-beta.4

4 years ago

3.4.0-beta.3

4 years ago

3.4.0-beta.2

4 years ago

3.4.0-beta.1

4 years ago

3.3.19-beta.2

4 years ago

3.3.19-beta.4

4 years ago

3.3.19-beta.3

4 years ago

3.3.19

4 years ago

3.3.18

4 years ago

3.3.18-beta.1

4 years ago

3.3.17

4 years ago

3.3.16

4 years ago

3.3.16-beta.6

4 years ago

3.3.16-beta.7

4 years ago

3.3.16-beta.5

4 years ago

3.3.16-beta.4

4 years ago

3.3.16-beta.3

4 years ago

3.3.16-beta.2

4 years ago

3.3.16-beta.1

4 years ago

3.3.15

4 years ago

3.3.15-beta-1

4 years ago

3.3.14-beta.2

4 years ago

3.3.14

4 years ago

3.3.14-beta.1

4 years ago

3.3.13-beta.1

4 years ago

3.3.13

4 years ago

3.3.12

4 years ago

3.3.12-beta.1

4 years ago

3.3.9

4 years ago

3.3.11-beta.0

4 years ago

3.3.9-beta.3

4 years ago

3.3.10

4 years ago

3.3.11

4 years ago

3.3.9-beta.1

4 years ago

3.3.9-beta.0

4 years ago

3.3.8

4 years ago

3.3.7

4 years ago

3.3.7-beta.2

4 years ago

3.3.7-beta.1

4 years ago

3.3.6-beta.1

4 years ago

3.3.6

4 years ago

3.3.5

4 years ago

3.3.5-beta.10

4 years ago

3.3.5-passport.4

4 years ago

3.3.5-beta.1

4 years ago

3.3.5-passport.1

4 years ago

3.3.5-passport.2

4 years ago

3.3.5-passport.3

4 years ago

3.3.4-beta.1

4 years ago

3.3.4

4 years ago

3.3.4-beta.0

4 years ago

3.3.3

4 years ago

3.3.3-beta.0

4 years ago

3.3.2

4 years ago

3.3.2-beta.3

4 years ago

3.3.2-beta.4

4 years ago

3.3.2-beta.5

4 years ago

3.3.2-beta.2

4 years ago

3.3.2-beta.1

4 years ago

3.3.2-beta.0

4 years ago

3.3.1

4 years ago

3.3.0-beta.11

4 years ago

3.3.0-beta.10

4 years ago

3.3.0-beta.9

4 years ago

3.3.0-beta.7

4 years ago

3.3.0-beta.6

4 years ago

3.3.0-beta.5

4 years ago

3.3.0-beta.2

4 years ago

3.3.0-beta.1

4 years ago

3.3.0-beta.0

4 years ago

3.2.1

4 years ago

3.2.0-beta.19

4 years ago

3.2.0-beta.18

4 years ago

3.2.0-beta.17

4 years ago

3.2.0-beta.16

4 years ago

3.2.0-beta.15

4 years ago

3.2.0-beta.14

4 years ago

3.2.0-beta.13

4 years ago

3.2.0-beta.12

4 years ago

3.2.0-beta.11

4 years ago

3.2.0-beta.10

4 years ago

3.2.0-beta.8

4 years ago

3.2.0-beta.9

4 years ago

3.2.0-beta.6

4 years ago

3.2.0-beta.7

4 years ago

3.2.0-beta.4

4 years ago

3.2.0-beta.5

4 years ago

3.2.0-beta.3

4 years ago

3.2.0-beta.2

4 years ago

3.2.0-beta.1

4 years ago

3.2.0-beta.0

4 years ago

3.1.4

4 years ago

3.0.5-beta.16

4 years ago

3.0.5-beta.17

4 years ago

3.0.5-beta.14

4 years ago

3.0.5-beta.15

4 years ago

3.0.5-beta.18

4 years ago

3.1.2

4 years ago

3.1.1

4 years ago

3.1.0

4 years ago

3.0.5-beta.12

4 years ago

3.0.5-beta.11

4 years ago

3.0.5-beta.10

4 years ago

3.0.5-beta.9

4 years ago

3.0.5-beta.8

4 years ago

3.0.5-beta.7

4 years ago

3.0.5-beta.6

4 years ago

3.0.5-beta.5

4 years ago

3.0.5-beta.4

4 years ago

3.0.5-beta.3

4 years ago

3.0.5-beta.2

4 years ago

3.0.5

4 years ago

3.0.5-beta.1

4 years ago

2.2.1

4 years ago

2.1.3

4 years ago

3.0.4

4 years ago

3.0.3

4 years ago

2.2.0

4 years ago

3.0.1

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.5

4 years ago

2.0.4

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago