{"id":21291902,"url":"https://github.com/idea2app/rest-node-ts","last_synced_at":"2025-08-26T20:18:33.899Z","repository":{"id":114520631,"uuid":"476681735","full_name":"idea2app/REST-Node-ts","owner":"idea2app","description":"RESTful API service scaffold based on Node.js \u0026 TypeScript, which is a lite Back-end framework compared with Nest.js. And it can be deployed to Docker-compose-based clouds much more easier with GitHub actions.","archived":false,"fork":false,"pushed_at":"2025-07-20T17:05:54.000Z","size":1040,"stargazers_count":7,"open_issues_count":3,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-20T19:06:01.317Z","etag":null,"topics":["api","docker","koa","mvc","nodejs","restful","scaffold","service","swagger","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idea2app.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-04-01T10:51:08.000Z","updated_at":"2025-07-20T17:05:57.000Z","dependencies_parsed_at":"2023-12-20T12:07:03.718Z","dependency_job_id":"2caecd93-7701-4759-b687-b3c84db84440","html_url":"https://github.com/idea2app/REST-Node-ts","commit_stats":null,"previous_names":[],"tags_count":1,"template":true,"template_full_name":null,"purl":"pkg:github/idea2app/REST-Node-ts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FREST-Node-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FREST-Node-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FREST-Node-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FREST-Node-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idea2app","download_url":"https://codeload.github.com/idea2app/REST-Node-ts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FREST-Node-ts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272253420,"owners_count":24900904,"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-26T02:00:07.904Z","response_time":60,"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":["api","docker","koa","mvc","nodejs","restful","scaffold","service","swagger","typescript"],"created_at":"2024-11-21T13:46:40.457Z","updated_at":"2025-08-26T20:18:33.869Z","avatar_url":"https://github.com/idea2app.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# REST-Node-ts\n\n[REST][1]ful API service scaffold based on [Node.js][2] \u0026 [TypeScript][3]\n\n[![Deploy to Production environment](https://github.com/idea2app/REST-Node-ts/actions/workflows/deploy-production.yml/badge.svg)][4]\n\n[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)][5]\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)][6]\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)][7]\n\n## Technology stack\n\n1. HTTP server: [Koa][8]\n2. Controller framework: [Routing Controllers][9]\n3. Model framework: [Class Transformer][10] \u0026 [Class Validator][11]\n4. ORM framework: [TypeORM][12]\n5. API document: [Swagger][13]\n6. Mock API: [OpenAPI backend][14]\n7. Test framework: [Jest][15]\n\n## Major features\n\n1. [API entry \u0026 Health checking](source/controller/Base.ts)\n2. [User \u0026 Session](source/controller/User.ts)\n    - Email OTP (One Time Password)\n3. [OAuth sign in](source/controller/OAuth.ts)\n    - recommend to use with [Next SSR middleware][16]\n4. [WebAuthn sign in](source/controller/WebAuthn.ts)\n    - recommend to use with [Passwordless ID][17]\n5. [Activity logging](source/controller/ActivityLog.ts)\n6. [File object storage](source/controller/File.ts)\n\n## Best practice\n\n1.  Install GitHub apps in your organization or account:\n\n    1.  [Probot settings][18]: set up Issue labels \u0026 Pull Request rules\n    2.  [PR badge][19]: set up Online [VS Code][20] editor entries in Pull Request description\n\n2.  Click the **[\u003ckbd\u003eUse this template\u003c/kbd\u003e][21] button** on the top of this GitHub repository's home page, then create your own repository in the app-installed namespace above\n\n3.  Click the **[\u003ckbd\u003eOpen in GitHub codespaces\u003c/kbd\u003e][8] button** on the top of ReadMe file, then an **online VS Code development environment** will be started immediately\n\n4.  Recommend to add a [Notification step in GitHub actions][22] for your Team IM app\n\n5.  Remind the PMs \u0026 users of your product to submit **Feature/Enhancement** requests or **Bug** reports with [Issue forms][23] instead of IM messages or Mobile Phone calls\n\n6.  Collect all these issues into [Project kanbans][24], then create **Pull requests** \u0026 add `closes #issue_number` into its description for automation\n\n## API Usage\n\n- Entry: http://localhost:8080/\n- Document: http://localhost:8080/docs/\n- Schema: http://localhost:8080/docs/spec/\n- Type: https://github.com/idea2app/REST-Node-ts/pkgs/npm/rest-node-ts\n\n## Environment variables\n\n|            Name            |            Usage             |\n| :------------------------: | :--------------------------: |\n|        `APP_SECRET`        |   encrypt Password \u0026 Token   |\n|       `DATABASE_URL`       | PostgreSQL connection string |\n|   `SUPABASE_PROJECT_URL`   |  [Supabase][25] project URL  |\n|    `SUPABASE_ANON_KEY`     |      Supabase anon key       |\n|     `AWS_S3_END_POINT`     |  [AWS S3][26] endpoint URL   |\n|      `AWS_S3_BUCKET`       |      AWS S3 bucket name      |\n|   `AWS_S3_ACCESS_KEY_ID`   |     AWS S3 access key id     |\n| `AWS_S3_SECRET_ACCESS_KEY` |   AWS S3 secret access key   |\n|    `AWS_S3_PUBLIC_HOST`    |      AWS S3 public host      |\n\n## Development\n\n### Installation\n\n```shell\nnpm i pnpm -g\npnpm i\n```\n\n### Start Development environment\n\n```shell\npnpm dev\n```\n\nor just press \u003ckbd\u003eF5\u003c/kbd\u003e key in [VS Code][20].\n\n### Migration\n\n```shell\npnpm upgrade:dev\n```\n\n## Deployment\n\n### Start Production environment\n\n```shell\nnpm start\n```\n\n### Migration\n\n```shell\npnpm upgrade:pro\n```\n\n### Docker\n\n```shell\npnpm pack-image\npnpm container\n```\n\n## Releasing\n\n### Deploy Application\n\n```shell\ngit checkout master\ngit tag v1.0.0  # this version tag comes from ./package.json\ngit push origin master --tags\n```\n\n### Publish Type Package\n\n```shell\ngit checkout master\ngit tag type-v1.0.0  # this version tag comes from ./type/package.json\ngit push origin master --tags\n```\n\n[1]: https://en.wikipedia.org/wiki/Representational_state_transfer\n[2]: https://nodejs.org/\n[3]: https://www.typescriptlang.org/\n[4]: https://github.com/idea2app/REST-Node-ts/actions/workflows/deploy-production.yml\n[5]: https://render.com/deploy\n[6]: https://codespaces.new/idea2app/REST-Node-ts\n[7]: https://gitpod.io/?autostart=true#https://github.com/idea2app/REST-Node-ts\n[8]: https://koajs.com/\n[9]: https://github.com/typestack/routing-controllers\n[10]: https://github.com/typestack/class-transformer\n[11]: https://github.com/typestack/class-validator\n[12]: https://typeorm.io/\n[13]: https://swagger.io/\n[14]: https://github.com/anttiviljami/openapi-backend\n[15]: https://jestjs.io/\n[16]: https://github.com/idea2app/Next-SSR-middleware\n[17]: https://webauthn.passwordless.id/\n[18]: https://github.com/apps/settings\n[19]: https://pullrequestbadge.com/\n[20]: https://code.visualstudio.com/\n[21]: https://github.com/new?template_name=REST-Node-ts\u0026template_owner=idea2app\n[22]: https://github.com/kaiyuanshe/kaiyuanshe.github.io/blob/bb4675a56bf1d6b207231313da5ed0af7cf0ebd6/.github/workflows/pull-request.yml#L32-L56\n[23]: https://github.com/idea2app/REST-Node-ts/issues/new/choose\n[24]: https://github.com/idea2app/REST-Node-ts/projects\n[25]: https://supabase.com/\n[26]: https://aws.amazon.com/s3/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidea2app%2Frest-node-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidea2app%2Frest-node-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidea2app%2Frest-node-ts/lists"}