{"_id":"@andrewfarinella/mapi","_rev":"4-baf7138815e826c70ddad00e89b85279","name":"@andrewfarinella/mapi","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.0":{"name":"@andrewfarinella/mapi","version":"0.1.0","description":"A simple RESTful API interface","main":"index.js","scripts":{"test":"bundlesize"},"repository":{"type":"git","url":"git+https://github.com/andrewfarinella/mapi.git"},"keywords":["node","rest","api"],"author":{"name":"Andrew Farinella"},"license":"MIT","bugs":{"url":"https://github.com/andrewfarinella/mapi/issues"},"homepage":"https://github.com/andrewfarinella/mapi#readme","dependencies":{"axios":"^0.18.0"},"devDependencies":{"bundlesize":"^0.17.0","webpack":"^4.8.3","webpack-cli":"^2.1.3","webpack-dev-server":"^3.1.4"},"gitHead":"382b04f019c6ed02af49644f949fa65c50754f12","_id":"@andrewfarinella/mapi@0.1.0","_npmVersion":"5.8.0","_nodeVersion":"9.10.1","_npmUser":{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"},"dist":{"integrity":"sha512-7brGfi0fhP3U1JzgvyHxhYsgulDYJY0orUZYj3nVTkSDEF9yzrDHZr2CUigdOjagtB4z/IRMlzPT1JFtvIVUgA==","shasum":"85be6790bc889452a10b7df6ba694d471baaebf9","tarball":"https://registry.npmjs.org/@andrewfarinella/mapi/-/mapi-0.1.0.tgz","fileCount":8,"unpackedSize":210784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBNDyCRA9TVsSAnZWagAASnsQAImsTQ5X32sQWrAB8uDe\nR2FzbA6gzPjcUJ6dmVJWXD9zqmxJ21ub+p5gof/gCniXsdOS4mEIwYmMbYws\nqRtBnlUcG8DO5pljyIvVWzrUtyer2GeXlMq8tKNRKb4qYz5l1EAMunx++/oH\ntInriJwyCH1UgYx9taiuclqsORKcpsrN7EJrRZzRRYXmCfR6MtWt/lH0E4xl\nOSRzvD0qeojoEu8lU1XoIU+HlmmH+MiyDtMigMrW7OAffk0N6Yo+xA5u1wua\n9KqzE+wfO7P7pOzrEHcP62mb1JvbD8DfASsxIlG6pqxZ/FMxp4wvXDQ6fxdU\nxvFYvM4le0i+DXDkP4pgNkychS8pjLVIpjylvex8PaRarKpx2AloC/oeazWq\nYCDmneapdPQXRW4LmQhP7yKhO9bhX4Kx3WsjICgTFIayg3AaOpokxfcE3zV/\nFWyOw8fAss8vhzWqZP9ZLZXBKSbQbDx8iy9C3Sonj2+Jri47PYWj5ekguNx7\nlpaYSk7+P4Y3nKCy/T7JJGCsrQrCooDIvSjSQc4hPogOxOSwM1+9/BvHQiHA\nEi5xsDaJEoowNoS4MMWWrj7dDyfml32TxBjCRgFzuiNIUnQTCMxer2xz3Vh4\nAZnGXNM/6zidV6QtjfWfVPWqKQQHA9CAcIk1B+/a7309vzG4VNSl/5pTqIUc\nILjF\r\n=Gx2e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCePtHE+oJ7lQAwXYUhTViUIhP3iwUCVuCsUmYd+0Fl4AIgYiRg/r4xOUS6UvtMsuIuHEL1HAf0A1ESs4MazZMMNUs="}]},"maintainers":[{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mapi_0.1.0_1527042289815_0.8555614911120901"},"_hasShrinkwrap":false,"deprecated":"this package has been deprecated"},"0.1.1":{"name":"@andrewfarinella/mapi","version":"0.1.1","description":"A simple RESTful API interface","main":"dist/main.js","module":"dist/main.js","browser":"dist/main.js","bundlesize":[{"path":"./dist/main.js","maxSize":"5 kB"}],"scripts":{"build":"rollup -c","dev":"rollup -c -w","publish":"npm publish --access=public","test":"nyc mocha --exit && nyc report --reporter=text-lcov | coveralls && bundlesize","test:default":"npm run build && mocha --exit && bundlesize","pretest":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/andrewfarinella/mapi.git"},"keywords":["node","rest","api"],"author":{"name":"Andrew Farinella"},"license":"MIT","bugs":{"url":"https://github.com/andrewfarinella/mapi/issues"},"homepage":"https://github.com/andrewfarinella/mapi#readme","dependencies":{"axios":"^0.18.0"},"devDependencies":{"babel-core":"^6.26.3","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.1","eslint-config-standard":"^11.0.0","eslint-plugin-import":"^2.12.0","eslint-plugin-node":"^6.0.1","eslint-plugin-promise":"^3.7.0","eslint-plugin-standard":"^3.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nyc":"^11.8.0","rollup":"^0.59.2","rollup-plugin-babel":"^3.0.4","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-eslint":"^4.0.0","rollup-plugin-json":"^3.0.0","rollup-plugin-node-resolve":"^3.3.0"},"gitHead":"e6b7d248d472cf37721399bf76f91473f2ea6047","_id":"@andrewfarinella/mapi@0.1.1","_npmVersion":"5.8.0","_nodeVersion":"9.10.1","_npmUser":{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"},"dist":{"integrity":"sha512-2flcIGV8ZoSPwc/33HC3QFrrr0Zrp9woi4jGBcCmnW2NIJekphXCbnsNNp4giwo/ITS1qBbvJ2D7wFAbDBgu6Q==","shasum":"1fa6d8d5c9c87bd639024b6d4d425178df1b021c","tarball":"https://registry.npmjs.org/@andrewfarinella/mapi/-/mapi-0.1.1.tgz","fileCount":14,"unpackedSize":163155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBR3LCRA9TVsSAnZWagAA0xYP+wRjBTnebHA5dG2HilE9\nBX/kpF7mfsiNBuu+0AB3673W9he2Xs+igp2+jWolH9n/LKXG+EIskqQJhw2a\nS0gkLrgLsK0wdb5lMLIOUXGQGFg8/EFkq22V9DOE//zUiDkFcWrqsGoVBG+T\n24E6fUDQfYtnrBLAa4nY/QKgHSXJrsSp7o9OCjLVboJhg4B/uCVMmW0IdG+k\n4Urzs7LGVV706+j+bnDpUDadd3uvxa8zhepbRwJY880PNJkDsYIQbU7H4m7S\nrgFYQij+dj410aMeHYSTRFsdVcW/bM2t9hCWMzHCtTpkJxNQw6LeqVSoyfru\nIUVv63k/h5OhP75LkVXBC7KlE5lfgSFZusZy+kl47JCkpRpF31vP0lmE3jeg\nJkZx5yJAvDk+Klgv2dhT0SHedwTf9uqL5gReed7JpohHpCw+Bo3yl/9L05yQ\nj1rYU/tTJ21GmVOEAOrktAWD2oGoKku94gL2YlKu+AsCEwO+krsXBBaw1Xsc\nW82MuV/lD7CEuR0m9g7aJquy3vpcpyUGLttBOJ2CPUAyrso22GNaxJESQZxZ\nvKCoxLb42jorYNY5z3jqCrQ6Qu556Os0irakPG5phSPdyp7fyc+At7395WwZ\nvy4Rl46qeDQp9OcoJjHw/9Q9DYM7skXjWs2GdTydk0Xb9DRQvW52d1oFFTCX\nTldF\r\n=C+Rh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkFA8jA0mlt0DkQV3cy7WQTHBWnCO5QczaWwdL7dfM0AiAi1+RbjxZuC7YWjfOWhwfnwD++INYNzXYVs2RXkULAmg=="}]},"maintainers":[{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mapi_0.1.1_1527061963065_0.8980413150889524"},"_hasShrinkwrap":false,"deprecated":"this package has been deprecated"},"0.2.2":{"name":"@andrewfarinella/mapi","version":"0.2.2","description":"A simple RESTful API interface","main":"dist/main.js","module":"dist/main.js","browser":"dist/main.js","bundlesize":[{"path":"./dist/main.js","maxSize":"3 kB"}],"nyc":{"exclude":["dist","test","rollup.config.js"]},"scripts":{"build":"rollup -c","dev":"rollup -c -w","publish":"npm publish --access=public","test":"nyc mocha --exit && nyc report --reporter=text-lcov | coveralls && npm run test:bundlesize","test:default":"NODE_ENV=test npm run build && nyc mocha --exit","test:coverage":"nyc --reporter=lcov  --reporter=text-lcov npm run test:default","test:watch":"mocha -w","test:bundlesize":"npm run build && bundlesize","pretest":"NODE_ENV=test npm run build"},"repository":{"type":"git","url":"git+https://github.com/andrewfarinella/mapi.git"},"keywords":["node","rest","api"],"author":{"name":"Andrew Farinella"},"license":"MIT","bugs":{"url":"https://github.com/andrewfarinella/mapi/issues"},"homepage":"https://github.com/andrewfarinella/mapi#readme","dependencies":{"axios":"^0.18.0"},"devDependencies":{"babel-core":"^6.26.3","babel-plugin-external-helpers":"^6.22.0","babel-plugin-istanbul":"^4.1.6","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.1","eslint-config-standard":"^11.0.0","eslint-plugin-import":"^2.12.0","eslint-plugin-node":"^6.0.1","eslint-plugin-promise":"^3.7.0","eslint-plugin-standard":"^3.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nyc":"^11.8.0","rollup":"^0.59.2","rollup-plugin-babel":"^3.0.4","rollup-plugin-babel-minify":"^5.0.0","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-eslint":"^4.0.0","rollup-plugin-json":"^3.0.0","rollup-plugin-node-resolve":"^3.3.0"},"gitHead":"f293534678f2d9246a1ec2ef3ca9cf2507f1b90a","_id":"@andrewfarinella/mapi@0.2.2","_npmVersion":"5.8.0","_nodeVersion":"9.10.1","_npmUser":{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"},"dist":{"integrity":"sha512-Sg2Dqut9jAe3IvrkecP/piRUtLJefojuYEY6Yf42sumGKcKAqdaF1AYGKUmmdigiFsI1Num2D3/6a58mmQthsw==","shasum":"d12f0b905ca2f63e777ca316235655b32c68e35f","tarball":"https://registry.npmjs.org/@andrewfarinella/mapi/-/mapi-0.2.2.tgz","fileCount":17,"unpackedSize":232533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBniDCRA9TVsSAnZWagAAWVYQAITYsZPq0mWBrvHLbbdw\nEqHpwy6E+fQNUnwAJZEcgx+H2liEGIRj8vlwlq6V0XrvIHQEqhUZu2Kz7LAQ\nCK4MyV/ITsj1ybPaTCD0u4f9axBOsi/Gu1KZd5K89oy+N/Xn1iqAEh1D9eUI\n7LqOXDpvMmP4PblRz1ISp9YC/DqmdIaieiXQ2Nsvg4RJcRfDvkQFk3YjX6PZ\n+R2XMG7JGBlPWUmKkL9le+FVOShDJVqJ03BNwLJKNq8tL6/21qV/H4K3PYFf\nQANAkk1OcpCz8zktogwA0Ih5SIO6wOE3L9Fc++FLxif8ldVQxzLyzqtRha5s\nTtf5ttI73Ewp52tG5HskIm9KULE6FPr2dcyU7WXvZddsVbgE6N/DvaH4jdYT\niI66f7W0Sxssp1+JVBsN8Dfp0PgoSokbg/hiGIwCgLbdjQK+LbbVMSNahloT\nozPpsEL8DdmVzUY+hxzGjq3LY3hBxWLWQAxbvZVEACKHFFXg5BE3Y/3OzBhj\ny+AHf8WrmCWXwPFryFCiDwZ87w30l+5FbCGpgB3t4EVLTysapWsFFaDqt4am\nR7de4UMqGmKAqjDQAlTRQWZOQXhLSfqzJ81FFn+2Rg2ZN4WZui3kavoLgsXk\nIqMsWTNJaGnCNzjlZAo4CsbXX3FlWIdLFpBDx3PrP40eBF+alpoEafQnCGa+\nRSRC\r\n=GniC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF2QtWcNUb+KwvEDd//XcLKAL7eLXb2mJl603fJws5YgIhAK8lqo4/dPA6T8cNim25weRsII3JBzyTmOOmjI/AnfMn"}]},"maintainers":[{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mapi_0.2.2_1527150722076_0.5022240153490858"},"_hasShrinkwrap":false,"deprecated":"this package has been deprecated"}},"time":{"created":"2018-05-23T02:24:49.563Z","0.1.0":"2018-05-23T02:24:49.960Z","modified":"2022-04-04T14:01:25.742Z","0.1.1":"2018-05-23T07:52:43.197Z","0.2.2":"2018-05-24T08:32:02.173Z"},"maintainers":[{"name":"andrewfarinella","email":"andrew.farinella@gmail.com"}],"description":"A simple RESTful API interface","homepage":"https://github.com/andrewfarinella/mapi#readme","keywords":["node","rest","api"],"repository":{"type":"git","url":"git+https://github.com/andrewfarinella/mapi.git"},"author":{"name":"Andrew Farinella"},"bugs":{"url":"https://github.com/andrewfarinella/mapi/issues"},"license":"MIT","readme":"# mapi\n[![Build Status](https://travis-ci.org/andrewfarinella/mapi.svg?branch=master)](https://travis-ci.org/andrewfarinella/mapi) [![Coveralls github branch](https://img.shields.io/coveralls/github/andrewfarinella/mapi/master.svg)](https://coveralls.io/github/andrewfarinella/mapi?branch=master) [![npm version](https://badge.fury.io/js/%40andrewfarinella%2Fmapi.svg)](https://badge.fury.io/js/%40andrewfarinella%2Fmapi)\n\n---\nA simple RESTful API interface.\n\n## Install\n\nNPM\n```bash\n$ npm install @andrewfarinella/mapi --save\n```\n\nYarn\n```bash\n$ yarn add @andrewfarinella/mapi\n```\n\n## Example\n\n```js\nimport Mapi from '@andrewfarinella/mapi'\n\nconst api = new Mapi({\n    base: 'http://localhost:8080',\n    services: [ 'posts' ]\n});\n\napi.posts.get(1)\n    .then(response => {\n        // Do whatever...\n    }).catch(err => {\n        // Handle error...\n    })\n```\n\n## Usage\n\n### Import\n\n```js\nimport mapi from '@andrewfarinella/mapi'\n\n// or\n\nmapi = require('@andrewfarinella/mapi')\n```\n\n### mapi setup\n\n```js\nconst api = mapi({\n    base: 'http://localhost:8080',\n    headers: [\n        ['Authorization', 'MyKeyHere']\n    ],\n    services: [\n        {\n            name: 'posts',\n            base: '/different-base'\n        },\n        'comments'\n    ]\n})\n```\n### Service setup\nServices can be registered either at setup or afterwards using the `mapi.registerService()` method.\n\nThe only required property is `name`. If `base` is not supplied, the base will be generated based on the `name` property.\n```js\napi = mapi({base: 'http://localhost:8080'})\n\napi.registerService({\n  name: 'posts',\n    base: '/posts',\n    defaultEndpoints: true,\n    hasHealthCheck: true,\n    healthCheck: {\n      method: 'GET',\n      endpoint: '/health',\n      hasBody: false,\n      requiresAuth: false,\n      alias: 'health'\n    },\n    endpoints: [\n      {\n        method: 'GET',\n        endpoint: '/:id?',\n        hasParams: true,\n        hasBody: false,\n        requiresAuth: true,\n        alias: 'get'\n      },\n      {\n        method: 'POST',\n        endpoint: '/',\n        hasParams: false,\n        hasBody: true,\n        requiresAuth: true,\n        alias: 'create'\n      },\n      {\n        method: 'PUT',\n        endpoint: '/:id',\n        hasParams: true,\n        hasBody: true,\n        requiresAuth: true,\n        alias: 'update'\n      },\n      {\n        method: 'DELETE',\n        endpoint: '/:id',\n        hasParams: true,\n        hasBody: false,\n        requiresAuth: true,\n        alias: 'delete'\n      }\n    ],\n    services: [\n      {\n        name: 'new' // Builds to /posts/new\n      }\n    ]\n})\n```\n\n### Endpoint setup\n\nEndpoints can be registered when a service is registered or by calling `service.registerEndpoint()`.\n\nWhile the only required field for endpoints is `alias`, the endpoint URL will not auto-generate based on the `alias` property, but instead will default to `'/'`. This may have unintended side-effects, so it's recommended that an `endpoint` property always be supplied as well.\n\n```js\napi = mapi({base: 'http://localhost:8080', services: ['posts']})\n\napi.posts.registerEndpoint({\n  method: 'GET',\n  endpoint: '/:id',\n  hasParams: true,\n  params: [\n    {\n      slug: 'id',\n      pattern: ':id',\n      required: true\n    }\n  ]\n  hasBody: false,\n  alias: 'get'\n})\n```\n\nIf no parameters are listed but `hasParams` is set to true and there is at least one `:` in the endpoint, mapi will attempt to discover the parameters automatically. If a parameter is not required, it can be indicated by ending it with `?` such as `/:id?`.\n\n### Making Calls\nWhen making a call to a registered endpoint, the number of arguments expected depends on the `hasParams` and `hasBody` properties.\n```js\n// hasParams === false && hasBody === false\napi.posts.get()\n  .then((response => {})).catch(err => {})\n\n// hasParams === true && hasBody === false\napi.posts.get(params)\n  .then((response => {})).catch(err => {})\n\n// hasParams === false &&& hasBody === true\napi.posts.create(body)\n  .then((response => {})).catch(err => {})\n\n// hasParams === true &&& hasBody === true\napi.posts.update(params, body)\n  .then((response => {})).catch(err => {})\n```\n\nParameters can be passed to the call as either a string, integer, or an object.\n```js\n// Endpoint has only one parameter, so we can pass it a string/integer\n\n// /posts/:id\napi.posts.get(1) // /posts/1\n\n// /posts/:slug\napi.posts.get('my-post-slug') // /posts/my-post-slug\n\n// Parameters can also be passed within an object\n\n// /posts/:id/comments/:commentId\napi.posts.getComments({\n  id: 1,\n  commentId: 3\n})\n```","readmeFilename":"README.md"}