{"id":19109536,"url":"https://github.com/thalesgomest/drivenpass-api","last_synced_at":"2026-05-14T22:05:10.247Z","repository":{"id":45754370,"uuid":"514365121","full_name":"thalesgomest/drivenpass-API","owner":"thalesgomest","description":"DrivenPass is your newest password manager, where you can save data such as: credentials, networks, notes and cards","archived":false,"fork":false,"pushed_at":"2022-10-25T16:44:59.000Z","size":179,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T11:17:03.039Z","etag":null,"topics":["backend","nodejs","prisma"],"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/thalesgomest.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}},"created_at":"2022-07-15T18:17:58.000Z","updated_at":"2022-09-21T03:42:41.000Z","dependencies_parsed_at":"2023-01-20T16:47:20.654Z","dependency_job_id":null,"html_url":"https://github.com/thalesgomest/drivenpass-API","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thalesgomest/drivenpass-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalesgomest%2Fdrivenpass-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalesgomest%2Fdrivenpass-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalesgomest%2Fdrivenpass-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalesgomest%2Fdrivenpass-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thalesgomest","download_url":"https://codeload.github.com/thalesgomest/drivenpass-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thalesgomest%2Fdrivenpass-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33045149,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"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":["backend","nodejs","prisma"],"created_at":"2024-11-09T04:21:22.192Z","updated_at":"2026-05-14T22:05:10.226Z","avatar_url":"https://github.com/thalesgomest.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"  \u003cimg  width=100% src=\"https://user-images.githubusercontent.com/97575616/192423302-9f178758-4ced-4b31-870f-6d04d0bed5c8.png\"\u003e\n\n## 📑 Contents\n\n-   [Project Description](#-project-description)\n-   [Status of work](#-status-of-work)\n-   [Features](#✅-features)\n-   [API Documentation](#📮-api-documentation)\n-   [Enviroment Variables](#🔑-environment-variables)\n-   [How to run](#%EF%B8%8F-how-to-run)\n-   [Build with](#%EF%B8%8F-build-with)\n-   [Contact](#-contact)\n\n## 📌 Project Description\n\n\u003cp align=\"justify\"\u003e\nBrowsing the internet can be a very fun activity, but at the same time, very dangerous. Numerous studies and surveys (national and international) show that the number of virtual scams continues to grow. Which raises the question: how to protect ourselves?\nThere are several different ways to protect yourself. It all starts with using different and secure passwords. For a password to be security, it must contain several characters and numbers mixed in, not to mention that the longer it ii, etc.\nBut how are we going to memorize giant passwords with no semantic meaning? It is to solve this pain that password managers were created! With them, \nwe only create one “master” password and all other passwords kept secret! So when we need it, just remember the “master” password! \u003cb\u003eDrivenPass\u003c/b\u003e is your newest password manager, where you can save data such as: credentials, networks, notes and cards\n\n\u003c/p\u003e\n\n## 🚧 Status of work\n\n![status](https://img.shields.io/badge/Status-Finished-00920F?style=plastic)\u003cbr\u003e\n\n\u003c!-- ![status](https://img.shields.io/badge/Status-Progress-FFE70C?style=plastic) --\u003e\n\n## ✅ Features\n\n-   [x] Sign In and Sign Up account\n-   [x] Create/Get/Delete Credentials\n-   [x] Create/Get/Delete Notes\n-   [x] Create/Get/Delete Networks\n-   [x] Create/Get/Delete Bank Cards\n\n## 📮 API Documentation\n\n### 🔐Authentication\n\n### Sign Up\n\n```http\nPOST /auth/signup\n```\n\n#### Request:\n\n| Body              | Type     | Description                  |\n| :---------------- | :------- | :--------------------------- |\n| `name`            | `string` | **Required** → user name     |\n| `email`           | `string` | **Required** → user email    |\n| `password`        | `string` | **Required** → user password |\n| `confirmPassword` | `string` | **Required** → user password |\n\n`Password length min(10)`\n\n#\n\n#### Response:\n\n```json\n{\n    \"message\": \"user created\"\n}\n```\n\n### Sign In\n\n```http\nPOST /auth/signin\n```\n\n#### Request:\n\n| Body    | Type     | Description               |\n| :------ | :------- | :------------------------ |\n| `name`  | `string` | **Required** → user name  |\n| `email` | `string` | **Required** → user email |\n\n#\n\n#### Response:\n\n```json\n{\n    \"token\": \"jasonwebtoken (JWT)\"\n}\n```\n\n### 👤 Credentials\n\n### Create a credential\n\n```http\nPOST /credentials/${userId}/create\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n| Body       | Type     | Description                        |\n| :--------- | :------- | :--------------------------------- |\n| `url`      | `string` | **Required** → credential url      |\n| `username` | `string` | **Required** → user name           |\n| `password` | `string` | **Required** → credential password |\n| `title`    | `string` | **Required** → credential password |\n\n#\n\n#### Response:\n\n```json\n{\n    \"message\": \"credential created\"\n}\n```\n\n#\n\n### Get all credentials by userId\n\n```http\nGET /credentials/${userId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"credentials\": [\n        {\n            \"id\": 3,\n            \"url\": \"http://ultimate-certification.name\",\n            \"username\": \"LorenzoFranco_Batista\",\n            \"password\": \"v7GcM\",\n            \"title\": \"Unifei\",\n            \"createdAt\": \"2022-07-18T19:46:40.846Z\",\n            \"userId\": 2\n        }\n    ]\n}\n```\n\n#\n\n### Get a specific credential by userId and credentialId\n\n```http\nGET /credentials/${userId}/${credentialId}\n```\n\n#### Request:\n\n| Params         | Type      | Description                  |\n| :------------- | :-------- | :--------------------------- |\n| `userId`       | `integer` | **Required** → user Id       |\n| `credentialId` | `integer` | **Required** → credential Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"credential\": [\n        {\n            \"id\": 3,\n            \"url\": \"http://ultimate-certification.name\",\n            \"username\": \"LorenzoFranco_Batista\",\n            \"password\": \"v7GcM\",\n            \"title\": \"Unifei\",\n            \"createdAt\": \"2022-07-18T19:46:40.846Z\",\n            \"userId\": 2\n        }\n    ]\n}\n```\n\n#\n\n### Delete a specific credential by credentialId\n\n```http\nDELETE /credentials/${userId}/${credentialId}\n```\n\n#### Request:\n\n| Params         | Type      | Description                  |\n| :------------- | :-------- | :--------------------------- |\n| `userId`       | `integer` | **Required** → user Id       |\n| `credentialId` | `integer` | **Required** → credential Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"message\": \"credential deleted\"\n}\n```\n\n#\n\n### 📝 Secrete Notes\n\n### Create a note\n\n```http\nPOST /notes/${userId}/create\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n| Body      | Type     | Description                 |\n| :-------- | :------- | :-------------------------- |\n| `title`   | `string` | **Required** → note title   |\n| `content` | `string` | **Required** → note content |\n\n`title length min(50) and max(1000)`\n\n#### Response:\n\n```json\n{\n    \"message\": \"credential created\"\n}\n```\n\n#\n\n### Get all notes by userId\n\n```http\nGET /notes/${userId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"notes\": [\n        {\n            \"id\": 1,\n            \"title\": \"consequatur\",\n            \"content\": \"Ratione suscipit nihil quia dolore sunt minima omnis.\",\n            \"createdAt\": \"2022-07-18T13:02:20.263Z\",\n            \"userId\": 2\n        }\n    ]\n}\n```\n\n#\n\n### Get a specific note by userId and noteId\n\n```http\nGET /notes/${userId}/${noteId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n| `noteId` | `integer` | **Required** → note Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"note\": {\n        \"id\": 1,\n        \"title\": \"consequatur\",\n        \"content\": \"Ratione suscipit nihil quia dolore sunt minima omnis.\",\n        \"createdAt\": \"2022-07-18T13:02:20.263Z\",\n        \"userId\": 2\n    }\n}\n```\n\n#\n\n### Delete a specific note by noteId\n\n```http\nDELETE /notes/${userId}/${notesId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n| `noteId` | `integer` | **Required** → note Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"message\": \"Note deleted\"\n}\n```\n\n#\n\n### 💳 Cards\n\n### Create a card\n\n```http\nPOST /cards/${userId}/create\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n| Body             | Type      | Description                            |\n| :--------------- | :-------- | :------------------------------------- |\n| `title`          | `string`  | **Required** → card title              |\n| `number`         | `string`  | **Required** → card number             |\n| `cardholderName` | `string`  | **Required** → card holder name        |\n| `securityCode`   | `string`  | **Required** → user card security code |\n| `expirationDate` | `string`  | **Required** → card expiration date    |\n| `password`       | `string`  | **Required** → card password           |\n| `isVirtual`      | `boolean` | **Required** → card is virtual         |\n| `type`           | `string`  | **Required** → user type               |\n\n`Number Format: \"1111 1111 1111 1111\"`\n\n`Expiration Date Format: \"MM/YY\"`\n\n`Password length: 4 and only numeric characters`\n\n`Security Code length: 3 and only numeric characters`\n\n`Valid types: [credit, debit, both]`\n\n#### Response:\n\n```json\n{\n    \"message\": \"card created\"\n}\n```\n\n#\n\n### Get all cards by userId\n\n```http\nGET /cards/${userId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"cards\": [\n        {\n            \"id\": 2,\n            \"title\": \"vel qui expedita\",\n            \"number\": \"1089 8176 0498 7127\",\n            \"cardholderName\": \"CARLA H SILVA\",\n            \"securityCode\": \"206\",\n            \"expirationDate\": \"07/27\",\n            \"password\": \"4964\",\n            \"isVirtual\": false,\n            \"type\": \"both\",\n            \"createdAt\": \"2022-07-18T13:03:16.959Z\",\n            \"userId\": 1\n        }\n    ]\n}\n```\n\n#\n\n### Get a specific card by userId and cardId\n\n```http\nGET /cards/${userId}/${cardId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n| `cardId` | `integer` | **Required** → card Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"card\": {\n        \"id\": 1,\n        \"title\": \"sed doloribus qui\",\n        \"number\": \"3650 3177 0788 8589\",\n        \"cardholderName\": \"CARLA H SILVA\",\n        \"securityCode\": \"682\",\n        \"expirationDate\": \"07/27\",\n        \"password\": \"1265\",\n        \"isVirtual\": false,\n        \"type\": \"both\",\n        \"createdAt\": \"2022-07-18T13:03:01.120Z\",\n        \"userId\": 1\n    }\n}\n```\n\n#\n\n### Delete a specific card by cardId\n\n```http\nDELETE /cards/${userId}/${cardId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n| `cardId` | `integer` | **Required** → card Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"message\": \"card deleted\"\n}\n```\n\n#\n\n### 📶 Networks\n\n### Create a network\n\n```http\nPOST /wifis/${userId}/create\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n| Body       | Type     | Description                  |\n| :--------- | :------- | :--------------------------- |\n| `title`    | `string` | **Required** → wifi title    |\n| `name`     | `string` | **Required** → wifi name     |\n| `password` | `string` | **Required** → wifi password |\n\n#### Response:\n\n```json\n{\n    \"message\": \"wifi created\"\n}\n```\n\n#\n\n### Get all wifis by userId\n\n```http\nGET /wifis/${userId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"wifis\": [\n        {\n            \"id\": 1,\n            \"title\": \"sit\",\n            \"name\": \"possimus\",\n            \"password\": \"xSxR7jefH4rZ3aB\",\n            \"createdAt\": \"2022-07-18T13:03:46.190Z\",\n            \"userId\": 1\n        }\n    ]\n}\n```\n\n#\n\n### Get a specific note by userId and wifiId\n\n```http\nGET /wifis/${userId}/${wifiId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n| `wifiId` | `integer` | **Required** → wifi Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"wifi\": {\n        \"id\": 1,\n        \"title\": \"sit\",\n        \"name\": \"possimus\",\n        \"password\": \"xSxR7jefH4rZ3aB\",\n        \"createdAt\": \"2022-07-18T13:03:46.190Z\",\n        \"userId\": 1\n    }\n}\n```\n\n#\n\n### Delete a specific note by wifiId\n\n```http\nDELETE /wifis/${userId}/${wifiId}\n```\n\n#### Request:\n\n| Params   | Type      | Description            |\n| :------- | :-------- | :--------------------- |\n| `userId` | `integer` | **Required** → user Id |\n| `wifiId` | `integer` | **Required** → wifi Id |\n\n####\n\n| Headers          | Type     | Description          |\n| :--------------- | :------- | :------------------- |\n| `Authentication` | `string` | **Required** → token |\n\n`Authorization format: Bearer jsonwebtoken`\n\n####\n\n#### Response:\n\n```json\n{\n    \"message\": \"Wifi deleted\"\n}\n```\n\n## 🔑 Environment Variables\n\nTo run this project, you will need to add the following environment variables to your .env file\n\n`DATABASE_URL = postgres://UserName:Password@Hostname:5432/DatabaseName`\n\n`PORT = number #recommended:5000`\n\n`JWT_SECRET = any string`\n\n`CRYPTR_SECRET = any string`\n\n## ⚙️ How to run\n\n```bash\n# Clone this repoository\n$ git clone https://github.com/thalesgomest/drivenpass-API.git\n\n# Change to project directory\n$ cd cd drivenpass-API\n\n# Install all dependencies\n$ npm install\n\n# Start the server\n$ npm run start\n```\n\n## 📚 Lessons Learned\n\nIn this project I learned a lot about how to structure an API with TypeScript and database with Prisma\n\n## 🛠️ Build with\n\n![uses-postgresql](https://img.shields.io/badge/PostgreSQL-316192?style=plastic\u0026logo=postgresql\u0026logoColor=white)\n![uses-prisma](https://img.shields.io/badge/Prisma-3982CE?style=plastic\u0026logo=Prisma\u0026logoColor=white)\n![uses-typescript](https://img.shields.io/badge/TypeScript-007ACC?style=plastic\u0026logo=typescript\u0026logoColor=white)\n![uses-node](https://img.shields.io/badge/Node.js-43853D?style=plastic\u0026logo=node.js\u0026logoColor=white)\n![uses-express](https://img.shields.io/badge/Express.js-404D59?style=plastic\u0026logo=express.js\u0026logoColor=white)\n![built-with-heroku](https://img.shields.io/badge/Heroku-430098?style=plastic\u0026logo=heroku\u0026logoColor=white)\n![built-with-vsc](https://img.shields.io/badge/Visual%20Studio%20Code-blue?style=plastic\u0026logo=visualstudiocode)\n\n\n## 📫 Contact\n\n\u003ca href = \"mailto:thalestargino@gmail.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gmail-D14836?style=plastic\u0026logo=gmail\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.linkedin.com/in/thalesgomest/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/-LinkedIn-%230077B5?style=plastic\u0026logo=linkedin\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthalesgomest%2Fdrivenpass-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthalesgomest%2Fdrivenpass-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthalesgomest%2Fdrivenpass-api/lists"}