@quantform/core 0.3.260 → 0.3.265

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.
Files changed (89) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +4 -5
  2. package/dist/adapter/adapter-aggregate.js +50 -21
  3. package/dist/adapter/adapter-aggregate.js.map +1 -1
  4. package/dist/adapter/adapter.d.ts +30 -7
  5. package/dist/adapter/adapter.js +29 -2
  6. package/dist/adapter/adapter.js.map +1 -1
  7. package/dist/adapter/backtester/backtester-adapter.d.ts +13 -8
  8. package/dist/adapter/backtester/backtester-adapter.js +25 -32
  9. package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
  10. package/dist/adapter/index.d.ts +0 -1
  11. package/dist/adapter/index.js +0 -1
  12. package/dist/adapter/index.js.map +1 -1
  13. package/dist/adapter/paper/paper-adapter.d.ts +10 -7
  14. package/dist/adapter/paper/paper-adapter.js +24 -42
  15. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  16. package/dist/adapter/paper/paper-adapter.spec.js +25 -7
  17. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  18. package/dist/bootstrap.d.ts +1 -1
  19. package/dist/bootstrap.js +5 -5
  20. package/dist/bootstrap.js.map +1 -1
  21. package/dist/domain/index.d.ts +3 -0
  22. package/dist/domain/index.js +3 -0
  23. package/dist/domain/index.js.map +1 -1
  24. package/dist/{session → domain}/session-descriptor.d.ts +2 -2
  25. package/dist/{session → domain}/session-descriptor.js +0 -0
  26. package/dist/domain/session-descriptor.js.map +1 -0
  27. package/dist/{session → domain}/session.d.ts +2 -2
  28. package/dist/{session → domain}/session.js +4 -4
  29. package/dist/domain/session.js.map +1 -0
  30. package/dist/{session → domain}/session.spec.d.ts +0 -0
  31. package/dist/{session → domain}/session.spec.js +0 -0
  32. package/dist/domain/session.spec.js.map +1 -0
  33. package/dist/{session/session-statement.d.ts → domain/statement.d.ts} +2 -2
  34. package/dist/{session/session-statement.js → domain/statement.js} +1 -1
  35. package/dist/domain/statement.js.map +1 -0
  36. package/dist/index.d.ts +0 -1
  37. package/dist/index.js +0 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/ipc.d.ts +1 -1
  40. package/dist/ipc.js +11 -5
  41. package/dist/ipc.js.map +1 -1
  42. package/dist/ipc.spec.js +4 -57
  43. package/dist/ipc.spec.js.map +1 -1
  44. package/dist/shared/task.d.ts +1 -1
  45. package/dist/store/event/store-order.event.js +5 -5
  46. package/dist/store/event/store-order.event.js.map +1 -1
  47. package/dist/tests/backtester-adapter.spec.js +7 -24
  48. package/dist/tests/backtester-adapter.spec.js.map +1 -1
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +1 -1
  51. package/src/adapter/adapter-aggregate.ts +55 -75
  52. package/src/adapter/adapter.ts +83 -5
  53. package/src/adapter/backtester/backtester-adapter.ts +39 -19
  54. package/src/adapter/index.ts +0 -1
  55. package/src/adapter/paper/paper-adapter.spec.ts +42 -7
  56. package/src/adapter/paper/paper-adapter.ts +31 -23
  57. package/src/bootstrap.ts +2 -2
  58. package/src/domain/index.ts +3 -0
  59. package/src/{session → domain}/session-descriptor.ts +2 -2
  60. package/src/{session → domain}/session.spec.ts +0 -0
  61. package/src/{session → domain}/session.ts +18 -6
  62. package/src/{session/session-statement.ts → domain/statement.ts} +1 -1
  63. package/src/index.ts +0 -1
  64. package/src/ipc.spec.ts +7 -45
  65. package/src/ipc.ts +7 -8
  66. package/src/shared/task.ts +1 -1
  67. package/src/store/event/store-order.event.ts +5 -5
  68. package/src/tests/backtester-adapter.spec.ts +6 -12
  69. package/src/tests/session.spec.ts +1 -1
  70. package/dist/adapter/adapter.event.d.ts +0 -43
  71. package/dist/adapter/adapter.event.js +0 -104
  72. package/dist/adapter/adapter.event.js.map +0 -1
  73. package/dist/session/index.d.ts +0 -4
  74. package/dist/session/index.js +0 -17
  75. package/dist/session/index.js.map +0 -1
  76. package/dist/session/session-descriptor.js.map +0 -1
  77. package/dist/session/session-optimizer.d.ts +0 -10
  78. package/dist/session/session-optimizer.js +0 -62
  79. package/dist/session/session-optimizer.js.map +0 -1
  80. package/dist/session/session-optimizer.spec.d.ts +0 -1
  81. package/dist/session/session-optimizer.spec.js +0 -103
  82. package/dist/session/session-optimizer.spec.js.map +0 -1
  83. package/dist/session/session-statement.js.map +0 -1
  84. package/dist/session/session.js.map +0 -1
  85. package/dist/session/session.spec.js.map +0 -1
  86. package/src/adapter/adapter.event.ts +0 -64
  87. package/src/session/index.ts +0 -4
  88. package/src/session/session-optimizer.spec.ts +0 -86
  89. package/src/session/session-optimizer.ts +0 -81
