grit-requester-js is a javascript library to abstract requests to microservices built using Grit.
Features:
- 🔁 Automatic retry on 
401 Unauthorized - 🔐 Per-service token cache with concurrency safety
 - 💉 Config and HTTP client injection (perfect for testing)
 - 📦 Full support for generics (
any) in request/response - 🧠 Context-aware: all requests support context.Context for cancellation, timeouts, and APM tracing
 
npm install "https://github.com/not-empty/grit-requester-js/releases/download/v1.0.2/grit-requester-js-1.0.2.tgz"import { GritRequester } from 'grit-requester-js';
interface IUser {
  id: string;
  name: string;
  email: string;
}
// configure grit requester
const ms = new GritRequester({
  baseUrl: 'http://localhost:8001',
  token: process.env.SERVICE_TOKEN || '',
  secret: process.env.SERVICE_SECRET || '',
  context: process.env.SERVICE_CONTEXT || '',
});
// doing a request
const result = await ms.request<{ id: string }>({
  path: '/user/add',
  method: 'POST',
  body: {
    name: 'example',
    email: 'example@example.com'
  }
});Here you can call a domain passing the type and path to access the following base routers:
| Path | Description | 
|---|---|
| add | Create a new record | 
| bulk | Fetch specific records by IDs | 
| bulkAdd | Create up to 25 records in the same request | 
| deadDetail | Get a deleted record by ID | 
| deadList | List deleted records (paginated) | 
| delete | Soft-delete a record by ID | 
| detail | Get an active record by ID | 
| edit | Update specific fields | 
| list | List active records (paginated) | 
| listOne | List one record based on params | 
| selectRaw | Execute a predefined raw SQL query safely | 
import { GritRequester } from 'grit-requester-js';
interface IUser {
  id: string;
  name: string;
  email: string;
}
// configure grit requester
const ms = new GritRequester({
  baseUrl: 'http://localhost:8001',
  token: process.env.SERVICE_TOKEN || '',
  secret: process.env.SERVICE_SECRET || '',
  context: process.env.SERVICE_CONTEXT || '',
});
// make a request from domain
const resultFile = await ms.domain<IUser>('user').add({
  name: 'example',
  email: 'example@example.com'
});Run tests:
npm run testRun test coverage
npm run coverage:Visualize unit coverage:
open ./coverage/unit/lcov-report/index.htmlVisualize feature coverage:
open ./coverage/feature/lcov-report/index.htmlMIT © Not Empty
Not Empty Foundation - Free codes, full minds