@vestcards/server-types 1.3.0 → 1.4.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.
Files changed (61) hide show
  1. package/dist/apps/server/src/app.d.ts +288 -18
  2. package/dist/apps/server/src/config/env.d.ts +7 -1
  3. package/dist/apps/server/src/lib/metrics.d.ts +4 -0
  4. package/dist/apps/server/src/lib/posthog.d.ts +2 -0
  5. package/dist/apps/server/src/middleware/errorHandler.d.ts +1 -1
  6. package/dist/apps/server/src/middleware/logger.d.ts +12 -29
  7. package/dist/apps/server/src/modules/auth/lib.d.ts +27 -3
  8. package/dist/apps/server/src/modules/auth/profile.d.ts +5 -0
  9. package/dist/apps/server/src/modules/auth/utils.d.ts +1 -0
  10. package/dist/apps/server/src/modules/card/index.d.ts +2 -2
  11. package/dist/apps/server/src/modules/cron/cron.test.d.ts +1 -0
  12. package/dist/apps/server/src/modules/cron/index.d.ts +53 -0
  13. package/dist/apps/server/src/modules/cron/jobs/expire-memberships.d.ts +1 -0
  14. package/dist/apps/server/src/modules/cron/jobs/payment-expiry-reminder.d.ts +1 -0
  15. package/dist/apps/server/src/modules/deck/index.d.ts +19 -1
  16. package/dist/apps/server/src/modules/deck/model.d.ts +4 -0
  17. package/dist/apps/server/src/modules/deck/service.d.ts +5 -1
  18. package/dist/apps/server/src/modules/ranking/index.d.ts +412 -0
  19. package/dist/apps/server/src/modules/ranking/model.d.ts +28 -0
  20. package/dist/apps/server/src/modules/ranking/ranking.test.d.ts +1 -0
  21. package/dist/apps/server/src/modules/ranking/service.d.ts +4 -0
  22. package/dist/apps/server/src/modules/stats/index.d.ts +446 -0
  23. package/dist/apps/server/src/modules/stats/model.d.ts +85 -0
  24. package/dist/apps/server/src/modules/stats/service.d.ts +27 -0
  25. package/dist/apps/server/src/modules/stats/stats.test.d.ts +1 -0
  26. package/dist/apps/server/src/modules/study/service.d.ts +4 -4
  27. package/dist/apps/server/src/modules/user/index.d.ts +32 -15
  28. package/dist/apps/server/src/modules/user/model.d.ts +11 -1
  29. package/dist/apps/server/src/modules/user/service.d.ts +13 -29
  30. package/dist/apps/server/src/modules/vesty/index.d.ts +473 -0
  31. package/dist/apps/server/src/modules/vesty/model.d.ts +35 -0
  32. package/dist/apps/server/src/modules/vesty/service.d.ts +6 -0
  33. package/dist/apps/server/src/modules/vesty/services/generate-deck.d.ts +2 -0
  34. package/dist/apps/server/src/modules/vesty/services/insights.d.ts +3 -0
  35. package/dist/apps/server/src/modules/vesty/tools.d.ts +11 -0
  36. package/dist/apps/server/src/modules/vesty/utils.d.ts +69 -0
  37. package/dist/apps/server/src/modules/vesty/vesty.test.d.ts +1 -0
  38. package/dist/apps/server/src/server.d.ts +1 -0
  39. package/dist/apps/server/src/tests/helpers/fixtures.d.ts +8 -6
  40. package/dist/apps/server/src/tests/preload/vesty-mock.d.ts +1 -0
  41. package/dist/packages/db-core/src/index.d.ts +0 -1
  42. package/dist/packages/db-core/src/schema/auth.d.ts +34 -0
  43. package/dist/packages/db-core/src/schema/index.d.ts +0 -1
  44. package/dist/packages/db-core/src/schema/payment.d.ts +37 -1
  45. package/dist/packages/email-core/src/templates/index.d.ts +2 -0
  46. package/dist/packages/email-core/src/templates/paymentExpiryReminder.d.ts +9 -0
  47. package/dist/packages/shared/src/date/index.d.ts +1 -0
  48. package/dist/packages/shared/src/date/timezone.d.ts +29 -0
  49. package/dist/packages/shared/src/spaced-repetition/config.d.ts +17 -2
  50. package/dist/packages/shared/src/spaced-repetition/index.d.ts +1 -0
  51. package/dist/packages/shared/src/spaced-repetition/retention.d.ts +2 -0
  52. package/dist/packages/shared/src/theme/tokens/colors.d.ts +18 -18
  53. package/dist/packages/shared/src/types/index.d.ts +1 -0
  54. package/dist/packages/shared/src/types/permissions.d.ts +2 -0
  55. package/dist/packages/shared/src/types/user.d.ts +20 -0
  56. package/dist/packages/shared/src/types/vesty.d.ts +7 -0
  57. package/dist/packages/utils/src/logger/index.d.ts +2 -1
  58. package/dist/packages/utils/src/logger/posthog.d.ts +20 -0
  59. package/package.json +1 -1
  60. package/dist/apps/server/src/modules/study/constants.d.ts +0 -5
  61. package/dist/packages/db-core/src/views/deck.d.ts +0 -79
