@ignex/nova 0.1.1

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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/docs/architecture.md +146 -0
  4. package/docs/publishing.md +119 -0
  5. package/docs/wire-format.md +170 -0
  6. package/index.ts +61 -0
  7. package/package.json +89 -0
  8. package/prebuilds/linux-x64/libignex_ffi.so +0 -0
  9. package/public/client.ts +23 -0
  10. package/public/nats.ts +19 -0
  11. package/public/server.ts +35 -0
  12. package/rust/Cargo.toml +19 -0
  13. package/rust/src/ffi.rs +135 -0
  14. package/rust/src/generated/backend.rs +2817 -0
  15. package/rust/src/generated/mod.rs +2 -0
  16. package/rust/src/lib.rs +9 -0
  17. package/rust/src/transcode/generated.rs +1352 -0
  18. package/rust/src/transcode/mod.rs +2 -0
  19. package/src/bridge/nats.ts +269 -0
  20. package/src/bridge/subjects.ts +30 -0
  21. package/src/core/auth.ts +56 -0
  22. package/src/core/backpressure.ts +39 -0
  23. package/src/core/client-heartbeat.ts +27 -0
  24. package/src/core/client-reconnect.ts +35 -0
  25. package/src/core/client-state.ts +76 -0
  26. package/src/core/client-wire.ts +72 -0
  27. package/src/core/client.ts +176 -0
  28. package/src/core/groups.ts +52 -0
  29. package/src/core/int64-guard.ts +44 -0
  30. package/src/core/metrics.ts +105 -0
  31. package/src/core/outbound.ts +76 -0
  32. package/src/core/replay.ts +31 -0
  33. package/src/core/ring.ts +85 -0
  34. package/src/core/rooms.ts +44 -0
  35. package/src/core/routing.ts +94 -0
  36. package/src/core/server.ts +294 -0
  37. package/src/core/state.ts +179 -0
  38. package/src/generated/direct-ser.ts +495 -0
  39. package/src/generated/fbs/backend.fbs +139 -0
  40. package/src/generated/registry.ts +341 -0
  41. package/src/generated/rust/backend_generated.rs +2817 -0
  42. package/src/generated/ts/backend.ts +25 -0
  43. package/src/generated/ts/big-val.ts +106 -0
  44. package/src/generated/ts/complex.ts +303 -0
  45. package/src/generated/ts/customer.ts +137 -0
  46. package/src/generated/ts/hello.ts +123 -0
  47. package/src/generated/ts/join-group.ts +78 -0
  48. package/src/generated/ts/leave-group.ts +78 -0
  49. package/src/generated/ts/order-billing.ts +137 -0
  50. package/src/generated/ts/order-line.ts +144 -0
  51. package/src/generated/ts/order.ts +236 -0
  52. package/src/generated/ts/ping.ts +74 -0
  53. package/src/generated/ts/pong.ts +74 -0
  54. package/src/generated/ts/portfolio-position.ts +120 -0
  55. package/src/generated/ts/portfolio-snapshot.ts +170 -0
  56. package/src/generated/ts/quote.ts +148 -0
  57. package/src/generated/ts/side.ts +8 -0
  58. package/src/generated/ts/snapshot-request.ts +78 -0
  59. package/src/generated/ts/subscribe.ts +78 -0
  60. package/src/generated/ts/tags.ts +9 -0
  61. package/src/generated/ts/trade.ts +135 -0
  62. package/src/generated/ts/unsubscribe.ts +78 -0
  63. package/src/generated/ts/welcome.ts +112 -0
  64. package/src/generated/ts-ser.ts +465 -0
  65. package/src/generated/wire-registry.json +20 -0
  66. package/src/native/codec.ts +35 -0
  67. package/src/native/ffi.ts +214 -0
  68. package/src/native/loader.ts +55 -0
  69. package/src/schema/index.ts +217 -0
  70. package/src/server.ts +87 -0
  71. package/src/transport/byte-buffer-pool.ts +63 -0
  72. package/src/transport/scratch.ts +48 -0
  73. package/src/transport/stats.ts +44 -0
  74. package/src/transport/transport.ts +106 -0
