{"id":26313373,"url":"https://github.com/arijitcodes/microstream-client","last_synced_at":"2026-02-17T12:02:03.094Z","repository":{"id":279865217,"uuid":"940177159","full_name":"arijitcodes/microstream-client","owner":"arijitcodes","description":"The client library for MicroStream, a lightweight, real-time communication library for microservices. Replace REST/gRPC with WebSockets for event-driven messaging. Simplifies inter-service communication with a request-response pattern and automatic reconnection. [ NPM 📦 ]","archived":false,"fork":false,"pushed_at":"2025-03-27T12:20:36.000Z","size":858,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-18T08:52:41.764Z","etag":null,"topics":["communication","ipc","message-broker","microservices","microstream","microstream-client","nodejs","real-time","service-communication","service-discovery","service-mesh","socket-io","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/microstream-client","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arijitcodes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-27T18:30:57.000Z","updated_at":"2025-03-27T12:20:39.000Z","dependencies_parsed_at":"2025-02-28T06:39:30.448Z","dependency_job_id":"b4bf3e5e-f2c8-451f-ba83-56a1b04a952a","html_url":"https://github.com/arijitcodes/microstream-client","commit_stats":null,"previous_names":["arijitcodes/microstream-client"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/arijitcodes/microstream-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arijitcodes%2Fmicrostream-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arijitcodes%2Fmicrostream-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arijitcodes%2Fmicrostream-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arijitcodes%2Fmicrostream-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arijitcodes","download_url":"https://codeload.github.com/arijitcodes/microstream-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arijitcodes%2Fmicrostream-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268454346,"owners_count":24253147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["communication","ipc","message-broker","microservices","microstream","microstream-client","nodejs","real-time","service-communication","service-discovery","service-mesh","socket-io","typescript"],"created_at":"2025-03-15T11:15:13.581Z","updated_at":"2026-02-17T12:01:58.073Z","avatar_url":"https://github.com/arijitcodes.png","language":"TypeScript","readme":"# MicroStream Client SDK 🚀\n\n\u003cdiv align=\"center\"\u003e\n   \u003cimg src=\"https://iamarijit.dev/img/projects/MicroStream-Icon.png\" height=\"350\"/\u003e\n\u003c/div\u003e\n\nThe client library for Microstream, a lightweight, real-time communication library for microservices. Replace REST/gRPC with WebSockets for event-driven messaging. Simplifies inter-service communication with a request-response pattern and automatic reconnection.\n\nAuthor: [Arijit Banerjee](#author)  \nLicense: [MIT](./LICENSE)\n\n\u003c!-- shields.io Badges --\u003e\n\n\u003c!-- Websites / Links - Up / Down --\u003e\n\n[![NPM Package Link](https://img.shields.io/website?url=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fmicrostream-client\u0026style=for-the-badge\u0026logo=npm\u0026label=npm%20package\u0026labelColor=%23232323)](https://www.npmjs.com/package/microstream-client) \u0026nbsp;\u0026nbsp;\n[![GitHub Repository Link](https://img.shields.io/website?url=https%3A%2F%2Fgithub.com%2Farijitcodes%2Fmicrostream-client\u0026style=for-the-badge\u0026logo=github\u0026label=repository\u0026labelColor=%23232323)](https://github.com/arijitcodes/microstream-client) \u0026nbsp;\u0026nbsp;\n\n\u003c!-- NPM Badges --\u003e\n\n[![NPM License](https://img.shields.io/npm/l/microstream-client?style=for-the-badge\u0026logo=npm\u0026labelColor=%23232323\u0026color=%23404040)](https://github.com/arijitcodes/microstream-client/blob/main/LICENSE.md) \u0026nbsp;\n[![NPM Version](https://img.shields.io/npm/v/microstream-client?style=for-the-badge\u0026logo=npm\u0026labelColor=%23232323\u0026color=%23404040)](https://www.npmjs.com/package/microstream-client) \u0026nbsp;\n[![npm collaborators](https://img.shields.io/npm/collaborators/microstream-client?style=for-the-badge\u0026logo=npm\u0026label=collaborators\u0026labelColor=%23232323\u0026color=%23404040)](https://www.npmjs.com/package/microstream-client) \u0026nbsp;\n[![npm type definitions](https://img.shields.io/npm/types/microstream-client?style=for-the-badge\u0026logo=npm\u0026labelColor=%23232323)](https://www.npmjs.com/package/microstream-client) \u0026nbsp;\n\n\u003c!-- GitHub Badges --\u003e\n\n[![GitHub License](https://img.shields.io/github/license/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=232323\u0026color=404040)](https://github.com/arijitcodes/microstream-client/blob/main/LICENSE) \u0026nbsp;\n[![GitHub language count](https://img.shields.io/github/languages/count/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=%23232323\u0026color=%23404040)](https://github.com/arijitcodes/microstream-client) \u0026nbsp;\n[![GitHub top language](https://img.shields.io/github/languages/top/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=%23232323)](https://github.com/arijitcodes/microstream-client) \u0026nbsp;\n[![GitHub last commit (branch)](https://img.shields.io/github/last-commit/arijitcodes/microstream-client/main?style=for-the-badge\u0026logo=github\u0026labelColor=%23232323)](https://github.com/arijitcodes/microstream-client/commits/main) \u0026nbsp;\n\n[![GitHub contributors](https://img.shields.io/github/contributors/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=232323\u0026color=404040)](https://github.com/arijitcodes/microstream-client/graphs/contributors) \u0026nbsp;\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=232323\u0026color=404040)](https://github.com/arijitcodes/microstream-client/pulls) \u0026nbsp;\n[![GitHub issues](https://img.shields.io/github/issues/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=232323\u0026color=404040)](https://github.com/arijitcodes/microstream-client/issues) \u0026nbsp;\n[![GitHub repo size](https://img.shields.io/github/repo-size/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=232323\u0026color=404040)](https://github.com/arijitcodes/microstream-client) \u0026nbsp;\n[![GitHub code size](https://img.shields.io/github/languages/code-size/arijitcodes/microstream-client?style=for-the-badge\u0026logo=github\u0026labelColor=232323\u0026color=404040)](https://github.com/arijitcodes/microstream-client) \u0026nbsp;\n\n\u003c!-- Others --\u003e\n\n[![Semantic-Release Badge](https://img.shields.io/badge/semantic--release-e10079?style=for-the-badge\u0026logo=semantic-release\u0026labelColor=%23232323)](https://github.com/semantic-release/semantic-release) \u0026nbsp;\n[![Commitizen Friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen?style=for-the-badge\u0026labelColor=%23232323\u0026color=brightGreen)](https://commitizen.github.io/cz-cli/) \u0026nbsp;\n[![Conventional Commits Badge](https://img.shields.io/badge/conventional_commits-404040?style=for-the-badge\u0026logo=conventionalcommits\u0026labelColor=%23232323\u0026color=%23404040)](https://www.conventionalcommits.org) \u0026nbsp;\n\n\u003chr\u003e\n\n## Table of Contents 📚\n\n- [Features ✨](#features-)\n- [How Does It Work? 🌟](#how-does-it-work-)\n- [Installation 🛠️](#installation-)\n- [Usage 🚀](#usage-)\n- [Configuration Options ⚙️](#configuration-options-)\n- [Log Levels 📊](#log-levels-)\n- [Error Handling 🚨](#error-handling-)\n- [MicroStream Hub 🏢](#microstream-hub-)\n- [Author 👨‍💻](#author-)\n- [Contributing 🤝](#contributing-)\n- [License 📜](#license-)\n\n\u003chr\u003e\n\n## Features ✨\n\n- 🔄 Real-time inter-service communication using WebSockets.\n- ⚡ Synchronous request-response pattern without HTTP overhead.\n- 🔍 Auto-discovery and connection management.\n- 📊 Configurable logging for better observability.\n- 🏢 Central WebSocket server for real-time communication between microservices (provided by the hub).\n- 🔗 Service discovery and registration (provided by the hub).\n- 📡 Request routing and response handling (provided by the hub).\n- ❤️ Heartbeat mechanism to detect and remove inactive services (provided by the hub).\n- ⏳ Late response handling even after a request timeout.\n\n\u003chr\u003e\n\n## How Does It Work? 🌟\n\n**MicroStream** simplifies communication between microservices using a **centralized hub-and-spoke architecture**, also known as a **star network**. In this model, the **[MicroStream Hub](https://github.com/arijitcodes/microstream-hub)** acts as the central communication point, and your microservices, equipped with the **[MicroStream Client](https://github.com/arijitcodes/microstream-client)**, connect to the Hub and communicate through it.\n\nHere's how it works:\n\n### 🌟 The Star Network Concept\n\nImagine a star:\n\n- The **center of the star** is the **[MicroStream Hub](https://github.com/arijitcodes/microstream-hub)**.\n- The **points of the star** are your **microservices** (each equipped with the **[MicroStream Client](https://github.com/arijitcodes/microstream-client)**).\n\n![MicroStream Star Network Diagram](https://mermaid.ink/svg/eyJjb2RlIjoiZ3JhcGggVERcbiAgICBIdWJbTWljcm9TdHJlYW0gSHViXSAtLT4gU2VydmljZTFbU2VydmljZSAxXVxuICAgIEh1YiAtLT4gU2VydmljZTJbU2VydmljZSAyXVxuICAgIEh1YiAtLT4gU2VydmljZTNbU2VydmljZSAzXVxuICAgIEh1YiAtLT4gU2VydmljZTRbU2VydmljZSA0XVxuICAgIEh1YiAtLT4gU2VydmljZTVbU2VydmljZSA1XVxuIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQiLCJsaW5lV2lkdGgiOiIzIn19)\n\nIn this setup:\n\n- The **Hub** acts as the central communication point.\n- **Services** (nodes) connect to the Hub and communicate through it, **not directly with each other**.\n\n### 🚀 How It Works in Practice\n\n1. **Service Registration**:\n\n   - Each microservice connects to the Hub using the **[MicroStream Client](https://github.com/arijitcodes/microstream-client)**.\n   - The **[Hub](https://github.com/arijitcodes/microstream-hub)** automatically detects and registers the service.\n\n2. **Request-Response Communication in Real-Time**:\n\n   - When **Service A** needs to talk to **Service B**, it sends a request to the **[Hub](https://github.com/arijitcodes/microstream-hub)**.\n   - The **[Hub](https://github.com/arijitcodes/microstream-hub)** routes the request to **Service B**.\n   - **Service B** processes the request and sends a response back through the **[Hub](https://github.com/arijitcodes/microstream-hub)**.\n   - All communication happens in **real-time** over WebSockets, ensuring fast and reliable data exchange.\n\n3. **Auto-Discovery**:\n\n   - Once connected, the **[Hub](https://github.com/arijitcodes/microstream-hub)** keeps track of all connected services, so you don’t need to manually configure connections between services. However, you still need to specify the target service and method when sending a request.\n\n4. **Heartbeat Mechanism**:\n\n   - Services send regular \"heartbeats\" to the **[Hub](https://github.com/arijitcodes/microstream-hub)** to confirm they’re active.\n   - If a service stops sending heartbeats, the **[Hub](https://github.com/arijitcodes/microstream-hub)** removes it from the network.\n\n5. **Late Response Handling**:\n   - If a request times out, you can optionally allow late responses to be handled via a callback.\n   - This is useful for scenarios where the target service may respond after the timeout period - and the request is for something that can be done in the background or processed later.\n\n### ✨ Why Choose MicroStream?\n\n**MicroStream** is designed to make microservice communication **simple**, **efficient**, and **scalable**. Here’s why you’ll love it:\n\n- **Easy Setup**: Minimal configuration required to get started.\n- **Real-Time Request-Response Communication**: Built on WebSockets for instant, reliable data exchange.\n- **Auto-Service-Management**: Once connected, the **[Hub](https://github.com/arijitcodes/microstream-hub)** keeps track of all services, simplifying network management.\n- **Scalable**: Easily add more services without reconfiguring the network.\n- **Lightweight**: Minimal overhead compared to traditional REST or gRPC.\n- **Flexible**: Works seamlessly with any microservice architecture.\n- **Late Response Handling**: Gracefully handle responses that arrive after a timeout.\n\n\u003chr\u003e\n\n## Installation 🛠️\n\n```bash\nnpm install microstream-client\n```\n\n\u003chr\u003e\n\n## Usage 🚀\n\n```javascript\nconst { MicrostreamClient } = require(\"microstream-client\");\n\n// Create a new MicrostreamClient instance with the necessary configuration\nconst client = new MicrostreamClient({\n  hubUrl: \"http://localhost:3000\", // URL of the Microstream Hub\n  serviceName: \"auth-service\", // Name of your service - it has to be unique\n  logLevel: \"debug\", // Enable debug logs\n});\n\n// Register a handler for incoming requests for event 'authenticate'\nclient.onRequest(\"authenticate\", (data) =\u003e {\n  console.log(\"Received authentication request:\", data);\n  return { success: true, token: \"sample-token\" }; // Respond to the request\n});\n\n// Register another handler for incoming request for another event\nclient.onRequest(\"another-event\", (data) =\u003e {\n  console.log(\"Received another-event request:\", data);\n  return { success: true, data: \"sample-data\" }; // Respond to the request\n});\n\n//  Send a request to 'jwt-service' and handle the response\ntry {\n  const response = await client.sendRequest(\"jwt-service\", \"generate_jwt\", {\n    userID: 123,\n  });\n  console.log(\"Received response:\", response);\n} catch (error) {\n  console.log(\"Error:\", error.message);\n}\n\n//  Send a request to 'profile-service' and handle the response\ntry {\n  const response = await client.sendRequest(\n    \"profile-service\",\n    \"fetch-profile-by-userID\",\n    { userID: 123 }\n  );\n  console.log(\"Received response:\", response);\n} catch (error) {\n  console.log(\"Error:\", error.message);\n}\n\n// Example of late response handling\ntry {\n  const response = await client.sendRequest(\n    \"jwt-service\",\n    \"generate_jwt\",\n    { userId: 123 },\n    true, // Allow late responses\n    (error, res) =\u003e {\n      if (error) {\n        console.log(\"Late response error:\", error.message);\n      } else {\n        console.log(\"Late response received:\", res);\n      }\n    }\n  );\n  console.log(\"Received response:\", response);\n} catch (error) {\n  console.log(\"Error:\", error.message);\n}\n```\n\n### Explanation 👨🏻‍🏫\n\n1. **Configuration**: The [`MicrostreamClient`](#microstreamclientoptions) is configured with the URL of the [Microstream Hub](#microstream-hub-), the unique registration name of your service, and the log level.\n2. **Registering Handlers**: The `onRequest` method is used to register a handler for incoming requests. In this example, handlers respond to \"authenticate\" and \"another-event\" events.\n   - **Parameters**:\n     - `event`: The event name to listen for.\n     - `handler`: The function to handle the request. It receives the request data and returns the response.\n3. **Sending Requests**: The `sendRequest` method is used to send a request to another service. In this example, requests are sent to the \"jwt-service\" to generate a JWT and to the \"profile-service\" to fetch a profile by user ID.\n\n- **Parameters**:\n\n  - `targetService`: The name of the target service.\n  - `event`: The event name to trigger on the target service.\n  - `data`: Optional data to send with the request.\n  - `allowLateResponseAfterTimeout`: Whether to allow handling late responses after the request times out (default: `false`).\n  - `onLateResponse`: Optional callback to handle late responses. This callback is invoked if:\n    - `allowLateResponseAfterTimeout` is true, and\n    - A late response is received after the request has timed out.\n\n- **Returns**: A promise that resolves with the response from the target service.\n\n- **Error Handling**: The `sendRequest` method is wrapped in a try-catch block to handle any errors that may occur during the request. For example, if a request is sent to an invalid service, the [**Hub**](#microstream-hub-) will respond with an error, which will be received by the client and thrown accordingly. The catch block will catch the error, and the user can display it using the `error.message` property. For more error related info, please have a look at the [Error Structure](#error-structure-) or the [Error Handling Section](#error-handling-)\n\n\u003chr\u003e\n\n## Configuration Options ⚙️\n\n### MicrostreamClientOptions\n\n- `hubUrl`: URL of the Microstream Hub.\n- `serviceName`: A Unique Service Registation Name of the service connecting to the hub.\n- `timeout`: Timeout for requests in milliseconds (default: 5000).\n- `heartbeatInterval`: Interval for sending heartbeats in milliseconds (default: 5000).\n- [`logLevel`](#log-levels-): Log level for the client (default: \"info\").\n\n### Important Notes 📝\n\n- **Service names** must be **unique** across your entire system. The Hub will reject any connection attempts from services trying to register with an already registered name.\n- If your service attempts to connect with a name that's already registered:\n  - The connection will be rejected\n  - An error will be thrown with code `DUPLICATE_SERVICE_REGISTRATION`\n  - The process will automatically terminate to prevent conflicts\n\n\u003chr\u003e\n\n## Log Levels 📊\n\n- `debug`: Log everything (useful for development).\n- `info`: Log info, warnings, and errors.\n- `warn`: Log warnings and errors.\n- `error`: Log only errors.\n- `silent`: Disable all logs.\n\n\u003chr\u003e\n\n## Error Handling 🚨\n\n**[MicroStream Client](https://github.com/arijitcodes/microstream-client)** implements standardized error handling using a `CustomError` class. All errors follow a consistent structure to help with error management and debugging.\n\n### Error Structure 📋\n\n```typescript\n{\n  code: string;        // Error identification code\n  message: string;     // Human readable error message\n  errorData?: any;     // Optional contextual data\n}\n```\n\n### Standard Error Codes 📝\n\nThe **[Client](https://github.com/arijitcodes/microstream-client)** may throw the following error types:\n\n| Error Code                       | Description                                                                              |\n| -------------------------------- | ---------------------------------------------------------------------------------------- |\n| `INTERNAL_SERVER_ERROR`          | Occurs when an event handler fails during execution                                      |\n| `EVENT_NOT_FOUND`                | Thrown when no handler is registered for the requested event                             |\n| `REQUEST_TIMEOUT`                | Occurs when a request exceeds the configured timeout period                              |\n| `DUPLICATE_SERVICE_REGISTRATION` | Thrown when attempting to register a service name that's already in use                  |\n| `TARGET_SERVICE_NOT_FOUND`       | Thrown when attempting to send a request to a service that isn't registered with the hub |\n\n### Usage Examples 💡\n\n```javascript\n// Example: Handling request errors\ntry {\n  const response = await client.sendRequest(\"auth-service\", \"validate-token\", {\n    token: \"xyz\",\n  });\n} catch (error) {\n  switch (error.code) {\n    case \"REQUEST_TIMEOUT\":\n      console.error(`Request timed out: ${error.message}`);\n      console.log(\"Request details:\", error.errorData);\n      break;\n    case \"EVENT_NOT_FOUND\":\n      console.error(`Event handler not found: ${error.message}`);\n      break;\n    case \"INTERNAL_SERVER_ERROR\":\n      console.error(`Service error: ${error.message}`);\n      console.log(\"Error context:\", error.errorData);\n      break;\n  }\n}\n```\n\n### Error Handling Best Practices 🎯\n\n1. Always wrap requests in `try-catch` blocks\n2. Check error codes for specific error handling\n3. Use `error.errorData` for additional context in debugging\n4. Handle `REQUEST_TIMEOUT` errors with appropriate retry logic\n5. Implement proper logging for `INTERNAL_SERVER_ERROR` cases\n6. Use `allowLateResponseAfterTimeout` and `onLateResponse` to handle late responses gracefully\n\n### Common Error Scenarios 🔄\n\n1. **Timeout Errors**\n\n   - Occurs when target service doesn't respond within timeout period\n   - Default timeout: 5000ms (configurable via options)\n   - Includes target service and event details in errorData\n\n2. **Event Not Found**\n\n   - Happens when requesting non-existent event handlers\n   - Includes event name and service details in errorData\n   - Check event name and target service configuration\n\n3. **Internal Server Errors**\n\n   - Triggered by exceptions in event handlers\n   - Contains original error details in errorData\n   - Useful for debugging service-side issues\n\n4. **Service Registration Errors**\n\n   - Occurs during initial connection\n   - Critical errors that may require process termination\n   - Check for duplicate service names in your network\n\n5. **Late Response Errors**\n\n   - Occurs when a response is received after the request has timed out\n   - Includes the original request payload and response data\n   - Use `onLateResponse` to handle these scenarios gracefully\n\n\u003chr\u003e\n\n## MicroStream Hub 🏢\n\nHere is the central hub for easy integration with the MicroStream Client SDK.\n\n- [MicroStream Hub on GitHub](https://github.com/arijitcodes/microstream-hub)\n- [MicroStream Hub Documentation](https://github.com/arijitcodes/microstream-hub#readme)\n\n\u003chr\u003e\n\n## Author 👨‍💻\n\nAuthor: [Arijit Banerjee](https://www.github.com/arijitcodes)\n\nAbout: Full Stack Web Developer | Cyber Security Enthusiast | Actor\n\nSocial Media: \u0026nbsp;\n[![Instagram](https://i.ibb.co/4t76vTc/insta-transparent-14px.png) Instagram](https://www.instagram.com/arijit.codes)\n\u0026nbsp;\n[![Linkedin](https://i.stack.imgur.com/gVE0j.png) LinkedIn](https://www.linkedin.com/in/arijitban)\n\u0026nbsp;\n[![GitHub](https://i.stack.imgur.com/tskMh.png) GitHub](https://github.com/arijitcodes)\n\u0026nbsp;\n[![Website](https://i.ibb.co/wCV57xR/Internet-1.png) Website](https://iamarijit.dev)\n\nEmail: arijit.codes@gmail.com\n\n\u003chr\u003e\n\n## Contributing 🤝\n\nWe welcome contributions! Please see our [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines on how to contribute to this project.\n\n\u003chr\u003e\n\n## License 📜\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.\n\n\u003chr\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farijitcodes%2Fmicrostream-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farijitcodes%2Fmicrostream-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farijitcodes%2Fmicrostream-client/lists"}