{"id":20901565,"url":"https://github.com/willfarrell/middy-jsonapi","last_synced_at":"2025-05-13T03:30:48.071Z","repository":{"id":32432159,"uuid":"132646380","full_name":"willfarrell/middy-jsonapi","owner":"willfarrell","description":"JSONAPI middleware for middy","archived":false,"fork":false,"pushed_at":"2023-04-24T23:30:37.000Z","size":668,"stargazers_count":7,"open_issues_count":7,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-16T05:19:41.666Z","etag":null,"topics":["jsonapi","middy"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/willfarrell.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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}},"created_at":"2018-05-08T18:03:54.000Z","updated_at":"2025-02-24T13:30:33.000Z","dependencies_parsed_at":"2024-06-21T16:45:11.289Z","dependency_job_id":"e34c54c8-1947-413d-9b47-8dba56762b5b","html_url":"https://github.com/willfarrell/middy-jsonapi","commit_stats":{"total_commits":27,"total_committers":3,"mean_commits":9.0,"dds":"0.11111111111111116","last_synced_commit":"bd26ebb72b3409a99ec0c5cd4a678055ea4a5c8e"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willfarrell%2Fmiddy-jsonapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willfarrell%2Fmiddy-jsonapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willfarrell%2Fmiddy-jsonapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willfarrell%2Fmiddy-jsonapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willfarrell","download_url":"https://codeload.github.com/willfarrell/middy-jsonapi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253867340,"owners_count":21976206,"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":["jsonapi","middy"],"created_at":"2024-11-18T11:36:01.517Z","updated_at":"2025-05-13T03:30:47.759Z","avatar_url":"https://github.com/willfarrell.png","language":"JavaScript","readme":"# middy-jsonapi\nJSONAPI middleware for middy\n\n## Why\n- format lambda response to meet the [jsonapi](http://jsonapi.org) standard\n\n## Getting Started\n```bash\nnpm i middy middy-jsonapi\n```\n\n### Requirements\nSee below for full example.\n\n#### Accept Header\nThe `Accept` is required to be `application/vnd.api+json`\n```\n.use(\n      httpContentNegotiation({\n        availableMediaTypes: ['application/vnd.api+json']\n      })\n    )\n```\n\n#### Validation\nThis middleware expects `400 Bad Request` to be returned from the `validator` middleware provided from `middy/middleware` or equivalent [`ajv`](https://github.com/epoberezkin/ajv) error format.\n\n## Features\n### Request\n- Parses `include`, `fields`, `sort`, `page` query parameters\n- See `middy-jsonapi-filter-*` for `filter` parsing [TODO]\n\n### Response\n- Format errors to meet standard\n- Supports `page-based` and `offset-based` pagination auto generate `links` from `meta.total` \u0026 `meta.count`\n\n## Deployment\n\n```javascript\nconst middy = require('middy')\nconst {\n  cache,\n  cors,\n  doNotWaitForEmptyEventLoop,\n  functionShield,\n  httpEventNormalizer,\n  httpHeaderNormalizer,\n  httpContentNegotiation,\n  httpSecurityHeaders,\n  jsonBodyParser,\n  secretsManager,\n  ssm,\n  urlEncodeBodyParser,\n  validator,\n  warmup\n} = require('middy/middlewares')\nconst jsonapi = require('middy-jsonapi')\nconst authorization = require('../middleware/authorization')\n\nconst ajvOptions = {\n  v5: true,\n  format: 'full',\n  coerceTypes: 'array',\n  allErrors: true,\n  useDefaults: true,\n  $data: true\n}\n\nconst meta = require('../../package.json')\nconst response = {\n  jsonapi: { version:'1.0' },\n  meta: {\n    version: `v${meta.version}`,\n    copyright: meta.copyright,\n    authors: meta.authors,\n    now: new Date().toISOString()\n  }\n}\n\n// cache\nconst myStorage = {}\nconst getValue = key =\u003e Promise.resolve(myStorage[key])\n\nconst setValue = (key, value) =\u003e {\n  myStorage[key] = value\n  return Promise.resolve()\n}\n\nmodule.exports = (app, { inputSchema, outputSchema }) =\u003e\n  middy(app)\n    .use(warmup())\n    //.use(ssm({\n    //   cache: true,\n    //   setToContext: true\n    // }))\n    //.use(secretsManager({\n    //  cache: true\n    //}))\n    .use(functionShield({\n      policy: { disable_analytics: true }\n    }))\n    .use(doNotWaitForEmptyEventLoop())\n    .use(httpEventNormalizer())\n    .use(httpHeaderNormalizer())\n    .use(urlEncodeBodyParser())\n    .use(jsonBodyParser())\n    .use(httpSecurityHeaders())\n    .use(cors())\n    //.use(cache())\n    .use(jsonapi({ response })) // Replaces: httpErrorHandler\n    .use(\n      httpContentNegotiation({\n        availableLanguages: ['en-CA', 'fr-CA'],\n        availableMediaTypes: ['application/vnd.api+json']\n      })\n    )\n    //.use(authorization())\n    .use(validator({ inputSchema, outputSchema, ajvOptions }))\n```\n\n### Response Deserialization\nWe recommend [`kitsu-core`](https://github.com/wopian/kitsu) for deserializing \n\n```javascript\nconst { deserialise } = require('kitsu-core/node')\n\nconst jsonapiDeserialise = body =\u003e {\n  deserialise(body)\n  return body\n}\n```\n\n## Built With\n- [middy](https://github.com/middyjs/middy)\n\n## Authors\n- [willfarrell](https://github.com/willfarrell/)\n\n## License\nThis project is licensed under the MIT License - see the LICENSE file for details\n\n## TODO\n- deserilize middleware\n- json schema definitions\n- Add in jsonapi ~= for httpPartialResponse\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillfarrell%2Fmiddy-jsonapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillfarrell%2Fmiddy-jsonapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillfarrell%2Fmiddy-jsonapi/lists"}