UNPKG

4.64 kBSource Map (JSON)View Raw
1{"version":3,"file":"alert.js","sourceRoot":"","sources":["alert.ts"],"names":[],"mappings":";;AAAA,uCAAsD;AACtD,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAE5C,wCAAuC;AAEvC,MAAM,EAAE,0BAA0B,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAA;AAY7D,MAAqB,eAAe;IAApC;QACU,WAAM,GAA0B,EAAE,CAAA;QAClC,gBAAW,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;IA6D1C,CAAC;IA3DC,KAAK,CAAC,gBAAgB,CAAE,SAAoB,EAAE,SAAiB;QAC7D,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC;YAChC,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,IAAwC,EAAE,EAAE;gBACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,eAAe;oBAAE,OAAO,MAAM,CAAA;gBAE/D,MAAM,YAAY,GAAG,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;gBAC3D,IAAI,YAAY,CAAC,IAAI,KAAK,0BAA0B;oBAAE,OAAO,MAAM,CAAA;gBAKnE,IAAI,YAAY,CAAC,OAAO,KAAK,2BAA2B;oBAAE,OAAO,MAAM,CAAA;gBAEvE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAA;gBACpC,GAAG,CAAC,IAAI,CAAC,6DAA6D,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;gBACrH,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;gBAE3D,OAAO,MAAM,CAAA;YACf,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,SAAS;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aAC5B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,YAAY,CAAE,EAAU;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxB,CAAC;IAEO,QAAQ,CAAE,SAAiB,EAAE,WAAmB,EAAE,OAAe;QACvE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACnC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACtC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,SAAS,KAAK,SAAS;YAC7B,KAAK,CAAC,WAAW,KAAK,WAAW;YACjC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;YAC5B,OAAM;SACP;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;YAChB,EAAE;YACF,SAAS;YACT,WAAW;YACX,OAAO;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAA;IACH,CAAC;CACF;AA/DD,kCA+DC","sourcesContent":["import { create as createLogger } from '../common/log'\nconst log = createLogger('alert-middleware')\nimport { Middleware, MiddlewareCallback, Pipelines } from '../types/middleware'\nimport * as IlpPacket from 'ilp-packet'\n\nconst { T04_INSUFFICIENT_LIQUIDITY } = IlpPacket.Errors.codes\n\nexport interface Alert {\n id: number\n accountId: string\n triggeredBy: string\n message: string\n count: number\n createdAt: Date\n updatedAt: Date\n}\n\nexport default class AlertMiddleware implements Middleware {\n private alerts: {[id: number]: Alert} = {}\n private nextAlertId: number = Date.now()\n\n async applyToPipelines (pipelines: Pipelines, accountId: string) {\n pipelines.outgoingData.insertLast({\n name: 'alert',\n method: async (data: Buffer, next: MiddlewareCallback<Buffer, Buffer>) => {\n const result = await next(data)\n if (result[0] !== IlpPacket.Type.TYPE_ILP_REJECT) return result\n\n const rejectPacket = IlpPacket.deserializeIlpReject(result)\n if (rejectPacket.code !== T04_INSUFFICIENT_LIQUIDITY) return result\n\n // The peer rejected a packet which, according to the local balance, should\n // have succeeded. This can happen when our local connector owes the peer\n // money but restarted before it was settled.\n if (rejectPacket.message !== 'exceeded maximum balance.') return result\n\n const { triggeredBy } = rejectPacket\n log.warn('generating alert for account=%s triggeredBy=%s message=\"%s\"', accountId, triggeredBy, rejectPacket.message)\n this.addAlert(accountId, triggeredBy, rejectPacket.message)\n\n return result\n }\n })\n }\n\n getAlerts (): Alert[] {\n return Object.keys(this.alerts)\n .map((id) => this.alerts[id])\n .sort((a, b) => a.id - b.id)\n }\n\n dismissAlert (id: number) {\n delete this.alerts[id]\n }\n\n private addAlert (accountId: string, triggeredBy: string, message: string) {\n const alert = Object.keys(this.alerts)\n .map((alertId) => this.alerts[alertId])\n .find((alert) =>\n alert.accountId === accountId &&\n alert.triggeredBy === triggeredBy &&\n alert.message === message)\n if (alert) {\n alert.count++\n alert.updatedAt = new Date()\n return\n }\n\n const id = this.nextAlertId++\n const now = new Date()\n this.alerts[id] = {\n id,\n accountId,\n triggeredBy,\n message,\n count: 1,\n createdAt: now,\n updatedAt: now\n }\n }\n}\n"]}
\No newline at end of file