openplanter 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +210 -0
- package/dist/builder.d.ts +11 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +179 -0
- package/dist/builder.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +548 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +114 -0
- package/dist/config.js.map +1 -0
- package/dist/credentials.d.ts +52 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +371 -0
- package/dist/credentials.js.map +1 -0
- package/dist/demo.d.ts +26 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +95 -0
- package/dist/demo.js.map +1 -0
- package/dist/engine.d.ts +91 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1036 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/investigation-tools/aph-holdings.d.ts +61 -0
- package/dist/investigation-tools/aph-holdings.d.ts.map +1 -0
- package/dist/investigation-tools/aph-holdings.js +459 -0
- package/dist/investigation-tools/aph-holdings.js.map +1 -0
- package/dist/investigation-tools/asic-officer-lookup.d.ts +42 -0
- package/dist/investigation-tools/asic-officer-lookup.d.ts.map +1 -0
- package/dist/investigation-tools/asic-officer-lookup.js +197 -0
- package/dist/investigation-tools/asic-officer-lookup.js.map +1 -0
- package/dist/investigation-tools/asx-calendar-fetcher.d.ts +42 -0
- package/dist/investigation-tools/asx-calendar-fetcher.d.ts.map +1 -0
- package/dist/investigation-tools/asx-calendar-fetcher.js +271 -0
- package/dist/investigation-tools/asx-calendar-fetcher.js.map +1 -0
- package/dist/investigation-tools/asx-parser.d.ts +66 -0
- package/dist/investigation-tools/asx-parser.d.ts.map +1 -0
- package/dist/investigation-tools/asx-parser.js +314 -0
- package/dist/investigation-tools/asx-parser.js.map +1 -0
- package/dist/investigation-tools/bulk-asx-announcements.d.ts +53 -0
- package/dist/investigation-tools/bulk-asx-announcements.d.ts.map +1 -0
- package/dist/investigation-tools/bulk-asx-announcements.js +204 -0
- package/dist/investigation-tools/bulk-asx-announcements.js.map +1 -0
- package/dist/investigation-tools/entity-resolver.d.ts +77 -0
- package/dist/investigation-tools/entity-resolver.d.ts.map +1 -0
- package/dist/investigation-tools/entity-resolver.js +346 -0
- package/dist/investigation-tools/entity-resolver.js.map +1 -0
- package/dist/investigation-tools/hotcopper-scraper.d.ts +73 -0
- package/dist/investigation-tools/hotcopper-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/hotcopper-scraper.js +318 -0
- package/dist/investigation-tools/hotcopper-scraper.js.map +1 -0
- package/dist/investigation-tools/index.d.ts +15 -0
- package/dist/investigation-tools/index.d.ts.map +1 -0
- package/dist/investigation-tools/index.js +15 -0
- package/dist/investigation-tools/index.js.map +1 -0
- package/dist/investigation-tools/insider-graph.d.ts +173 -0
- package/dist/investigation-tools/insider-graph.d.ts.map +1 -0
- package/dist/investigation-tools/insider-graph.js +732 -0
- package/dist/investigation-tools/insider-graph.js.map +1 -0
- package/dist/investigation-tools/insider-suspicion-scorer.d.ts +97 -0
- package/dist/investigation-tools/insider-suspicion-scorer.d.ts.map +1 -0
- package/dist/investigation-tools/insider-suspicion-scorer.js +327 -0
- package/dist/investigation-tools/insider-suspicion-scorer.js.map +1 -0
- package/dist/investigation-tools/multi-forum-scraper.d.ts +104 -0
- package/dist/investigation-tools/multi-forum-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/multi-forum-scraper.js +415 -0
- package/dist/investigation-tools/multi-forum-scraper.js.map +1 -0
- package/dist/investigation-tools/price-fetcher.d.ts +81 -0
- package/dist/investigation-tools/price-fetcher.d.ts.map +1 -0
- package/dist/investigation-tools/price-fetcher.js +268 -0
- package/dist/investigation-tools/price-fetcher.js.map +1 -0
- package/dist/investigation-tools/shared.d.ts +39 -0
- package/dist/investigation-tools/shared.d.ts.map +1 -0
- package/dist/investigation-tools/shared.js +203 -0
- package/dist/investigation-tools/shared.js.map +1 -0
- package/dist/investigation-tools/timeline-linker.d.ts +90 -0
- package/dist/investigation-tools/timeline-linker.d.ts.map +1 -0
- package/dist/investigation-tools/timeline-linker.js +219 -0
- package/dist/investigation-tools/timeline-linker.js.map +1 -0
- package/dist/investigation-tools/volume-scanner.d.ts +70 -0
- package/dist/investigation-tools/volume-scanner.d.ts.map +1 -0
- package/dist/investigation-tools/volume-scanner.js +227 -0
- package/dist/investigation-tools/volume-scanner.js.map +1 -0
- package/dist/model.d.ts +136 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +1071 -0
- package/dist/model.js.map +1 -0
- package/dist/patching.d.ts +45 -0
- package/dist/patching.d.ts.map +1 -0
- package/dist/patching.js +317 -0
- package/dist/patching.js.map +1 -0
- package/dist/prompts.d.ts +15 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +351 -0
- package/dist/prompts.js.map +1 -0
- package/dist/replay-log.d.ts +54 -0
- package/dist/replay-log.d.ts.map +1 -0
- package/dist/replay-log.js +94 -0
- package/dist/replay-log.js.map +1 -0
- package/dist/runtime.d.ts +53 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +259 -0
- package/dist/runtime.js.map +1 -0
- package/dist/settings.d.ts +39 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +146 -0
- package/dist/settings.js.map +1 -0
- package/dist/tool-defs.d.ts +58 -0
- package/dist/tool-defs.d.ts.map +1 -0
- package/dist/tool-defs.js +1029 -0
- package/dist/tool-defs.js.map +1 -0
- package/dist/tools.d.ts +72 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1454 -0
- package/dist/tools.js.map +1 -0
- package/dist/tui.d.ts +49 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +699 -0
- package/dist/tui.js.map +1 -0
- package/package.json +126 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insider-graph.js","sourceRoot":"","sources":["../../src/investigation-tools/insider-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,kEAAkE;AAElE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,gBAAgB,EAAE,CAAC;CACpB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IAChD,cAAc;IACd,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAgIH,MAAM,OAAO;IACH,IAAI,GAAmB,EAAE,CAAC;IAElC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,KAAQ;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,GAAG;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAG,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,QAAQ,CAAC,GAAW;QAC1B,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;gBAAE,MAAM;YACvD,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1E,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,GAAW;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,SAAS,CAAC;YACR,IAAI,QAAQ,GAAG,GAAG,CAAC;YACnB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAC1B,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG;gBAAE,QAAQ,GAAG,IAAI,CAAC;YACjF,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG;gBAAE,QAAQ,GAAG,KAAK,CAAC;YACpF,IAAI,QAAQ,KAAK,GAAG;gBAAE,MAAM;YAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9E,GAAG,GAAG,QAAQ,CAAC;QACjB,CAAC;IACH,CAAC;CACF;AAED,kEAAkE;AAElE,SAAS,aAAa,CAAC,KAA0C;IAC/D,OAAO,OAAO,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CACzB,CAAU,EACV,CAAS,EACT,CAAS;IAET,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,OAAO,CAAC,KAA0C,EAAE,GAAW,EAAE,QAAgB;IACxF,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,KAA0C,EAAE,GAAW;IACzE,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,kEAAkE;AAElE;;;;;GAKG;AACH,MAAM,OAAO,OAAO;IACV,MAAM,GAAyC,IAAI,GAAG,EAAE,CAAC;IACzD,IAAI,GAAsD,IAAI,GAAG,EAAE,CAAC;IACpE,KAAK,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEpD,8DAA8D;IAE9D,kEAAkE;IAClE,OAAO,CAAC,EAAU,EAAE,QAAiC,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,OAAO,CACL,MAAc,EACd,MAAc,EACd,QAAiC,EAAE;QAEnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,8DAA8D;IAE9D,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,CAAS,EAAE,CAAS;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,aAAa;QACX,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB;IACpB,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,qDAAqD;IACrD,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,6DAA6D;IAC7D,aAAa;QACX,MAAM,MAAM,GAAqD,EAAE,CAAC;QACpE,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sCAAsC;IACtC,UAAU,CAAC,IAAY;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAED,sCAAsC;IACtC,YAAY,CAAC,IAAY;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,mBAAmB,CAAC,IAAY;QAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG;YAAE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI;YAAE,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;CACF;AAED,kEAAkE;AAElE;;;GAGG;AACH,SAAS,YAAY,CACnB,CAAU,EACV,MAAc,EACd,MAAc;IAEd,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IAEnC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAErB,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,GAAG,GAA8B,MAAM,CAAC;YAC5C,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;gBAC5B,IAAI,GAAG,KAAK,IAAI;oBAAE,MAAM,CAAC,iBAAiB;YAC5C,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC7B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yDAAyD;AACzD,SAAS,mBAAmB,CAAC,CAAU;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,CAAU;IACvC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,EAAE,IAAI,KAAK;QAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,kDAAkD;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;QACzC,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEf,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhB,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE;gBAAE,SAAS;YAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEd,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1C,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBAChC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;gBAE3B,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACrB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;oBAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;oBAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAEzC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;gBAC7B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;oBACf,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,qFAAqF;AACrF,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAElB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,GAAG,OAAO;wBAAE,OAAO,GAAG,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kEAAkE;AAElE,gEAAgE;AAChE,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QACpC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;QACpC,uDAAuD;QACvD,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,IAAK,IAAI,CAAC,UAAU,EAAE,OAA8B,CAAC;QACnE,IAAI,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACrC,sDAAsD;QACtD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QACpC,KAAK,CAAC,MAAM;YACV,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAc,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,kEAAkE;AAElE,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAC9B,CAAU,EACV,MAAc,EACd,MAAc;IAEd,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM;YACN,MAAM;YACN,KAAK,EAAE,SAAS,MAAM,gBAAgB;YACtC,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM;YACN,MAAM;YACN,KAAK,EAAE,SAAS,MAAM,gBAAgB;YACtC,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,CAAC;YACP,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;YAC/B,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM;QACN,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK;KACN,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAC7B,CAAU,EACV,IAAY,EACZ,QAAgB,CAAC;IAEjB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,SAAS,IAAI,gBAAgB;YACpC,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACpB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,YAAY,CAAC;IAC1B,CAAC;IAED,MAAM,WAAW,GAAsB,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,GAAG;YACP,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC;YACnC,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;AACjE,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC1C,0BAA0B;IAC1B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAc,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACrD,MAAM,OAAO,GAAoB,CAAC,GAAG,IAAI,CAAC;aACvC,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO;gBACL,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC;aACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QACL,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,CAAU,EACV,YAAoB;IAEpB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,WAAW,EAAE,YAAY;YACzB,KAAK,EAAE,SAAS,YAAY,gBAAgB;YAC5C,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAC7C,IACE,KAAK,CAAC,IAAI,KAAK,OAAO;YACtB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACjC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAC7C,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC/B,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC;YACT,WAAW,EAAE,KAAK;YAClB,iBAAiB,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;YACnD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO;QACL,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,KAAK;KACN,CAAC;AACJ,CAAC;AAED,kEAAkE;AAElE,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,oBAAoB;IACpB,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,oBAAoB;IACpB,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAE1C,oEAAoE;IACpE,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,aAAa;QACf,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,UAAU,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,MAAM,eAAe,GAAkB,UAAU;SAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,GAAG;YACP,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC;YACnC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;YAC/B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK;SAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,gDAAgD;IAChD,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GACX,CAAC,GAAG,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO;QACrD,CAAC,CAAC,CAAC,CAAC;IAER,OAAO;QACL,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,OAAO;QACP,oBAAoB,EAAE,UAAU,CAAC,MAAM;QACvC,QAAQ;QACR,iBAAiB,EAAE,eAAe;KACnC,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEnE,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACjE,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,GAAG;YACX,GAAG,KAAK;SACT,CAAC,CAAC;KACJ,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,iDAAiD;AACjD,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,mDAAmD;AACnD,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,qDAAqD;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,sBAAsB;IACtE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE/C,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAKR,EAAE,CAAC;IACR,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,iCAAiC;IAC3E,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,aAAa;IACb,MAAM,KAAK,GAAa;QACtB,wCAAwC;QACxC,mDAAmD;QACnD,yDAAyD;QACzD,2GAA2G;KAC5G,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CACR,cAAc,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,IAAI,gBAAgB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,MAAM,CACpG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAEtD,SAAS;IACT,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjE,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS;IACT,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CACR,kBAAkB,OAAO,EAAE,aAAa,SAAS,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,GAAG,CAAC,IAAI,CACtF,CAAC;QACF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjE,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAA2C;IAC/D,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,aAAa;CACvB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* insider-suspicion-scorer.ts — Composite suspicion scorer for
|
|
3
|
+
* insider-trading investigations.
|
|
4
|
+
*
|
|
5
|
+
* Aggregates signals from trades, market anomalies, forum rumours, and
|
|
6
|
+
* declared holdings into a single deterministic suspicion score per trade
|
|
7
|
+
* event.
|
|
8
|
+
*
|
|
9
|
+
* Scoring algorithm (deterministic, 0–100):
|
|
10
|
+
* Each trade event is scored against four signal categories. Signals are
|
|
11
|
+
* only considered correlated if they fall within the CORRELATION WINDOW
|
|
12
|
+
* (7 days before or 3 days after the trade date).
|
|
13
|
+
*
|
|
14
|
+
* 1. trade_signal (0–25) — direction base + size factor
|
|
15
|
+
* 2. anomaly_signal (0–25) — volume spike + price move in window
|
|
16
|
+
* 3. rumor_signal (0–25) — rumour count + sentiment alignment
|
|
17
|
+
* 4. holdings_signal (0–25) — direct holding + portfolio breadth
|
|
18
|
+
*
|
|
19
|
+
* total_score = sum of above, clamped 0–100, rounded to 1 decimal.
|
|
20
|
+
*/
|
|
21
|
+
/** Days before trade date to consider for correlation. */
|
|
22
|
+
export declare const WINDOW_BEFORE_DAYS = 7;
|
|
23
|
+
/** Days after trade date to consider for correlation. */
|
|
24
|
+
export declare const WINDOW_AFTER_DAYS = 3;
|
|
25
|
+
/** Weight cap for trade signal. */
|
|
26
|
+
export declare const W_TRADE = 25;
|
|
27
|
+
/** Weight cap for anomaly signal. */
|
|
28
|
+
export declare const W_ANOMALY = 25;
|
|
29
|
+
/** Weight cap for rumor signal. */
|
|
30
|
+
export declare const W_RUMOR = 25;
|
|
31
|
+
/** Weight cap for holdings signal. */
|
|
32
|
+
export declare const W_HOLDINGS = 25;
|
|
33
|
+
/** Trade value at which size component maxes out. */
|
|
34
|
+
export declare const SIZE_NORMALISER = 200000;
|
|
35
|
+
/** volume_ratio at which volume component maxes out. */
|
|
36
|
+
export declare const MAX_VOLUME_RATIO = 5;
|
|
37
|
+
/** abs(price_change_pct) at which price component maxes out. */
|
|
38
|
+
export declare const MAX_PRICE_CHANGE = 8;
|
|
39
|
+
/** Number of rumours at which base component maxes out. */
|
|
40
|
+
export declare const MAX_RUMOUR_COUNT = 5;
|
|
41
|
+
/** Distinct tickers held at which breadth bonus maxes out. */
|
|
42
|
+
export declare const MAX_HOLDINGS_BREADTH = 5;
|
|
43
|
+
/** Output fields in canonical order. */
|
|
44
|
+
export declare const OUTPUT_FIELDS: readonly (keyof SuspicionResult)[];
|
|
45
|
+
export interface Trade {
|
|
46
|
+
ticker?: string;
|
|
47
|
+
date: string;
|
|
48
|
+
direction?: string;
|
|
49
|
+
value?: number;
|
|
50
|
+
person?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface Anomaly {
|
|
53
|
+
ticker?: string;
|
|
54
|
+
date: string;
|
|
55
|
+
volumeRatio?: number;
|
|
56
|
+
priceChangePct?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface Rumor {
|
|
59
|
+
ticker?: string;
|
|
60
|
+
date: string;
|
|
61
|
+
source?: string;
|
|
62
|
+
rumorFlag?: boolean;
|
|
63
|
+
sentiment?: string;
|
|
64
|
+
sentimentScore?: number;
|
|
65
|
+
}
|
|
66
|
+
export interface Holding {
|
|
67
|
+
person?: string;
|
|
68
|
+
ticker?: string;
|
|
69
|
+
shares?: number;
|
|
70
|
+
declaredDate?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface SuspicionResult {
|
|
73
|
+
person: string;
|
|
74
|
+
ticker: string;
|
|
75
|
+
tradeDate: string;
|
|
76
|
+
tradeDirection: string;
|
|
77
|
+
tradeValue: number;
|
|
78
|
+
tradeSignal: number;
|
|
79
|
+
anomalySignal: number;
|
|
80
|
+
rumorSignal: number;
|
|
81
|
+
holdingsSignal: number;
|
|
82
|
+
totalScore: number;
|
|
83
|
+
evidenceSummary: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Score every trade and return a list of suspicion entries sorted by
|
|
87
|
+
* total_score descending.
|
|
88
|
+
*
|
|
89
|
+
* Each entry contains per-signal scores, a total, and an evidence summary.
|
|
90
|
+
* Entries below *minScore* are filtered out.
|
|
91
|
+
*/
|
|
92
|
+
export declare function scoreTrades(trades: Trade[], anomalies: Anomaly[], rumors: Rumor[], holdings: Holding[], minScore?: number): SuspicionResult[];
|
|
93
|
+
/** Return results as a pretty-printed JSON string. */
|
|
94
|
+
export declare function formatJson(results: SuspicionResult[]): string;
|
|
95
|
+
/** Return results as a CSV string. */
|
|
96
|
+
export declare function formatCsv(results: SuspicionResult[]): string;
|
|
97
|
+
//# sourceMappingURL=insider-suspicion-scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insider-suspicion-scorer.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/insider-suspicion-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,mCAAmC;AACnC,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,qCAAqC;AACrC,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,mCAAmC;AACnC,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,sCAAsC;AACtC,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B,qDAAqD;AACrD,eAAO,MAAM,eAAe,SAAY,CAAC;AAEzC,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,IAAM,CAAC;AAEpC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,IAAM,CAAC;AAEpC,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,8DAA8D;AAC9D,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,wCAAwC;AACxC,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,eAAe,CAAC,EAY3D,CAAC;AAIF,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AA8MD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,OAAO,EAAE,EACpB,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,GAAE,MAAY,GACrB,eAAe,EAAE,CAkGnB;AAID,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAE7D;AAcD,sCAAsC;AACtC,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAQ5D"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* insider-suspicion-scorer.ts — Composite suspicion scorer for
|
|
3
|
+
* insider-trading investigations.
|
|
4
|
+
*
|
|
5
|
+
* Aggregates signals from trades, market anomalies, forum rumours, and
|
|
6
|
+
* declared holdings into a single deterministic suspicion score per trade
|
|
7
|
+
* event.
|
|
8
|
+
*
|
|
9
|
+
* Scoring algorithm (deterministic, 0–100):
|
|
10
|
+
* Each trade event is scored against four signal categories. Signals are
|
|
11
|
+
* only considered correlated if they fall within the CORRELATION WINDOW
|
|
12
|
+
* (7 days before or 3 days after the trade date).
|
|
13
|
+
*
|
|
14
|
+
* 1. trade_signal (0–25) — direction base + size factor
|
|
15
|
+
* 2. anomaly_signal (0–25) — volume spike + price move in window
|
|
16
|
+
* 3. rumor_signal (0–25) — rumour count + sentiment alignment
|
|
17
|
+
* 4. holdings_signal (0–25) — direct holding + portfolio breadth
|
|
18
|
+
*
|
|
19
|
+
* total_score = sum of above, clamped 0–100, rounded to 1 decimal.
|
|
20
|
+
*/
|
|
21
|
+
import { parseDate } from "./shared.js";
|
|
22
|
+
// ── Constants ───────────────────────────────────────────────────
|
|
23
|
+
/** Days before trade date to consider for correlation. */
|
|
24
|
+
export const WINDOW_BEFORE_DAYS = 7;
|
|
25
|
+
/** Days after trade date to consider for correlation. */
|
|
26
|
+
export const WINDOW_AFTER_DAYS = 3;
|
|
27
|
+
/** Weight cap for trade signal. */
|
|
28
|
+
export const W_TRADE = 25;
|
|
29
|
+
/** Weight cap for anomaly signal. */
|
|
30
|
+
export const W_ANOMALY = 25;
|
|
31
|
+
/** Weight cap for rumor signal. */
|
|
32
|
+
export const W_RUMOR = 25;
|
|
33
|
+
/** Weight cap for holdings signal. */
|
|
34
|
+
export const W_HOLDINGS = 25;
|
|
35
|
+
/** Trade value at which size component maxes out. */
|
|
36
|
+
export const SIZE_NORMALISER = 200_000.0;
|
|
37
|
+
/** volume_ratio at which volume component maxes out. */
|
|
38
|
+
export const MAX_VOLUME_RATIO = 5.0;
|
|
39
|
+
/** abs(price_change_pct) at which price component maxes out. */
|
|
40
|
+
export const MAX_PRICE_CHANGE = 8.0;
|
|
41
|
+
/** Number of rumours at which base component maxes out. */
|
|
42
|
+
export const MAX_RUMOUR_COUNT = 5;
|
|
43
|
+
/** Distinct tickers held at which breadth bonus maxes out. */
|
|
44
|
+
export const MAX_HOLDINGS_BREADTH = 5;
|
|
45
|
+
/** Output fields in canonical order. */
|
|
46
|
+
export const OUTPUT_FIELDS = [
|
|
47
|
+
"person",
|
|
48
|
+
"ticker",
|
|
49
|
+
"tradeDate",
|
|
50
|
+
"tradeDirection",
|
|
51
|
+
"tradeValue",
|
|
52
|
+
"tradeSignal",
|
|
53
|
+
"anomalySignal",
|
|
54
|
+
"rumorSignal",
|
|
55
|
+
"holdingsSignal",
|
|
56
|
+
"totalScore",
|
|
57
|
+
"evidenceSummary",
|
|
58
|
+
];
|
|
59
|
+
// ── Date Helpers ────────────────────────────────────────────────
|
|
60
|
+
const MS_PER_DAY = 86_400_000;
|
|
61
|
+
/**
|
|
62
|
+
* Return true if *otherDate* falls within the correlation window of
|
|
63
|
+
* *tradeDate*.
|
|
64
|
+
*
|
|
65
|
+
* Window: 7 days before trade through 3 days after trade (inclusive).
|
|
66
|
+
*/
|
|
67
|
+
function inWindow(tradeDate, otherDate) {
|
|
68
|
+
const earliest = tradeDate.getTime() - WINDOW_BEFORE_DAYS * MS_PER_DAY;
|
|
69
|
+
const latest = tradeDate.getTime() + WINDOW_AFTER_DAYS * MS_PER_DAY;
|
|
70
|
+
const otherTime = otherDate.getTime();
|
|
71
|
+
return otherTime >= earliest && otherTime <= latest;
|
|
72
|
+
}
|
|
73
|
+
// ── Number Formatting ───────────────────────────────────────────
|
|
74
|
+
function formatCurrencyValue(value) {
|
|
75
|
+
return Math.round(value)
|
|
76
|
+
.toFixed(0)
|
|
77
|
+
.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
78
|
+
}
|
|
79
|
+
function roundTo(value, decimals) {
|
|
80
|
+
const factor = Math.pow(10, decimals);
|
|
81
|
+
return Math.round(value * factor) / factor;
|
|
82
|
+
}
|
|
83
|
+
// ── Signal Scoring Functions ────────────────────────────────────
|
|
84
|
+
/** Compute trade_signal (0–25) from trade characteristics. */
|
|
85
|
+
function scoreTrade(trade) {
|
|
86
|
+
const direction = (trade.direction ?? "").toLowerCase();
|
|
87
|
+
const value = trade.value ?? 0;
|
|
88
|
+
// Direction base
|
|
89
|
+
let directionBase;
|
|
90
|
+
if (direction === "buy") {
|
|
91
|
+
directionBase = 10.0;
|
|
92
|
+
}
|
|
93
|
+
else if (direction === "sell") {
|
|
94
|
+
directionBase = 5.0;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
directionBase = 2.0;
|
|
98
|
+
}
|
|
99
|
+
// Size factor
|
|
100
|
+
const sizeFactor = Math.min(value / SIZE_NORMALISER, 1.0) * 15.0;
|
|
101
|
+
const sig = Math.min(directionBase + sizeFactor, W_TRADE);
|
|
102
|
+
const evidence = [];
|
|
103
|
+
evidence.push(`${direction} trade worth $${formatCurrencyValue(value)}`);
|
|
104
|
+
if (value >= SIZE_NORMALISER) {
|
|
105
|
+
evidence.push("large trade (>=$200k)");
|
|
106
|
+
}
|
|
107
|
+
return [roundTo(sig, 2), evidence];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Compute anomaly_signal (0–25) from correlated volume/price anomalies.
|
|
111
|
+
*/
|
|
112
|
+
function scoreAnomalies(trade, tradeDate, anomaliesByTicker) {
|
|
113
|
+
const ticker = (trade.ticker ?? "").trim().toUpperCase();
|
|
114
|
+
const candidates = anomaliesByTicker.get(ticker) ?? [];
|
|
115
|
+
let bestScore = 0.0;
|
|
116
|
+
let evidence = [];
|
|
117
|
+
for (const [anomDate, anom] of candidates) {
|
|
118
|
+
if (!inWindow(tradeDate, anomDate))
|
|
119
|
+
continue;
|
|
120
|
+
const volRatio = anom.volumeRatio ?? 0;
|
|
121
|
+
const priceChg = anom.priceChangePct ?? 0;
|
|
122
|
+
const volumeComponent = Math.min(volRatio / MAX_VOLUME_RATIO, 1.0) * 12.5;
|
|
123
|
+
const priceComponent = Math.min(Math.abs(priceChg) / MAX_PRICE_CHANGE, 1.0) * 12.5;
|
|
124
|
+
const anomScore = volumeComponent + priceComponent;
|
|
125
|
+
if (anomScore > bestScore) {
|
|
126
|
+
bestScore = anomScore;
|
|
127
|
+
const daysDiff = Math.round((anomDate.getTime() - tradeDate.getTime()) / MS_PER_DAY);
|
|
128
|
+
const rel = daysDiff < 0
|
|
129
|
+
? `${Math.abs(daysDiff)}d before`
|
|
130
|
+
: daysDiff > 0
|
|
131
|
+
? `${daysDiff}d after`
|
|
132
|
+
: "same day as";
|
|
133
|
+
evidence = [
|
|
134
|
+
`volume spike ${volRatio.toFixed(1)}x, price move ${priceChg >= 0 ? "+" : ""}${priceChg.toFixed(1)}% ` +
|
|
135
|
+
`(${rel} trade)`,
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const sig = Math.min(bestScore, W_ANOMALY);
|
|
140
|
+
return [roundTo(sig, 2), evidence];
|
|
141
|
+
}
|
|
142
|
+
/** Compute rumor_signal (0–25) from correlated forum rumour posts. */
|
|
143
|
+
function scoreRumors(trade, tradeDate, rumorsByTicker) {
|
|
144
|
+
const ticker = (trade.ticker ?? "").trim().toUpperCase();
|
|
145
|
+
const direction = (trade.direction ?? "").toLowerCase();
|
|
146
|
+
const candidates = rumorsByTicker.get(ticker) ?? [];
|
|
147
|
+
let rumourCount = 0;
|
|
148
|
+
let bestSentimentScore = 0.0;
|
|
149
|
+
let sentimentAligned = false;
|
|
150
|
+
const evidence = [];
|
|
151
|
+
for (const [rumDate, rum] of candidates) {
|
|
152
|
+
if (!inWindow(tradeDate, rumDate))
|
|
153
|
+
continue;
|
|
154
|
+
if (!rum.rumorFlag)
|
|
155
|
+
continue;
|
|
156
|
+
rumourCount += 1;
|
|
157
|
+
const sentiment = (rum.sentiment ?? "").toLowerCase();
|
|
158
|
+
const sentScore = rum.sentimentScore ?? 0;
|
|
159
|
+
// Check alignment: bullish + buy or bearish + sell
|
|
160
|
+
if ((sentiment === "bullish" && direction === "buy") ||
|
|
161
|
+
(sentiment === "bearish" && direction === "sell")) {
|
|
162
|
+
sentimentAligned = true;
|
|
163
|
+
if (sentScore > bestSentimentScore) {
|
|
164
|
+
bestSentimentScore = sentScore;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (rumourCount === 0)
|
|
169
|
+
return [0.0, []];
|
|
170
|
+
const base = Math.min(rumourCount / MAX_RUMOUR_COUNT, 1.0) * 15.0;
|
|
171
|
+
let sentimentBonus = 0.0;
|
|
172
|
+
if (sentimentAligned) {
|
|
173
|
+
sentimentBonus = Math.min(bestSentimentScore, 1.0) * 10.0;
|
|
174
|
+
}
|
|
175
|
+
const sig = Math.min(base + sentimentBonus, W_RUMOR);
|
|
176
|
+
evidence.push(`${rumourCount} rumour post(s) near trade`);
|
|
177
|
+
if (sentimentAligned) {
|
|
178
|
+
evidence.push(`sentiment aligned (${direction}), score ${bestSentimentScore.toFixed(2)}`);
|
|
179
|
+
}
|
|
180
|
+
return [roundTo(sig, 2), evidence];
|
|
181
|
+
}
|
|
182
|
+
/** Compute holdings_signal (0–25) from declared shareholdings. */
|
|
183
|
+
function scoreHoldings(trade, holdingsByPerson) {
|
|
184
|
+
const person = (trade.person ?? "").trim();
|
|
185
|
+
const ticker = (trade.ticker ?? "").trim().toUpperCase();
|
|
186
|
+
const personHoldings = holdingsByPerson.get(person) ?? [];
|
|
187
|
+
if (personHoldings.length === 0)
|
|
188
|
+
return [0.0, []];
|
|
189
|
+
let directHolding = 0.0;
|
|
190
|
+
const distinctTickers = new Set();
|
|
191
|
+
const evidence = [];
|
|
192
|
+
for (const h of personHoldings) {
|
|
193
|
+
const hTicker = (h.ticker ?? "").trim().toUpperCase();
|
|
194
|
+
distinctTickers.add(hTicker);
|
|
195
|
+
if (hTicker === ticker) {
|
|
196
|
+
directHolding = 15.0;
|
|
197
|
+
const shares = h.shares ?? 0;
|
|
198
|
+
evidence.push(`holds ${formatCurrencyValue(shares)} shares in ${ticker}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const breadthBonus = Math.min(distinctTickers.size / MAX_HOLDINGS_BREADTH, 1.0) * 10.0;
|
|
202
|
+
const sig = Math.min(directHolding + breadthBonus, W_HOLDINGS);
|
|
203
|
+
if (distinctTickers.size > 1) {
|
|
204
|
+
evidence.push(`holdings across ${distinctTickers.size} tickers`);
|
|
205
|
+
}
|
|
206
|
+
return [roundTo(sig, 2), evidence];
|
|
207
|
+
}
|
|
208
|
+
// ── Main Scoring Engine ─────────────────────────────────────────
|
|
209
|
+
/**
|
|
210
|
+
* Score every trade and return a list of suspicion entries sorted by
|
|
211
|
+
* total_score descending.
|
|
212
|
+
*
|
|
213
|
+
* Each entry contains per-signal scores, a total, and an evidence summary.
|
|
214
|
+
* Entries below *minScore* are filtered out.
|
|
215
|
+
*/
|
|
216
|
+
export function scoreTrades(trades, anomalies, rumors, holdings, minScore = 0.0) {
|
|
217
|
+
// Pre-index anomalies by ticker
|
|
218
|
+
const anomaliesByTicker = new Map();
|
|
219
|
+
for (const anom of anomalies) {
|
|
220
|
+
const anomDate = parseDate(anom.date);
|
|
221
|
+
if (!anomDate)
|
|
222
|
+
continue;
|
|
223
|
+
const ticker = (anom.ticker ?? "").trim().toUpperCase();
|
|
224
|
+
if (!ticker)
|
|
225
|
+
continue;
|
|
226
|
+
const list = anomaliesByTicker.get(ticker);
|
|
227
|
+
if (list) {
|
|
228
|
+
list.push([anomDate, anom]);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
anomaliesByTicker.set(ticker, [[anomDate, anom]]);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Pre-index rumors by ticker
|
|
235
|
+
const rumorsByTicker = new Map();
|
|
236
|
+
for (const rum of rumors) {
|
|
237
|
+
const rumDate = parseDate(rum.date);
|
|
238
|
+
if (!rumDate)
|
|
239
|
+
continue;
|
|
240
|
+
const ticker = (rum.ticker ?? "").trim().toUpperCase();
|
|
241
|
+
if (!ticker)
|
|
242
|
+
continue;
|
|
243
|
+
const list = rumorsByTicker.get(ticker);
|
|
244
|
+
if (list) {
|
|
245
|
+
list.push([rumDate, rum]);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
rumorsByTicker.set(ticker, [[rumDate, rum]]);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Pre-index holdings by person
|
|
252
|
+
const holdingsByPerson = new Map();
|
|
253
|
+
for (const h of holdings) {
|
|
254
|
+
const person = (h.person ?? "").trim();
|
|
255
|
+
if (!person)
|
|
256
|
+
continue;
|
|
257
|
+
const list = holdingsByPerson.get(person);
|
|
258
|
+
if (list) {
|
|
259
|
+
list.push(h);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
holdingsByPerson.set(person, [h]);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const results = [];
|
|
266
|
+
for (const trade of trades) {
|
|
267
|
+
const tradeDate = parseDate(trade.date);
|
|
268
|
+
if (!tradeDate)
|
|
269
|
+
continue;
|
|
270
|
+
const [tradeSig, tradeEv] = scoreTrade(trade);
|
|
271
|
+
const [anomalySig, anomalyEv] = scoreAnomalies(trade, tradeDate, anomaliesByTicker);
|
|
272
|
+
const [rumorSig, rumorEv] = scoreRumors(trade, tradeDate, rumorsByTicker);
|
|
273
|
+
const [holdingsSig, holdingsEv] = scoreHoldings(trade, holdingsByPerson);
|
|
274
|
+
let total = tradeSig + anomalySig + rumorSig + holdingsSig;
|
|
275
|
+
total = roundTo(Math.max(0.0, Math.min(100.0, total)), 1);
|
|
276
|
+
if (total < minScore)
|
|
277
|
+
continue;
|
|
278
|
+
// Build evidence summary
|
|
279
|
+
const allEvidence = [...tradeEv, ...anomalyEv, ...rumorEv, ...holdingsEv];
|
|
280
|
+
const evidenceSummary = allEvidence.length > 0
|
|
281
|
+
? allEvidence.join("; ")
|
|
282
|
+
: "No notable evidence";
|
|
283
|
+
results.push({
|
|
284
|
+
person: trade.person ?? "Unknown",
|
|
285
|
+
ticker: trade.ticker ?? "???",
|
|
286
|
+
tradeDate: trade.date,
|
|
287
|
+
tradeDirection: trade.direction ?? "",
|
|
288
|
+
tradeValue: trade.value ?? 0,
|
|
289
|
+
tradeSignal: tradeSig,
|
|
290
|
+
anomalySignal: anomalySig,
|
|
291
|
+
rumorSignal: rumorSig,
|
|
292
|
+
holdingsSignal: holdingsSig,
|
|
293
|
+
totalScore: total,
|
|
294
|
+
evidenceSummary,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// Sort by total_score descending, then by person/ticker for stability
|
|
298
|
+
results.sort((a, b) => {
|
|
299
|
+
if (b.totalScore !== a.totalScore)
|
|
300
|
+
return b.totalScore - a.totalScore;
|
|
301
|
+
if (a.person !== b.person)
|
|
302
|
+
return a.person.localeCompare(b.person);
|
|
303
|
+
return a.ticker.localeCompare(b.ticker);
|
|
304
|
+
});
|
|
305
|
+
return results;
|
|
306
|
+
}
|
|
307
|
+
// ── Output Formatters ───────────────────────────────────────────
|
|
308
|
+
/** Return results as a pretty-printed JSON string. */
|
|
309
|
+
export function formatJson(results) {
|
|
310
|
+
return JSON.stringify(results, null, 2);
|
|
311
|
+
}
|
|
312
|
+
/** Escape a CSV field value. */
|
|
313
|
+
function escapeCsvField(value) {
|
|
314
|
+
if (value.includes(",") ||
|
|
315
|
+
value.includes('"') ||
|
|
316
|
+
value.includes("\n")) {
|
|
317
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
318
|
+
}
|
|
319
|
+
return value;
|
|
320
|
+
}
|
|
321
|
+
/** Return results as a CSV string. */
|
|
322
|
+
export function formatCsv(results) {
|
|
323
|
+
const header = OUTPUT_FIELDS.join(",");
|
|
324
|
+
const rows = results.map((r) => OUTPUT_FIELDS.map((f) => escapeCsvField(String(r[f] ?? ""))).join(","));
|
|
325
|
+
return [header, ...rows].join("\n");
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=insider-suspicion-scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insider-suspicion-scorer.js","sourceRoot":"","sources":["../../src/investigation-tools/insider-suspicion-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,mEAAmE;AAEnE,0DAA0D;AAC1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,mCAAmC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAE1B,qCAAqC;AACrC,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B,mCAAmC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAE1B,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAuC;IAC/D,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;CAClB,CAAC;AAiDF,mEAAmE;AAEnE,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,SAAe,EAAE,SAAe;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,kBAAkB,GAAG,UAAU,CAAC;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,iBAAiB,GAAG,UAAU,CAAC;IACpE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,SAAS,IAAI,QAAQ,IAAI,SAAS,IAAI,MAAM,CAAC;AACtD,CAAC;AAED,mEAAmE;AAEnE,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;SACrB,OAAO,CAAC,CAAC,CAAC;SACV,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,QAAgB;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAC7C,CAAC;AAED,mEAAmE;AAEnE,8DAA8D;AAC9D,SAAS,UAAU,CAAC,KAAY;IAC9B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IAE/B,iBAAiB;IACjB,IAAI,aAAqB,CAAC;IAC1B,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,aAAa,GAAG,GAAG,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,GAAG,CAAC;IACtB,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,eAAe,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAEjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,iBAAiB,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,KAAK,IAAI,eAAe,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,KAAY,EACZ,SAAe,EACf,iBAAsD;IAEtD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEvD,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;YAAE,SAAS;QAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QAE1C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QAC1E,MAAM,cAAc,GAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QAC9D,MAAM,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC;QAEnD,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1B,SAAS,GAAG,SAAS,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CACxD,CAAC;YACF,MAAM,GAAG,GACP,QAAQ,GAAG,CAAC;gBACV,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU;gBACjC,CAAC,CAAC,QAAQ,GAAG,CAAC;oBACZ,CAAC,CAAC,GAAG,QAAQ,SAAS;oBACtB,CAAC,CAAC,aAAa,CAAC;YACtB,QAAQ,GAAG;gBACT,gBAAgB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBACpG,IAAI,GAAG,SAAS;aACnB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAClB,KAAY,EACZ,SAAe,EACf,cAAiD;IAEjD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEpD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,kBAAkB,GAAG,GAAG,CAAC;IAC7B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;YAAE,SAAS;QAC5C,IAAI,CAAC,GAAG,CAAC,SAAS;YAAE,SAAS;QAE7B,WAAW,IAAI,CAAC,CAAC;QACjB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;QAE1C,mDAAmD;QACnD,IACE,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC;YAChD,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM,CAAC,EACjD,CAAC;YACD,gBAAgB,GAAG,IAAI,CAAC;YACxB,IAAI,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBACnC,kBAAkB,GAAG,SAAS,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,cAAc,GAAG,GAAG,CAAC;IACzB,IAAI,gBAAgB,EAAE,CAAC;QACrB,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,EAAE,OAAO,CAAC,CAAC;IAErD,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,4BAA4B,CAAC,CAAC;IAC1D,IAAI,gBAAgB,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CACX,sBAAsB,SAAS,YAAY,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,kEAAkE;AAClE,SAAS,aAAa,CACpB,KAAY,EACZ,gBAAwC;IAExC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAElD,IAAI,aAAa,GAAG,GAAG,CAAC;IACxB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtD,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAI,CACX,SAAS,mBAAmB,CAAC,MAAM,CAAC,cAAc,MAAM,EAAE,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAChB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,oBAAoB,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAEpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,YAAY,EAAE,UAAU,CAAC,CAAC;IAE/D,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,eAAe,CAAC,IAAI,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,mEAAmE;AAEnE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,MAAe,EACf,SAAoB,EACpB,MAAe,EACf,QAAmB,EACnB,WAAmB,GAAG;IAEtB,gCAAgC;IAChC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC/D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,cAAc,CAC5C,KAAK,EACL,SAAS,EACT,iBAAiB,CAClB,CAAC;QACF,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,WAAW,CACrC,KAAK,EACL,SAAS,EACT,cAAc,CACf,CAAC;QACF,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAEzE,IAAI,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;QAC3D,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1D,IAAI,KAAK,GAAG,QAAQ;YAAE,SAAS;QAE/B,yBAAyB;QACzB,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;QAC1E,MAAM,eAAe,GACnB,WAAW,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,qBAAqB,CAAC;QAE5B,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;YACjC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;YAC7B,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,cAAc,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;YACrC,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;YAC5B,WAAW,EAAE,QAAQ;YACrB,aAAa,EAAE,UAAU;YACzB,WAAW,EAAE,QAAQ;YACrB,cAAc,EAAE,WAAW;YAC3B,UAAU,EAAE,KAAK;YACjB,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QACtE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mEAAmE;AAEnE,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,gCAAgC;AAChC,SAAS,cAAc,CAAC,KAAa;IACnC,IACE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CACnC,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACF,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* multi-forum-scraper.ts – Multi-Forum Scraper for ASX Ticker Sentiment & Rumor Extraction
|
|
3
|
+
*
|
|
4
|
+
* Scrapes multiple forums and social media platforms for posts related to a
|
|
5
|
+
* given ASX ticker. Supported sources:
|
|
6
|
+
*
|
|
7
|
+
* - HotCopper (https://hotcopper.com.au)
|
|
8
|
+
* - Stockhead (https://stockhead.com.au)
|
|
9
|
+
* - Twitter / X via Nitter (https://nitter.net)
|
|
10
|
+
*
|
|
11
|
+
* Extracts post metadata, performs basic keyword-based sentiment analysis, and
|
|
12
|
+
* flags rumor-type posts that may be relevant to insider-trading investigations.
|
|
13
|
+
*
|
|
14
|
+
* DISCLAIMER:
|
|
15
|
+
* This tool is provided for research and educational purposes only.
|
|
16
|
+
* Scraping the above websites may violate their respective Terms of
|
|
17
|
+
* Service. Users are solely responsible for ensuring compliance with all
|
|
18
|
+
* applicable laws, regulations, and website terms before using this tool.
|
|
19
|
+
* The authors accept no liability for misuse.
|
|
20
|
+
*/
|
|
21
|
+
/** All supported scraping sites. */
|
|
22
|
+
export declare const SUPPORTED_SITES: readonly string[];
|
|
23
|
+
/** A supported scraping site identifier. */
|
|
24
|
+
export type SiteName = "hotcopper" | "stockhead" | "twitter";
|
|
25
|
+
/** A single normalised forum/social post. */
|
|
26
|
+
export interface ForumPost {
|
|
27
|
+
source: string;
|
|
28
|
+
ticker: string;
|
|
29
|
+
date: string;
|
|
30
|
+
author: string;
|
|
31
|
+
title: string;
|
|
32
|
+
text_snippet: string;
|
|
33
|
+
sentiment: string;
|
|
34
|
+
sentiment_score: number;
|
|
35
|
+
rumor_flag: boolean;
|
|
36
|
+
keywords_matched: string[];
|
|
37
|
+
url: string;
|
|
38
|
+
}
|
|
39
|
+
/** Distribution of sentiment labels across posts. */
|
|
40
|
+
export interface SentimentDistribution {
|
|
41
|
+
bullish: number;
|
|
42
|
+
bearish: number;
|
|
43
|
+
neutral: number;
|
|
44
|
+
}
|
|
45
|
+
/** Aggregate summary across all scraped posts. */
|
|
46
|
+
export interface ForumSummary {
|
|
47
|
+
total_posts: number;
|
|
48
|
+
posts_per_source: Record<string, number>;
|
|
49
|
+
sentiment_distribution: SentimentDistribution;
|
|
50
|
+
average_sentiment_score: number;
|
|
51
|
+
rumor_count: number;
|
|
52
|
+
}
|
|
53
|
+
/** Full result from a multi-forum scrape run. */
|
|
54
|
+
export interface MultiForumResult {
|
|
55
|
+
ticker: string;
|
|
56
|
+
scraped_at: string;
|
|
57
|
+
period: string;
|
|
58
|
+
sites_requested: string[];
|
|
59
|
+
posts: ForumPost[];
|
|
60
|
+
summary: ForumSummary;
|
|
61
|
+
}
|
|
62
|
+
/** Options for {@link scrapeMultiForum}. */
|
|
63
|
+
export interface MultiForumOptions {
|
|
64
|
+
/** ASX ticker symbol (e.g. "BHP"). */
|
|
65
|
+
ticker: string;
|
|
66
|
+
/** Sites to scrape (default: all supported sites). */
|
|
67
|
+
sites?: SiteName[];
|
|
68
|
+
/** Look-back period in days (default: 7). */
|
|
69
|
+
days?: number;
|
|
70
|
+
/** Extra keywords to match against post text. */
|
|
71
|
+
extraKeywords?: string[];
|
|
72
|
+
/** Seconds to wait between HTTP requests (default: 1.5). */
|
|
73
|
+
delay?: number;
|
|
74
|
+
/** Custom User-Agent string. */
|
|
75
|
+
userAgent?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Scrape HotCopper discussion pages for the given ticker.
|
|
79
|
+
*
|
|
80
|
+
* This is a single-page scraper used by the multi-forum aggregator.
|
|
81
|
+
* For a full multi-page HotCopper scraper with thread body fetching,
|
|
82
|
+
* see {@link ../hotcopper-scraper.js}.
|
|
83
|
+
*/
|
|
84
|
+
export declare function scrapeHotcopper(ticker: string, days: number, delay: number, extraKeywords: string[], userAgent?: string): Promise<ForumPost[]>;
|
|
85
|
+
/**
|
|
86
|
+
* Scrape Stockhead search results for the given ticker.
|
|
87
|
+
*/
|
|
88
|
+
export declare function scrapeStockhead(ticker: string, days: number, delay: number, extraKeywords: string[], userAgent?: string): Promise<ForumPost[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Scrape Twitter/X posts via Nitter for the given ticker.
|
|
91
|
+
*/
|
|
92
|
+
export declare function scrapeTwitter(ticker: string, days: number, delay: number, extraKeywords: string[], userAgent?: string): Promise<ForumPost[]>;
|
|
93
|
+
/**
|
|
94
|
+
* Build an aggregate summary across all scraped posts.
|
|
95
|
+
*/
|
|
96
|
+
export declare function aggregateSummary(posts: ForumPost[]): ForumSummary;
|
|
97
|
+
/**
|
|
98
|
+
* Scrape multiple forums and social media for ASX ticker sentiment and rumor data.
|
|
99
|
+
*
|
|
100
|
+
* @param opts - Scraper options.
|
|
101
|
+
* @returns Structured result with posts from all requested sites and aggregate summary.
|
|
102
|
+
*/
|
|
103
|
+
export declare function scrapeMultiForum(opts: MultiForumOptions): Promise<MultiForumResult>;
|
|
104
|
+
//# sourceMappingURL=multi-forum-scraper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-forum-scraper.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/multi-forum-scraper.ts"],"names":[],"mappings":"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"}
|