@@ -0,0 +1,78 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
4
+
5
+ import * as flatbuffers from 'flatbuffers';
6
+
7
+
8
+
9
+ export class Subscribe implements flatbuffers.IUnpackableObject<SubscribeT> {
10
+ bb: flatbuffers.ByteBuffer|null = null;
11
+ bb_pos = 0;
12
+ __init(i:number, bb:flatbuffers.ByteBuffer):Subscribe {
13
+ this.bb_pos = i;
14
+ this.bb = bb;
15
+ return this;
16
+ }
17
+
18
+ static getRootAsSubscribe(bb:flatbuffers.ByteBuffer, obj?:Subscribe):Subscribe {
19
+ return (obj || new Subscribe()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
20
+ }
21
+
22
+ static getSizePrefixedRootAsSubscribe(bb:flatbuffers.ByteBuffer, obj?:Subscribe):Subscribe {
23
+ bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
24
+ return (obj || new Subscribe()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
25
+ }
26
+
27
+ topic():string|null
28
+ topic(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
29
+ topic(optionalEncoding?:any):string|Uint8Array|null {
30
+ const offset = this.bb!.__offset(this.bb_pos, 4);
31
+ return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
32
+ }
33
+
34
+ static startSubscribe(builder:flatbuffers.Builder) {
35
+ builder.startObject(1);
36
+ }
37
+
38
+ static addTopic(builder:flatbuffers.Builder, topicOffset:flatbuffers.Offset) {
39
+ builder.addFieldOffset(0, topicOffset, 0);
40
+ }
41
+
42
+ static endSubscribe(builder:flatbuffers.Builder):flatbuffers.Offset {
43
+ const offset = builder.endObject();
44
+ return offset;
45
+ }
46
+
47
+ static createSubscribe(builder:flatbuffers.Builder, topicOffset:flatbuffers.Offset):flatbuffers.Offset {
48
+ Subscribe.startSubscribe(builder);
49
+ Subscribe.addTopic(builder, topicOffset);
50
+ return Subscribe.endSubscribe(builder);
51
+ }
52
+
53
+ unpack(): SubscribeT {
54
+ return new SubscribeT(
55
+ this.topic()
56
+ );
57
+ }
58
+
59
+
60
+ unpackTo(_o: SubscribeT): void {
61
+ _o.topic = this.topic();
62
+ }
63
+ }
64
+
65
+ export class SubscribeT implements flatbuffers.IGeneratedObject {
66
+ constructor(
67
+ public topic: string|Uint8Array|null = null
68
+ ){}
69
+
70
+
71
+ pack(builder:flatbuffers.Builder): flatbuffers.Offset {
72
+ const topic = (this.topic !== null ? builder.createString(this.topic!) : 0);
73
+
74
+ return Subscribe.createSubscribe(builder,
75
+ topic
76
+ );
77
+ }
78
+ }
@@ -0,0 +1,9 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
4
+
5
+ export enum Tags {
6
+ HOT = 0,
7
+ NEW = 1,
8
+ SALE = 2
9
+ }
@@ -0,0 +1,135 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
4
+
5
+ import * as flatbuffers from 'flatbuffers';
6
+
7
+ import { Side } from './side.js';
8
+
9
+
10
+ export class Trade implements flatbuffers.IUnpackableObject<TradeT> {
11
+ bb: flatbuffers.ByteBuffer|null = null;
12
+ bb_pos = 0;
13
+ __init(i:number, bb:flatbuffers.ByteBuffer):Trade {
14
+ this.bb_pos = i;
15
+ this.bb = bb;
16
+ return this;
17
+ }
18
+
19
+ static getRootAsTrade(bb:flatbuffers.ByteBuffer, obj?:Trade):Trade {
20
+ return (obj || new Trade()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
21
+ }
22
+
23
+ static getSizePrefixedRootAsTrade(bb:flatbuffers.ByteBuffer, obj?:Trade):Trade {
24
+ bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
25
+ return (obj || new Trade()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
26
+ }
27
+
28
+ symbol():string|null
29
+ symbol(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
30
+ symbol(optionalEncoding?:any):string|Uint8Array|null {
31
+ const offset = this.bb!.__offset(this.bb_pos, 4);
32
+ return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
33
+ }
34
+
35
+ price():number {
36
+ const offset = this.bb!.__offset(this.bb_pos, 6);
37
+ return offset ? this.bb!.readFloat64(this.bb_pos + offset) : 0.0;
38
+ }
39
+
40
+ volume():bigint {
41
+ const offset = this.bb!.__offset(this.bb_pos, 8);
42
+ return offset ? this.bb!.readInt64(this.bb_pos + offset) : BigInt('0');
43
+ }
44
+
45
+ side():Side {
46
+ const offset = this.bb!.__offset(this.bb_pos, 10);
47
+ return offset ? this.bb!.readInt32(this.bb_pos + offset) : Side.BUY;
48
+ }
49
+
50
+ ts():bigint {
51
+ const offset = this.bb!.__offset(this.bb_pos, 12);
52
+ return offset ? this.bb!.readInt64(this.bb_pos + offset) : BigInt('0');
53
+ }
54
+
55
+ static startTrade(builder:flatbuffers.Builder) {
56
+ builder.startObject(5);
57
+ }
58
+
59
+ static addSymbol(builder:flatbuffers.Builder, symbolOffset:flatbuffers.Offset) {
60
+ builder.addFieldOffset(0, symbolOffset, 0);
61
+ }
62
+
63
+ static addPrice(builder:flatbuffers.Builder, price:number) {
64
+ builder.addFieldFloat64(1, price, 0.0);
65
+ }
66
+
67
+ static addVolume(builder:flatbuffers.Builder, volume:bigint) {
68
+ builder.addFieldInt64(2, volume, BigInt('0'));
69
+ }
70
+
71
+ static addSide(builder:flatbuffers.Builder, side:Side) {
72
+ builder.addFieldInt32(3, side, Side.BUY);
73
+ }
74
+
75
+ static addTs(builder:flatbuffers.Builder, ts:bigint) {
76
+ builder.addFieldInt64(4, ts, BigInt('0'));
77
+ }
78
+
79
+ static endTrade(builder:flatbuffers.Builder):flatbuffers.Offset {
80
+ const offset = builder.endObject();
81
+ return offset;
82
+ }
83
+
84
+ static createTrade(builder:flatbuffers.Builder, symbolOffset:flatbuffers.Offset, price:number, volume:bigint, side:Side, ts:bigint):flatbuffers.Offset {
85
+ Trade.startTrade(builder);
86
+ Trade.addSymbol(builder, symbolOffset);
87
+ Trade.addPrice(builder, price);
88
+ Trade.addVolume(builder, volume);
89
+ Trade.addSide(builder, side);
90
+ Trade.addTs(builder, ts);
91
+ return Trade.endTrade(builder);
92
+ }
93
+
94
+ unpack(): TradeT {
95
+ return new TradeT(
96
+ this.symbol(),
97
+ this.price(),
98
+ this.volume(),
99
+ this.side(),
100
+ this.ts()
101
+ );
102
+ }
103
+
104
+
105
+ unpackTo(_o: TradeT): void {
106
+ _o.symbol = this.symbol();
107
+ _o.price = this.price();
108
+ _o.volume = this.volume();
109
+ _o.side = this.side();
110
+ _o.ts = this.ts();
111
+ }
112
+ }
113
+
114
+ export class TradeT implements flatbuffers.IGeneratedObject {
115
+ constructor(
116
+ public symbol: string|Uint8Array|null = null,
117
+ public price: number = 0.0,
118
+ public volume: bigint = BigInt('0'),
119
+ public side: Side = Side.BUY,
120
+ public ts: bigint = BigInt('0')
121
+ ){}
122
+
123
+
124
+ pack(builder:flatbuffers.Builder): flatbuffers.Offset {
125
+ const symbol = (this.symbol !== null ? builder.createString(this.symbol!) : 0);
126
+
127
+ return Trade.createTrade(builder,
128
+ symbol,
129
+ this.price,
130
+ this.volume,
131
+ this.side,
132
+ this.ts
133
+ );
134
+ }
135
+ }
@@ -0,0 +1,78 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
4
+
5
+ import * as flatbuffers from 'flatbuffers';
6
+
7
+
8
+
9
+ export class Unsubscribe implements flatbuffers.IUnpackableObject<UnsubscribeT> {
10
+ bb: flatbuffers.ByteBuffer|null = null;
11
+ bb_pos = 0;
12
+ __init(i:number, bb:flatbuffers.ByteBuffer):Unsubscribe {
13
+ this.bb_pos = i;
14
+ this.bb = bb;
15
+ return this;
16
+ }
17
+
18
+ static getRootAsUnsubscribe(bb:flatbuffers.ByteBuffer, obj?:Unsubscribe):Unsubscribe {
19
+ return (obj || new Unsubscribe()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
20
+ }
21
+
22
+ static getSizePrefixedRootAsUnsubscribe(bb:flatbuffers.ByteBuffer, obj?:Unsubscribe):Unsubscribe {
23
+ bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
24
+ return (obj || new Unsubscribe()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
25
+ }
26
+
27
+ topic():string|null
28
+ topic(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
29
+ topic(optionalEncoding?:any):string|Uint8Array|null {
30
+ const offset = this.bb!.__offset(this.bb_pos, 4);
31
+ return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
32
+ }
33
+
34
+ static startUnsubscribe(builder:flatbuffers.Builder) {
35
+ builder.startObject(1);
36
+ }
37
+
38
+ static addTopic(builder:flatbuffers.Builder, topicOffset:flatbuffers.Offset) {
39
+ builder.addFieldOffset(0, topicOffset, 0);
40
+ }
41
+
42
+ static endUnsubscribe(builder:flatbuffers.Builder):flatbuffers.Offset {
43
+ const offset = builder.endObject();
44
+ return offset;
45
+ }
46
+
47
+ static createUnsubscribe(builder:flatbuffers.Builder, topicOffset:flatbuffers.Offset):flatbuffers.Offset {
48
+ Unsubscribe.startUnsubscribe(builder);
49
+ Unsubscribe.addTopic(builder, topicOffset);
50
+ return Unsubscribe.endUnsubscribe(builder);
51
+ }
52
+
53
+ unpack(): UnsubscribeT {
54
+ return new UnsubscribeT(
55
+ this.topic()
56
+ );
57
+ }
58
+
59
+
60
+ unpackTo(_o: UnsubscribeT): void {
61
+ _o.topic = this.topic();
62
+ }
63
+ }
64
+
65
+ export class UnsubscribeT implements flatbuffers.IGeneratedObject {
66
+ constructor(
67
+ public topic: string|Uint8Array|null = null
68
+ ){}
69
+
70
+
71
+ pack(builder:flatbuffers.Builder): flatbuffers.Offset {
72
+ const topic = (this.topic !== null ? builder.createString(this.topic!) : 0);
73
+
74
+ return Unsubscribe.createUnsubscribe(builder,
75
+ topic
76
+ );
77
+ }
78
+ }
@@ -0,0 +1,112 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ /* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
4
+
5
+ import * as flatbuffers from 'flatbuffers';
6
+
7
+
8
+
9
+ export class Welcome implements flatbuffers.IUnpackableObject<WelcomeT> {
10
+ bb: flatbuffers.ByteBuffer|null = null;
11
+ bb_pos = 0;
12
+ __init(i:number, bb:flatbuffers.ByteBuffer):Welcome {
13
+ this.bb_pos = i;
14
+ this.bb = bb;
15
+ return this;
16
+ }
17
+
18
+ static getRootAsWelcome(bb:flatbuffers.ByteBuffer, obj?:Welcome):Welcome {
19
+ return (obj || new Welcome()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
20
+ }
21
+
22
+ static getSizePrefixedRootAsWelcome(bb:flatbuffers.ByteBuffer, obj?:Welcome):Welcome {
23
+ bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
24
+ return (obj || new Welcome()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
25
+ }
26
+
27
+ clientId():string|null
28
+ clientId(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
29
+ clientId(optionalEncoding?:any):string|Uint8Array|null {
30
+ const offset = this.bb!.__offset(this.bb_pos, 4);
31
+ return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
32
+ }
33
+
34
+ groups(index: number):string
35
+ groups(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array
36
+ groups(index: number,optionalEncoding?:any):string|Uint8Array|null {
37
+ const offset = this.bb!.__offset(this.bb_pos, 6);
38
+ return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;
39
+ }
40
+
41
+ groupsLength():number {
42
+ const offset = this.bb!.__offset(this.bb_pos, 6);
43
+ return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;
44
+ }
45
+
46
+ static startWelcome(builder:flatbuffers.Builder) {
47
+ builder.startObject(2);
48
+ }
49
+
50
+ static addClientId(builder:flatbuffers.Builder, clientIdOffset:flatbuffers.Offset) {
51
+ builder.addFieldOffset(0, clientIdOffset, 0);
52
+ }
53
+
54
+ static addGroups(builder:flatbuffers.Builder, groupsOffset:flatbuffers.Offset) {
55
+ builder.addFieldOffset(1, groupsOffset, 0);
56
+ }
57
+
58
+ static createGroupsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {
59
+ builder.startVector(4, data.length, 4);
60
+ for (let i = data.length - 1; i >= 0; i--) {
61
+ builder.addOffset(data[i]!);
62
+ }
63
+ return builder.endVector();
64
+ }
65
+
66
+ static startGroupsVector(builder:flatbuffers.Builder, numElems:number) {
67
+ builder.startVector(4, numElems, 4);
68
+ }
69
+
70
+ static endWelcome(builder:flatbuffers.Builder):flatbuffers.Offset {
71
+ const offset = builder.endObject();
72
+ return offset;
73
+ }
74
+
75
+ static createWelcome(builder:flatbuffers.Builder, clientIdOffset:flatbuffers.Offset, groupsOffset:flatbuffers.Offset):flatbuffers.Offset {
76
+ Welcome.startWelcome(builder);
77
+ Welcome.addClientId(builder, clientIdOffset);
78
+ Welcome.addGroups(builder, groupsOffset);
79
+ return Welcome.endWelcome(builder);
80
+ }
81
+
82
+ unpack(): WelcomeT {
83
+ return new WelcomeT(
84
+ this.clientId(),
85
+ this.bb!.createScalarList<string>(this.groups.bind(this), this.groupsLength())
86
+ );
87
+ }
88
+
89
+
90
+ unpackTo(_o: WelcomeT): void {
91
+ _o.clientId = this.clientId();
92
+ _o.groups = this.bb!.createScalarList<string>(this.groups.bind(this), this.groupsLength());
93
+ }
94
+ }
95
+
96
+ export class WelcomeT implements flatbuffers.IGeneratedObject {
97
+ constructor(
98
+ public clientId: string|Uint8Array|null = null,
99
+ public groups: (string)[] = []
100
+ ){}
101
+
102
+
103
+ pack(builder:flatbuffers.Builder): flatbuffers.Offset {
104
+ const clientId = (this.clientId !== null ? builder.createString(this.clientId!) : 0);
105
+ const groups = Welcome.createGroupsVector(builder, builder.createObjectOffsetList(this.groups));
106
+
107
+ return Welcome.createWelcome(builder,
108
+ clientId,
109
+ groups
110
+ );
111
+ }
112
+ }