{"id":18862194,"url":"https://github.com/hapinessjs/consul-module","last_synced_at":"2026-02-09T22:30:20.302Z","repository":{"id":57115149,"uuid":"128185136","full_name":"hapinessjs/consul-module","owner":"hapinessjs","description":"Consul client integration for Hapiness framework","archived":false,"fork":false,"pushed_at":"2019-04-09T12:47:38.000Z","size":47,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-01-31T03:34:25.079Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/hapinessjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-05T09:28:55.000Z","updated_at":"2021-03-30T17:01:56.000Z","dependencies_parsed_at":"2022-08-22T11:41:14.910Z","dependency_job_id":null,"html_url":"https://github.com/hapinessjs/consul-module","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hapinessjs%2Fconsul-module","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hapinessjs%2Fconsul-module/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hapinessjs%2Fconsul-module/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hapinessjs%2Fconsul-module/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hapinessjs","download_url":"https://codeload.github.com/hapinessjs/consul-module/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239803165,"owners_count":19699623,"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","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":[],"created_at":"2024-11-08T04:33:37.436Z","updated_at":"2026-02-09T22:30:20.233Z","avatar_url":"https://github.com/hapinessjs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"http://bit.ly/2mxmKKI\" width=\"500\" alt=\"Hapiness\" /\u003e\n\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"line-height:60px\"\u003e\n    \u003ca href=\"https://travis-ci.org/hapinessjs/consul-module.svg?branch=master\"\u003e\n        \u003cimg src=\"https://travis-ci.org/hapinessjs/consul-module.svg?branch=master\" alt=\"build\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://coveralls.io/github/hapinessjs/consul-module?branch=master\"\u003e\n        \u003cimg src=\"https://coveralls.io/repos/github/hapinessjs/consul-module/badge.svg?branch=master\" alt=\"coveralls\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://david-dm.org/hapinessjs/consul-module\"\u003e\n        \u003cimg src=\"https://david-dm.org/hapinessjs/consul-module.svg\" alt=\"dependencies\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://david-dm.org/hapinessjs/consul-module?type=dev\"\u003e\n        \u003cimg src=\"https://david-dm.org/hapinessjs/consul-module/dev-status.svg\" alt=\"devDependencies\" /\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n    \u003ca href=\"https://www.typescriptlang.org/docs/tutorial.html\"\u003e\n        \u003cimg src=\"https://cdn-images-1.medium.com/max/800/1*8lKzkDJVWuVbqumysxMRYw.png\"\n             align=\"right\" alt=\"Typescript logo\" width=\"50\" height=\"50\" style=\"border:none;\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"http://reactivex.io/rxjs\"\u003e\n        \u003cimg src=\"http://reactivex.io/assets/Rx_Logo_S.png\"\n             align=\"right\" alt=\"ReactiveX logo\" width=\"50\" height=\"50\" style=\"border:none;\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"http://hapijs.com\"\u003e\n        \u003cimg src=\"http://bit.ly/2lYPYPw\"\n             align=\"right\" alt=\"Hapijs logo\" width=\"75\" style=\"border:none;\" /\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n# Consul Module\n\n```Consul``` module for the Hapiness framework.\n\nTo get started with consul, you can begin with having a look at the [consul official documentation](https://www.consul.io/)\n\n\n## Table of contents\n\n* [Using your module inside Hapiness application](#using-your-module-inside-hapiness-application)\n\t* [`yarn` or `npm` it in your `package.json`](#yarn-or-npm-it-in-your-package.json)\n* [Using `Consul` inside your hapiness application](#using-consul-inside-your-hapiness-application)\n\t* [Import the module](#import-the-module)\n\t* [Bootstrap the extension](#bootstrap-the-extension)\n\t* [Use the exposed service](#use-the-exposed-service)\n* [Contributing](#contributing)\n* [Maintainers](#maintainers)\n* [License](#license)\n\n\n## Using your module inside Hapiness application\n\n### `yarn` or `npm` it in your `package.json`\n\n```bash\n$ npm install --save @hapiness/core @hapiness/consul rxjs\n\nor\n\n$ yarn add @hapiness/core @hapiness/consul rxjs\n```\n\n```javascript\n\"dependencies\": {\n    \"@hapiness/consul\": \"^1.0.0\",\n    \"@hapiness/core\": \"^1.5.1\",\n    \"rxjs\": \"^5.5.7\",\n    //...\n}\n//...\n```\n\n## Using `Consul` inside your hapiness application\n\n### Import the module\n\nYou need to include ```ConsulModule``` in the ```imports``` section of your module definition.\n\n```typescript\n\n@HapinessModule(\n    {\n        version: '1.0.0',\n        declarations: [/* your declarations */],\n        providers: [/* your providers */],\n        exports: [/* your exports */],\n        imports: [ConsulModule /* other modules */]\n    }\n)\nexport class MyModule { /* ... */ }\n\n```\n\n### Bootstrap the extension\n\nYou need to inject the extension in bootstrap using setConfig to instantiate the module.\n\nThe config properties allowed for the extensions are defined like this:\n\n```typescript\n\nexport interface HapinessConsulClientOptions {\n    scheme?: string;\n    host?: string;\n    port?: string;\n    defaults?: {\n        consistent?: boolean;\n        dc?: string;\n        stale?: boolean;\n        token?: string;\n        wait?: string;\n        wan?: boolean;\n        ctx?: NodeJS.EventEmitter;\n        timeout?: number;\n    };\n    ca?: string;\n    baseUrl?: string;\n}\n\n```\n\nThen just do like this:\n\n```typescript\nHapiness\n    .bootstrap(\n        MyModule,\n        [\n            ConsulExt.setConfig({\n                /* Put your config here */\n            })\n        ])\n    .catch(err =\u003e done(err));\n```\n\n\n### Use the exposed service\n\nThis library is in fact a wrapper of the famous consul node library but wrap all its functions to returns ```rxjs Observable```\n\nYou can see the doc [by clicking here](https://www.npmjs.com/package/consul)\n\nWe provide a wrapper called ```ConsulService``` exposing a ```client```getter that will allow you to access the consul client.\n\n```typescript\n\nclass FooProvider {\n\n    constructor(private _consul: ConsulService) {}\n\n    bar(): Observable\u003cstring\u003e {\n        // Getting a key from the KV client of consul\n    \treturn this._consul.client.kv.get('hello');\n    }\n\n\n    acquireLock(): void {\n        // Create a consul lock\n        const lock = this._consul.client.lock({ key: 'test' });\n\n        // Listen to lock events\n        lock.on('acquire', () =\u003e {\n            console.log('lock acquired'));\n            lock.release();\n        });\n        lock.on('release', () =\u003e console.log('lock released'));\n        lock.on('error', () =\u003e console.log('lock error:', err));\n        lock.on('end', (err) =\u003e console.log('lock released or there was a permanent failure'));\n\n        // Acquire the lock\n        lock.acquire();\n    }\n\n}\n\n```\n\n[Back to top](#table-of-contents)\n\n## Contributing\n\nTo set up your development environment:\n\n1. clone the repo to your workspace,\n2. in the shell `cd` to the main folder,\n3. hit `npm or yarn install`,\n4. run `npm or yarn run test`.\n    * It will lint the code and execute all tests.\n    * The test coverage report can be viewed from `./coverage/lcov-report/index.html`.\n\n\n[Back to top](#table-of-contents)\n\n## Maintainers\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd colspan=\"4\" align=\"center\"\u003e\u003ca href=\"https://www.tadaweb.com\"\u003e\u003cimg src=\"http://bit.ly/2xHQkTi\" width=\"117\" alt=\"tadaweb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Juneil\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/6546204?v=3\u0026s=117\" width=\"117\"/\u003e\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/antoinegomez\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/997028?v=3\u0026s=117\" width=\"117\"/\u003e\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/reptilbud\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/6841511?v=3\u0026s=117\" width=\"117\"/\u003e\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/njl07\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/1673977?v=3\u0026s=117\" width=\"117\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Juneil\"\u003eJulien Fauville\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/antoinegomez\"\u003eAntoine Gomez\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/reptilbud\"\u003eSébastien Ritz\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/njl07\"\u003eNicolas Jessel\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n[Back to top](#table-of-contents)\n\n## License\n\nCopyright (c) 2018 **Hapiness** Licensed under the [MIT license](https://github.com/hapinessjs/consul-module/blob/master/LICENSE.md).\n\n[Back to top](#table-of-contents)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhapinessjs%2Fconsul-module","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhapinessjs%2Fconsul-module","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhapinessjs%2Fconsul-module/lists"}