AI Native challenges by level

Level 2 · Applied · State and workflows

Deduplicate payment webhooks

Apply each event ID once and aggregate account balances.

Problem statement

Write function solution(events). Inputs and outputs are JSON values. Do not modify input arrays or objects. External libraries, network access, and asynchronous functions are not supported. events:{id:string,account:string,delta:integer}[]. Accept only the first occurrence of each case-sensitive event ID, even if later account/delta differs. Return {accepted:boolean[],balances:[{account,balance}]}. Aggregate accepted deltas per account, include zero balances, and sort accounts using JavaScript string comparisons. All sums are safe integers. Input limits: at most 50,000 items per input array and 1,000 characters per string. Numbers are finite; integers and accumulated integer results stay in the JavaScript safe-integer range. Other types and validity rules follow the statement above.

Example input and output

Example 1

Function arguments

[
  [
    {
      "id": "x",
      "account": "a",
      "delta": 10
    },
    {
      "id": "x",
      "account": "a",
      "delta": 99
    }
  ]
]

Return value

{
  "accepted": [
    true,
    false
  ],
  "balances": [
    {
      "account": "a",
      "balance": 10
    }
  ]
}
Example 2

Function arguments

[
  [
    {
      "id": "x",
      "account": "b",
      "delta": 2
    },
    {
      "id": "y",
      "account": "a",
      "delta": -3
    }
  ]
]

Return value

{
  "accepted": [
    true,
    true
  ],
  "balances": [
    {
      "account": "a",
      "balance": -3
    },
    {
      "account": "b",
      "balance": 2
    }
  ]
}
Example 3

Function arguments

[
  [
    {
      "id": "a",
      "account": "A",
      "delta": 1
    },
    {
      "id": "b",
      "account": "a",
      "delta": 1
    }
  ]
]

Return value

{
  "accepted": [
    true,
    true
  ],
  "balances": [
    {
      "account": "A",
      "balance": 1
    },
    {
      "account": "a",
      "balance": 1
    }
  ]
}
Practice has no points, deadline or submission cap. Use AI and search freely. Sign in to run public examples, or verify locally.

71 / 20,000 characters

Add your test · optional

Enter a JSON argument array in events order. Your test runs alongside the three examples.

Save both files in one folder and run this command with Node.js. Read the checks field for individual example results.

node verify-webhook-idempotency.mjs
문의하기

서비스명: 포트포올
문의는 운영자에게 이메일로 전송됩니다.

이메일과 문의 내용은 답변을 위해 운영자 및 메일 발송 서비스로 전송됩니다. 비밀번호·결제정보·민감한 개인정보는 입력하지 마세요.