@@ -455,8 +455,8 @@ declare const app: Elysia<"", {
455
455
  createdAt: Date;
456
456
  updatedAt: Date;
457
457
  userId: string;
458
- cardId: string;
459
458
  content: string;
459
+ cardId: string;
460
460
  } | null;
461
461
  422: {
462
462
  type: "validation";
@@ -479,8 +479,8 @@ declare const app: Elysia<"", {
479
479
  post: {
480
480
  body: {
481
481
  type: string;
482
- cardId: string;
483
482
  content: string;
483
+ cardId: string;
484
484
  };
485
485
  params: {};
486
486
  query: {};
@@ -663,6 +663,22 @@ declare const app: Elysia<"", {
663
663
  };
664
664
  };
665
665
  };
666
+ } & {
667
+ v1: {
668
+ decks: {
669
+ recommended: {
670
+ get: {
671
+ body: {};
672
+ params: {};
673
+ query: {};
674
+ headers: {};
675
+ response: {
676
+ 200: import("@vestcards/shared").IDeck[];
677
+ };
678
+ };
679
+ };
680
+ };
681
+ };
666
682
  } & {
667
683
  v1: {
668
684
  decks: {
@@ -672,7 +688,9 @@ declare const app: Elysia<"", {
672
688
  params: {
673
689
  deckId: string;
674
690
  };
675
- query: {};
691
+ query: {
692
+ preview?: boolean | undefined;
693
+ };
676
694
  headers: {};
677
695
  response: {
678
696
  200: import("@vestcards/shared").IDeckDetail;
@@ -1143,6 +1161,134 @@ declare const app: Elysia<"", {
1143
1161
  };
1144
1162
  };
1145
1163
  };
1164
+ } & {
1165
+ v1: {
1166
+ ranking: {
1167
+ v1: {
1168
+ auth: {
1169
+ "validate-reset-token": {
1170
+ get: {
1171
+ body: unknown;
1172
+ params: {};
1173
+ query: {
1174
+ token: string;
1175
+ };
1176
+ headers: unknown;
1177
+ response: {
1178
+ 200: {
1179
+ valid: boolean;
1180
+ };
1181
+ 422: {
1182
+ type: "validation";
1183
+ on: string;
1184
+ summary?: string;
1185
+ message?: string;
1186
+ found?: unknown;
1187
+ property?: string;
1188
+ expected?: string;
1189
+ };
1190
+ };
1191
+ };
1192
+ };
1193
+ };
1194
+ };
1195
+ };
1196
+ };
1197
+ } & {
1198
+ v1: {
1199
+ ranking: {
1200
+ get: {
1201
+ body: {};
1202
+ params: {};
1203
+ query: {};
1204
+ headers: {};
1205
+ response: {
1206
+ 200: import("./modules/ranking/model").RankingData;
1207
+ };
1208
+ };
1209
+ };
1210
+ };
1211
+ } & {
1212
+ v1: {
1213
+ stats: {
1214
+ v1: {
1215
+ auth: {
1216
+ "validate-reset-token": {
1217
+ get: {
1218
+ body: unknown;
1219
+ params: {};
1220
+ query: {
1221
+ token: string;
1222
+ };
1223
+ headers: unknown;
1224
+ response: {
1225
+ 200: {
1226
+ valid: boolean;
1227
+ };
1228
+ 422: {
1229
+ type: "validation";
1230
+ on: string;
1231
+ summary?: string;
1232
+ message?: string;
1233
+ found?: unknown;
1234
+ property?: string;
1235
+ expected?: string;
1236
+ };
1237
+ };
1238
+ };
1239
+ };
1240
+ };
1241
+ };
1242
+ };
1243
+ };
1244
+ } & {
1245
+ v1: {
1246
+ stats: {
1247
+ home: {
1248
+ get: {
1249
+ body: {};
1250
+ params: {};
1251
+ query: {};
1252
+ headers: {};
1253
+ response: {
1254
+ 200: import("./modules/stats/model").StatsModel.HomePageStats;
1255
+ };
1256
+ };
1257
+ };
1258
+ };
1259
+ };
1260
+ } & {
1261
+ v1: {
1262
+ stats: {
1263
+ streak: {
1264
+ get: {
1265
+ body: {};
1266
+ params: {};
1267
+ query: {};
1268
+ headers: {};
1269
+ response: {
1270
+ 200: import("./modules/stats/model").StatsModel.StreakResult;
1271
+ };
1272
+ };
1273
+ };
1274
+ };
1275
+ };
1276
+ } & {
1277
+ v1: {
1278
+ stats: {
1279
+ dashboard: {
1280
+ get: {
1281
+ body: {};
1282
+ params: {};
1283
+ query: {};
1284
+ headers: {};
1285
+ response: {
1286
+ 200: import("./modules/stats/model").StatsModel.DashboardStats;
1287
+ };
1288
+ };
1289
+ };
1290
+ };
1291
+ };
1146
1292
  } & {
1147
1293
  v1: {
1148
1294
  user: {
@@ -1186,20 +1332,7 @@ declare const app: Elysia<"", {
1186
1332
  query: {};
1187
1333
  headers: {};
1188
1334
  response: {
1189
- 200: {
1190
- id: string;
1191
- name: string;
1192
- surname: string;
1193
- email: string;
1194
- image: string | null;
1195
- role: import("@vestcards/shared").UserRole;
1196
- goal: string | null;
1197
- learnDailyLimit: number | null;
1198
- universityId: number | null;
1199
- universityName: string | null;
1200
- courseId: number | null;
1201
- courseName: string | null;
1202
- };
1335
+ 200: import("@vestcards/shared").IUserProfile | null;
1203
1336
  };
1204
1337
  };
1205
1338
  };
@@ -1212,8 +1345,10 @@ declare const app: Elysia<"", {
1212
1345
  patch: {
1213
1346
  body: {
1214
1347
  university?: number | null | undefined;
1348
+ timezone?: string | undefined;
1215
1349
  course?: number | null | undefined;
1216
- learnDailyLimit?: number | undefined;
1350
+ learnDailyLimit?: number | null | undefined;
1351
+ newCardsPerDeckDailyLimit?: number | null | undefined;
1217
1352
  };
1218
1353
  params: {};
1219
1354
  query: {};
@@ -1335,6 +1470,33 @@ declare const app: Elysia<"", {
1335
1470
  };
1336
1471
  };
1337
1472
  };
1473
+ } & {
1474
+ v1: {
1475
+ user: {
1476
+ password: {
1477
+ post: {
1478
+ body: {
1479
+ newPassword: string;
1480
+ currentPassword: string;
1481
+ };
1482
+ params: {};
1483
+ query: {};
1484
+ headers: {};
1485
+ response: {
1486
+ 422: {
1487
+ type: "validation";
1488
+ on: string;
1489
+ summary?: string;
1490
+ message?: string;
1491
+ found?: unknown;
1492
+ property?: string;
1493
+ expected?: string;
1494
+ };
1495
+ };
1496
+ };
1497
+ };
1498
+ };
1499
+ };
1338
1500
  } & {
1339
1501
  v1: {
1340
1502
  user: {
@@ -1343,6 +1505,7 @@ declare const app: Elysia<"", {
1343
1505
  body: {
1344
1506
  university?: number | undefined;
1345
1507
  dayTimeReminder?: string | undefined;
1508
+ timezone?: string | undefined;
1346
1509
  course?: number | undefined;
1347
1510
  goal: string;
1348
1511
  hoursStudied: string;
@@ -1430,6 +1593,113 @@ declare const app: Elysia<"", {
1430
1593
  };
1431
1594
  };
1432
1595
  };
1596
+ } & {
1597
+ v1: {
1598
+ vesty: {
1599
+ v1: {
1600
+ auth: {
1601
+ "validate-reset-token": {
1602
+ get: {
1603
+ body: unknown;
1604
+ params: {};
1605
+ query: {
1606
+ token: string;
1607
+ };
1608
+ headers: unknown;
1609
+ response: {
1610
+ 200: {
1611
+ valid: boolean;
1612
+ };
1613
+ 422: {
1614
+ type: "validation";
1615
+ on: string;
1616
+ summary?: string;
1617
+ message?: string;
1618
+ found?: unknown;
1619
+ property?: string;
1620
+ expected?: string;
1621
+ };
1622
+ };
1623
+ };
1624
+ };
1625
+ };
1626
+ };
1627
+ };
1628
+ };
1629
+ } & {
1630
+ v1: {
1631
+ vesty: {
1632
+ chat: {
1633
+ post: {
1634
+ body: {
1635
+ data?: {} | undefined;
1636
+ messages: {
1637
+ role: "user" | "assistant";
1638
+ parts: any[];
1639
+ }[];
1640
+ };
1641
+ params: {};
1642
+ query: {};
1643
+ headers: {};
1644
+ response: {
1645
+ 200: Response;
1646
+ 422: {
1647
+ type: "validation";
1648
+ on: string;
1649
+ summary?: string;
1650
+ message?: string;
1651
+ found?: unknown;
1652
+ property?: string;
1653
+ expected?: string;
1654
+ };
1655
+ };
1656
+ };
1657
+ };
1658
+ };
1659
+ };
1660
+ } & {
1661
+ v1: {
1662
+ vesty: {
1663
+ "generate-deck": {
1664
+ post: {
1665
+ body: {
1666
+ prompt: string;
1667
+ };
1668
+ params: {};
1669
+ query: {};
1670
+ headers: {};
1671
+ response: {
1672
+ 200: import("./modules/vesty/model").VestyModel.GeneratedDeck;
1673
+ 422: {
1674
+ type: "validation";
1675
+ on: string;
1676
+ summary?: string;
1677
+ message?: string;
1678
+ found?: unknown;
1679
+ property?: string;
1680
+ expected?: string;
1681
+ };
1682
+ };
1683
+ };
1684
+ };
1685
+ };
1686
+ };
1687
+ } & {
1688
+ v1: {
1689
+ vesty: {
1690
+ insights: {
1691
+ get: {
1692
+ body: {};
1693
+ params: {};
1694
+ query: {};
1695
+ headers: {};
1696
+ response: {
1697
+ 200: import("./modules/vesty/model").VestyModel.InsightsResult;
1698
+ };
1699
+ };
1700
+ };
1701
+ };
1702
+ };
1433
1703
  } & {
1434
1704
  health: {
1435
1705
  get: {
@@ -8,9 +8,15 @@ export declare const config: {
8
8
  googleClientId: string;
9
9
  googleClientSecret: string;
10
10
  appleClientId: string;
11
- appleClientSecret: string;
11
+ appleTeamId: string;
12
+ appleKeyId: string;
13
+ applePrivateKey: string;
14
+ appleAppBundleIdentifier: string;
15
+ geminiApiKey: string;
12
16
  port: number;
13
17
  nodeEnv: string;
14
18
  corsOrigins: string | undefined;
15
19
  debug: boolean;
20
+ posthogApiKey: string;
21
+ posthogHost: string;
16
22
  };
@@ -0,0 +1,4 @@
1
+ import { Counter, Histogram, register } from 'prom-client';
2
+ export declare const httpRequestDuration: Histogram<"route" | "method" | "status_code">;
3
+ export declare const httpRequestTotal: Counter<"route" | "method" | "status_code">;
4
+ export { register };
@@ -0,0 +1,2 @@
1
+ import { PostHog } from 'posthog-node';
2
+ export declare const posthog: PostHog;
@@ -1,4 +1,4 @@
1
- import type { ErrorHandler } from 'elysia';
1
+ import { type ErrorHandler } from 'elysia';
2
2
  /**
3
3
  * Global error handler returning Response.json() so the return type
4
4
  * is NOT merged into Eden treaty's success union — errors stay in
@@ -1,29 +1,12 @@
1
- import { Elysia } from 'elysia';
2
- export declare const requestLogger: Elysia<"", {
3
- decorator: {};
4
- store: {};
5
- derive: {};
6
- resolve: {};
7
- }, {
8
- typebox: {};
9
- error: {};
10
- }, {
11
- schema: {};
12
- standaloneSchema: {};
13
- macro: {};
14
- macroFn: {};
15
- parser: {};
16
- response: {};
17
- }, {}, {
18
- derive: {};
19
- resolve: {};
20
- schema: {};
21
- standaloneSchema: {};
22
- response: {};
23
- }, {
24
- derive: {};
25
- resolve: {};
26
- schema: {};
27
- standaloneSchema: {};
28
- response: {};
29
- }>;
1
+ export declare function onRequest({ request, store }: {
2
+ request: Request;
3
+ store: Record<string, unknown>;
4
+ }): Promise<void>;
5
+ export declare function onAfterResponse({ request, responseValue, set, store, }: {
6
+ request: Request;
7
+ responseValue: unknown;
8
+ set: {
9
+ status?: number | string;
10
+ };
11
+ store: Record<string, unknown>;
12
+ }): void;
@@ -1,5 +1,6 @@
1
1
  import { UserRole } from '@vestcards/shared';
2
2
  import { type BetterAuthOptions } from 'better-auth';
3
+ import { mapAppleProfileToUser } from './profile';
3
4
  export declare const auth: import("better-auth").Auth<{
4
5
  plugins: ({
5
6
  id: "open-api";
@@ -297,6 +298,8 @@ export declare const auth: import("better-auth").Auth<{
297
298
  apple: {
298
299
  clientId: string;
299
300
  clientSecret: string;
301
+ appBundleIdentifier: string;
302
+ mapProfileToUser: typeof mapAppleProfileToUser;
300
303
  };
301
304
  };
302
305
  user: {
@@ -331,17 +334,38 @@ export declare const auth: import("better-auth").Auth<{
331
334
  image?: string | null | undefined;
332
335
  } & Record<string, unknown>) => Promise<{
333
336
  data: {
337
+ email: string;
334
338
  entityId: string;
335
339
  id: string;
336
340
  createdAt: Date;
337
341
  updatedAt: Date;
338
- email: string;
339
342
  emailVerified: boolean;
340
343
  name: string;
341
344
  image?: string | null | undefined;
342
345
  };
343
346
  }>;
344
347
  };
348
+ update: {
349
+ before: (userData: Partial<{
350
+ id: string;
351
+ createdAt: Date;
352
+ updatedAt: Date;
353
+ email: string;
354
+ emailVerified: boolean;
355
+ name: string;
356
+ image?: string | null | undefined;
357
+ }> & Record<string, unknown>) => Promise<{
358
+ data: Partial<{
359
+ id: string;
360
+ createdAt: Date;
361
+ updatedAt: Date;
362
+ email: string;
363
+ emailVerified: boolean;
364
+ name: string;
365
+ image?: string | null | undefined;
366
+ }> & Record<string, unknown>;
367
+ }>;
368
+ };
345
369
  };
346
370
  session: {
347
371
  create: {
@@ -370,14 +394,14 @@ export declare const auth: import("better-auth").Auth<{
370
394
  };
371
395
  };
372
396
  logger: {
373
- log(level: "error" | "warn" | "info" | "debug", message: string, ...args: any[]): void;
397
+ log(level: "debug" | "info" | "warn" | "error", message: string, ...args: any[]): void;
374
398
  };
375
399
  advanced: {
376
400
  useSecureCookies: boolean;
377
401
  disableOriginCheck: true;
378
402
  cookiePrefix: string;
379
403
  defaultCookieAttributes: {
380
- sameSite: "lax" | "none";
404
+ sameSite: "none" | "lax";
381
405
  secure: boolean;
382
406
  };
383
407
  database: {
@@ -0,0 +1,5 @@
1
+ import type { AppleProfile } from 'better-auth/social-providers';
2
+ export declare function mapAppleProfileToUser(profile: AppleProfile): {
3
+ name: string;
4
+ surname: string;
5
+ };
@@ -1,4 +1,5 @@
1
1
  import type { BetterAuthOptions } from 'better-auth';
2
+ export declare function generateAppleClientSecret(clientId: string, teamId: string, keyId: string, privateKey: string): Promise<string>;
2
3
  export declare function assertCredentialAccount(userId: string): Promise<void>;
3
4
  type SendVerificationEmail = NonNullable<BetterAuthOptions['emailVerification']>['sendVerificationEmail'];
4
5
  export declare const sendVerificationEmail: SendVerificationEmail;
@@ -397,8 +397,8 @@ export declare const cardModule: Elysia<"/v1/card", {
397
397
  createdAt: Date;
398
398
  updatedAt: Date;
399
399
  userId: string;
400
- cardId: string;
401
400
  content: string;
401
+ cardId: string;
402
402
  } | null;
403
403
  422: {
404
404
  type: "validation";
@@ -421,8 +421,8 @@ export declare const cardModule: Elysia<"/v1/card", {
421
421
  post: {
422
422
  body: {
423
423
  type: string;
424
- cardId: string;
425
424
  content: string;
425
+ cardId: string;
426
426
  };
427
427
  params: {};
428
428
  query: {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import Elysia from 'elysia';
2
+ export declare const cronModule: Elysia<"", {
3
+ decorator: {};
4
+ store: {
5
+ cron: Record<"expire-memberships", import("croner").Cron> & Record<"payment-expiry-reminder", import("croner").Cron>;
6
+ };
7
+ derive: {};
8
+ resolve: {};
9
+ }, {
10
+ typebox: {};
11
+ error: {};
12
+ } & {
13
+ typebox: {};
14
+ error: {};
15
+ }, {
16
+ schema: {};
17
+ standaloneSchema: {};
18
+ macro: {};
19
+ macroFn: {};
20
+ parser: {};
21
+ response: {};
22
+ } & {
23
+ schema: {};
24
+ standaloneSchema: {};
25
+ macro: {};
26
+ macroFn: {};
27
+ parser: {};
28
+ response: {};
29
+ }, {}, {
30
+ derive: {};
31
+ resolve: {};
32
+ schema: {};
33
+ standaloneSchema: {};
34
+ response: {};
35
+ } & {
36
+ derive: {};
37
+ resolve: {};
38
+ schema: {};
39
+ standaloneSchema: {};
40
+ response: {};
41
+ }, {
42
+ derive: {};
43
+ resolve: {};
44
+ schema: {};
45
+ standaloneSchema: {};
46
+ response: {};
47
+ } & {
48
+ derive: {};
49
+ resolve: {};
50
+ schema: {};
51
+ standaloneSchema: {};
52
+ response: {};
53
+ }>;
@@ -0,0 +1 @@
1
+ export declare function expireMemberships(): Promise<void>;
@@ -0,0 +1 @@
1
+ export declare function sendPaymentExpiryReminders(): Promise<void>;
@@ -417,6 +417,22 @@ export declare const deckModule: Elysia<"/v1/decks", {
417
417
  };
418
418
  };
419
419
  };
420
+ } & {
421
+ v1: {
422
+ decks: {
423
+ recommended: {
424
+ get: {
425
+ body: {};
426
+ params: {};
427
+ query: {};
428
+ headers: {};
429
+ response: {
430
+ 200: import("@vestcards/shared").IDeck[];
431
+ };
432
+ };
433
+ };
434
+ };
435
+ };
420
436
  } & {
421
437
  v1: {
422
438
  decks: {
@@ -426,7 +442,9 @@ export declare const deckModule: Elysia<"/v1/decks", {
426
442
  params: {
427
443
  deckId: string;
428
444
  };
429
- query: {};
445
+ query: {
446
+ preview?: boolean | undefined;
447
+ };
430
448
  headers: {};
431
449
  response: {
432
450
  200: import("@vestcards/shared").IDeckDetail;
@@ -19,6 +19,10 @@ export declare namespace DeckModel {
19
19
  deckId: import("@sinclair/typebox").TString;
20
20
  }>;
21
21
  type DeckIdParams = typeof deckIdParams.static;
22
+ const deckDetailQuery: import("@sinclair/typebox").TObject<{
23
+ preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
24
+ }>;
25
+ type DeckDetailQuery = typeof deckDetailQuery.static;
22
26
  const topicSubjectParams: import("@sinclair/typebox").TObject<{
23
27
  subject: import("@sinclair/typebox").TString;
24
28
  }>;
@@ -3,6 +3,10 @@ import { type Paginated } from '../../utils/api';
3
3
  import { DeckModel } from './model';
4
4
  export declare abstract class DeckService {
5
5
  static getAllDecks(filters: DeckModel.DeckListFilters, loggedUserId?: string): Promise<Paginated<IDeck>>;
6
- static getDeck(deckId: string): Promise<IDeckDetail>;
6
+ static getDeck(deckId: string, options?: {
7
+ cardLimit?: number;
8
+ }): Promise<IDeckDetail>;
9
+ static getRecommendedDecks(_userId: string, canReadPremiumDecks: boolean): Promise<IDeck[]>;
10
+ private static mapDeckOwnerInfo;
7
11
  static getOwnerInfoById(ownerId: string): Promise<IOwnerInfo>;
8
12
  }