added new rate limit category, ack PR comments

This commit is contained in:
waleed
2026-01-19 16:05:51 -08:00
parent a2c794a77e
commit b46f760247
4 changed files with 23 additions and 19 deletions

View File

@@ -19,7 +19,7 @@ export interface RateLimitResult {
export async function checkRateLimit(
request: NextRequest,
endpoint: 'logs' | 'logs-detail' = 'logs'
endpoint: 'logs' | 'logs-detail' | 'workflows' | 'workflow-detail' = 'logs'
): Promise<RateLimitResult> {
try {
const auth = await authenticateV1Request(request)

View File

@@ -15,7 +15,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
const requestId = crypto.randomUUID().slice(0, 8)
try {
const rateLimit = await checkRateLimit(request, 'logs-detail')
const rateLimit = await checkRateLimit(request, 'workflow-detail')
if (!rateLimit.allowed) {
return createRateLimitResponse(rateLimit)
}

View File

@@ -42,7 +42,7 @@ export async function GET(request: NextRequest) {
const requestId = crypto.randomUUID().slice(0, 8)
try {
const rateLimit = await checkRateLimit(request, 'logs')
const rateLimit = await checkRateLimit(request, 'workflows')
if (!rateLimit.allowed) {
return createRateLimitResponse(rateLimit)
}
@@ -87,20 +87,21 @@ export async function GET(request: NextRequest) {
if (params.cursor) {
const cursorData = decodeCursor(params.cursor)
if (cursorData) {
conditions.push(
or(
gt(workflow.sortOrder, cursorData.sortOrder),
and(
eq(workflow.sortOrder, cursorData.sortOrder),
gt(workflow.createdAt, new Date(cursorData.createdAt))
),
and(
eq(workflow.sortOrder, cursorData.sortOrder),
eq(workflow.createdAt, new Date(cursorData.createdAt)),
gt(workflow.id, cursorData.id)
)
)!
const cursorCondition = or(
gt(workflow.sortOrder, cursorData.sortOrder),
and(
eq(workflow.sortOrder, cursorData.sortOrder),
gt(workflow.createdAt, new Date(cursorData.createdAt))
),
and(
eq(workflow.sortOrder, cursorData.sortOrder),
eq(workflow.createdAt, new Date(cursorData.createdAt)),
gt(workflow.id, cursorData.id)
)
)
if (cursorCondition) {
conditions.push(cursorCondition)
}
}
}

View File

@@ -137,6 +137,11 @@ export function ApiInfoModal({ open, onOpenChange, workflowId }: ApiInfoModalPro
const handleSave = useCallback(async () => {
if (!workflowId) return
const activeWorkflowId = useWorkflowRegistry.getState().activeWorkflowId
if (activeWorkflowId !== workflowId) {
return
}
setIsSaving(true)
try {
if (description.trim() !== (workflowMetadata?.description || '')) {
@@ -144,8 +149,7 @@ export function ApiInfoModal({ open, onOpenChange, workflowId }: ApiInfoModalPro
}
if (starterBlockId) {
const currentValue = subBlockValues[starterBlockId]?.inputFormat || inputFormat
const updatedValue = (currentValue as NormalizedField[]).map((field) => ({
const updatedValue = inputFormat.map((field) => ({
...field,
description: paramDescriptions[field.name]?.trim() || undefined,
}))
@@ -162,7 +166,6 @@ export function ApiInfoModal({ open, onOpenChange, workflowId }: ApiInfoModalPro
workflowMetadata,
updateWorkflow,
starterBlockId,
subBlockValues,
inputFormat,
paramDescriptions,
setValue,