(params: {
req: NextRequest
getUserInfoFromApiKey: GetUserInfoFromApiKeyFn
logger: Logger
loggerWithContext: LoggerWithContextFn
trackEvent: TrackEventFn
fetch: typeof globalThis.fetch
serverEnv: {
GRAVITY_API_KEY?: string
}
})
| 120 | } |
| 121 | |
| 122 | export async function postGravityIndex(params: { |
| 123 | req: NextRequest |
| 124 | getUserInfoFromApiKey: GetUserInfoFromApiKeyFn |
| 125 | logger: Logger |
| 126 | loggerWithContext: LoggerWithContextFn |
| 127 | trackEvent: TrackEventFn |
| 128 | fetch: typeof globalThis.fetch |
| 129 | serverEnv: { |
| 130 | GRAVITY_API_KEY?: string |
| 131 | } |
| 132 | }) { |
| 133 | const { |
| 134 | req, |
| 135 | getUserInfoFromApiKey, |
| 136 | loggerWithContext, |
| 137 | trackEvent, |
| 138 | fetch, |
| 139 | serverEnv, |
| 140 | } = params |
| 141 | const baseLogger = params.logger |
| 142 | |
| 143 | const parsedBody = await parseJsonBody({ |
| 144 | req, |
| 145 | schema: gravityIndexInputSchema, |
| 146 | logger: baseLogger, |
| 147 | trackEvent, |
| 148 | validationErrorEvent: AnalyticsEvent.GRAVITY_INDEX_VALIDATION_ERROR, |
| 149 | }) |
| 150 | if (!parsedBody.ok) return parsedBody.response |
| 151 | |
| 152 | const authed = await requireUserFromApiKey({ |
| 153 | req, |
| 154 | getUserInfoFromApiKey, |
| 155 | logger: baseLogger, |
| 156 | loggerWithContext, |
| 157 | trackEvent, |
| 158 | authErrorEvent: AnalyticsEvent.GRAVITY_INDEX_AUTH_ERROR, |
| 159 | }) |
| 160 | if (!authed.ok) return authed.response |
| 161 | |
| 162 | const { userId, logger } = authed.data |
| 163 | const input = parsedBody.data |
| 164 | const gravityApiKey = serverEnv.GRAVITY_API_KEY |
| 165 | |
| 166 | trackEvent({ |
| 167 | event: AnalyticsEvent.GRAVITY_INDEX_REQUEST, |
| 168 | userId, |
| 169 | properties: { action: input.action }, |
| 170 | logger, |
| 171 | }) |
| 172 | |
| 173 | if (gravityIndexActionRequiresApiKey(input.action) && !gravityApiKey) { |
| 174 | logger.error('GRAVITY_API_KEY is not configured') |
| 175 | trackEvent({ |
| 176 | event: AnalyticsEvent.GRAVITY_INDEX_ERROR, |
| 177 | userId, |
| 178 | properties: { reason: 'missing_gravity_api_key' }, |
| 179 | logger, |
no test coverage detected