{"id":42166336,"url":"https://github.com/pmu-tech/stub-server","last_synced_at":"2026-01-26T21:04:59.229Z","repository":{"id":42940119,"uuid":"235348013","full_name":"pmu-tech/stub-server","owner":"pmu-tech","description":"Stub server for REST APIs","archived":false,"fork":false,"pushed_at":"2023-01-24T08:55:27.000Z","size":1436,"stargazers_count":12,"open_issues_count":6,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-09T04:05:19.272Z","etag":null,"topics":["fake","json","mock","server","stub","stub-server","test"],"latest_commit_sha":null,"homepage":"","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/pmu-tech.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}},"created_at":"2020-01-21T13:23:14.000Z","updated_at":"2024-02-20T09:37:02.000Z","dependencies_parsed_at":"2023-02-13T19:30:49.184Z","dependency_job_id":null,"html_url":"https://github.com/pmu-tech/stub-server","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/pmu-tech/stub-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmu-tech%2Fstub-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmu-tech%2Fstub-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmu-tech%2Fstub-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmu-tech%2Fstub-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pmu-tech","download_url":"https://codeload.github.com/pmu-tech/stub-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmu-tech%2Fstub-server/sbom","scorecard":{"id":738953,"data":{"date":"2025-08-11","repo":{"name":"github.com/pmu-tech/stub-server","commit":"1ea1156f5d6e9ff34f045061d03e2d7a6669530f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/7 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/node.js.yml:1","Warn: no topLevel permission defined: .github/workflows/npm-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/node.js.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/pmu-tech/stub-server/node.js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/node.js.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/pmu-tech/stub-server/node.js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/pmu-tech/stub-server/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/pmu-tech/stub-server/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/pmu-tech/stub-server/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/pmu-tech/stub-server/npm-publish.yml/master?enable=pin","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   3 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"22 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-h452-7996-h45h","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T16:48:02.025Z","repository_id":42940119,"created_at":"2025-08-22T16:48:02.026Z","updated_at":"2025-08-22T16:48:02.026Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28788116,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:02:48.137Z","status":"ssl_error","status_checked_at":"2026-01-26T21:01:13.039Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fake","json","mock","server","stub","stub-server","test"],"created_at":"2026-01-26T21:04:58.470Z","updated_at":"2026-01-26T21:04:59.211Z","avatar_url":"https://github.com/pmu-tech.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @pmu-tech/stub-server\n\n[![npm version](https://badge.fury.io/js/%40pmu-tech%2Fstub-server.svg)](https://www.npmjs.com/package/@pmu-tech/stub-server)\n[![Node.js CI](https://github.com/pmu-tech/stub-server/workflows/Node.js%20CI/badge.svg?branch=master)](https://github.com/pmu-tech/stub-server/actions)\n[![Bundle size](https://badgen.net/bundlephobia/minzip/@pmu-tech/stub-server)](https://bundlephobia.com/result?p=@pmu-tech/stub-server)\n[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![Airbnb Code Style](https://badgen.net/badge/code%20style/airbnb/ff5a5f?icon=airbnb)](https://github.com/airbnb/javascript)\n\nStub/mock server for REST APIs\n\nFor each route, decide what will happen: a JSON stub, a piece of JS or redirect to a real server\n\n- Use it with Express, [webpack-dev-server](https://github.com/webpack/webpack-dev-server), Next.js or the command line\n- Supports stubs written in JSON, JS, TypeScript, HTML, jpg...\n- Can redirect requests to another host thx to [node-http-proxy](https://github.com/http-party/node-http-proxy)\n- No need to restart stub-server if you modify a stub\n- The HTTP status code returned is determined from the stub filename: \\*\\_200\\_\\*.json, \\*\\_500\\_\\*.html...\n- Configurable delays to simulate slow APIs (helps find bugs and possible improvements to your app - add a spinner, disable a submit button...)\n- Access to request \u0026 response objects (allows to change headers, request URL...)\n\n## Usage\n\n`npm install --save-dev @pmu-tech/stub-server`\n\n### Proposed file organization\n\n```\nstubs/routes/my_api1_GET_200_OK.json\n             my_api2_GET_200_OK.jpg\n             my_api3_POST_400_BadRequest-invalidField.ts\n             my_api4_POST_400_BadRequest-invalidField.js\n             my_api5_DELETE_500_InternalServerError.html\n             my_api7_GET_200_OK.json\n             my_api7_POST_200_OK.json\n             my_api8_GET.ts\n             my_api9_GET.js\n             my_api10_GET_200_OK-param1.json\n             my_api10_GET_200_OK-param2.json\nstubs/config.ts\nwebpack.config.ts\n```\n\n### stubs/config.ts\n\n```TypeScript\nimport path from 'path';\nimport { StubServerConfig } from '@pmu-tech/stub-server';\n\nconst prod = 'https://myapp.com';\n\nconst stubsPath = path.resolve(__dirname, 'routes');\n\nconst config: StubServerConfig = {\n  delay: { min: 500, max: 3000 },\n  routes: {\n    '/my/api1': { GET: `${stubsPath}/my_api1_GET_200_OK.json` },\n    '/my/api2': { GET: `${stubsPath}/my_api2_GET_200_OK.jpg` },\n    '/my/api3': { POST: `${stubsPath}/my_api3_POST_400_BadRequest-invalidField.ts` },\n    '/my/api4': { POST: `${stubsPath}/my_api4_POST_400_BadRequest-invalidField.js` },\n    '/my/api5': { DELETE: `${stubsPath}/my_api5_DELETE_500_InternalServerError.html` },\n    '/my/api6/:id': {\n      // Here stub-server works as a proxy,\n      // example of request sent: PUT https://myapp.com/my/api6/132379\n      PUT: prod\n    },\n    '/my/api7': {\n      delay: { min: 1000, max: 1000 },\n      GET: `${stubsPath}/my_api7_GET_200_OK.json`,\n      POST: {\n        delay: { min: 0, max: 0 },\n        response: req =\u003e {\n          req.headers.origin = prod;\n          return `${stubsPath}/my_api7_POST_200_OK.json`;\n        }\n      }\n    },\n    '/my/api8': { GET: `${stubsPath}/my_api8_GET.ts`},\n    '/my/api9': { GET: `${stubsPath}/my_api9_GET.js`},\n    '/my/api10/:id': { GET: req =\u003e `${stubsPath}/my_api10_GET_200_OK-${req.params.id}.json` }\n  }\n};\n\nconst rootApiPath = 'https://myapp.com/client/:clientApi';\nconfig.routes[`${rootApiPath}/my/api7`] = { GET: `${stubsPath}/my_api7_GET_200_OK.json` };\n\nexport default config; // Or \"exports.default = config\"\n```\n\nNote: `stubs/config.ts` written in TypeScript instead of JavaScript requires [ts-node](https://github.com/TypeStrong/ts-node)\n\n### webpack.config.ts\n\nConfiguration with [webpack-dev-server](https://github.com/webpack/webpack-dev-server)\n\n```TypeScript\nimport { stubServer } from '@pmu-tech/stub-server';\n\n...\n\n  devServer: {\n    // webpack 5\n    onBeforeSetupMiddleware: ({ app }) =\u003e {\n      const configPath = path.resolve(__dirname, 'stubs/config');\n      stubServer(configPath, app);\n    }\n\n    // webpack 4\n    before: app =\u003e {\n      const configPath = path.resolve(__dirname, 'stubs/config');\n      stubServer(configPath, app);\n    }\n\n    ...\n  },\n```\n\n### stubs/routes/my_api1_GET_200_OK.json\n\n```JSON\n{\n  \"foo\": \"bar\"\n}\n```\n\n### stubs/routes/my_api3_POST_400_BadRequest-invalidField.ts\n\n```TypeScript\nexport default {\n  error: 'Invalid field'\n};\n```\n\n### stubs/routes/my_api4_POST_400_BadRequest-invalidField.js\n\n```JavaScript\nmodule.exports = {\n  error: 'Invalid field'\n};\n```\n\n### stubs/routes/my_api8_GET.ts\n\n```TypeScript\nimport express from 'express';\n\nexport default function stub(req: express.Request, res: express.Response) {\n  res.send('Hello, World!');\n}\n```\n\n### stubs/routes/my_api9_GET.js\n\n```JavaScript\nmodule.exports = (req, res) =\u003e {\n  res.send('Hello, World!');\n};\n```\n\n## Command line\n\n```\nUsage: stub-server [options] \u003cconfig\u003e\n\nArguments:\n  config         path to the config file\n\nOptions:\n  --port \u003cport\u003e  stub server port (default: \"12345\")\n  --no-delay     ignore any delay specified in the config\n  -h, --help     display help for command\n```\n\n## Next.js\n\n```JavaScript\n// stubServer.js\n\nconst { stubServer } = require('@pmu-tech/stub-server');\nconst cors = require('cors');\nconst express = require('express');\nconst next = require('next');\nconst Log = require('next/dist/build/output/log');\nconst path = require('path');\n\nconst app = next({ dev: process.env.NODE_ENV !== 'production' });\nconst nextjsHandler = app.getRequestHandler();\n\nconst configPath = path.resolve(__dirname, 'stubs/config');\nconst port = 3000;\n\napp.prepare().then(() =\u003e {\n  const server = express();\n  server.use(express.json());\n  server.use(cors());\n\n  stubServer(configPath, server);\n\n  // Next.js only processes GET requests unless you are using [API Routes](https://nextjs.org/docs/api-routes/introduction)\n  server.get('*', (req, res) =\u003e nextjsHandler(req, res));\n\n  server.all('*', req =\u003e {\n    throw new Error(`'${req.method} ${req.url}' should be declared in stubs/config.ts`);\n  });\n\n  server.listen(port, () =\u003e {\n    Log.ready(`ready on port ${port}`);\n  });\n});\n```\n\n```JavaScript\n// package.json\n\n  \"scripts\": {\n    \"dev\": \"node stubServer.js\", // Instead of \"next dev\"\n    \"build\": \"next build\",\n    \"start\": \"next start\"\n    ...\n  },\n```\n\n## How to configure stub-server both for stubs and as a proxy\n\nTo \"connect\" your app to an [environment](https://en.wikipedia.org/wiki/Deployment_environment) (prod, staging, integration...), you can use stub-server as a proxy (intermediary between your app requesting a resource and the server providing that resource).\n\nWhy? To configure delays for the HTTP requests (helps find bugs and possible improvements to your app), access to request \u0026 response objects...\n\n```JavaScript\n// package.json\n\n  \"scripts\": {\n    \"start\": \"...\",\n    \"start:staging\": \"ENVIRONMENT_NAME=staging npm run start\",\n    \"start:prod\": \"ENVIRONMENT_NAME=prod npm run start\"\n    ...\n  },\n```\n\n```TypeScript\n// stubs/config.ts\n\nimport path from 'path';\nimport express from 'express';\nimport { GetStubFilenameOrUrl, StubServerConfig } from '@pmu-tech/stub-server';\n\nconst stubsPath = path.resolve(__dirname, 'routes');\n\ntype Environments = { [name: string]: { target: string; origin: string } | undefined };\n\nconst environments: Environments = {\n  staging: {\n    target: 'https://api.staging.myapp.com',\n    origin: 'https://staging.myapp.com'\n  },\n  prod: {\n    target: 'https://api.myapp.com',\n    origin: 'https://myapp.com'\n  }\n};\n\nconst { target, origin } =\n  environments[process.env.ENVIRONMENT_NAME ?? 'No environment specified'] ?? {};\n\nfunction configureRequest(stubOrUrl: string): GetStubFilenameOrUrl {\n  return (req: express.Request) =\u003e {\n    // You can rewrite the request URL if needed\n    req.url = req.url.replace('/prefix', '');\n\n    if (origin !== undefined) {\n      // May be required for some APIs\n      req.headers.origin = origin;\n    }\n\n    return stubOrUrl;\n  };\n}\n\nconst config: StubServerConfig = {\n  delay: { min: 500, max: 3000 },\n  routes: {\n    '/prefix/my/api1': {\n      GET: configureRequest(\n        // Here stub-server works as a proxy,\n        // example of request sent: GET https://api.staging.myapp.com/my/api1\n        target ??\n        // ...or use a stub if no target specified\n        `${stubsPath}/my_api1_GET_200_OK.json`\n      )\n    },\n    ...\n  }\n};\n\nexport default config;\n```\n\n## Output generated\n\nExamples of output (stdout) for requests processed by stub-server:\n\n```\nGET /account/payment-types?imagesWithUrl=true =\u003e stubs/routes/payment-types_200_OK.ts, delay: 442 ms\nGET /account/captcha/1662973203224 =\u003e https://api.myapp.com, delay: 0 ms\nGET /account/captcha/1663061235576 =\u003e stubs/routes/captcha_200_OK-242674.jpg, delay: 4 ms\nPOST /account/create =\u003e stubs/routes/account_create_201_Created-no-appro.json, delay: 169 ms\nPOST /auth/session?withNotification=true =\u003e https://api.myapp.com, delay: 34 ms\n```\n\n## Errors\n\nIf the stub is missing or the target is unknown, stub-server returns a 500 (Internal Server Error) response with the error in HTML format and also displays the error in the console.\n\nExamples of errors in the console:\n\n- `ENOENT: no such file or directory, open 'stubs/routes/captcha_200_OK-242674.jpg'`\n- `Error: getaddrinfo ENOTFOUND api.myapp.com`\n\nIf you request an unknown route, stub-server does not process it and therefore won't display anything in the console. It's up to you to handle this case with a catch-all route:\n\n```TypeScript\nfunction missingStubHandler(req: express.Request) {\n  throw new Error(`Missing stub for '${req.method} ${req.url}'`);\n}\n\n...\n\n'/prefix/*': {\n  GET: missingStubHandler,\n  POST: missingStubHandler,\n  PUT: missingStubHandler,\n  PATCH: missingStubHandler,\n  DELETE: missingStubHandler\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmu-tech%2Fstub-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpmu-tech%2Fstub-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmu-tech%2Fstub-server/lists"}