{
  "id": "n8n-timeout-idempotency",
  "name": "AI Brief Note - POST Timeout and Idempotency",
  "nodes": [
    {
      "parameters": {},
      "id": "7e1879c4-23ee-4507-a451-e5dd17f9ba5a",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "jsCode": "const runId = $env.EXPERIMENT_RUN_ID;\nconst scenario = $env.EXPERIMENT_SCENARIO;\nconst port = Number($env.EXPERIMENT_FIXTURE_PORT || 43181);\nconst allowed = ['control_200', 'timeout_once_after_commit', 'timeout_twice_after_commit', 'persistent_timeout_after_commit'];\nif (!runId || !allowed.includes(scenario) || !Number.isInteger(port)) {\n  throw new Error('INVALID_EXPERIMENT_INPUT');\n}\nconst base = `http://host.docker.internal:${port}/create?runId=${encodeURIComponent(runId)}&scenario=${encodeURIComponent(scenario)}`;\nreturn [{ json: { runId, scenario, noRetryUrl: `${base}&strategy=no_retry_no_key`, retryNoKeyUrl: `${base}&strategy=retry_no_key`, retryWithKeyUrl: `${base}&strategy=retry_with_key`, idempotencyKey: `aibriefnote-${runId}` } }];"
      },
      "id": "12f850f0-e50d-4dc6-8fb2-13c1665e9927",
      "name": "Prepare POST Requests",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [240, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $json.noRetryUrl }}",
        "options": {
          "response": { "response": { "fullResponse": true, "responseFormat": "json" } },
          "timeout": 300
        }
      },
      "id": "48596211-73df-44a0-8d2d-2aefb5f8301e",
      "name": "POST No Retry",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [540, -220],
      "continueOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $json.retryNoKeyUrl }}",
        "options": {
          "response": { "response": { "fullResponse": true, "responseFormat": "json" } },
          "timeout": 300
        }
      },
      "id": "cad51a4e-214e-42d3-ab12-de49942763c9",
      "name": "POST Retry No Key",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [540, 0],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 100,
      "continueOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $json.retryWithKeyUrl }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "={{ $json.idempotencyKey }}"
            }
          ]
        },
        "options": {
          "response": { "response": { "fullResponse": true, "responseFormat": "json" } },
          "timeout": 300
        }
      },
      "id": "b47182d4-d7c3-48c8-ad29-d500d09f7b0c",
      "name": "POST Retry With Key",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [540, 220],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 100,
      "continueOnFail": true
    }
  ],
  "pinData": {},
  "connections": {
    "Manual Trigger": {
      "main": [[{ "node": "Prepare POST Requests", "type": "main", "index": 0 }]]
    },
    "Prepare POST Requests": {
      "main": [[
        { "node": "POST No Retry", "type": "main", "index": 0 },
        { "node": "POST Retry No Key", "type": "main", "index": 0 },
        { "node": "POST Retry With Key", "type": "main", "index": 0 }
      ]]
    }
  },
  "active": false,
  "settings": { "executionOrder": "v1" },
  "versionId": "95c947eb-89f5-43e6-a79b-6bfbc99bd4f6",
  "meta": { "templateCredsSetupCompleted": true },
  "tags": []
}