@@ -1,7 +1,6 @@
1
1
  import { Store } from '../store';
2
- import { Adapter } from '.';
2
+ import { Adapter, FeedQuery, HistoryQuery } from '.';
3
3
  import { InstrumentSelector, Order, Candle } from '../domain';
4
- import { Feed } from './../storage';
5
4
  export declare class AdapterAggregate {
6
5
  private readonly store;
7
6
  private readonly adapter;
@@ -12,7 +11,7 @@ export declare class AdapterAggregate {
12
11
  subscribe(selectors: InstrumentSelector[]): Promise<void>;
13
12
  open(order: Order): Promise<void>;
14
13
  cancel(order: Order): Promise<void>;
15
- history(selector: InstrumentSelector, timeframe: number, length: number): Promise<Candle[]>;
16
- feed(selector: InstrumentSelector, from: number, to: number, destination: Feed, callback: (timestamp: number) => void): Promise<void>;
17
- private dispatch;
14
+ history(query: HistoryQuery): Promise<Candle[]>;
15
+ feed(query: FeedQuery): Promise<void>;
16
+ private createContext;
18
17
  }
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AdapterAggregate = void 0;
4
4
  const _1 = require(".");
5
5
  const shared_1 = require("../shared");
6
- const adapter_event_1 = require("./adapter.event");
7
6
  class AdapterAggregate {
8
7
  constructor(adapters, store) {
9
8
  this.store = store;
@@ -11,17 +10,31 @@ class AdapterAggregate {
11
10
  adapters.forEach(it => (this.adapter[it.name] = it));
12
11
  }
13
12
  get(adapterName) {
14
- return this.adapter[adapterName];
13
+ const adapter = this.adapter[adapterName];
14
+ if (!adapter) {
15
+ throw new Error(`Unknown adapter: ${adapterName}. You should provide adapter in session descriptor.`);
16
+ }
17
+ return adapter;
15
18
  }
16
19
  async awake() {
17
- for (const adapter in this.adapter) {
18
- await this.dispatch(adapter, new adapter_event_1.AdapterAwakeCommand());
19
- await this.dispatch(adapter, new adapter_event_1.AdapterAccountCommand());
20
+ for (const adapter of Object.values(this.adapter)) {
21
+ try {
22
+ await adapter.awake(this.createContext(adapter));
23
+ await adapter.account();
24
+ }
25
+ catch (e) {
26
+ shared_1.Logger.error(e);
27
+ }
20
28
  }
21
29
  }
22
30
  async dispose() {
23
- for (const adapter in this.adapter) {
24
- await this.dispatch(adapter, new adapter_event_1.AdapterDisposeCommand());
31
+ for (const adapter of Object.values(this.adapter)) {
32
+ try {
33
+ await adapter.dispose();
34
+ }
35
+ catch (e) {
36
+ shared_1.Logger.error(e);
37
+ }
25
38
  }
26
39
  }
27
40
  async subscribe(selectors) {
@@ -38,33 +51,49 @@ class AdapterAggregate {
38
51
  return aggregate;
39
52
  }, {});
40
53
  for (const adapterName in grouped) {
41
- await this.dispatch(adapterName, new adapter_event_1.AdapterSubscribeCommand(grouped[adapterName]));
54
+ try {
55
+ await this.get(adapterName).subscribe(grouped[adapterName]);
56
+ }
57
+ catch (e) {
58
+ shared_1.Logger.error(e);
59
+ }
42
60
  }
43
61
  }
44
62
  open(order) {
45
- return this.dispatch(order.instrument.base.adapter, new adapter_event_1.AdapterOrderOpenCommand(order));
63
+ try {
64
+ return this.get(order.instrument.base.adapter).open(order);
65
+ }
66
+ catch (e) {
67
+ shared_1.Logger.error(e);
68
+ }
46
69
  }
47
70
  cancel(order) {
48
- return this.dispatch(order.instrument.base.adapter, new adapter_event_1.AdapterOrderCancelCommand(order));
49
- }
50
- history(selector, timeframe, length) {
51
- return this.dispatch(selector.base.adapter, new adapter_event_1.AdapterHistoryQuery(selector, timeframe, length));
52
- }
53
- feed(selector, from, to, destination, callback) {
54
- return this.dispatch(selector.base.adapter, new adapter_event_1.AdapterFeedCommand(selector, from, to, destination, callback));
71
+ try {
72
+ return this.get(order.instrument.base.adapter).cancel(order);
73
+ }
74
+ catch (e) {
75
+ shared_1.Logger.error(e);
76
+ }
55
77
  }
56
- dispatch(adapterName, command) {
57
- const adapter = this.get(adapterName);
58
- if (!adapter) {
59
- throw new Error(`Unknown adapter: ${adapterName}. You should provide adapter in session descriptor.`);
78
+ history(query) {
79
+ try {
80
+ return this.get(query.instrument.base.adapter).history(query);
60
81
  }
82
+ catch (e) {
83
+ shared_1.Logger.error(e);
84
+ }
85
+ }
86
+ feed(query) {
61
87
  try {
62
- return adapter.dispatch(command, new _1.AdapterContext(adapter, this.store));
88
+ return this.get(query.instrument.base.adapter).feed(query);
63
89
  }
64
90
  catch (e) {
65
91
  shared_1.Logger.error(e);
66
92
  }
67
93
  }
94
+ createContext(adapter) {
95
+ return new _1.AdapterContext(adapter, this.store);
96
+ }
68
97
  }
69
98
  exports.AdapterAggregate = AdapterAggregate;
70
99
  //# sourceMappingURL=adapter-aggregate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-aggregate.js","sourceRoot":"","sources":["../../src/adapter/adapter-aggregate.ts"],"names":[],"mappings":";;;AACA,wBAA4C;AAC5C,sCAAmC;AACnC,mDASyB;AAQzB,MAAa,gBAAgB;IAG3B,YAAY,QAAmB,EAAmB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAF7C,YAAO,GAA4B,EAAE,CAAC;QAGrD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAOD,GAAG,CAAC,WAAmB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAKD,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,mCAAmB,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,qCAAqB,EAAE,CAAC,CAAC;SAC3D;IACH,CAAC;IAKD,KAAK,CAAC,OAAO;QACX,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,qCAAqB,EAAE,CAAC,CAAC;SAC3D;IACH,CAAC;IAMD,KAAK,CAAC,SAAS,CAAC,SAA+B;QAC7C,MAAM,OAAO,GAAG,SAAS;aACtB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC;aACxB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAEhC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;gBACtB,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7B;iBAAM;gBACL,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC3B;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,EAAE,EAAE,CAAC,CAAC;QAET,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE;YACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,uCAAuB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SACrF;IACH,CAAC;IAMD,IAAI,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAClB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAC7B,IAAI,uCAAuB,CAAC,KAAK,CAAC,CACnC,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,KAAY;QACjB,OAAO,IAAI,CAAC,QAAQ,CAClB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAC7B,IAAI,yCAAyB,CAAC,KAAK,CAAC,CACrC,CAAC;IACJ,CAAC;IASD,OAAO,CACL,QAA4B,EAC5B,SAAiB,EACjB,MAAc;QAEd,OAAO,IAAI,CAAC,QAAQ,CAClB,QAAQ,CAAC,IAAI,CAAC,OAAO,EACrB,IAAI,mCAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CACrD,CAAC;IACJ,CAAC;IAWD,IAAI,CACF,QAA4B,EAC5B,IAAY,EACZ,EAAU,EACV,WAAiB,EACjB,QAAqC;QAErC,OAAO,IAAI,CAAC,QAAQ,CAClB,QAAQ,CAAC,IAAI,CAAC,OAAO,EACrB,IAAI,kCAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAClE,CAAC;IACJ,CAAC;IAQO,QAAQ,CACd,WAAmB,EACnB,OAAiB;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEtC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CACb,oBAAoB,WAAW,qDAAqD,CACrF,CAAC;SACH;QAED,IAAI;YACF,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,iBAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC3E;QAAC,OAAO,CAAC,EAAE;YACV,eAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC;CACF;AAhJD,4CAgJC"}
1
+ {"version":3,"file":"adapter-aggregate.js","sourceRoot":"","sources":["../../src/adapter/adapter-aggregate.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,41 @@
1
1
  import { timestamp } from '../shared';
2
2
  import { PaperExecutor } from './paper/executor/paper-executor';
3
3
  import { PaperAdapter } from './paper';
4
- import { Topic } from '../shared/topic';
5
- import { Store } from '../store';
4
+ import { State, Store } from '../store';
5
+ import { InstrumentSelector, Order, Candle } from '../domain';
6
+ import { Feed } from '../storage';
7
+ import { StoreEvent } from '../store/event';
6
8
  export declare class AdapterContext {
7
9
  private readonly adapter;
8
- readonly store: Store;
10
+ private readonly store;
9
11
  get timestamp(): timestamp;
12
+ get snapshot(): State;
10
13
  constructor(adapter: Adapter, store: Store);
14
+ dispatch(...events: StoreEvent[]): void;
11
15
  }
12
- export declare abstract class Adapter extends Topic<{
13
- type: string;
14
- }, AdapterContext> {
16
+ export declare type HistoryQuery = {
17
+ instrument: InstrumentSelector;
18
+ timeframe: number;
19
+ length: number;
20
+ };
21
+ export declare type FeedQuery = {
22
+ instrument: InstrumentSelector;
23
+ from: timestamp;
24
+ to: timestamp;
25
+ destination: Feed;
26
+ callback: (timestamp: number) => void;
27
+ };
28
+ export declare abstract class Adapter {
29
+ context: AdapterContext;
15
30
  abstract name: string;
16
- abstract createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
17
31
  timestamp(): timestamp;
32
+ awake(context: AdapterContext): Promise<void>;
33
+ dispose(): Promise<void>;
34
+ subscribe(instruments: InstrumentSelector[]): Promise<void>;
35
+ account(): Promise<void>;
36
+ open(order: Order): Promise<void>;
37
+ cancel(order: Order): Promise<void>;
38
+ history(query: HistoryQuery): Promise<Candle[]>;
39
+ feed(query: FeedQuery): Promise<void>;
40
+ abstract createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
18
41
  }
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Adapter = exports.AdapterContext = void 0;
4
4
  const shared_1 = require("../shared");
5
- const topic_1 = require("../shared/topic");
6
5
  class AdapterContext {
7
6
  constructor(adapter, store) {
8
7
  this.adapter = adapter;
@@ -11,12 +10,40 @@ class AdapterContext {
11
10
  get timestamp() {
12
11
  return this.adapter.timestamp();
13
12
  }
13
+ get snapshot() {
14
+ return this.store.snapshot;
15
+ }
16
+ dispatch(...events) {
17
+ return this.store.dispatch(...events);
18
+ }
14
19
  }
15
20
  exports.AdapterContext = AdapterContext;
16
- class Adapter extends topic_1.Topic {
21
+ class Adapter {
17
22
  timestamp() {
18
23
  return (0, shared_1.now)();
19
24
  }
25
+ async awake(context) {
26
+ this.context = context;
27
+ }
28
+ async dispose() { }
29
+ subscribe(instruments) {
30
+ throw new Error('method not implemented');
31
+ }
32
+ account() {
33
+ throw new Error('method not implemented');
34
+ }
35
+ open(order) {
36
+ throw new Error('method not implemented');
37
+ }
38
+ cancel(order) {
39
+ throw new Error('method not implemented');
40
+ }
41
+ history(query) {
42
+ throw new Error('method not implemented');
43
+ }
44
+ feed(query) {
45
+ throw new Error('method not implemented');
46
+ }
20
47
  }
21
48
  exports.Adapter = Adapter;
22
49
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":";;;AAAA,sCAA2C;AAG3C,2CAAwC;AAMxC,MAAa,cAAc;IAQzB,YAA6B,OAAgB,EAAW,KAAY;QAAvC,YAAO,GAAP,OAAO,CAAS;QAAW,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAJxE,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;CAGF;AATD,wCASC;AAMD,MAAsB,OAAQ,SAAQ,aAAuC;IAI3E,SAAS;QACP,OAAO,IAAA,YAAG,GAAE,CAAC;IACf,CAAC;CACF;AAPD,0BAOC"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":";;;AAAA,sCAA2C;AAW3C,MAAa,cAAc;IAYzB,YAA6B,OAAgB,EAAmB,KAAY;QAA/C,YAAO,GAAP,OAAO,CAAS;QAAmB,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IARhF,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAID,QAAQ,CAAC,GAAG,MAAoB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;IACxC,CAAC;CACF;AAjBD,wCAiBC;AAoBD,MAAsB,OAAO;IAK3B,SAAS;QACP,OAAO,IAAA,YAAG,GAAE,CAAC;IACf,CAAC;IAMD,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAKD,KAAK,CAAC,OAAO,KAAmB,CAAC;IAMjC,SAAS,CAAC,WAAiC;QACzC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAKD,OAAO;QACL,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAMD,IAAI,CAAC,KAAY;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAKD,MAAM,CAAC,KAAY;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,KAAmB;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,KAAgB;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;CAGF;AA7DD,0BA6DC"}
@@ -2,7 +2,9 @@ import { Adapter, AdapterContext } from '..';
2
2
  import { BacktesterStreamer } from './backtester-streamer';
3
3
  import { PaperAdapter, PaperOptions } from '../paper';
4
4
  import { timestamp } from '../../shared';
5
- import { AdapterSubscribeCommand, AdapterHistoryQuery } from '../adapter.event';
5
+ import { InstrumentSelector, Order, Candle } from '../../domain';
6
+ import { PaperExecutor } from '../paper/executor/paper-executor';
7
+ import { FeedQuery, HistoryQuery } from '../adapter';
6
8
  export declare class BacktesterOptions extends PaperOptions {
7
9
  from: timestamp;
8
10
  to: timestamp;
@@ -11,12 +13,15 @@ export declare class BacktesterAdapter extends Adapter {
11
13
  readonly decoratedAdapter: Adapter;
12
14
  readonly streamer: BacktesterStreamer;
13
15
  readonly name: string;
14
- constructor(decoratedAdapter: Adapter, streamer: BacktesterStreamer);
15
16
  timestamp(): number;
16
- createPaperExecutor(adapter: PaperAdapter): import("../paper/executor/paper-executor").PaperExecutor;
17
- onUnknownEvent(event: {
18
- type: string;
19
- }, context: AdapterContext): any;
20
- onSubscribe(command: AdapterSubscribeCommand, context: AdapterContext): void;
21
- onHistory(event: AdapterHistoryQuery, context: AdapterContext): Promise<any>;
17
+ constructor(decoratedAdapter: Adapter, streamer: BacktesterStreamer);
18
+ awake(context: AdapterContext): Promise<void>;
19
+ dispose(): Promise<void>;
20
+ subscribe(instruments: InstrumentSelector[]): Promise<void>;
21
+ account(): Promise<void>;
22
+ open(order: Order): Promise<void>;
23
+ cancel(order: Order): Promise<void>;
24
+ history(query: HistoryQuery): Promise<Candle[]>;
25
+ feed(query: FeedQuery): Promise<void>;
26
+ createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
22
27
  }
@@ -1,19 +1,8 @@
1
1
  "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.BacktesterAdapter = exports.BacktesterOptions = void 0;
13
4
  const __1 = require("..");
14
5
  const paper_1 = require("../paper");
15
- const topic_1 = require("../../shared/topic");
16
- const adapter_event_1 = require("../adapter.event");
17
6
  const event_1 = require("../../store/event");
18
7
  class BacktesterOptions extends paper_1.PaperOptions {
19
8
  }
@@ -28,36 +17,40 @@ class BacktesterAdapter extends __1.Adapter {
28
17
  timestamp() {
29
18
  return this.streamer.timestamp;
30
19
  }
31
- createPaperExecutor(adapter) {
32
- return this.decoratedAdapter.createPaperExecutor(adapter);
20
+ async awake(context) {
21
+ await super.awake(context);
22
+ await this.decoratedAdapter.awake(context);
33
23
  }
34
- onUnknownEvent(event, context) {
35
- return this.decoratedAdapter.dispatch(event, context);
24
+ dispose() {
25
+ return this.decoratedAdapter.dispose();
36
26
  }
37
- onSubscribe(command, context) {
38
- command.instrument.forEach(it => {
27
+ async subscribe(instruments) {
28
+ instruments.forEach(it => {
39
29
  this.streamer.subscribe(it);
40
30
  });
41
- context.store.dispatch(...command.instrument.map(it => new event_1.InstrumentSubscriptionEvent(context.timestamp, it, true)));
31
+ this.context.dispatch(...instruments.map(it => new event_1.InstrumentSubscriptionEvent(this.context.timestamp, it, true)));
32
+ }
33
+ account() {
34
+ return this.decoratedAdapter.account();
35
+ }
36
+ open(order) {
37
+ return this.decoratedAdapter.open(order);
38
+ }
39
+ cancel(order) {
40
+ return this.decoratedAdapter.cancel(order);
42
41
  }
43
- async onHistory(event, context) {
42
+ async history(query) {
44
43
  this.streamer.stop();
45
- const response = await this.decoratedAdapter.dispatch(event, context);
44
+ const response = await this.decoratedAdapter.history(query);
46
45
  this.streamer.tryContinue();
47
46
  return response;
48
47
  }
48
+ feed(query) {
49
+ return this.decoratedAdapter.feed(query);
50
+ }
51
+ createPaperExecutor(adapter) {
52
+ return this.decoratedAdapter.createPaperExecutor(adapter);
53
+ }
49
54
  }
50
- __decorate([
51
- (0, topic_1.handler)(adapter_event_1.AdapterSubscribeCommand),
52
- __metadata("design:type", Function),
53
- __metadata("design:paramtypes", [adapter_event_1.AdapterSubscribeCommand, __1.AdapterContext]),
54
- __metadata("design:returntype", void 0)
55
- ], BacktesterAdapter.prototype, "onSubscribe", null);
56
- __decorate([
57
- (0, topic_1.handler)(adapter_event_1.AdapterHistoryQuery),
58
- __metadata("design:type", Function),
59
- __metadata("design:paramtypes", [adapter_event_1.AdapterHistoryQuery, __1.AdapterContext]),
60
- __metadata("design:returntype", Promise)
61
- ], BacktesterAdapter.prototype, "onHistory", null);
62
55
  exports.BacktesterAdapter = BacktesterAdapter;
63
56
  //# sourceMappingURL=backtester-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backtester-adapter.js","sourceRoot":"","sources":["../../../src/adapter/backtester/backtester-adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0BAA6C;AAE7C,oCAAsD;AACtD,8CAA6C;AAE7C,oDAAgF;AAChF,6CAAgE;AAEhE,MAAa,iBAAkB,SAAQ,oBAAY;CAGlD;AAHD,8CAGC;AAED,MAAa,iBAAkB,SAAQ,WAAO;IAG5C,YAAqB,gBAAyB,EAAW,QAA4B;QACnF,KAAK,EAAE,CAAC;QADW,qBAAgB,GAAhB,gBAAgB,CAAS;QAAW,aAAQ,GAAR,QAAQ,CAAoB;QAF5E,SAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAI3C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,cAAc,CAAC,KAAuB,EAAE,OAAuB;QAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAGD,WAAW,CAAC,OAAgC,EAAE,OAAuB;QACnE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,QAAQ,CACpB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CACvB,EAAE,CAAC,EAAE,CAAC,IAAI,mCAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CACnE,CACF,CAAC;IACJ,CAAC;IAGD,KAAK,CAAC,SAAS,CAAC,KAA0B,EAAE,OAAuB;QACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE5B,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAtBC;IADC,IAAA,eAAO,EAAC,uCAAuB,CAAC;;qCACZ,uCAAuB,EAAW,kBAAc;;oDAUpE;AAGD;IADC,IAAA,eAAO,EAAC,mCAAmB,CAAC;;qCACN,mCAAmB,EAAW,kBAAc;;kDAQlE;AAzCH,8CA0CC"}
1
+ {"version":3,"file":"backtester-adapter.js","sourceRoot":"","sources":["../../../src/adapter/backtester/backtester-adapter.ts"],"names":[],"mappings":";;;AAAA,0BAA6C;AAE7C,oCAAsD;AAEtD,6CAAgE;AAKhE,MAAa,iBAAkB,SAAQ,oBAAY;CAGlD;AAHD,8CAGC;AAED,MAAa,iBAAkB,SAAQ,WAAO;IAO5C,YAAqB,gBAAyB,EAAW,QAA4B;QACnF,KAAK,EAAE,CAAC;QADW,qBAAgB,GAAhB,gBAAgB,CAAS;QAAW,aAAQ,GAAR,QAAQ,CAAoB;QAN5E,SAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAQ3C,CAAC;IAND,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;IAMD,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAiC;QAC/C,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,QAAQ,CACnB,GAAG,WAAW,CAAC,GAAG,CAChB,EAAE,CAAC,EAAE,CAAC,IAAI,mCAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CACxE,CACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAmB;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,KAAgB;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AA7DD,8CA6DC"}
@@ -1,3 +1,2 @@
1
1
  export * from './adapter';
2
2
  export * from './adapter-aggregate';
3
- export * from './adapter.event';
@@ -12,5 +12,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./adapter"), exports);
14
14
  __exportStar(require("./adapter-aggregate"), exports);
15
- __exportStar(require("./adapter.event"), exports);
16
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,sDAAoC;AACpC,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,sDAAoC"}
@@ -1,7 +1,8 @@
1
1
  import { Adapter, AdapterContext } from '..';
2
2
  import { Store } from '../../store';
3
3
  import { PaperExecutor } from './executor/paper-executor';
4
- import { AdapterAccountCommand, AdapterOrderOpenCommand, AdapterOrderCancelCommand } from '../adapter.event';
4
+ import { Candle, InstrumentSelector, Order } from '../../domain';
5
+ import { FeedQuery, HistoryQuery } from '../adapter';
5
6
  export declare class PaperOptions {
6
7
  balance: {
7
8
  [key: string]: number;
@@ -15,11 +16,13 @@ export declare class PaperAdapter extends Adapter {
15
16
  readonly executor: PaperExecutor;
16
17
  constructor(decoratedAdapter: Adapter, store: Store, options: PaperOptions);
17
18
  timestamp(): number;
19
+ awake(context: AdapterContext): Promise<void>;
20
+ dispose(): Promise<void>;
21
+ subscribe(instruments: InstrumentSelector[]): Promise<void>;
22
+ account(): Promise<void>;
23
+ open(order: Order): Promise<void>;
24
+ cancel(order: Order): Promise<void>;
25
+ history(query: HistoryQuery): Promise<Candle[]>;
26
+ feed(query: FeedQuery): Promise<void>;
18
27
  createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
19
- onUnknownEvent(event: {
20
- type: string;
21
- }, context: AdapterContext): any;
22
- onAccount(event: AdapterAccountCommand, context: AdapterContext): void;
23
- onOrderOpen(event: AdapterOrderOpenCommand, context: AdapterContext): Promise<void>;
24
- onOrderCancel(event: AdapterOrderCancelCommand, context: AdapterContext): Promise<void>;
25
28
  }
@@ -1,20 +1,9 @@
1
1
  "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.PaperAdapter = exports.PaperOptions = void 0;
13
4
  const __1 = require("..");
14
- const topic_1 = require("../../shared/topic");
15
5
  const domain_1 = require("../../domain");
16
6
  const event_1 = require("../../store/event");
17
- const adapter_event_1 = require("../adapter.event");
18
7
  class PaperOptions {
19
8
  }
20
9
  exports.PaperOptions = PaperOptions;
@@ -30,13 +19,17 @@ class PaperAdapter extends __1.Adapter {
30
19
  timestamp() {
31
20
  return this.decoratedAdapter.timestamp();
32
21
  }
33
- createPaperExecutor(adapter) {
34
- return this.decoratedAdapter.createPaperExecutor(adapter);
22
+ async awake(context) {
23
+ await super.awake(context);
24
+ await this.decoratedAdapter.awake(context);
35
25
  }
36
- onUnknownEvent(event, context) {
37
- return this.decoratedAdapter.dispatch(event, context);
26
+ dispose() {
27
+ return this.decoratedAdapter.dispose();
38
28
  }
39
- onAccount(event, context) {
29
+ subscribe(instruments) {
30
+ return this.decoratedAdapter.subscribe(instruments);
31
+ }
32
+ async account() {
40
33
  let subscribed = Object.values(this.store.snapshot.subscription.asset).filter(it => it.adapter == this.name);
41
34
  for (const balance in this.options.balance) {
42
35
  const asset = (0, domain_1.assetOf)(balance);
@@ -45,38 +38,27 @@ class PaperAdapter extends __1.Adapter {
45
38
  }
46
39
  const free = this.options.balance[balance];
47
40
  subscribed = subscribed.filter(it => it.toString() != asset.toString());
48
- this.store.dispatch(new event_1.BalancePatchEvent(asset, free, 0, context.timestamp));
41
+ this.store.dispatch(new event_1.BalancePatchEvent(asset, free, 0, this.context.timestamp));
49
42
  }
50
43
  for (const missingAsset of subscribed) {
51
- this.store.dispatch(new event_1.BalancePatchEvent(missingAsset, 0, 0, context.timestamp));
44
+ this.store.dispatch(new event_1.BalancePatchEvent(missingAsset, 0, 0, this.context.timestamp));
52
45
  }
53
46
  }
54
- onOrderOpen(event, context) {
55
- this.executor.open(event.order);
56
- return Promise.resolve();
47
+ async open(order) {
48
+ this.executor.open(order);
49
+ }
50
+ async cancel(order) {
51
+ this.executor.cancel(order);
57
52
  }
58
- onOrderCancel(event, context) {
59
- this.executor.cancel(event.order);
60
- return Promise.resolve();
53
+ history(query) {
54
+ return this.decoratedAdapter.history(query);
55
+ }
56
+ feed(query) {
57
+ return this.decoratedAdapter.feed(query);
58
+ }
59
+ createPaperExecutor(adapter) {
60
+ return this.decoratedAdapter.createPaperExecutor(adapter);
61
61
  }
62
62
  }
63
- __decorate([
64
- (0, topic_1.handler)(adapter_event_1.AdapterAccountCommand),
65
- __metadata("design:type", Function),
66
- __metadata("design:paramtypes", [adapter_event_1.AdapterAccountCommand, __1.AdapterContext]),
67
- __metadata("design:returntype", void 0)
68
- ], PaperAdapter.prototype, "onAccount", null);
69
- __decorate([
70
- (0, topic_1.handler)(adapter_event_1.AdapterOrderOpenCommand),
71
- __metadata("design:type", Function),
72
- __metadata("design:paramtypes", [adapter_event_1.AdapterOrderOpenCommand, __1.AdapterContext]),
73
- __metadata("design:returntype", void 0)
74
- ], PaperAdapter.prototype, "onOrderOpen", null);
75
- __decorate([
76
- (0, topic_1.handler)(adapter_event_1.AdapterOrderCancelCommand),
77
- __metadata("design:type", Function),
78
- __metadata("design:paramtypes", [adapter_event_1.AdapterOrderCancelCommand, __1.AdapterContext]),
79
- __metadata("design:returntype", void 0)
80
- ], PaperAdapter.prototype, "onOrderCancel", null);
81
63
  exports.PaperAdapter = PaperAdapter;
82
64
  //# sourceMappingURL=paper-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paper-adapter.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paper-adapter.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const _1 = require(".");
4
+ const __1 = require("..");
4
5
  const store_1 = require("../../store");
5
6
  const adapter_1 = require("../adapter");
6
7
  const paper_adapter_1 = require("./paper-adapter");
8
+ const domain_1 = require("./../../domain");
9
+ const instrument_1 = require("./../../domain/instrument");
10
+ const event_1 = require("../../store/event");
7
11
  class DefaultAdapter extends adapter_1.Adapter {
8
12
  constructor() {
9
13
  super(...arguments);
@@ -12,22 +16,36 @@ class DefaultAdapter extends adapter_1.Adapter {
12
16
  timestamp() {
13
17
  return 123;
14
18
  }
19
+ async awake(context) {
20
+ super.awake(context);
21
+ context.dispatch(new event_1.InstrumentPatchEvent(context.timestamp, new domain_1.Asset('a', this.name, 8), new domain_1.Asset('b', this.name, 4), new domain_1.Commission(0.1, 0.1), 'a-b'));
22
+ }
15
23
  createPaperExecutor(adapter) {
16
24
  return new _1.PaperSpotExecutor(adapter);
17
25
  }
18
26
  }
19
27
  describe('paper adapter tests', () => {
28
+ const options = {
29
+ balance: {
30
+ ['default:a']: 1000,
31
+ ['default:b']: 200
32
+ }
33
+ };
20
34
  test('should return wrapped adapter name and timestamp', () => {
21
- const adapter = new DefaultAdapter();
22
35
  const store = new store_1.Store();
23
- const options = {
24
- balance: {
25
- ['binance:usdt']: 1000
26
- }
27
- };
28
- const sut = new paper_adapter_1.PaperAdapter(adapter, store, options);
36
+ const sut = new paper_adapter_1.PaperAdapter(new DefaultAdapter(), store, options);
29
37
  expect(sut.name).toEqual('default');
30
38
  expect(sut.timestamp()).toEqual(123);
31
39
  });
40
+ test('', async () => {
41
+ const store = new store_1.Store();
42
+ const adapter = new DefaultAdapter();
43
+ const sut = new paper_adapter_1.PaperAdapter(adapter, store, options);
44
+ await sut.awake(new __1.AdapterContext(sut, store));
45
+ await sut.account();
46
+ const order = domain_1.Order.buyMarket((0, instrument_1.instrumentOf)('default:a-b'), 1.0);
47
+ await sut.open(order);
48
+ expect(store.snapshot.order[order.id]).toEqual(order);
49
+ });
32
50
  });
33
51
  //# sourceMappingURL=paper-adapter.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paper-adapter.spec.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.spec.ts"],"names":[],"mappings":";;AAAA,wBAAsC;AACtC,uCAAoC;AACpC,wCAAqC;AAErC,mDAA+C;AAE/C,MAAM,cAAe,SAAQ,iBAAO;IAApC;;QACE,SAAI,GAAG,SAAS,CAAC;IASnB,CAAC;IAPC,SAAS;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,oBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG;YACd,OAAO,EAAE;gBACP,CAAC,cAAc,CAAC,EAAE,IAAI;aACvB;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,4BAAY,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"paper-adapter.spec.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.spec.ts"],"names":[],"mappings":";;AAAA,wBAAsC;AACtC,0BAAoC;AACpC,uCAAoC;AACpC,wCAAqC;AAErC,mDAA+C;AAC/C,2CAAmE;AACnE,0DAAyD;AACzD,6CAA4E;AAE5E,MAAM,cAAe,SAAQ,iBAAO;IAApC;;QACE,SAAI,GAAG,SAAS,CAAC;IAuBnB,CAAC;IArBC,SAAS;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErB,OAAO,CAAC,QAAQ,CACd,IAAI,4BAAoB,CACtB,OAAO,CAAC,SAAS,EACjB,IAAI,cAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC5B,IAAI,cAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC5B,IAAI,mBAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACxB,KAAK,CACN,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,oBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG;QACd,OAAO,EAAE;YACP,CAAC,WAAW,CAAC,EAAE,IAAI;YACnB,CAAC,WAAW,CAAC,EAAE,GAAG;SACnB;KACF,CAAC;IAEF,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,4BAAY,CAAC,IAAI,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QAErC,MAAM,GAAG,GAAG,IAAI,4BAAY,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,kBAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QAEpB,MAAM,KAAK,GAAG,cAAK,CAAC,SAAS,CAAC,IAAA,yBAAY,EAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;QAEhE,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { BacktesterListener, BacktesterStreamer } from './adapter/backtester';
2
- import { Session, SessionDescriptor } from './session';
2
+ import { Session, SessionDescriptor } from './domain';
3
3
  export declare class Bootstrap {
4
4
  readonly descriptor: SessionDescriptor;
5
5
  constructor(descriptor: SessionDescriptor);