@vue-skuilder/express 0.1.13-8 → 0.1.13
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/.env.development +4 -0
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +148 -0
- package/dist/routes/auth.js.map +1 -1
- package/package.json +4 -4
- package/src/routes/auth.ts +172 -0
package/.env.development
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AA2BA,QAAA,MAAM,MAAM,4CAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AA2BA,QAAA,MAAM,MAAM,4CAAmB,CAAC;AAobhC,eAAe,MAAM,CAAC"}
|
package/dist/routes/auth.js
CHANGED
|
@@ -133,6 +133,7 @@ router.get('/status', (req, res) => {
|
|
|
133
133
|
username: userDoc.name,
|
|
134
134
|
status: userDoc.status || 'pending_verification', // Default to pending if not explicitly set
|
|
135
135
|
email: userDoc.email || null,
|
|
136
|
+
entitlements: userDoc.entitlements || {},
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
139
|
catch (error) {
|
|
@@ -229,5 +230,152 @@ router.post('/reset-password', (req, res) => {
|
|
|
229
230
|
}
|
|
230
231
|
})();
|
|
231
232
|
});
|
|
233
|
+
/**
|
|
234
|
+
* POST /auth/initialize-trial
|
|
235
|
+
* Initialize trial entitlement for newly created user
|
|
236
|
+
* Called by frontend immediately after CouchDB account creation
|
|
237
|
+
*
|
|
238
|
+
* Body params:
|
|
239
|
+
* - username: string (required) - CouchDB username
|
|
240
|
+
* - origin: string (optional) - Frontend origin URL (e.g., 'letterspractice.com') for courseId inference
|
|
241
|
+
* - courseId: string (optional) - Explicit courseId, if not provided inferred from origin
|
|
242
|
+
*/
|
|
243
|
+
router.post('/initialize-trial', (req, res) => {
|
|
244
|
+
void (async () => {
|
|
245
|
+
try {
|
|
246
|
+
const { username, origin, courseId: explicitCourseId } = req.body;
|
|
247
|
+
if (!username) {
|
|
248
|
+
return res.status(400).json({ ok: false, error: 'Username required' });
|
|
249
|
+
}
|
|
250
|
+
// Infer courseId from origin if not explicitly provided
|
|
251
|
+
let courseId = explicitCourseId;
|
|
252
|
+
if (!courseId && origin) {
|
|
253
|
+
// Generic origin-to-courseId conversion (e.g., 'example.com' → 'example-com')
|
|
254
|
+
// Consuming apps can override by passing explicit courseId
|
|
255
|
+
courseId = origin.replace(/\./g, '-').replace(/:/g, '-').toLowerCase();
|
|
256
|
+
}
|
|
257
|
+
// Require courseId to be provided via explicit param or origin
|
|
258
|
+
if (!courseId) {
|
|
259
|
+
return res.status(400).json({
|
|
260
|
+
ok: false,
|
|
261
|
+
error: 'courseId or origin required to initialize trial'
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
// Find user in _users db (should exist since just created via CouchDB)
|
|
265
|
+
const userDoc = await findUserByUsername(username);
|
|
266
|
+
if (!userDoc) {
|
|
267
|
+
return res.status(404).json({ ok: false, error: 'User not found' });
|
|
268
|
+
}
|
|
269
|
+
// Initialize entitlements if not present
|
|
270
|
+
if (!userDoc.entitlements) {
|
|
271
|
+
userDoc.entitlements = {};
|
|
272
|
+
}
|
|
273
|
+
// Don't overwrite if entitlement already exists (idempotent)
|
|
274
|
+
if (userDoc.entitlements[courseId]) {
|
|
275
|
+
logger.info(`Trial already initialized for ${username} on ${courseId} - skipping`);
|
|
276
|
+
return res.json({
|
|
277
|
+
ok: true,
|
|
278
|
+
message: 'Trial already initialized',
|
|
279
|
+
entitlement: userDoc.entitlements[courseId]
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
// Calculate expiration: 30 days from now
|
|
283
|
+
const now = new Date();
|
|
284
|
+
const expiresDate = new Date(now);
|
|
285
|
+
expiresDate.setDate(expiresDate.getDate() + 30);
|
|
286
|
+
// Create trial entitlement
|
|
287
|
+
userDoc.entitlements[courseId] = {
|
|
288
|
+
status: 'trial',
|
|
289
|
+
registrationDate: now.toISOString(),
|
|
290
|
+
purchaseDate: "not-yet",
|
|
291
|
+
expires: expiresDate.toISOString(),
|
|
292
|
+
};
|
|
293
|
+
await updateUserDoc(userDoc);
|
|
294
|
+
logger.info(`Trial initialized for ${username} on ${courseId} - expires ${expiresDate.toISOString()}`);
|
|
295
|
+
res.json({
|
|
296
|
+
ok: true,
|
|
297
|
+
entitlement: userDoc.entitlements[courseId]
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
logger.error('Error initializing trial:', error);
|
|
302
|
+
res.status(500).json({
|
|
303
|
+
ok: false,
|
|
304
|
+
error: 'Failed to initialize trial',
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
})();
|
|
308
|
+
});
|
|
309
|
+
/**
|
|
310
|
+
* POST /auth/permissions
|
|
311
|
+
* Grant or update course permissions for a user (called by payment webhooks)
|
|
312
|
+
*
|
|
313
|
+
* Body params:
|
|
314
|
+
* - userId: string (required) - CouchDB username
|
|
315
|
+
* - courseId: string (required) - Course identifier
|
|
316
|
+
* - action: 'grant_access' (required)
|
|
317
|
+
* - provider: string (optional) - 'stripe', 'manual', etc.
|
|
318
|
+
* - metadata: object (optional) - Additional payment metadata
|
|
319
|
+
*/
|
|
320
|
+
router.post('/permissions', (req, res) => {
|
|
321
|
+
void (async () => {
|
|
322
|
+
try {
|
|
323
|
+
// Verify authorization
|
|
324
|
+
const authHeader = req.headers.authorization;
|
|
325
|
+
const expectedAuth = `Bearer ${process.env.PERMISSIONS_SECRET}`;
|
|
326
|
+
if (!authHeader || authHeader !== expectedAuth) {
|
|
327
|
+
logger.warn('Unauthorized permissions request');
|
|
328
|
+
return res.status(401).json({ ok: false, error: 'Unauthorized' });
|
|
329
|
+
}
|
|
330
|
+
const { userId, courseId, action, provider } = req.body;
|
|
331
|
+
// Validate required fields
|
|
332
|
+
if (!userId || !courseId || !action) {
|
|
333
|
+
return res.status(400).json({
|
|
334
|
+
ok: false,
|
|
335
|
+
error: 'Missing required fields: userId, courseId, action'
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
if (action !== 'grant_access') {
|
|
339
|
+
return res.status(400).json({
|
|
340
|
+
ok: false,
|
|
341
|
+
error: 'Invalid action. Only "grant_access" is supported.'
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
// Find user in _users db
|
|
345
|
+
const userDoc = await findUserByUsername(userId);
|
|
346
|
+
if (!userDoc) {
|
|
347
|
+
logger.error(`Permissions request for non-existent user: ${userId}`);
|
|
348
|
+
return res.status(404).json({ ok: false, error: 'User not found' });
|
|
349
|
+
}
|
|
350
|
+
// Initialize entitlements if not present
|
|
351
|
+
if (!userDoc.entitlements) {
|
|
352
|
+
userDoc.entitlements = {};
|
|
353
|
+
}
|
|
354
|
+
// Get existing entitlement (preserve registrationDate if exists)
|
|
355
|
+
const existingEntitlement = userDoc.entitlements[courseId];
|
|
356
|
+
// Update to paid status
|
|
357
|
+
userDoc.entitlements[courseId] = {
|
|
358
|
+
status: 'paid',
|
|
359
|
+
registrationDate: existingEntitlement?.registrationDate || new Date().toISOString(),
|
|
360
|
+
purchaseDate: new Date().toISOString(),
|
|
361
|
+
// No expires field for paid users
|
|
362
|
+
};
|
|
363
|
+
// Save to _users db
|
|
364
|
+
await updateUserDoc(userDoc);
|
|
365
|
+
logger.info(`Granted ${courseId} access to user ${userId} via ${provider || 'unknown'}`);
|
|
366
|
+
res.json({
|
|
367
|
+
ok: true,
|
|
368
|
+
message: `Access granted to ${courseId} for user ${userId}`
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
logger.error('Error granting permissions:', error);
|
|
373
|
+
res.status(500).json({
|
|
374
|
+
ok: false,
|
|
375
|
+
error: 'Failed to grant permissions',
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
})();
|
|
379
|
+
});
|
|
232
380
|
export default router;
|
|
233
381
|
//# sourceMappingURL=auth.js.map
|
package/dist/routes/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.13
|
|
6
|
+
"version": "0.1.13",
|
|
7
7
|
"description": "an API",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"type": "module",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"author": "Colin Kennedy",
|
|
34
34
|
"license": "GPL-3.0-or-later",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@vue-skuilder/common": "^0.1.13
|
|
37
|
-
"@vue-skuilder/db": "^0.1.13
|
|
36
|
+
"@vue-skuilder/common": "^0.1.13",
|
|
37
|
+
"@vue-skuilder/db": "^0.1.13",
|
|
38
38
|
"axios": "^1.7.4",
|
|
39
39
|
"cookie-parser": "^1.4.7",
|
|
40
40
|
"cors": "^2.8.5",
|
|
@@ -82,5 +82,5 @@
|
|
|
82
82
|
"typescript": "^5.7.2",
|
|
83
83
|
"typescript-eslint": "^8.25.0"
|
|
84
84
|
},
|
|
85
|
-
"stableVersion": "0.1.
|
|
85
|
+
"stableVersion": "0.1.13"
|
|
86
86
|
}
|
package/src/routes/auth.ts
CHANGED
|
@@ -175,6 +175,7 @@ router.get('/status', (req: Request, res: Response) => {
|
|
|
175
175
|
username: userDoc.name,
|
|
176
176
|
status: userDoc.status || 'pending_verification', // Default to pending if not explicitly set
|
|
177
177
|
email: userDoc.email || null,
|
|
178
|
+
entitlements: userDoc.entitlements || {},
|
|
178
179
|
});
|
|
179
180
|
} catch (error) {
|
|
180
181
|
logger.error('Error fetching user status:', error);
|
|
@@ -289,4 +290,175 @@ router.post('/reset-password', (req: Request, res: Response) => {
|
|
|
289
290
|
})();
|
|
290
291
|
});
|
|
291
292
|
|
|
293
|
+
/**
|
|
294
|
+
* POST /auth/initialize-trial
|
|
295
|
+
* Initialize trial entitlement for newly created user
|
|
296
|
+
* Called by frontend immediately after CouchDB account creation
|
|
297
|
+
*
|
|
298
|
+
* Body params:
|
|
299
|
+
* - username: string (required) - CouchDB username
|
|
300
|
+
* - origin: string (optional) - Frontend origin URL (e.g., 'letterspractice.com') for courseId inference
|
|
301
|
+
* - courseId: string (optional) - Explicit courseId, if not provided inferred from origin
|
|
302
|
+
*/
|
|
303
|
+
router.post('/initialize-trial', (req: Request, res: Response) => {
|
|
304
|
+
void (async () => {
|
|
305
|
+
try {
|
|
306
|
+
const { username, origin, courseId: explicitCourseId } = req.body;
|
|
307
|
+
|
|
308
|
+
if (!username) {
|
|
309
|
+
return res.status(400).json({ ok: false, error: 'Username required' });
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Infer courseId from origin if not explicitly provided
|
|
313
|
+
let courseId = explicitCourseId;
|
|
314
|
+
if (!courseId && origin) {
|
|
315
|
+
// Generic origin-to-courseId conversion (e.g., 'example.com' → 'example-com')
|
|
316
|
+
// Consuming apps can override by passing explicit courseId
|
|
317
|
+
courseId = origin.replace(/\./g, '-').replace(/:/g, '-').toLowerCase();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Require courseId to be provided via explicit param or origin
|
|
321
|
+
if (!courseId) {
|
|
322
|
+
return res.status(400).json({
|
|
323
|
+
ok: false,
|
|
324
|
+
error: 'courseId or origin required to initialize trial'
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Find user in _users db (should exist since just created via CouchDB)
|
|
329
|
+
const userDoc = await findUserByUsername(username);
|
|
330
|
+
if (!userDoc) {
|
|
331
|
+
return res.status(404).json({ ok: false, error: 'User not found' });
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Initialize entitlements if not present
|
|
335
|
+
if (!userDoc.entitlements) {
|
|
336
|
+
userDoc.entitlements = {};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Don't overwrite if entitlement already exists (idempotent)
|
|
340
|
+
if (userDoc.entitlements[courseId]) {
|
|
341
|
+
logger.info(`Trial already initialized for ${username} on ${courseId} - skipping`);
|
|
342
|
+
return res.json({
|
|
343
|
+
ok: true,
|
|
344
|
+
message: 'Trial already initialized',
|
|
345
|
+
entitlement: userDoc.entitlements[courseId]
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Calculate expiration: 30 days from now
|
|
350
|
+
const now = new Date();
|
|
351
|
+
const expiresDate = new Date(now);
|
|
352
|
+
expiresDate.setDate(expiresDate.getDate() + 30);
|
|
353
|
+
|
|
354
|
+
// Create trial entitlement
|
|
355
|
+
userDoc.entitlements[courseId] = {
|
|
356
|
+
status: 'trial',
|
|
357
|
+
registrationDate: now.toISOString(),
|
|
358
|
+
purchaseDate: "not-yet",
|
|
359
|
+
expires: expiresDate.toISOString(),
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
await updateUserDoc(userDoc);
|
|
363
|
+
|
|
364
|
+
logger.info(`Trial initialized for ${username} on ${courseId} - expires ${expiresDate.toISOString()}`);
|
|
365
|
+
|
|
366
|
+
res.json({
|
|
367
|
+
ok: true,
|
|
368
|
+
entitlement: userDoc.entitlements[courseId]
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
} catch (error) {
|
|
372
|
+
logger.error('Error initializing trial:', error);
|
|
373
|
+
res.status(500).json({
|
|
374
|
+
ok: false,
|
|
375
|
+
error: 'Failed to initialize trial',
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
})();
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* POST /auth/permissions
|
|
383
|
+
* Grant or update course permissions for a user (called by payment webhooks)
|
|
384
|
+
*
|
|
385
|
+
* Body params:
|
|
386
|
+
* - userId: string (required) - CouchDB username
|
|
387
|
+
* - courseId: string (required) - Course identifier
|
|
388
|
+
* - action: 'grant_access' (required)
|
|
389
|
+
* - provider: string (optional) - 'stripe', 'manual', etc.
|
|
390
|
+
* - metadata: object (optional) - Additional payment metadata
|
|
391
|
+
*/
|
|
392
|
+
router.post('/permissions', (req: Request, res: Response) => {
|
|
393
|
+
void (async () => {
|
|
394
|
+
try {
|
|
395
|
+
// Verify authorization
|
|
396
|
+
const authHeader = req.headers.authorization;
|
|
397
|
+
const expectedAuth = `Bearer ${process.env.PERMISSIONS_SECRET}`;
|
|
398
|
+
|
|
399
|
+
if (!authHeader || authHeader !== expectedAuth) {
|
|
400
|
+
logger.warn('Unauthorized permissions request');
|
|
401
|
+
return res.status(401).json({ ok: false, error: 'Unauthorized' });
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
const { userId, courseId, action, provider } = req.body;
|
|
405
|
+
|
|
406
|
+
// Validate required fields
|
|
407
|
+
if (!userId || !courseId || !action) {
|
|
408
|
+
return res.status(400).json({
|
|
409
|
+
ok: false,
|
|
410
|
+
error: 'Missing required fields: userId, courseId, action'
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
if (action !== 'grant_access') {
|
|
415
|
+
return res.status(400).json({
|
|
416
|
+
ok: false,
|
|
417
|
+
error: 'Invalid action. Only "grant_access" is supported.'
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Find user in _users db
|
|
422
|
+
const userDoc = await findUserByUsername(userId);
|
|
423
|
+
if (!userDoc) {
|
|
424
|
+
logger.error(`Permissions request for non-existent user: ${userId}`);
|
|
425
|
+
return res.status(404).json({ ok: false, error: 'User not found' });
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// Initialize entitlements if not present
|
|
429
|
+
if (!userDoc.entitlements) {
|
|
430
|
+
userDoc.entitlements = {};
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// Get existing entitlement (preserve registrationDate if exists)
|
|
434
|
+
const existingEntitlement = userDoc.entitlements[courseId];
|
|
435
|
+
|
|
436
|
+
// Update to paid status
|
|
437
|
+
userDoc.entitlements[courseId] = {
|
|
438
|
+
status: 'paid',
|
|
439
|
+
registrationDate: existingEntitlement?.registrationDate || new Date().toISOString(),
|
|
440
|
+
purchaseDate: new Date().toISOString(),
|
|
441
|
+
// No expires field for paid users
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
// Save to _users db
|
|
445
|
+
await updateUserDoc(userDoc);
|
|
446
|
+
|
|
447
|
+
logger.info(`Granted ${courseId} access to user ${userId} via ${provider || 'unknown'}`);
|
|
448
|
+
|
|
449
|
+
res.json({
|
|
450
|
+
ok: true,
|
|
451
|
+
message: `Access granted to ${courseId} for user ${userId}`
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
} catch (error) {
|
|
455
|
+
logger.error('Error granting permissions:', error);
|
|
456
|
+
res.status(500).json({
|
|
457
|
+
ok: false,
|
|
458
|
+
error: 'Failed to grant permissions',
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
})();
|
|
462
|
+
});
|
|
463
|
+
|
|
292
464
|
export default router;
|