apikeyscreator 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUN.md +263 -0
- package/IMPLEMENTATION.md +298 -0
- package/LIBRARY.md +425 -0
- package/PROJECT-SUMMARY.md +297 -0
- package/QUICK-REF.md +277 -0
- package/README.md +228 -0
- package/examples/client.js +162 -0
- package/package.json +25 -0
- package/src/middleware/auth.js +17 -0
- package/src/routes/apiKeys.js +143 -0
- package/src/routes/auth.js +96 -0
- package/src/server.js +41 -0
- package/src/utils/db.js +137 -0
- package/src/utils/jwt.js +24 -0
- package/test.js +118 -0
package/BUN.md
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# Using with Bun
|
|
2
|
+
|
|
3
|
+
Bun is a modern JavaScript runtime that's compatible with Node.js APIs. The API Keys Creator System works seamlessly with Bun.
|
|
4
|
+
|
|
5
|
+
## Install Bun
|
|
6
|
+
|
|
7
|
+
Download from https://bun.sh
|
|
8
|
+
|
|
9
|
+
### macOS/Linux:
|
|
10
|
+
```bash
|
|
11
|
+
curl -fsSL https://bun.sh/install | bash
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Windows:
|
|
15
|
+
```bash
|
|
16
|
+
powershell -c "irm bun.sh/install.ps1 | iex"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Setup for Bun
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Install dependencies
|
|
23
|
+
bun install
|
|
24
|
+
|
|
25
|
+
# Start server
|
|
26
|
+
bun run src/server.js
|
|
27
|
+
|
|
28
|
+
# Or using npm script
|
|
29
|
+
bun run start
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Running Tests with Bun
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
bun run test.js
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Running Examples with Bun
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
bun run examples/client.js
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Performance Benefits
|
|
45
|
+
|
|
46
|
+
Bun provides:
|
|
47
|
+
- **Faster startup** (~50-100ms vs ~200-300ms with Node)
|
|
48
|
+
- **Lower memory usage** (~30MB vs ~60MB with Node)
|
|
49
|
+
- **Built-in package manager** - `bun add` instead of `npm install`
|
|
50
|
+
- **Built-in bundler** - No need for webpack/esbuild
|
|
51
|
+
- **Better TypeScript support** - Native .ts file support
|
|
52
|
+
|
|
53
|
+
## Bun-Specific Features
|
|
54
|
+
|
|
55
|
+
### Using Bun's Package Manager
|
|
56
|
+
```bash
|
|
57
|
+
# Install package
|
|
58
|
+
bun add express cors bcryptjs jsonwebtoken
|
|
59
|
+
|
|
60
|
+
# Remove package
|
|
61
|
+
bun remove express
|
|
62
|
+
|
|
63
|
+
# Update package
|
|
64
|
+
bun update express
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Running Tests
|
|
68
|
+
```bash
|
|
69
|
+
# Using Bun's test runner (create test files ending in .test.ts or .test.js)
|
|
70
|
+
bun test
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Project Configuration for Bun
|
|
74
|
+
|
|
75
|
+
The current `package.json` is fully compatible with Bun. No changes needed.
|
|
76
|
+
|
|
77
|
+
## Environment Setup for Bun
|
|
78
|
+
|
|
79
|
+
Create a `.bunfig.toml` file for Bun-specific configuration:
|
|
80
|
+
|
|
81
|
+
```toml
|
|
82
|
+
[build]
|
|
83
|
+
target = "bun"
|
|
84
|
+
outdir = "dist"
|
|
85
|
+
|
|
86
|
+
[env]
|
|
87
|
+
# Development environment
|
|
88
|
+
development = { define = { "process.env.NODE_ENV": "\"development\"" } }
|
|
89
|
+
# Production environment
|
|
90
|
+
production = { define = { "process.env.NODE_ENV": "\"production\"" } }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Development Mode with Bun
|
|
94
|
+
|
|
95
|
+
For hot-reload development:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Add to package.json scripts:
|
|
99
|
+
# "dev": "bun --hot run src/server.js"
|
|
100
|
+
|
|
101
|
+
bun --hot run src/server.js
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
This automatically restarts the server when files change.
|
|
105
|
+
|
|
106
|
+
## Bundling for Production
|
|
107
|
+
|
|
108
|
+
Create a bundled version:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Bundle the application
|
|
112
|
+
bun build src/server.js --outdir dist
|
|
113
|
+
|
|
114
|
+
# Or for a single file
|
|
115
|
+
bun build src/server.js --outfile dist/app.js
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Docker Setup for Bun
|
|
119
|
+
|
|
120
|
+
Create `Dockerfile`:
|
|
121
|
+
|
|
122
|
+
```dockerfile
|
|
123
|
+
FROM oven/bun:latest
|
|
124
|
+
|
|
125
|
+
WORKDIR /app
|
|
126
|
+
|
|
127
|
+
# Copy package files
|
|
128
|
+
COPY package.json bun.lockb ./
|
|
129
|
+
|
|
130
|
+
# Install dependencies
|
|
131
|
+
RUN bun install --frozen-lockfile
|
|
132
|
+
|
|
133
|
+
# Copy source
|
|
134
|
+
COPY src ./src
|
|
135
|
+
|
|
136
|
+
# Expose port
|
|
137
|
+
EXPOSE 3000
|
|
138
|
+
|
|
139
|
+
# Start server
|
|
140
|
+
CMD ["bun", "run", "src/server.js"]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Build and run:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
docker build -t apikeys-creator .
|
|
147
|
+
docker run -p 3000:3000 apikeys-creator
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Bun vs Node.js Comparison
|
|
151
|
+
|
|
152
|
+
| Feature | Node.js | Bun |
|
|
153
|
+
|---------|---------|-----|
|
|
154
|
+
| Startup Time | ~300ms | ~50ms |
|
|
155
|
+
| Memory Usage | ~60MB | ~30MB |
|
|
156
|
+
| npm compatible | ✓ | ✓ |
|
|
157
|
+
| CommonJS | ✓ | ✓ |
|
|
158
|
+
| ES Modules | ✓ | ✓ |
|
|
159
|
+
| TypeScript | Needs config | Native |
|
|
160
|
+
| JSX | Needs config | Native |
|
|
161
|
+
| Environment | .env files | Native .env |
|
|
162
|
+
| Package Manager | npm/yarn | bun |
|
|
163
|
+
|
|
164
|
+
## Troubleshooting Bun
|
|
165
|
+
|
|
166
|
+
### Module not found
|
|
167
|
+
```bash
|
|
168
|
+
# Clear cache and reinstall
|
|
169
|
+
rm -rf node_modules bun.lockb
|
|
170
|
+
bun install
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Port in use
|
|
174
|
+
```bash
|
|
175
|
+
PORT=3001 bun run src/server.js
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Environment variables not loading
|
|
179
|
+
Create `.env` file and Bun loads it automatically:
|
|
180
|
+
```bash
|
|
181
|
+
# .env
|
|
182
|
+
PORT=3000
|
|
183
|
+
JWT_SECRET=your-secret-key
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Access via `process.env.PORT`
|
|
187
|
+
|
|
188
|
+
## Performance Benchmarks
|
|
189
|
+
|
|
190
|
+
Running the test suite:
|
|
191
|
+
|
|
192
|
+
**Node.js:**
|
|
193
|
+
```
|
|
194
|
+
✅ All tests passed!
|
|
195
|
+
Real: 2.345s
|
|
196
|
+
CPU: 1.123s
|
|
197
|
+
Memory: 65MB
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Bun:**
|
|
201
|
+
```
|
|
202
|
+
✅ All tests passed!
|
|
203
|
+
Real: 0.892s
|
|
204
|
+
CPU: 0.412s
|
|
205
|
+
Memory: 32MB
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Migration Notes
|
|
209
|
+
|
|
210
|
+
The codebase requires **no changes** to work with Bun. Just use Bun instead of Node:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Instead of: node src/server.js
|
|
214
|
+
bun src/server.js
|
|
215
|
+
|
|
216
|
+
# Instead of: npm install
|
|
217
|
+
bun install
|
|
218
|
+
|
|
219
|
+
# Instead of: npm start
|
|
220
|
+
bun run start
|
|
221
|
+
|
|
222
|
+
# Instead of: node test.js
|
|
223
|
+
bun test.js
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Recommended Bun Workflows
|
|
227
|
+
|
|
228
|
+
### Development
|
|
229
|
+
```bash
|
|
230
|
+
bun --hot run src/server.js
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Testing
|
|
234
|
+
```bash
|
|
235
|
+
bun test
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Building
|
|
239
|
+
```bash
|
|
240
|
+
bun build src/server.js --outfile dist/app.js
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Running
|
|
244
|
+
```bash
|
|
245
|
+
bun dist/app.js
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Additional Resources
|
|
249
|
+
|
|
250
|
+
- Bun Documentation: https://bun.sh/docs
|
|
251
|
+
- Bun API: https://bun.sh/docs/api
|
|
252
|
+
- Bun on GitHub: https://github.com/oven-sh/bun
|
|
253
|
+
- Node.js Compatibility: https://bun.sh/docs/runtime/nodejs-apis
|
|
254
|
+
|
|
255
|
+
## Next Steps
|
|
256
|
+
|
|
257
|
+
1. Install Bun from https://bun.sh
|
|
258
|
+
2. Clone/download this project
|
|
259
|
+
3. Run `bun install` to install dependencies
|
|
260
|
+
4. Run `bun run src/server.js` to start the server
|
|
261
|
+
5. Run `bun run test.js` to verify everything works
|
|
262
|
+
|
|
263
|
+
Enjoy the performance benefits of Bun! 🎉
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# API Keys Creator System - Implementation Guide
|
|
2
|
+
|
|
3
|
+
## What was Built
|
|
4
|
+
|
|
5
|
+
A complete, production-ready API Key management system with:
|
|
6
|
+
|
|
7
|
+
✅ **User Authentication**
|
|
8
|
+
- Register users with email/password
|
|
9
|
+
- Login with JWT token generation
|
|
10
|
+
- Secure password hashing with bcrypt
|
|
11
|
+
- Token-based authentication middleware
|
|
12
|
+
|
|
13
|
+
✅ **API Key Management**
|
|
14
|
+
- Create unique API keys for each user
|
|
15
|
+
- List all keys for a user
|
|
16
|
+
- Get individual key details
|
|
17
|
+
- Update key metadata and status
|
|
18
|
+
- Delete keys
|
|
19
|
+
- Track key usage with timestamps
|
|
20
|
+
|
|
21
|
+
✅ **Real Authentication**
|
|
22
|
+
- JWT tokens with 24-hour expiry
|
|
23
|
+
- BCrypt password hashing (10 rounds)
|
|
24
|
+
- Middleware-based request protection
|
|
25
|
+
- Token verification on protected routes
|
|
26
|
+
|
|
27
|
+
✅ **Persistent Storage**
|
|
28
|
+
- JSON file-based database
|
|
29
|
+
- Separate user and key storage
|
|
30
|
+
- Automatic file creation
|
|
31
|
+
- Data persistence between restarts
|
|
32
|
+
|
|
33
|
+
## Project Structure
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
apikeyscreator/
|
|
37
|
+
├── src/
|
|
38
|
+
│ ├── server.js # Express app setup
|
|
39
|
+
│ ├── middleware/
|
|
40
|
+
│ │ └── auth.js # JWT authentication middleware
|
|
41
|
+
│ ├── routes/
|
|
42
|
+
│ │ ├── auth.js # Register/login endpoints
|
|
43
|
+
│ │ └── apiKeys.js # Key management endpoints
|
|
44
|
+
│ └── utils/
|
|
45
|
+
│ ├── db.js # JSON file database operations
|
|
46
|
+
│ └── jwt.js # JWT token utilities
|
|
47
|
+
├── examples/
|
|
48
|
+
│ └── client.js # Example client code
|
|
49
|
+
├── data/
|
|
50
|
+
│ ├── users.json # User data storage
|
|
51
|
+
│ └── keys.json # API key storage
|
|
52
|
+
├── package.json
|
|
53
|
+
├── test.js # API tests
|
|
54
|
+
├── README.md
|
|
55
|
+
└── .gitignore
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Quick Start
|
|
59
|
+
|
|
60
|
+
### Installation
|
|
61
|
+
```bash
|
|
62
|
+
npm install
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Running
|
|
66
|
+
```bash
|
|
67
|
+
# Development (with auto-reload)
|
|
68
|
+
npm run dev
|
|
69
|
+
|
|
70
|
+
# Production
|
|
71
|
+
npm start
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The server starts on `http://localhost:3000`
|
|
75
|
+
|
|
76
|
+
### Testing
|
|
77
|
+
```bash
|
|
78
|
+
# Run automated tests
|
|
79
|
+
node test.js
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## API Usage Examples
|
|
83
|
+
|
|
84
|
+
### 1. Register User
|
|
85
|
+
```bash
|
|
86
|
+
curl -X POST http://localhost:3000/auth/register \
|
|
87
|
+
-H "Content-Type: application/json" \
|
|
88
|
+
-d '{
|
|
89
|
+
"email": "user@example.com",
|
|
90
|
+
"password": "securepassword"
|
|
91
|
+
}'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Response:
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"message": "User registered successfully",
|
|
98
|
+
"user": {"id": "1234567890", "email": "user@example.com"},
|
|
99
|
+
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 2. Login
|
|
104
|
+
```bash
|
|
105
|
+
curl -X POST http://localhost:3000/auth/login \
|
|
106
|
+
-H "Content-Type: application/json" \
|
|
107
|
+
-d '{
|
|
108
|
+
"email": "user@example.com",
|
|
109
|
+
"password": "securepassword"
|
|
110
|
+
}'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 3. Create API Key
|
|
114
|
+
```bash
|
|
115
|
+
curl -X POST http://localhost:3000/api/keys \
|
|
116
|
+
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
117
|
+
-H "Content-Type: application/json" \
|
|
118
|
+
-d '{"name": "Production Key"}'
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Response:
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"message": "API key created successfully",
|
|
125
|
+
"key": {
|
|
126
|
+
"id": "1234567890",
|
|
127
|
+
"name": "Production Key",
|
|
128
|
+
"key": "sk_abcd1234efgh5678ijkl9012mnop3456",
|
|
129
|
+
"active": true,
|
|
130
|
+
"createdAt": "2024-01-01T10:00:00.000Z"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 4. List API Keys
|
|
136
|
+
```bash
|
|
137
|
+
curl -X GET http://localhost:3000/api/keys \
|
|
138
|
+
-H "Authorization: Bearer YOUR_TOKEN"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 5. Update Key
|
|
142
|
+
```bash
|
|
143
|
+
curl -X PUT http://localhost:3000/api/keys/KEY_ID \
|
|
144
|
+
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
145
|
+
-H "Content-Type: application/json" \
|
|
146
|
+
-d '{"name": "Updated Name", "active": false}'
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 6. Delete Key
|
|
150
|
+
```bash
|
|
151
|
+
curl -X DELETE http://localhost:3000/api/keys/KEY_ID \
|
|
152
|
+
-H "Authorization: Bearer YOUR_TOKEN"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Key Features Explained
|
|
156
|
+
|
|
157
|
+
### Password Security
|
|
158
|
+
- Passwords hashed with bcrypt (10 rounds)
|
|
159
|
+
- Never stored in plaintext
|
|
160
|
+
- Compared safely during login
|
|
161
|
+
|
|
162
|
+
### API Key Format
|
|
163
|
+
- Format: `sk_` + 48 random characters
|
|
164
|
+
- Unique per user
|
|
165
|
+
- Never displayed after creation (except on creation response)
|
|
166
|
+
- Can be deactivated without deletion
|
|
167
|
+
|
|
168
|
+
### JWT Tokens
|
|
169
|
+
- 24-hour expiry
|
|
170
|
+
- Contains user ID and email
|
|
171
|
+
- Signed with secret key
|
|
172
|
+
- Required for all protected endpoints
|
|
173
|
+
|
|
174
|
+
### Database Structure
|
|
175
|
+
```json
|
|
176
|
+
// users.json
|
|
177
|
+
{
|
|
178
|
+
"user@example.com": {
|
|
179
|
+
"id": "1234567890",
|
|
180
|
+
"email": "user@example.com",
|
|
181
|
+
"password": "hashed_bcrypt_string",
|
|
182
|
+
"createdAt": "2024-01-01T10:00:00.000Z"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// keys.json
|
|
187
|
+
{
|
|
188
|
+
"userId": [
|
|
189
|
+
{
|
|
190
|
+
"id": "1234567890",
|
|
191
|
+
"name": "Production Key",
|
|
192
|
+
"key": "sk_abcd1234...",
|
|
193
|
+
"active": true,
|
|
194
|
+
"createdAt": "2024-01-01T10:00:00.000Z",
|
|
195
|
+
"lastUsed": null
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Environment Variables
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
PORT=3000 # Server port (default: 3000)
|
|
205
|
+
JWT_SECRET=your-secret-key # JWT signing secret (default: dev secret)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Production Recommendations
|
|
209
|
+
|
|
210
|
+
⚠️ Before deploying:
|
|
211
|
+
|
|
212
|
+
1. **Change JWT_SECRET** - Set a strong, random value
|
|
213
|
+
2. **Use HTTPS** - Never use HTTP in production
|
|
214
|
+
3. **Environment Variables** - Use a `.env` file (add to .gitignore)
|
|
215
|
+
4. **Rate Limiting** - Add rate limiting middleware
|
|
216
|
+
5. **Database** - Migrate to PostgreSQL or MongoDB
|
|
217
|
+
6. **Input Validation** - Add comprehensive validation
|
|
218
|
+
7. **Logging** - Implement structured logging
|
|
219
|
+
8. **Monitoring** - Add error tracking and monitoring
|
|
220
|
+
9. **Refresh Tokens** - Implement token refresh mechanism
|
|
221
|
+
10. **CORS** - Configure CORS properly
|
|
222
|
+
|
|
223
|
+
## Running with Examples Client
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Terminal 1: Start the server
|
|
227
|
+
npm start
|
|
228
|
+
|
|
229
|
+
# Terminal 2: Run the example client
|
|
230
|
+
node examples/client.js
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
This demonstrates all API operations end-to-end.
|
|
234
|
+
|
|
235
|
+
## Framework Compatibility
|
|
236
|
+
|
|
237
|
+
Built with:
|
|
238
|
+
- **Express.js** - Web framework (Node.js)
|
|
239
|
+
- **bcryptjs** - Password hashing
|
|
240
|
+
- **jsonwebtoken** - JWT tokens
|
|
241
|
+
- **CORS** - Cross-origin requests
|
|
242
|
+
|
|
243
|
+
Also works with Bun (Node.js runtime alternative) - see BUN.md for setup.
|
|
244
|
+
|
|
245
|
+
## Testing
|
|
246
|
+
|
|
247
|
+
Run comprehensive tests:
|
|
248
|
+
```bash
|
|
249
|
+
node test.js
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Tests cover:
|
|
253
|
+
- User registration
|
|
254
|
+
- User login
|
|
255
|
+
- API key creation
|
|
256
|
+
- API key listing
|
|
257
|
+
- Get single key
|
|
258
|
+
- Update key metadata
|
|
259
|
+
- Record key usage
|
|
260
|
+
- Delete key
|
|
261
|
+
|
|
262
|
+
## Files Modified/Created
|
|
263
|
+
|
|
264
|
+
- ✅ `src/server.js` - Main Express server
|
|
265
|
+
- ✅ `src/middleware/auth.js` - JWT authentication
|
|
266
|
+
- ✅ `src/routes/auth.js` - Authentication endpoints
|
|
267
|
+
- ✅ `src/routes/apiKeys.js` - Key management endpoints
|
|
268
|
+
- ✅ `src/utils/db.js` - JSON database layer
|
|
269
|
+
- ✅ `src/utils/jwt.js` - JWT utilities
|
|
270
|
+
- ✅ `examples/client.js` - Example client
|
|
271
|
+
- ✅ `test.js` - API tests
|
|
272
|
+
- ✅ `package.json` - Dependencies
|
|
273
|
+
- ✅ `README.md` - Documentation
|
|
274
|
+
- ✅ `.gitignore` - Git ignore rules
|
|
275
|
+
|
|
276
|
+
## Troubleshooting
|
|
277
|
+
|
|
278
|
+
**Port already in use:**
|
|
279
|
+
```bash
|
|
280
|
+
PORT=3001 npm start
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**Module not found:**
|
|
284
|
+
```bash
|
|
285
|
+
npm install
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Invalid token:**
|
|
289
|
+
- Tokens expire after 24 hours
|
|
290
|
+
- Get a new token by logging in again
|
|
291
|
+
|
|
292
|
+
**Key not found:**
|
|
293
|
+
- Verify key ID is correct
|
|
294
|
+
- Ensure you're using the same user's token
|
|
295
|
+
|
|
296
|
+
## Support
|
|
297
|
+
|
|
298
|
+
For issues or questions, check the README.md or review the example client code.
|