@equilateral_ai/mindmeld 3.5.3 → 4.0.1
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/hooks/session-start.js +312 -85
- package/package.json +20 -14
- package/scripts/init-project.js +9 -23
- package/src/client/dbShim.js +16 -0
- package/src/core/AuthManager.js +3 -2
- package/src/handlers/helpers/dbOperations.js +9 -46
- package/src/index.js +2 -217
- package/src/utils/piiMask.js +16 -0
- package/scripts/harvest.js +0 -601
- package/scripts/inject.js +0 -409
- package/scripts/mcp-bridge.js +0 -220
- package/scripts/repo-analyzer.js +0 -870
- package/scripts/standards.js +0 -285
- package/src/collaboration/CollaborationPrompt.js +0 -460
- package/src/core/AlertEngine.js +0 -813
- package/src/core/AlertNotifier.js +0 -363
- package/src/core/CorrelationAnalyzer.js +0 -931
- package/src/core/CrossReferenceEngine.js +0 -624
- package/src/core/CurationEngine.js +0 -688
- package/src/core/DeprecationScheduler.js +0 -183
- package/src/core/LoadBearingDetector.js +0 -242
- package/src/core/NotificationService.js +0 -1032
- package/src/core/RapportOrchestrator.js +0 -632
- package/src/core/RelevanceDetector.js +0 -694
- package/src/core/StandardLifecycle.js +0 -244
- package/src/core/StandardsIngestion.js +0 -991
- package/src/core/TeamLoadBearingDetector.js +0 -431
- package/src/core/parsers/adrParser.js +0 -479
- package/src/core/parsers/cursorRulesParser.js +0 -564
- package/src/core/parsers/eslintParser.js +0 -439
- package/src/database/dbOperations.js +0 -105
- package/src/handlers/activity/activityGetMe.js +0 -98
- package/src/handlers/activity/activityGetTeam.js +0 -175
- package/src/handlers/admin/adminSetup.js +0 -216
- package/src/handlers/alerts/alertsAcknowledge.js +0 -92
- package/src/handlers/alerts/alertsGet.js +0 -250
- package/src/handlers/analytics/activitySummaryGet.js +0 -234
- package/src/handlers/analytics/coachingGet.js +0 -361
- package/src/handlers/analytics/convergenceGet.js +0 -236
- package/src/handlers/analytics/developerScoreGet.js +0 -137
- package/src/handlers/collaborators/collaboratorAdd.js +0 -200
- package/src/handlers/collaborators/collaboratorInvite.js +0 -219
- package/src/handlers/collaborators/collaboratorList.js +0 -82
- package/src/handlers/collaborators/collaboratorRemove.js +0 -128
- package/src/handlers/collaborators/inviteAccept.js +0 -122
- package/src/handlers/company/companyUsersDelete.js +0 -141
- package/src/handlers/company/companyUsersGet.js +0 -90
- package/src/handlers/company/companyUsersPost.js +0 -267
- package/src/handlers/company/companyUsersPut.js +0 -76
- package/src/handlers/context/contextGet.js +0 -57
- package/src/handlers/context/invariantsGet.js +0 -74
- package/src/handlers/context/loopsGet.js +0 -82
- package/src/handlers/context/notesCreate.js +0 -74
- package/src/handlers/context/purposeGet.js +0 -78
- package/src/handlers/correlations/correlationsDeveloperGet.js +0 -227
- package/src/handlers/correlations/correlationsGet.js +0 -93
- package/src/handlers/correlations/correlationsProjectGet.js +0 -153
- package/src/handlers/enterprise/controlTowerGet.js +0 -224
- package/src/handlers/enterprise/enterpriseAuditGet.js +0 -108
- package/src/handlers/enterprise/enterpriseContributorsGet.js +0 -85
- package/src/handlers/enterprise/enterpriseKnowledgeCategoriesGet.js +0 -53
- package/src/handlers/enterprise/enterpriseKnowledgeCreate.js +0 -77
- package/src/handlers/enterprise/enterpriseKnowledgeDelete.js +0 -71
- package/src/handlers/enterprise/enterpriseKnowledgeGet.js +0 -87
- package/src/handlers/enterprise/enterpriseKnowledgeUpdate.js +0 -122
- package/src/handlers/enterprise/enterpriseOnboardingComplete.js +0 -77
- package/src/handlers/enterprise/enterpriseOnboardingInvite.js +0 -138
- package/src/handlers/enterprise/enterpriseOnboardingSetup.js +0 -128
- package/src/handlers/enterprise/enterpriseOnboardingStatus.js +0 -88
- package/src/handlers/github/githubConnectionStatus.js +0 -49
- package/src/handlers/github/githubDiscoverPatterns.js +0 -621
- package/src/handlers/github/githubOAuthCallback.js +0 -178
- package/src/handlers/github/githubOAuthStart.js +0 -59
- package/src/handlers/github/githubPatternsReview.js +0 -76
- package/src/handlers/github/githubReposList.js +0 -105
- package/src/handlers/health/healthGet.js +0 -55
- package/src/handlers/helpers/auditLogger.js +0 -201
- package/src/handlers/helpers/checkSuperAdmin.js +0 -84
- package/src/handlers/helpers/decisionFrames.js +0 -29
- package/src/handlers/helpers/errorHandler.js +0 -49
- package/src/handlers/helpers/index.js +0 -138
- package/src/handlers/helpers/lambdaWrapper.js +0 -60
- package/src/handlers/helpers/mindmeldMcpCore.js +0 -1103
- package/src/handlers/helpers/predictiveCache.js +0 -51
- package/src/handlers/helpers/projectAccess.js +0 -88
- package/src/handlers/helpers/responseUtil.js +0 -55
- package/src/handlers/helpers/subscriptionTiers.js +0 -1168
- package/src/handlers/mcp/mcpHandler.js +0 -569
- package/src/handlers/mcp/mindmeldMcpHandler.js +0 -124
- package/src/handlers/mcp/mindmeldMcpStreamHandler.js +0 -342
- package/src/handlers/notifications/getPreferences.js +0 -84
- package/src/handlers/notifications/sendNotification.js +0 -170
- package/src/handlers/notifications/updatePreferences.js +0 -316
- package/src/handlers/patterns/patternEvaluatePromotionPost.js +0 -173
- package/src/handlers/patterns/patternUsagePost.js +0 -182
- package/src/handlers/patterns/patternViolationPost.js +0 -185
- package/src/handlers/projects/projectCreate.js +0 -248
- package/src/handlers/projects/projectDelete.js +0 -82
- package/src/handlers/projects/projectGet.js +0 -95
- package/src/handlers/projects/projectUpdate.js +0 -117
- package/src/handlers/reports/aiLeverage.js +0 -210
- package/src/handlers/reports/engineeringInvestment.js +0 -132
- package/src/handlers/reports/riskForecast.js +0 -206
- package/src/handlers/reports/standardsRoi.js +0 -254
- package/src/handlers/scheduled/analyzeCorrelations.js +0 -178
- package/src/handlers/scheduled/analyzeGitHistory.js +0 -510
- package/src/handlers/scheduled/generateAlerts.js +0 -135
- package/src/handlers/scheduled/maturityUpdateJob.js +0 -166
- package/src/handlers/scheduled/refreshActivity.js +0 -21
- package/src/handlers/scheduled/scanCompliance.js +0 -334
- package/src/handlers/sessions/sessionEndPost.js +0 -180
- package/src/handlers/sessions/sessionStandardsPost.js +0 -171
- package/src/handlers/standards/catalogGet.js +0 -185
- package/src/handlers/standards/catalogSync.js +0 -120
- package/src/handlers/standards/discoveriesGet.js +0 -89
- package/src/handlers/standards/projectStandardsGet.js +0 -129
- package/src/handlers/standards/projectStandardsPut.js +0 -151
- package/src/handlers/standards/standardsAuditGet.js +0 -65
- package/src/handlers/standards/standardsParseUpload.js +0 -149
- package/src/handlers/standards/standardsRelevantPost.js +0 -405
- package/src/handlers/standards/standardsTransition.js +0 -161
- package/src/handlers/stripe/addonManagePost.js +0 -240
- package/src/handlers/stripe/billingPortalPost.js +0 -93
- package/src/handlers/stripe/enterpriseCheckoutPost.js +0 -272
- package/src/handlers/stripe/seatsUpdatePost.js +0 -185
- package/src/handlers/stripe/subscriptionCancelDelete.js +0 -169
- package/src/handlers/stripe/subscriptionCreatePost.js +0 -221
- package/src/handlers/stripe/subscriptionUpdatePut.js +0 -163
- package/src/handlers/stripe/webhookPost.js +0 -482
- package/src/handlers/user/apiTokenCreate.js +0 -71
- package/src/handlers/user/apiTokenList.js +0 -64
- package/src/handlers/user/userSplashAck.js +0 -91
- package/src/handlers/user/userSplashGet.js +0 -211
- package/src/handlers/users/cognitoPostConfirmation.js +0 -186
- package/src/handlers/users/cognitoPreSignUp.js +0 -114
- package/src/handlers/users/userEntitlementsGet.js +0 -89
- package/src/handlers/users/userGet.js +0 -118
- package/src/handlers/users/userProfilePut.js +0 -77
- package/src/handlers/webhooks/githubWebhook.js +0 -215
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Super Admin Check Helper
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
const { executeQuery } = require('./dbOperations');
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Check if user is a superadmin
|
|
9
|
-
* @param {string} email - User email
|
|
10
|
-
* @returns {Promise<boolean>}
|
|
11
|
-
*/
|
|
12
|
-
async function isSuperAdmin(email) {
|
|
13
|
-
const query = `
|
|
14
|
-
SELECT super_admin
|
|
15
|
-
FROM rapport.users
|
|
16
|
-
WHERE email_address = $1
|
|
17
|
-
`;
|
|
18
|
-
const result = await executeQuery(query, [email]);
|
|
19
|
-
return result.rows.length > 0 && result.rows[0].super_admin === true;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Require superadmin access - throws 403 if not superadmin
|
|
24
|
-
* @param {string} email - User email
|
|
25
|
-
* @throws {Error} 403 Forbidden if not superadmin
|
|
26
|
-
*/
|
|
27
|
-
async function requireSuperAdmin(email) {
|
|
28
|
-
const isAdmin = await isSuperAdmin(email);
|
|
29
|
-
if (!isAdmin) {
|
|
30
|
-
const error = new Error('Superadmin access required');
|
|
31
|
-
error.statusCode = 403;
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Get user with superadmin status
|
|
38
|
-
* @param {string} email - User email
|
|
39
|
-
* @returns {Promise<Object|null>}
|
|
40
|
-
*/
|
|
41
|
-
async function getUserWithSuperAdminStatus(email) {
|
|
42
|
-
const query = `
|
|
43
|
-
SELECT
|
|
44
|
-
email_address,
|
|
45
|
-
client_id,
|
|
46
|
-
CONCAT(first_name, ' ', last_name) as user_display_name,
|
|
47
|
-
first_name,
|
|
48
|
-
last_name,
|
|
49
|
-
super_admin,
|
|
50
|
-
user_status
|
|
51
|
-
FROM rapport.users
|
|
52
|
-
WHERE email_address = $1
|
|
53
|
-
`;
|
|
54
|
-
const result = await executeQuery(query, [email]);
|
|
55
|
-
return result.rows.length > 0 ? result.rows[0] : null;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Log superadmin action to audit trail
|
|
60
|
-
* @param {Object} params - Audit parameters
|
|
61
|
-
*/
|
|
62
|
-
async function logSuperAdminAction({ email, action, targetType, targetId, details, ipAddress, userAgent }) {
|
|
63
|
-
const query = `
|
|
64
|
-
INSERT INTO superadmin_audit_log (
|
|
65
|
-
email, action, target_type, target_id, details, ip_address, user_agent
|
|
66
|
-
) VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
67
|
-
`;
|
|
68
|
-
await executeQuery(query, [
|
|
69
|
-
email,
|
|
70
|
-
action,
|
|
71
|
-
targetType || null,
|
|
72
|
-
targetId || null,
|
|
73
|
-
details ? JSON.stringify(details) : null,
|
|
74
|
-
ipAddress || null,
|
|
75
|
-
userAgent || null
|
|
76
|
-
]);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
module.exports = {
|
|
80
|
-
isSuperAdmin,
|
|
81
|
-
requireSuperAdmin,
|
|
82
|
-
getUserWithSuperAdminStatus,
|
|
83
|
-
logSuperAdminAction
|
|
84
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
const { executeQuery } = require('./index');
|
|
2
|
-
|
|
3
|
-
async function createFrame({ projectId, sessionId, standardIds, confidence, context }) {
|
|
4
|
-
const result = await executeQuery(`
|
|
5
|
-
INSERT INTO rapport.decision_frames (project_id, session_id, standard_ids, confidence, context)
|
|
6
|
-
VALUES ($1, $2, $3, $4, $5)
|
|
7
|
-
RETURNING frame_id, created_at
|
|
8
|
-
`, [projectId, sessionId || null, standardIds, confidence || 0, JSON.stringify(context || {})]);
|
|
9
|
-
return result.rows[0];
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
async function getFrame(frameId) {
|
|
13
|
-
const result = await executeQuery(`
|
|
14
|
-
SELECT * FROM rapport.decision_frames WHERE frame_id = $1
|
|
15
|
-
`, [frameId]);
|
|
16
|
-
return result.rows[0] || null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function getProjectFrames(projectId, limit = 20) {
|
|
20
|
-
const result = await executeQuery(`
|
|
21
|
-
SELECT * FROM rapport.decision_frames
|
|
22
|
-
WHERE project_id = $1
|
|
23
|
-
ORDER BY created_at DESC
|
|
24
|
-
LIMIT $2
|
|
25
|
-
`, [projectId, limit]);
|
|
26
|
-
return result.rows;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
module.exports = { createFrame, getFrame, getProjectFrames };
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error Handler Helper
|
|
3
|
-
* Standard error handling and logging for all Rapport handlers
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Handle error with standard response
|
|
8
|
-
* @param {Error} error - Error object
|
|
9
|
-
* @returns {object} Lambda error response
|
|
10
|
-
*/
|
|
11
|
-
function handleError(error) {
|
|
12
|
-
console.error('Error:', error);
|
|
13
|
-
|
|
14
|
-
// Determine status code
|
|
15
|
-
const statusCode = error.statusCode || 500;
|
|
16
|
-
|
|
17
|
-
// Determine message
|
|
18
|
-
let message = 'Internal server error';
|
|
19
|
-
if (error.statusCode) {
|
|
20
|
-
message = error.message;
|
|
21
|
-
} else if (error.code === '23505') {
|
|
22
|
-
message = 'Resource already exists';
|
|
23
|
-
} else if (error.code === '23503') {
|
|
24
|
-
message = 'Referenced resource not found';
|
|
25
|
-
} else if (error.code === '23502') {
|
|
26
|
-
message = 'Required field missing';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return {
|
|
30
|
-
statusCode,
|
|
31
|
-
headers: {
|
|
32
|
-
'Content-Type': 'application/json',
|
|
33
|
-
'Access-Control-Allow-Origin': '*',
|
|
34
|
-
'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS',
|
|
35
|
-
'Access-Control-Allow-Headers': 'Content-Type,Authorization'
|
|
36
|
-
},
|
|
37
|
-
body: JSON.stringify({
|
|
38
|
-
success: false,
|
|
39
|
-
message,
|
|
40
|
-
error: process.env.NODE_ENV === 'dev' ? {
|
|
41
|
-
code: error.code,
|
|
42
|
-
detail: error.detail,
|
|
43
|
-
stack: error.stack
|
|
44
|
-
} : undefined
|
|
45
|
-
})
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
module.exports = { handleError };
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helpers Index
|
|
3
|
-
* Tim-Combo pattern: Re-export all helpers from single entry point
|
|
4
|
-
*
|
|
5
|
-
* Usage: const { wrapHandler, executeQuery, createSuccessResponse, handleError } = require('./helpers');
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const { wrapHandler } = require('./lambdaWrapper');
|
|
9
|
-
const { executeQuery } = require('./dbOperations');
|
|
10
|
-
const { createSuccessResponse, createErrorResponse } = require('./responseUtil');
|
|
11
|
-
const { handleError } = require('./errorHandler');
|
|
12
|
-
const {
|
|
13
|
-
getTierConfig,
|
|
14
|
-
SUBSCRIPTION_TIERS,
|
|
15
|
-
getStripePriceId,
|
|
16
|
-
checkEarlyAdopterEligibility,
|
|
17
|
-
getEarlyAdopterDiscount,
|
|
18
|
-
calculateEarlyAdopterPrice,
|
|
19
|
-
requiresCommunityContribution,
|
|
20
|
-
getPrivateTierVariant,
|
|
21
|
-
calculateTierCost,
|
|
22
|
-
checkSubscriptionLimits,
|
|
23
|
-
// Billing type functions
|
|
24
|
-
BILLING_TYPES,
|
|
25
|
-
usesStripeBilling,
|
|
26
|
-
usesInvoiceBilling,
|
|
27
|
-
isInternalClient,
|
|
28
|
-
checkCollaboratorBillingLimits,
|
|
29
|
-
getBillingTypeDisplayName,
|
|
30
|
-
// Enterprise subscription functions
|
|
31
|
-
ENTERPRISE_PACKAGES,
|
|
32
|
-
ENTERPRISE_ADDONS,
|
|
33
|
-
VOLUME_DISCOUNTS,
|
|
34
|
-
getVolumeDiscount,
|
|
35
|
-
validateSeatCount,
|
|
36
|
-
calculateEnterpriseCost,
|
|
37
|
-
getEnterprisePackage,
|
|
38
|
-
getEnterpriseAddon,
|
|
39
|
-
getAllEnterpriseAddons,
|
|
40
|
-
hasEnterpriseFeature,
|
|
41
|
-
getEnterpriseFeatures,
|
|
42
|
-
checkEnterpriseSeatLimits,
|
|
43
|
-
getEnterprisePriceId,
|
|
44
|
-
getAddonPriceId
|
|
45
|
-
} = require('./subscriptionTiers');
|
|
46
|
-
const checkSuperAdmin = require('./checkSuperAdmin');
|
|
47
|
-
const { verifyProjectAccess, verifyProjectRole } = require('./projectAccess');
|
|
48
|
-
const { getPredictedStandards, logStandardsActivation } = require('./predictiveCache');
|
|
49
|
-
const { createFrame, getFrame, getProjectFrames } = require('./decisionFrames');
|
|
50
|
-
const {
|
|
51
|
-
AuditEventType,
|
|
52
|
-
EntityType,
|
|
53
|
-
logAuditEvent,
|
|
54
|
-
logModificationEvent,
|
|
55
|
-
logAccessEvent,
|
|
56
|
-
extractRequestContext,
|
|
57
|
-
generateCorrelationId,
|
|
58
|
-
} = require('./auditLogger');
|
|
59
|
-
|
|
60
|
-
module.exports = {
|
|
61
|
-
// Lambda wrapper
|
|
62
|
-
wrapHandler,
|
|
63
|
-
|
|
64
|
-
// Database operations
|
|
65
|
-
executeQuery,
|
|
66
|
-
|
|
67
|
-
// Response utilities
|
|
68
|
-
createSuccessResponse,
|
|
69
|
-
createErrorResponse,
|
|
70
|
-
|
|
71
|
-
// Error handling
|
|
72
|
-
handleError,
|
|
73
|
-
|
|
74
|
-
// Subscription tiers
|
|
75
|
-
getTierConfig,
|
|
76
|
-
SUBSCRIPTION_TIERS,
|
|
77
|
-
getStripePriceId,
|
|
78
|
-
calculateTierCost,
|
|
79
|
-
|
|
80
|
-
// Early adopter discount
|
|
81
|
-
checkEarlyAdopterEligibility,
|
|
82
|
-
getEarlyAdopterDiscount,
|
|
83
|
-
calculateEarlyAdopterPrice,
|
|
84
|
-
|
|
85
|
-
// Community vs Private tiers
|
|
86
|
-
requiresCommunityContribution,
|
|
87
|
-
getPrivateTierVariant,
|
|
88
|
-
|
|
89
|
-
// Subscription limits
|
|
90
|
-
checkSubscriptionLimits,
|
|
91
|
-
|
|
92
|
-
// Billing type functions
|
|
93
|
-
BILLING_TYPES,
|
|
94
|
-
usesStripeBilling,
|
|
95
|
-
usesInvoiceBilling,
|
|
96
|
-
isInternalClient,
|
|
97
|
-
checkCollaboratorBillingLimits,
|
|
98
|
-
getBillingTypeDisplayName,
|
|
99
|
-
|
|
100
|
-
// Enterprise subscription functions
|
|
101
|
-
ENTERPRISE_PACKAGES,
|
|
102
|
-
ENTERPRISE_ADDONS,
|
|
103
|
-
VOLUME_DISCOUNTS,
|
|
104
|
-
getVolumeDiscount,
|
|
105
|
-
validateSeatCount,
|
|
106
|
-
calculateEnterpriseCost,
|
|
107
|
-
getEnterprisePackage,
|
|
108
|
-
getEnterpriseAddon,
|
|
109
|
-
getAllEnterpriseAddons,
|
|
110
|
-
hasEnterpriseFeature,
|
|
111
|
-
getEnterpriseFeatures,
|
|
112
|
-
checkEnterpriseSeatLimits,
|
|
113
|
-
getEnterprisePriceId,
|
|
114
|
-
getAddonPriceId,
|
|
115
|
-
|
|
116
|
-
// Authorization
|
|
117
|
-
checkSuperAdmin,
|
|
118
|
-
verifyProjectAccess,
|
|
119
|
-
verifyProjectRole,
|
|
120
|
-
|
|
121
|
-
// Predictive standards caching
|
|
122
|
-
getPredictedStandards,
|
|
123
|
-
logStandardsActivation,
|
|
124
|
-
|
|
125
|
-
// Decision frames
|
|
126
|
-
createFrame,
|
|
127
|
-
getFrame,
|
|
128
|
-
getProjectFrames,
|
|
129
|
-
|
|
130
|
-
// Audit logging
|
|
131
|
-
AuditEventType,
|
|
132
|
-
EntityType,
|
|
133
|
-
logAuditEvent,
|
|
134
|
-
logModificationEvent,
|
|
135
|
-
logAccessEvent,
|
|
136
|
-
extractRequestContext,
|
|
137
|
-
generateCorrelationId
|
|
138
|
-
};
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lambda Wrapper Helper
|
|
3
|
-
* Standardizes request/response handling for all Rapport handlers
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
function wrapHandler(handler) {
|
|
7
|
-
return async (event, context) => {
|
|
8
|
-
try {
|
|
9
|
-
// Parse body if present
|
|
10
|
-
let body = {};
|
|
11
|
-
if (event.body) {
|
|
12
|
-
try {
|
|
13
|
-
body = JSON.parse(event.body);
|
|
14
|
-
} catch (e) {
|
|
15
|
-
console.error('Failed to parse body:', e);
|
|
16
|
-
return {
|
|
17
|
-
statusCode: 400,
|
|
18
|
-
headers: {
|
|
19
|
-
'Content-Type': 'application/json',
|
|
20
|
-
'Access-Control-Allow-Origin': '*'
|
|
21
|
-
},
|
|
22
|
-
body: JSON.stringify({
|
|
23
|
-
success: false,
|
|
24
|
-
message: 'Invalid JSON in request body'
|
|
25
|
-
})
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Call handler with standardized parameters
|
|
31
|
-
const result = await handler({
|
|
32
|
-
queryStringParameters: event.queryStringParameters || {},
|
|
33
|
-
pathParameters: event.pathParameters || {}, // Legacy — all params now in query/body
|
|
34
|
-
body: body,
|
|
35
|
-
requestContext: event.requestContext,
|
|
36
|
-
headers: event.headers || {},
|
|
37
|
-
httpMethod: event.httpMethod
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
return result;
|
|
41
|
-
|
|
42
|
-
} catch (error) {
|
|
43
|
-
console.error('Wrapper Error:', error);
|
|
44
|
-
return {
|
|
45
|
-
statusCode: 500,
|
|
46
|
-
headers: {
|
|
47
|
-
'Content-Type': 'application/json',
|
|
48
|
-
'Access-Control-Allow-Origin': '*'
|
|
49
|
-
},
|
|
50
|
-
body: JSON.stringify({
|
|
51
|
-
success: false,
|
|
52
|
-
message: 'Internal server error',
|
|
53
|
-
error: process.env.NODE_ENV === 'dev' ? error.message : undefined
|
|
54
|
-
})
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
module.exports = { wrapHandler };
|