@neutral-trade/internal 0.0.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.
@@ -0,0 +1,724 @@
1
+ import mongoose, { Schema } from "mongoose";
2
+
3
+ //#region src/db/schemas/daily-vault-snapshot.ts
4
+ const dailyVaultSnapshotSchema = new Schema({
5
+ vaultId: {
6
+ type: Number,
7
+ required: true,
8
+ index: true
9
+ },
10
+ date: {
11
+ type: Date,
12
+ required: true,
13
+ index: true
14
+ },
15
+ pps_usd_mean: { type: Number },
16
+ pps_token_mean: { type: Number },
17
+ tvl_usd_mean: { type: Number },
18
+ tvl_token_mean: { type: Number },
19
+ pps_usd_open: { type: Number },
20
+ pps_usd_high: { type: Number },
21
+ pps_usd_low: { type: Number },
22
+ pps_usd_close: { type: Number },
23
+ pps_token_open: { type: Number },
24
+ pps_token_high: { type: Number },
25
+ pps_token_low: { type: Number },
26
+ pps_token_close: { type: Number },
27
+ pps_token_before_offset_mean: { type: Number },
28
+ pps_token_before_offset_open: { type: Number },
29
+ pps_token_before_offset_high: { type: Number },
30
+ pps_token_before_offset_low: { type: Number },
31
+ pps_token_before_offset_close: { type: Number },
32
+ pps_usd_before_offset_mean: { type: Number },
33
+ pps_usd_before_offset_open: { type: Number },
34
+ pps_usd_before_offset_high: { type: Number },
35
+ pps_usd_before_offset_low: { type: Number },
36
+ pps_usd_before_offset_close: { type: Number },
37
+ tvl_usd_open: { type: Number },
38
+ tvl_usd_high: { type: Number },
39
+ tvl_usd_low: { type: Number },
40
+ tvl_usd_close: { type: Number },
41
+ latest_raw_date: { type: Date },
42
+ isHardcoded: {
43
+ type: Boolean,
44
+ default: false
45
+ },
46
+ isBacktest: {
47
+ type: Boolean,
48
+ default: false
49
+ },
50
+ allocations: {
51
+ type: [{
52
+ exchange: {
53
+ type: String,
54
+ required: true
55
+ },
56
+ custodian: {
57
+ type: String,
58
+ required: false
59
+ },
60
+ tvl_usd: {
61
+ type: Number,
62
+ required: true
63
+ },
64
+ tvl_token: {
65
+ type: Number,
66
+ required: true
67
+ },
68
+ apr: {
69
+ type: Number,
70
+ required: false
71
+ },
72
+ sharpe_ratio: {
73
+ type: Number,
74
+ required: false
75
+ }
76
+ }],
77
+ required: false,
78
+ default: void 0
79
+ }
80
+ }, { timestamps: false });
81
+ dailyVaultSnapshotSchema.index({
82
+ vaultId: 1,
83
+ date: 1
84
+ }, {
85
+ unique: true,
86
+ name: "vaultId_date_unique"
87
+ });
88
+ dailyVaultSnapshotSchema.index({ date: -1 }, { name: "date_desc" });
89
+ const dailyVaultSnapshotModel = mongoose.model("DailyVaultSnapshot", dailyVaultSnapshotSchema, "daily-vault-snapshot", { overwriteModels: true });
90
+
91
+ //#endregion
92
+ //#region src/db/schemas/pending-withdrawal.ts
93
+ const pendingWithdrawalSchema = new Schema({
94
+ _id: Schema.Types.ObjectId,
95
+ metadata: Schema.Types.Mixed,
96
+ user_address: {
97
+ type: String,
98
+ required: true
99
+ },
100
+ vault_name: {
101
+ type: String,
102
+ required: true
103
+ },
104
+ tx_hash: {
105
+ type: String,
106
+ required: true,
107
+ unique: true
108
+ },
109
+ amount: {
110
+ type: Number,
111
+ required: true
112
+ },
113
+ token: {
114
+ type: String,
115
+ required: true
116
+ }
117
+ }, { timestamps: true });
118
+ const pendingWithdrawalModel = mongoose.model("PendingWithdrawal", pendingWithdrawalSchema, "pending_withdrawals", { overwriteModels: true });
119
+
120
+ //#endregion
121
+ //#region src/db/schemas/portfolio-history.ts
122
+ const portfolioHistorySchema = new Schema({
123
+ _id: Schema.Types.ObjectId,
124
+ createdAt: {
125
+ type: Date,
126
+ default: Date.now,
127
+ index: true
128
+ },
129
+ updatedAt: {
130
+ type: Date,
131
+ default: Date.now
132
+ },
133
+ metadata: Schema.Types.Mixed,
134
+ address: {
135
+ type: String,
136
+ required: true,
137
+ index: true
138
+ },
139
+ isVIP: { type: Boolean },
140
+ fuel: { type: Number },
141
+ nt: { type: Number },
142
+ tvl_tokens: { type: Object },
143
+ pnl_tokens: { type: Object },
144
+ fees_tokens: { type: Object },
145
+ portfolio: { type: [{
146
+ vault_id: { type: Number },
147
+ vault_name: { type: String },
148
+ vault_address: { type: String },
149
+ vault_shares: { type: Number },
150
+ vault_sharesP: { type: Number },
151
+ tvl_tokens: { type: Number },
152
+ tvl_usd: { type: Number },
153
+ pnl_tokens: { type: Number },
154
+ pnl_usd: { type: Number },
155
+ fees_tokens: { type: Number },
156
+ fees_usd: { type: Number }
157
+ }] }
158
+ });
159
+ const portfolioHistoryModel = mongoose.model("PortfolioHistory", portfolioHistorySchema, "portfolio_histories", { overwriteModels: true });
160
+
161
+ //#endregion
162
+ //#region src/db/schemas/raw-vault-data.ts
163
+ const RAW_VAULTS_COLLECTION = "raw-vaults-data";
164
+ const rawVaultDataSchema = new Schema({
165
+ vault_id: {
166
+ type: Number,
167
+ required: true,
168
+ index: true
169
+ },
170
+ vault_address: {
171
+ type: String,
172
+ required: true,
173
+ index: true
174
+ },
175
+ date: {
176
+ type: Date,
177
+ required: true,
178
+ index: true
179
+ },
180
+ pps_usd: {
181
+ type: Number,
182
+ required: true
183
+ },
184
+ pps_token: {
185
+ type: Number,
186
+ required: true
187
+ },
188
+ pps_usd_before_offset: {
189
+ type: Number,
190
+ required: false
191
+ },
192
+ pps_token_before_offset: {
193
+ type: Number,
194
+ required: false
195
+ },
196
+ pools_sharpe_ratio: {
197
+ type: [Number],
198
+ required: false
199
+ },
200
+ tvl_usd: {
201
+ type: Number,
202
+ required: true
203
+ },
204
+ tvl_token: {
205
+ type: Number,
206
+ required: true
207
+ },
208
+ pools_apr: {
209
+ type: [Number],
210
+ required: false,
211
+ default: []
212
+ },
213
+ pools_alloc: {
214
+ type: [Number],
215
+ required: false,
216
+ default: []
217
+ },
218
+ allocations: {
219
+ type: [{
220
+ exchange: {
221
+ type: String,
222
+ required: true
223
+ },
224
+ custodian: {
225
+ type: String,
226
+ required: true
227
+ },
228
+ tvl_usd: {
229
+ type: Number,
230
+ required: true
231
+ },
232
+ tvl_token: {
233
+ type: Number,
234
+ required: true
235
+ },
236
+ apr: {
237
+ type: Number,
238
+ required: false
239
+ },
240
+ sharpe_ratio: {
241
+ type: Number,
242
+ required: false
243
+ }
244
+ }],
245
+ required: false,
246
+ default: void 0
247
+ }
248
+ }, {
249
+ timestamps: false,
250
+ collection: RAW_VAULTS_COLLECTION
251
+ });
252
+ rawVaultDataSchema.index({
253
+ vault_id: 1,
254
+ date: 1
255
+ }, {
256
+ unique: true,
257
+ name: "vault_id_date_unique"
258
+ });
259
+ rawVaultDataSchema.index({ date: -1 }, { name: "date_desc" });
260
+ rawVaultDataSchema.index({ vault_address: 1 }, { name: "vault_address_idx" });
261
+ const rawVaultDataModel = mongoose.model("RawVaultData", rawVaultDataSchema, RAW_VAULTS_COLLECTION, { overwriteModels: true });
262
+
263
+ //#endregion
264
+ //#region src/db/schemas/referral.ts
265
+ const referralsSchema = new Schema({
266
+ user: {
267
+ type: String,
268
+ required: true
269
+ },
270
+ code: { type: String },
271
+ referrer: {
272
+ type: String,
273
+ default: null
274
+ },
275
+ referrees: [{
276
+ user: {
277
+ type: String,
278
+ required: true
279
+ },
280
+ date: {
281
+ type: Date,
282
+ default: Date.now
283
+ },
284
+ points: {
285
+ type: Number,
286
+ default: 0
287
+ }
288
+ }]
289
+ }, { timestamps: true });
290
+ referralsSchema.index({ user: 1 }, { unique: true });
291
+ referralsSchema.index({ code: 1 }, {
292
+ unique: true,
293
+ partialFilterExpression: { code: { $type: "string" } }
294
+ });
295
+ referralsSchema.index({ referrer: 1 });
296
+ const referralsModel = mongoose.model("Referrals", referralsSchema, "referrals", { overwriteModels: true });
297
+
298
+ //#endregion
299
+ //#region src/db/schemas/sync-cursor.ts
300
+ const syncCursorSchema = new Schema({
301
+ vault_address: {
302
+ type: String,
303
+ required: true
304
+ },
305
+ vault_type: {
306
+ type: String,
307
+ required: true,
308
+ enum: ["drift", "bundle"]
309
+ },
310
+ vault_name: {
311
+ type: String,
312
+ required: true
313
+ },
314
+ last_signature: {
315
+ type: String,
316
+ default: null
317
+ },
318
+ last_slot: {
319
+ type: Number,
320
+ default: 0
321
+ }
322
+ }, { timestamps: true });
323
+ syncCursorSchema.index({ vault_address: 1 }, {
324
+ unique: true,
325
+ name: "vault_address_unique"
326
+ });
327
+ const syncCursorModel = mongoose.model("SyncCursor", syncCursorSchema, "sync_cursors", { overwriteModels: true });
328
+
329
+ //#endregion
330
+ //#region src/db/schemas/tmp-vault-portfolio-items.ts
331
+ const tmpVaultPortfolioItemsSchema = new Schema({
332
+ _id: Schema.Types.ObjectId,
333
+ metadata: Schema.Types.Mixed,
334
+ user_address: {
335
+ type: String,
336
+ required: true,
337
+ index: true
338
+ },
339
+ vault_address: {
340
+ type: String,
341
+ required: true,
342
+ index: true
343
+ },
344
+ pps_usd: { type: Number },
345
+ pps_tokens: { type: Number },
346
+ fees_usd: { type: Number },
347
+ fees_tokens: { type: Number },
348
+ vault_shares: { type: Number },
349
+ vault_sharesP: { type: Number },
350
+ tvl_tokens: { type: Number },
351
+ tvl_usd: { type: Number },
352
+ pnl_tokens: { type: Number },
353
+ pnl_usd: { type: Number }
354
+ }, { timestamps: true });
355
+ const tmpVaultPortfolioItemsModel = mongoose.model("TmpVaultPortfolioItems", tmpVaultPortfolioItemsSchema, "tmp_vault_portfolio_items", { overwriteModels: true });
356
+
357
+ //#endregion
358
+ //#region src/db/schemas/token.ts
359
+ const TOKENS_COLLECTION = "tokens";
360
+ const tokenSchema = new Schema({
361
+ symbol: {
362
+ type: String,
363
+ required: true,
364
+ index: true
365
+ },
366
+ price_usd: {
367
+ type: Number,
368
+ required: true
369
+ },
370
+ last_updated: {
371
+ type: Date,
372
+ required: true
373
+ }
374
+ }, {
375
+ timestamps: false,
376
+ collection: TOKENS_COLLECTION
377
+ });
378
+ tokenSchema.index({
379
+ symbol: 1,
380
+ last_updated: 1
381
+ }, {
382
+ unique: true,
383
+ name: "symbol_last_updated_unique"
384
+ });
385
+ tokenSchema.index({ last_updated: -1 }, { name: "last_updated_desc" });
386
+ tokenSchema.index({ symbol: 1 }, { name: "symbol_idx" });
387
+ const tokenModel = mongoose.model("Token", tokenSchema, TOKENS_COLLECTION, { overwriteModels: true });
388
+
389
+ //#endregion
390
+ //#region src/db/schemas/tx-history.ts
391
+ const txHistorySchema = new Schema({
392
+ _id: Schema.Types.ObjectId,
393
+ createdAt: {
394
+ type: Date,
395
+ default: Date.now
396
+ },
397
+ updatedAt: {
398
+ type: Date,
399
+ default: Date.now
400
+ },
401
+ metadata: Schema.Types.Mixed,
402
+ user_address: {
403
+ type: String,
404
+ required: true
405
+ },
406
+ vault_name: {
407
+ type: String,
408
+ required: true
409
+ },
410
+ action: {
411
+ type: String,
412
+ required: true
413
+ },
414
+ tx_hash: {
415
+ type: String,
416
+ required: true
417
+ },
418
+ amount: {
419
+ type: Number,
420
+ required: true
421
+ },
422
+ token: {
423
+ type: String,
424
+ required: true
425
+ }
426
+ }, { timestamps: true });
427
+ const txHistoryModel = mongoose.model("TxHistory", txHistorySchema, "tx_histories", { overwriteModels: true });
428
+
429
+ //#endregion
430
+ //#region src/db/schemas/user.ts
431
+ const userSchema = new Schema({
432
+ createdAt: {
433
+ type: Date,
434
+ default: Date.now
435
+ },
436
+ updatedAt: {
437
+ type: Date,
438
+ default: Date.now
439
+ },
440
+ metadata: Schema.Types.Mixed,
441
+ sessions: { type: [Object] },
442
+ address: {
443
+ type: String,
444
+ required: true,
445
+ index: true
446
+ },
447
+ isVIP: { type: Boolean },
448
+ latest_fuel: { type: Number },
449
+ latest_nt: { type: Number },
450
+ latest_tvl_tokens: { type: Object },
451
+ latest_pnl_tokens: { type: Object },
452
+ latest_fees_tokens: { type: Object },
453
+ latest_portfolio: { type: [Object] },
454
+ referrer: { type: String },
455
+ referrees: { type: [Object] },
456
+ email: {
457
+ type: String,
458
+ sparse: true
459
+ }
460
+ });
461
+ const userModel = mongoose.model("User", userSchema, "users", { overwriteModels: true });
462
+
463
+ //#endregion
464
+ //#region src/db/schemas/user-vault-snapshot.ts
465
+ const userVaultSnapshotSchema = new Schema({
466
+ user_address: {
467
+ type: String,
468
+ required: true
469
+ },
470
+ vault_id: {
471
+ type: Number,
472
+ required: true
473
+ },
474
+ date: {
475
+ type: Date,
476
+ required: true
477
+ },
478
+ shares: {
479
+ type: Number,
480
+ required: true
481
+ },
482
+ net_deposits: {
483
+ type: Number,
484
+ required: true
485
+ },
486
+ tvl_tokens: {
487
+ type: Number,
488
+ required: true
489
+ },
490
+ tvl_usd: {
491
+ type: Number,
492
+ required: true
493
+ },
494
+ pnl_tokens: {
495
+ type: Number,
496
+ required: true
497
+ },
498
+ pnl_usd: {
499
+ type: Number,
500
+ required: true
501
+ },
502
+ fees_tokens: {
503
+ type: Number,
504
+ default: 0
505
+ },
506
+ fees_usd: {
507
+ type: Number,
508
+ default: 0
509
+ }
510
+ }, { timestamps: true });
511
+ userVaultSnapshotSchema.index({
512
+ user_address: 1,
513
+ vault_id: 1,
514
+ date: 1
515
+ }, {
516
+ unique: true,
517
+ name: "user_vault_date_unique"
518
+ });
519
+ userVaultSnapshotSchema.index({
520
+ user_address: 1,
521
+ date: -1
522
+ }, { name: "user_address_date_desc" });
523
+ userVaultSnapshotSchema.index({
524
+ vault_id: 1,
525
+ date: -1
526
+ }, { name: "vault_id_date_desc" });
527
+ const userVaultSnapshotModel = mongoose.model("UserVaultSnapshot", userVaultSnapshotSchema, "user_vault_snapshots", { overwriteModels: true });
528
+
529
+ //#endregion
530
+ //#region src/db/schemas/vault.ts
531
+ const vaultSchema = new Schema({
532
+ _id: Schema.Types.ObjectId,
533
+ createdAt: {
534
+ type: Date,
535
+ default: Date.now
536
+ },
537
+ updatedAt: {
538
+ type: Date,
539
+ default: Date.now,
540
+ index: true
541
+ },
542
+ metadata: Schema.Types.Mixed,
543
+ name: {
544
+ type: String,
545
+ required: true
546
+ },
547
+ subname: { type: String },
548
+ tvl_cap: { type: Number },
549
+ deposit_tokens: { type: [String] },
550
+ pfee: { type: Number },
551
+ mfee: { type: Number },
552
+ vault_id: { type: Number },
553
+ vault_address: {
554
+ type: String,
555
+ required: true,
556
+ index: true
557
+ },
558
+ manager_address: {
559
+ type: String,
560
+ required: true
561
+ },
562
+ category: {
563
+ type: String,
564
+ required: true
565
+ },
566
+ tags: { type: [String] },
567
+ enabled: { type: Boolean },
568
+ visible: { type: Boolean },
569
+ whitelist: { type: [String] },
570
+ latest_shares: { type: Number },
571
+ latest_fuel: { type: Number },
572
+ latest_nt: { type: Number },
573
+ latest_tvl_token: { type: Number },
574
+ latest_tvl_usd: { type: Number },
575
+ latest_pnl_token: { type: Number },
576
+ latest_pnl_usd: { type: Number },
577
+ latest_apy_7d: { type: Number },
578
+ latest_apy_30d: { type: Number },
579
+ latest_apy_90d: { type: Number },
580
+ latest_sharpe: { type: Number },
581
+ latest_maxdd: { type: Number },
582
+ latest_pps_token: { type: Number },
583
+ latest_pps_usd: { type: Number },
584
+ latest_fees_token: { type: Number }
585
+ });
586
+ const vaultModel = mongoose.model("Vault", vaultSchema, "vaults", { overwriteModels: true });
587
+
588
+ //#endregion
589
+ //#region src/db/schemas/vault-event.ts
590
+ const vaultEventSchema = new Schema({
591
+ tx_signature: {
592
+ type: String,
593
+ required: true
594
+ },
595
+ event_type: {
596
+ type: String,
597
+ required: true
598
+ },
599
+ vault_type: {
600
+ type: String,
601
+ required: true,
602
+ enum: ["bundle", "drift"]
603
+ },
604
+ vault_id: {
605
+ type: Number,
606
+ required: true
607
+ },
608
+ vault_address: {
609
+ type: String,
610
+ required: true
611
+ },
612
+ timestamp: {
613
+ type: Number,
614
+ required: true
615
+ },
616
+ slot: {
617
+ type: Number,
618
+ required: true
619
+ }
620
+ }, {
621
+ timestamps: true,
622
+ strict: false
623
+ });
624
+ vaultEventSchema.index({
625
+ tx_signature: 1,
626
+ event_type: 1
627
+ }, {
628
+ unique: true,
629
+ name: "tx_signature_event_type_unique"
630
+ });
631
+ vaultEventSchema.index({
632
+ vault_id: 1,
633
+ timestamp: -1
634
+ }, { name: "vault_id_timestamp_desc" });
635
+ vaultEventSchema.index({
636
+ vault_address: 1,
637
+ timestamp: -1
638
+ }, { name: "vault_address_timestamp_desc" });
639
+ const vaultEventModel = mongoose.model("VaultEvent", vaultEventSchema, "vault_events", { overwriteModels: true });
640
+
641
+ //#endregion
642
+ //#region src/db/schemas/vault-history.ts
643
+ const vaultHistorySchema = new Schema({
644
+ createdAt: {
645
+ type: Date,
646
+ default: Date.now,
647
+ index: true
648
+ },
649
+ updatedAt: {
650
+ type: Date,
651
+ default: Date.now
652
+ },
653
+ metadata: Schema.Types.Mixed,
654
+ name: {
655
+ type: String,
656
+ required: true
657
+ },
658
+ vault_address: {
659
+ type: String,
660
+ required: true,
661
+ index: true
662
+ },
663
+ fuel: { type: Number },
664
+ shares: { type: Number },
665
+ nt: { type: Number },
666
+ tvl_token: { type: Number },
667
+ tvl_usd: { type: Number },
668
+ pnl_token: { type: Number },
669
+ pnl_usd: { type: Number },
670
+ fees_token: { type: Number },
671
+ fees_usd: { type: Number },
672
+ pps_token: { type: Number },
673
+ pps_usd: { type: Number },
674
+ apy_7d: { type: Number },
675
+ apy_30d: { type: Number },
676
+ apy_90d: { type: Number },
677
+ sharpe: { type: Number },
678
+ maxdd: { type: Number }
679
+ });
680
+ const vaultHistoryModel = mongoose.model("VaultHistory", vaultHistorySchema, "vault_histories", { overwriteModels: true });
681
+
682
+ //#endregion
683
+ //#region src/db/schemas/vault-metadata.ts
684
+ const vaultsMetadataSchema = new Schema({
685
+ vaultId: {
686
+ type: Number,
687
+ required: true,
688
+ unique: true,
689
+ index: true
690
+ },
691
+ name: {
692
+ type: String,
693
+ required: true
694
+ },
695
+ apr: { type: Number },
696
+ apy: { type: Number },
697
+ aprDayApplied: { type: String },
698
+ apyDayApplied: { type: String },
699
+ sharpeRatio: { type: Number },
700
+ currentTVLUSD: { type: Number },
701
+ currentTVLInToken: { type: Number },
702
+ currentVaultPNL: { type: Number },
703
+ maxDrawdown: { type: Number },
704
+ mddStartDate: { type: String },
705
+ mddEndDate: { type: String },
706
+ roi30d: { type: Number },
707
+ roi: { type: Number },
708
+ roiSince: { type: String },
709
+ yieldApr: { type: Number },
710
+ yieldSharpeRatio: { type: Number },
711
+ allocations: { type: [{
712
+ name: { type: String },
713
+ ratio: { type: Number },
714
+ apr: { type: Number },
715
+ tvl: { type: Number },
716
+ weightedApr: { type: Number }
717
+ }] },
718
+ timestamp: { type: Date },
719
+ dateFromSnapshot: { type: Date }
720
+ });
721
+ const vaultsMetadataModel = mongoose.model("VaultMetadata", vaultsMetadataSchema, "vault-metadata", { overwriteModels: true });
722
+
723
+ //#endregion
724
+ export { dailyVaultSnapshotSchema as A, rawVaultDataModel as C, pendingWithdrawalModel as D, portfolioHistorySchema as E, pendingWithdrawalSchema as O, referralsSchema as S, portfolioHistoryModel as T, tmpVaultPortfolioItemsModel as _, vaultEventModel as a, syncCursorSchema as b, vaultSchema as c, userModel as d, userSchema as f, tokenSchema as g, tokenModel as h, vaultHistorySchema as i, dailyVaultSnapshotModel as k, userVaultSnapshotModel as l, txHistorySchema as m, vaultsMetadataSchema as n, vaultEventSchema as o, txHistoryModel as p, vaultHistoryModel as r, vaultModel as s, vaultsMetadataModel as t, userVaultSnapshotSchema as u, tmpVaultPortfolioItemsSchema as v, rawVaultDataSchema as w, referralsModel as x, syncCursorModel as y };