[{"data":1,"prerenderedAt":20},["ShallowReactive",2],{"highlighted-code:node":3},{"installation:1:0":4,"installation:1:1":5,"installation:1:2":6,"quickstart:1":7,"quickstart:3":8,"quickstart:5":9,"quickstart:7":10,"identify:1":11,"signup:1":12,"track:1":13,"revenue:1":14,"exceptions:1":15,"exceptions:6":16,"identity-verification:1":17,"serverless:1":18,"errors:1":19},"\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#56B0FB\">npm\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> install\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> @ravenkeep\u002Fnode\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#56B0FB\">pnpm\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> add\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> @ravenkeep\u002Fnode\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#56B0FB\">yarn\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> add\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> @ravenkeep\u002Fnode\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">import\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">Ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">from\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> '@ravenkeep\u002Fnode'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F One client per process. The secret key never leaves your server:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F RAVENKEEP_SECRET_KEY=rk_secret_lumen_xxxxxxxxxxxx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">export\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> const\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\"> Ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  secretKey\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">RAVENKEEP_SECRET_KEY\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  release\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">APP_VERSION\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">ping\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">if\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">console\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'Ravenkeep key problem:'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">else\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> console\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">log\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">`Connected to \u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">${\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">projectName\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">`\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">import\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">from\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> '.\u002Fravenkeep'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F In your signup handler, after the user exists in your database.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">signup\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  attribution\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">body\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">attribution\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F getAttribution() from the browser SDK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">track\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'file.uploaded'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">sizeMb\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">12\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } })\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">on\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'SIGTERM'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">async\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> () \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">=>\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">shutdown\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">exit\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">0\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">identify\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  traits\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">plan\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'pro'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">seats\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">12\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">locale\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'pt-BR'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  account\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">org\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">org\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">import\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">parseAttribution\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">from\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> '@ravenkeep\u002Fnode'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F Preferred: the browser sends getAttribution() with the signup form.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F Without the browser SDK, parse the landing URL your app remembered.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\"> attribution\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  body\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">attribution\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> ??\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#56B0FB\">  parseAttribution\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">session\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">landingUrl\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">session\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">referrer\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">siteHost\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'lumen.example'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">signup\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  account\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">org\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">org\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">name\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  traits\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">plan\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'free'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  attribution\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">if\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">logger\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">warn\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({ \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> }, \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'Ravenkeep signup not recorded'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F never block the signup\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">track\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'ticket.created'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">priority\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'high'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">track\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'members.invited'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">count\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">3\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">role\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'editor'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F Visitors without an account yet\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">track\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'pricing.viewed'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">anonymousId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">cookies\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">anon_id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F Imports and backfills: your own idempotency key and occurrence time\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">track\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'document.created'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">doc\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">ownerId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  messageId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">`doc-\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">${\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">doc\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">-created`\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  timestamp\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">doc\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">createdAt\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">if\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">event\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">type\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> ===\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> 'invoice.paid'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  const\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\"> invoice\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> event\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">object\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">revenue\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">invoice\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">metadata\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    amount\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">invoice\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">amount_paid\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F 4900 = USD 49.00\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    currency\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">invoice\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">currency\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F 'usd' is read as 'USD'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    reference\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">invoice\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F idempotency key: always pass one\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">  })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">if\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">event\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">type\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> ===\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\"> 'charge.refunded'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  const\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\"> charge\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> event\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">object\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">revenue\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">charge\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">metadata\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    amount\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">charge\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">amount_refunded\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    currency\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">charge\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">currency\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    kind\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'refund'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    reference\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">charge\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">  })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">try\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  await\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\"> chargeCard\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">order\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">} \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">catch\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">captureException\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">order\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    tags\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">provider\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'stripe'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">retry\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">false\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    context\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">orderId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">order\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">    level\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'error'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">  })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  throw\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> error\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F Express error handler, after your routes\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">app\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">use\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">((\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">res\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">next\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">=>\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">captureException\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">?.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">tags\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">route\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">route\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">?.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">path\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> ??\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">path\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#56B0FB\">  next\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">export\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> const\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\"> Ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  secretKey\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">RAVENKEEP_SECRET_KEY\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  release\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">GIT_SHA\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  environment\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">APP_ENV\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F 'production', 'staging'...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  captureUncaught\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">true\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\"> Ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  secretKey\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">RAVENKEEP_SECRET_KEY\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  identitySecret\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">process\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">env\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">RAVENKEEP_IDENTITY_SECRET\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">app\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">get\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'\u002Fapi\u002Fme'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">res\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">=>\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  res\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">json\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({ \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">email\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">ravenkeepUserHash\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">widgetUserHash\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">req\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">user\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">id\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">})\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F In the browser: ravenkeep.identify({ userId: me.id, userHash: me.ravenkeepUserHash, email: me.email })\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F AWS Lambda, Vercel or Netlify functions\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">export\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> const\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\"> handler\u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> async\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">event\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">=>\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">track\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">(\u003C\u002Fspan>\u003Cspan style=\"color:#94D864\">'file.uploaded'\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">event\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">flush\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">() \u003C\u002Fspan>\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F resolves when delivered or dropped, never rejects\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">  return\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">statusCode\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">200\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki ravenkeep-one-dark-saturated\" style=\"background-color:#0d0d0d;color:#b4bcc9\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">const\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> { \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">data\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F09947\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> } \u003C\u002Fspan>\u003Cspan style=\"color:#36CEE2\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\"> await\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">signup\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({ \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">userId\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">if\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F25A67\">  logger\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">warn\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({ \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">status\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">status\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">issues\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">issues\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> }, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">message\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B4BCC9\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F848E;font-style:italic\">\u002F\u002F Background failures (queued events and exceptions)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D163F3\">new\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\"> Ravenkeep\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({ \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">secretKey\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">onError\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: (\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) \u003C\u002Fspan>\u003Cspan style=\"color:#D163F3\">=>\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\"> logger\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#56B0FB\">warn\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">({ \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">code\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">details\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">: \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">details\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\"> }, \u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">error\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">.\u003C\u002Fspan>\u003Cspan style=\"color:#F25A67\">message\u003C\u002Fspan>\u003Cspan style=\"color:#B4BCC9\">) })\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1793518581327]