@codingfactory/socialkit-vue 0.6.0 → 0.7.2

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 (37) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/services/circles.d.ts.map +1 -1
  6. package/dist/services/circles.js +12 -1
  7. package/dist/services/circles.js.map +1 -1
  8. package/dist/services/gamification.d.ts +87 -0
  9. package/dist/services/gamification.d.ts.map +1 -0
  10. package/dist/services/gamification.js +263 -0
  11. package/dist/services/gamification.js.map +1 -0
  12. package/dist/stores/discussion.d.ts.map +1 -1
  13. package/dist/stores/discussion.js +59 -53
  14. package/dist/stores/discussion.js.map +1 -1
  15. package/dist/stores/gamification.d.ts +2875 -0
  16. package/dist/stores/gamification.d.ts.map +1 -0
  17. package/dist/stores/gamification.js +1136 -0
  18. package/dist/stores/gamification.js.map +1 -0
  19. package/dist/types/api.d.ts +1 -0
  20. package/dist/types/api.d.ts.map +1 -1
  21. package/dist/types/gamification.d.ts +267 -0
  22. package/dist/types/gamification.d.ts.map +1 -0
  23. package/dist/types/gamification.js +5 -0
  24. package/dist/types/gamification.js.map +1 -0
  25. package/dist/types/reputation.d.ts +55 -0
  26. package/dist/types/reputation.d.ts.map +1 -0
  27. package/dist/types/reputation.js +5 -0
  28. package/dist/types/reputation.js.map +1 -0
  29. package/package.json +4 -2
  30. package/src/index.ts +65 -0
  31. package/src/services/circles.ts +13 -1
  32. package/src/services/gamification.ts +432 -0
  33. package/src/stores/discussion.ts +75 -54
  34. package/src/stores/gamification.ts +1565 -0
  35. package/src/types/api.ts +1 -0
  36. package/src/types/gamification.ts +286 -0
  37. package/src/types/reputation.ts +78 -0
@@ -0,0 +1,2875 @@
1
+ /**
2
+ * Generic gamification store factory for SocialKit-powered frontends.
3
+ */
4
+ import type { AxiosInstance } from 'axios';
5
+ import type { Achievement, AchievementShareCard, AchievementUnlockNotification, ClaimedReward, LeaderboardEntry, LeaderboardPeriod, Quest, QuestFilter, QuestObjective, Reward, RewardTransaction, UserStats } from '../types/gamification.js';
6
+ import type { ConnectionStatus } from '../types/realtime.js';
7
+ export type { Achievement, AchievementShareCard, AchievementUnlockNotification, ClaimedReward, LeaderboardEntry, LeaderboardPeriod, Quest, QuestFilter, QuestObjective, Reward, RewardTransaction, UserStats, };
8
+ export interface GamificationStoreCurrentUser {
9
+ id: string;
10
+ tenant_id?: string | null;
11
+ tenantId?: string | null;
12
+ }
13
+ export interface GamificationRealtimeChannelLike {
14
+ listen(event: string, callback: (data: unknown) => void): GamificationRealtimeChannelLike;
15
+ stopListening(event: string): GamificationRealtimeChannelLike;
16
+ }
17
+ export interface GamificationRealtimeClientLike {
18
+ private(channel: string): GamificationRealtimeChannelLike;
19
+ leave(channel: string): void;
20
+ }
21
+ export interface GamificationStoreLogger {
22
+ debug: (...args: unknown[]) => void;
23
+ error: (...args: unknown[]) => void;
24
+ }
25
+ export interface GamificationStoreConfig {
26
+ client: AxiosInstance;
27
+ getCurrentUser: () => GamificationStoreCurrentUser | null;
28
+ getEcho: () => GamificationRealtimeClientLike | null;
29
+ onConnectionStatusChange: (callback: (status: ConnectionStatus) => void) => (() => void) | void;
30
+ logger?: GamificationStoreLogger;
31
+ debug?: boolean;
32
+ storeId?: string;
33
+ }
34
+ interface LeaderboardQueryContext {
35
+ period: LeaderboardPeriod;
36
+ limit: number;
37
+ }
38
+ export type GamificationStoreReturn = ReturnType<ReturnType<typeof createGamificationStoreDefinition>>;
39
+ export declare function createGamificationStoreDefinition(config: GamificationStoreConfig): import("pinia").StoreDefinition<string, Pick<{
40
+ achievements: import("vue").Ref<{
41
+ id: string;
42
+ name: string;
43
+ description: string;
44
+ icon: string;
45
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
46
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
47
+ condition_data?: {
48
+ action?: string | undefined;
49
+ target: number;
50
+ current?: number | undefined;
51
+ } | undefined;
52
+ reward_points?: number | undefined;
53
+ points_awarded?: number | undefined;
54
+ reward_data?: {
55
+ badge_color?: string | undefined;
56
+ badge_text?: string | undefined;
57
+ special_privileges?: string[] | undefined;
58
+ unlocks_feature?: string | undefined;
59
+ } | undefined;
60
+ is_active?: boolean | undefined;
61
+ is_visible?: boolean | undefined;
62
+ is_unlocked?: boolean | undefined;
63
+ is_claimed?: boolean | undefined;
64
+ can_claim?: boolean | undefined;
65
+ unlocked_at?: string | null | undefined;
66
+ claimed_at?: string | null | undefined;
67
+ progress_percentage?: number | undefined;
68
+ progress_current?: number | undefined;
69
+ progress_target?: number | undefined;
70
+ share_card?: {
71
+ title: string;
72
+ badge_label: string;
73
+ description: string;
74
+ image_url: string;
75
+ share_url: string;
76
+ share_text: string;
77
+ } | undefined;
78
+ progress?: number | {
79
+ current_value: number;
80
+ target_value: number;
81
+ percentage: number;
82
+ unit: string;
83
+ } | undefined;
84
+ sort_order?: number | undefined;
85
+ requirements?: {
86
+ id: string;
87
+ type: string;
88
+ target_value: number;
89
+ current_value: number;
90
+ description: string;
91
+ }[] | undefined;
92
+ category?: string | undefined;
93
+ }[], Achievement[] | {
94
+ id: string;
95
+ name: string;
96
+ description: string;
97
+ icon: string;
98
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
99
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
100
+ condition_data?: {
101
+ action?: string | undefined;
102
+ target: number;
103
+ current?: number | undefined;
104
+ } | undefined;
105
+ reward_points?: number | undefined;
106
+ points_awarded?: number | undefined;
107
+ reward_data?: {
108
+ badge_color?: string | undefined;
109
+ badge_text?: string | undefined;
110
+ special_privileges?: string[] | undefined;
111
+ unlocks_feature?: string | undefined;
112
+ } | undefined;
113
+ is_active?: boolean | undefined;
114
+ is_visible?: boolean | undefined;
115
+ is_unlocked?: boolean | undefined;
116
+ is_claimed?: boolean | undefined;
117
+ can_claim?: boolean | undefined;
118
+ unlocked_at?: string | null | undefined;
119
+ claimed_at?: string | null | undefined;
120
+ progress_percentage?: number | undefined;
121
+ progress_current?: number | undefined;
122
+ progress_target?: number | undefined;
123
+ share_card?: {
124
+ title: string;
125
+ badge_label: string;
126
+ description: string;
127
+ image_url: string;
128
+ share_url: string;
129
+ share_text: string;
130
+ } | undefined;
131
+ progress?: number | {
132
+ current_value: number;
133
+ target_value: number;
134
+ percentage: number;
135
+ unit: string;
136
+ } | undefined;
137
+ sort_order?: number | undefined;
138
+ requirements?: {
139
+ id: string;
140
+ type: string;
141
+ target_value: number;
142
+ current_value: number;
143
+ description: string;
144
+ }[] | undefined;
145
+ category?: string | undefined;
146
+ }[]>;
147
+ quests: import("vue").Ref<{
148
+ id: string;
149
+ name?: string | undefined;
150
+ title?: string | undefined;
151
+ description: string;
152
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
153
+ objectives: {
154
+ id: string;
155
+ quest_id?: string | undefined;
156
+ description: string;
157
+ type: string;
158
+ target: number;
159
+ target_value?: number | undefined;
160
+ current: number;
161
+ current_value?: number | undefined;
162
+ is_completed?: boolean | undefined;
163
+ completed?: boolean | undefined;
164
+ bonus_points?: number | undefined;
165
+ unit?: string | undefined;
166
+ }[];
167
+ rewards?: {
168
+ type: "points" | "badge" | "privilege" | "item";
169
+ value: number | string;
170
+ description: string;
171
+ }[] | undefined;
172
+ reward_points: number;
173
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
174
+ is_active?: boolean | undefined;
175
+ starts_at?: string | undefined;
176
+ expires_at: string | null;
177
+ completed_at: string | null;
178
+ accepted_at?: string | null | undefined;
179
+ progress?: {
180
+ current: number;
181
+ total: number;
182
+ percentage: number;
183
+ } | undefined;
184
+ progress_percentage?: number | undefined;
185
+ category?: string | undefined;
186
+ }[], Quest[] | {
187
+ id: string;
188
+ name?: string | undefined;
189
+ title?: string | undefined;
190
+ description: string;
191
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
192
+ objectives: {
193
+ id: string;
194
+ quest_id?: string | undefined;
195
+ description: string;
196
+ type: string;
197
+ target: number;
198
+ target_value?: number | undefined;
199
+ current: number;
200
+ current_value?: number | undefined;
201
+ is_completed?: boolean | undefined;
202
+ completed?: boolean | undefined;
203
+ bonus_points?: number | undefined;
204
+ unit?: string | undefined;
205
+ }[];
206
+ rewards?: {
207
+ type: "points" | "badge" | "privilege" | "item";
208
+ value: number | string;
209
+ description: string;
210
+ }[] | undefined;
211
+ reward_points: number;
212
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
213
+ is_active?: boolean | undefined;
214
+ starts_at?: string | undefined;
215
+ expires_at: string | null;
216
+ completed_at: string | null;
217
+ accepted_at?: string | null | undefined;
218
+ progress?: {
219
+ current: number;
220
+ total: number;
221
+ percentage: number;
222
+ } | undefined;
223
+ progress_percentage?: number | undefined;
224
+ category?: string | undefined;
225
+ }[]>;
226
+ dailyQuests: import("vue").Ref<{
227
+ id: string;
228
+ name?: string | undefined;
229
+ title?: string | undefined;
230
+ description: string;
231
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
232
+ objectives: {
233
+ id: string;
234
+ quest_id?: string | undefined;
235
+ description: string;
236
+ type: string;
237
+ target: number;
238
+ target_value?: number | undefined;
239
+ current: number;
240
+ current_value?: number | undefined;
241
+ is_completed?: boolean | undefined;
242
+ completed?: boolean | undefined;
243
+ bonus_points?: number | undefined;
244
+ unit?: string | undefined;
245
+ }[];
246
+ rewards?: {
247
+ type: "points" | "badge" | "privilege" | "item";
248
+ value: number | string;
249
+ description: string;
250
+ }[] | undefined;
251
+ reward_points: number;
252
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
253
+ is_active?: boolean | undefined;
254
+ starts_at?: string | undefined;
255
+ expires_at: string | null;
256
+ completed_at: string | null;
257
+ accepted_at?: string | null | undefined;
258
+ progress?: {
259
+ current: number;
260
+ total: number;
261
+ percentage: number;
262
+ } | undefined;
263
+ progress_percentage?: number | undefined;
264
+ category?: string | undefined;
265
+ }[], Quest[] | {
266
+ id: string;
267
+ name?: string | undefined;
268
+ title?: string | undefined;
269
+ description: string;
270
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
271
+ objectives: {
272
+ id: string;
273
+ quest_id?: string | undefined;
274
+ description: string;
275
+ type: string;
276
+ target: number;
277
+ target_value?: number | undefined;
278
+ current: number;
279
+ current_value?: number | undefined;
280
+ is_completed?: boolean | undefined;
281
+ completed?: boolean | undefined;
282
+ bonus_points?: number | undefined;
283
+ unit?: string | undefined;
284
+ }[];
285
+ rewards?: {
286
+ type: "points" | "badge" | "privilege" | "item";
287
+ value: number | string;
288
+ description: string;
289
+ }[] | undefined;
290
+ reward_points: number;
291
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
292
+ is_active?: boolean | undefined;
293
+ starts_at?: string | undefined;
294
+ expires_at: string | null;
295
+ completed_at: string | null;
296
+ accepted_at?: string | null | undefined;
297
+ progress?: {
298
+ current: number;
299
+ total: number;
300
+ percentage: number;
301
+ } | undefined;
302
+ progress_percentage?: number | undefined;
303
+ category?: string | undefined;
304
+ }[]>;
305
+ questFilter: import("vue").Ref<QuestFilter, QuestFilter>;
306
+ rewards: import("vue").Ref<{
307
+ id: string;
308
+ name: string;
309
+ description: string;
310
+ cost_points: number;
311
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
312
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
313
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
314
+ icon?: string | undefined;
315
+ preview_image?: string | undefined;
316
+ reward_data?: Record<string, unknown> | undefined;
317
+ can_redeem?: boolean | undefined;
318
+ user_points?: number | undefined;
319
+ points_needed?: number | undefined;
320
+ stock_quantity?: number | null | undefined;
321
+ stock_remaining?: number | null | undefined;
322
+ max_per_user?: number | undefined;
323
+ user_redemptions?: number | undefined;
324
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
325
+ data?: {
326
+ duration?: number | undefined;
327
+ value?: unknown;
328
+ icon?: string | undefined;
329
+ color?: string | undefined;
330
+ } | undefined;
331
+ stock?: number | undefined;
332
+ limited_quantity?: number | null | undefined;
333
+ remaining_quantity?: number | null | undefined;
334
+ redemption_limit?: number | undefined;
335
+ is_available?: boolean | undefined;
336
+ is_claimed?: boolean | undefined;
337
+ redeemed_count?: number | undefined;
338
+ redeemed_at?: string | undefined;
339
+ }[], Reward[] | {
340
+ id: string;
341
+ name: string;
342
+ description: string;
343
+ cost_points: number;
344
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
345
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
346
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
347
+ icon?: string | undefined;
348
+ preview_image?: string | undefined;
349
+ reward_data?: Record<string, unknown> | undefined;
350
+ can_redeem?: boolean | undefined;
351
+ user_points?: number | undefined;
352
+ points_needed?: number | undefined;
353
+ stock_quantity?: number | null | undefined;
354
+ stock_remaining?: number | null | undefined;
355
+ max_per_user?: number | undefined;
356
+ user_redemptions?: number | undefined;
357
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
358
+ data?: {
359
+ duration?: number | undefined;
360
+ value?: unknown;
361
+ icon?: string | undefined;
362
+ color?: string | undefined;
363
+ } | undefined;
364
+ stock?: number | undefined;
365
+ limited_quantity?: number | null | undefined;
366
+ remaining_quantity?: number | null | undefined;
367
+ redemption_limit?: number | undefined;
368
+ is_available?: boolean | undefined;
369
+ is_claimed?: boolean | undefined;
370
+ redeemed_count?: number | undefined;
371
+ redeemed_at?: string | undefined;
372
+ }[]>;
373
+ claimedRewards: import("vue").Ref<{
374
+ id: string;
375
+ reward_id: string;
376
+ reward: {
377
+ id: string;
378
+ name: string;
379
+ description: string;
380
+ cost_points: number;
381
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
382
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
383
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
384
+ icon?: string | undefined;
385
+ preview_image?: string | undefined;
386
+ reward_data?: Record<string, unknown> | undefined;
387
+ can_redeem?: boolean | undefined;
388
+ user_points?: number | undefined;
389
+ points_needed?: number | undefined;
390
+ stock_quantity?: number | null | undefined;
391
+ stock_remaining?: number | null | undefined;
392
+ max_per_user?: number | undefined;
393
+ user_redemptions?: number | undefined;
394
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
395
+ data?: {
396
+ duration?: number | undefined;
397
+ value?: unknown;
398
+ icon?: string | undefined;
399
+ color?: string | undefined;
400
+ } | undefined;
401
+ stock?: number | undefined;
402
+ limited_quantity?: number | null | undefined;
403
+ remaining_quantity?: number | null | undefined;
404
+ redemption_limit?: number | undefined;
405
+ is_available?: boolean | undefined;
406
+ is_claimed?: boolean | undefined;
407
+ redeemed_count?: number | undefined;
408
+ redeemed_at?: string | undefined;
409
+ };
410
+ claimed_at: string;
411
+ status: "active" | "expired";
412
+ expires_at?: string | undefined;
413
+ }[], ClaimedReward[] | {
414
+ id: string;
415
+ reward_id: string;
416
+ reward: {
417
+ id: string;
418
+ name: string;
419
+ description: string;
420
+ cost_points: number;
421
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
422
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
423
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
424
+ icon?: string | undefined;
425
+ preview_image?: string | undefined;
426
+ reward_data?: Record<string, unknown> | undefined;
427
+ can_redeem?: boolean | undefined;
428
+ user_points?: number | undefined;
429
+ points_needed?: number | undefined;
430
+ stock_quantity?: number | null | undefined;
431
+ stock_remaining?: number | null | undefined;
432
+ max_per_user?: number | undefined;
433
+ user_redemptions?: number | undefined;
434
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
435
+ data?: {
436
+ duration?: number | undefined;
437
+ value?: unknown;
438
+ icon?: string | undefined;
439
+ color?: string | undefined;
440
+ } | undefined;
441
+ stock?: number | undefined;
442
+ limited_quantity?: number | null | undefined;
443
+ remaining_quantity?: number | null | undefined;
444
+ redemption_limit?: number | undefined;
445
+ is_available?: boolean | undefined;
446
+ is_claimed?: boolean | undefined;
447
+ redeemed_count?: number | undefined;
448
+ redeemed_at?: string | undefined;
449
+ };
450
+ claimed_at: string;
451
+ status: "active" | "expired";
452
+ expires_at?: string | undefined;
453
+ }[]>;
454
+ rewardTransactions: import("vue").Ref<{
455
+ id: string;
456
+ reward_id: string;
457
+ reward: {
458
+ id: string;
459
+ name: string;
460
+ description: string;
461
+ cost_points: number;
462
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
463
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
464
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
465
+ icon?: string | undefined;
466
+ preview_image?: string | undefined;
467
+ reward_data?: Record<string, unknown> | undefined;
468
+ can_redeem?: boolean | undefined;
469
+ user_points?: number | undefined;
470
+ points_needed?: number | undefined;
471
+ stock_quantity?: number | null | undefined;
472
+ stock_remaining?: number | null | undefined;
473
+ max_per_user?: number | undefined;
474
+ user_redemptions?: number | undefined;
475
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
476
+ data?: {
477
+ duration?: number | undefined;
478
+ value?: unknown;
479
+ icon?: string | undefined;
480
+ color?: string | undefined;
481
+ } | undefined;
482
+ stock?: number | undefined;
483
+ limited_quantity?: number | null | undefined;
484
+ remaining_quantity?: number | null | undefined;
485
+ redemption_limit?: number | undefined;
486
+ is_available?: boolean | undefined;
487
+ is_claimed?: boolean | undefined;
488
+ redeemed_count?: number | undefined;
489
+ redeemed_at?: string | undefined;
490
+ };
491
+ points_spent: number;
492
+ transaction_type: "redemption" | "refund";
493
+ created_at: string;
494
+ metadata: Record<string, unknown>;
495
+ }[], RewardTransaction[] | {
496
+ id: string;
497
+ reward_id: string;
498
+ reward: {
499
+ id: string;
500
+ name: string;
501
+ description: string;
502
+ cost_points: number;
503
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
504
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
505
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
506
+ icon?: string | undefined;
507
+ preview_image?: string | undefined;
508
+ reward_data?: Record<string, unknown> | undefined;
509
+ can_redeem?: boolean | undefined;
510
+ user_points?: number | undefined;
511
+ points_needed?: number | undefined;
512
+ stock_quantity?: number | null | undefined;
513
+ stock_remaining?: number | null | undefined;
514
+ max_per_user?: number | undefined;
515
+ user_redemptions?: number | undefined;
516
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
517
+ data?: {
518
+ duration?: number | undefined;
519
+ value?: unknown;
520
+ icon?: string | undefined;
521
+ color?: string | undefined;
522
+ } | undefined;
523
+ stock?: number | undefined;
524
+ limited_quantity?: number | null | undefined;
525
+ remaining_quantity?: number | null | undefined;
526
+ redemption_limit?: number | undefined;
527
+ is_available?: boolean | undefined;
528
+ is_claimed?: boolean | undefined;
529
+ redeemed_count?: number | undefined;
530
+ redeemed_at?: string | undefined;
531
+ };
532
+ points_spent: number;
533
+ transaction_type: "redemption" | "refund";
534
+ created_at: string;
535
+ metadata: Record<string, unknown>;
536
+ }[]>;
537
+ leaderboard: import("vue").Ref<{
538
+ rank: number;
539
+ user_id: string;
540
+ handle: string;
541
+ name: string;
542
+ avatar_url?: string | null | undefined;
543
+ points: number;
544
+ period_points?: number | undefined;
545
+ total_points: number;
546
+ level: number;
547
+ current_level?: number | undefined;
548
+ level_details?: {
549
+ level_number: number;
550
+ name: string;
551
+ badge_color: string;
552
+ badge_icon: string;
553
+ benefits: string[];
554
+ min_points?: number | undefined;
555
+ } | undefined;
556
+ achievements_count?: number | undefined;
557
+ change: number;
558
+ trend?: number | "up" | "down" | "same" | null | undefined;
559
+ is_current_user: boolean;
560
+ space_id?: string | null | undefined;
561
+ }[], LeaderboardEntry[] | {
562
+ rank: number;
563
+ user_id: string;
564
+ handle: string;
565
+ name: string;
566
+ avatar_url?: string | null | undefined;
567
+ points: number;
568
+ period_points?: number | undefined;
569
+ total_points: number;
570
+ level: number;
571
+ current_level?: number | undefined;
572
+ level_details?: {
573
+ level_number: number;
574
+ name: string;
575
+ badge_color: string;
576
+ badge_icon: string;
577
+ benefits: string[];
578
+ min_points?: number | undefined;
579
+ } | undefined;
580
+ achievements_count?: number | undefined;
581
+ change: number;
582
+ trend?: number | "up" | "down" | "same" | null | undefined;
583
+ is_current_user: boolean;
584
+ space_id?: string | null | undefined;
585
+ }[]>;
586
+ activeLeaderboardContext: import("vue").Ref<{
587
+ period: LeaderboardPeriod;
588
+ limit: number;
589
+ }, LeaderboardQueryContext | {
590
+ period: LeaderboardPeriod;
591
+ limit: number;
592
+ }>;
593
+ userStats: import("vue").Ref<{
594
+ id: string;
595
+ user_id: string;
596
+ total_points: number;
597
+ coin_balance: number;
598
+ lifetime_points: number;
599
+ current_level: number;
600
+ level: {
601
+ level_number: number;
602
+ name: string;
603
+ badge_color: string;
604
+ badge_icon: string;
605
+ benefits: string[];
606
+ min_points?: number | undefined;
607
+ };
608
+ next_level: {
609
+ level_number: number;
610
+ name: string;
611
+ badge_color: string;
612
+ badge_icon: string;
613
+ benefits: string[];
614
+ min_points?: number | undefined;
615
+ } | null;
616
+ level_progress: number;
617
+ points_to_next_level: number;
618
+ points_this_week: number;
619
+ points_this_month: number;
620
+ points_this_year?: number | undefined;
621
+ rank?: number | undefined;
622
+ percentile?: number | undefined;
623
+ badges?: {
624
+ id: string;
625
+ name: string;
626
+ description: string;
627
+ icon: string;
628
+ color: string;
629
+ rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
630
+ earned_at: string;
631
+ }[] | undefined;
632
+ streaks?: {
633
+ current: number;
634
+ longest: number;
635
+ } | undefined;
636
+ streak?: {
637
+ current_count: number;
638
+ longest_streak: number;
639
+ last_activity_at?: string | undefined;
640
+ frozen: boolean;
641
+ freeze_available: number;
642
+ } | undefined;
643
+ daily_limits?: {
644
+ points_awarded: number;
645
+ max_points: number;
646
+ points_remaining: number;
647
+ is_reached: boolean;
648
+ resets_at: string;
649
+ } | undefined;
650
+ privileges: {
651
+ id: string;
652
+ slug: string;
653
+ name: string;
654
+ description: string;
655
+ unlocked_at: string;
656
+ expires_at?: string | undefined;
657
+ category?: string | undefined;
658
+ is_active?: boolean | undefined;
659
+ privilege_id?: string | undefined;
660
+ }[];
661
+ stats: Record<string, unknown>;
662
+ } | null, UserStats | {
663
+ id: string;
664
+ user_id: string;
665
+ total_points: number;
666
+ coin_balance: number;
667
+ lifetime_points: number;
668
+ current_level: number;
669
+ level: {
670
+ level_number: number;
671
+ name: string;
672
+ badge_color: string;
673
+ badge_icon: string;
674
+ benefits: string[];
675
+ min_points?: number | undefined;
676
+ };
677
+ next_level: {
678
+ level_number: number;
679
+ name: string;
680
+ badge_color: string;
681
+ badge_icon: string;
682
+ benefits: string[];
683
+ min_points?: number | undefined;
684
+ } | null;
685
+ level_progress: number;
686
+ points_to_next_level: number;
687
+ points_this_week: number;
688
+ points_this_month: number;
689
+ points_this_year?: number | undefined;
690
+ rank?: number | undefined;
691
+ percentile?: number | undefined;
692
+ badges?: {
693
+ id: string;
694
+ name: string;
695
+ description: string;
696
+ icon: string;
697
+ color: string;
698
+ rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
699
+ earned_at: string;
700
+ }[] | undefined;
701
+ streaks?: {
702
+ current: number;
703
+ longest: number;
704
+ } | undefined;
705
+ streak?: {
706
+ current_count: number;
707
+ longest_streak: number;
708
+ last_activity_at?: string | undefined;
709
+ frozen: boolean;
710
+ freeze_available: number;
711
+ } | undefined;
712
+ daily_limits?: {
713
+ points_awarded: number;
714
+ max_points: number;
715
+ points_remaining: number;
716
+ is_reached: boolean;
717
+ resets_at: string;
718
+ } | undefined;
719
+ privileges: {
720
+ id: string;
721
+ slug: string;
722
+ name: string;
723
+ description: string;
724
+ unlocked_at: string;
725
+ expires_at?: string | undefined;
726
+ category?: string | undefined;
727
+ is_active?: boolean | undefined;
728
+ privilege_id?: string | undefined;
729
+ }[];
730
+ stats: Record<string, unknown>;
731
+ } | null>;
732
+ lastAchievementUnlockedEvent: import("vue").Ref<{
733
+ achievementId: string;
734
+ title: string;
735
+ description: string;
736
+ icon: string;
737
+ unlockedAt: string;
738
+ points?: number | undefined;
739
+ } | null, AchievementUnlockNotification | {
740
+ achievementId: string;
741
+ title: string;
742
+ description: string;
743
+ icon: string;
744
+ unlockedAt: string;
745
+ points?: number | undefined;
746
+ } | null>;
747
+ loadingAchievements: import("vue").Ref<boolean, boolean>;
748
+ loadingQuests: import("vue").Ref<boolean, boolean>;
749
+ loadingRewards: import("vue").Ref<boolean, boolean>;
750
+ loadingLeaderboard: import("vue").Ref<boolean, boolean>;
751
+ loadingStats: import("vue").Ref<boolean, boolean>;
752
+ claiming: import("vue").Ref<boolean, boolean>;
753
+ lastAchievementsUpdate: import("vue").Ref<Date | null, Date | null>;
754
+ lastQuestsUpdate: import("vue").Ref<Date | null, Date | null>;
755
+ lastRewardsUpdate: import("vue").Ref<Date | null, Date | null>;
756
+ lastLeaderboardUpdate: import("vue").Ref<Date | null, Date | null>;
757
+ lastStatsUpdate: import("vue").Ref<Date | null, Date | null>;
758
+ isAchievementsStale: import("vue").ComputedRef<boolean>;
759
+ isQuestsStale: import("vue").ComputedRef<boolean>;
760
+ isRewardsStale: import("vue").ComputedRef<boolean>;
761
+ isLeaderboardStale: import("vue").ComputedRef<boolean>;
762
+ isStatsStale: import("vue").ComputedRef<boolean>;
763
+ unlockedAchievements: import("vue").ComputedRef<{
764
+ id: string;
765
+ name: string;
766
+ description: string;
767
+ icon: string;
768
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
769
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
770
+ condition_data?: {
771
+ action?: string | undefined;
772
+ target: number;
773
+ current?: number | undefined;
774
+ } | undefined;
775
+ reward_points?: number | undefined;
776
+ points_awarded?: number | undefined;
777
+ reward_data?: {
778
+ badge_color?: string | undefined;
779
+ badge_text?: string | undefined;
780
+ special_privileges?: string[] | undefined;
781
+ unlocks_feature?: string | undefined;
782
+ } | undefined;
783
+ is_active?: boolean | undefined;
784
+ is_visible?: boolean | undefined;
785
+ is_unlocked?: boolean | undefined;
786
+ is_claimed?: boolean | undefined;
787
+ can_claim?: boolean | undefined;
788
+ unlocked_at?: string | null | undefined;
789
+ claimed_at?: string | null | undefined;
790
+ progress_percentage?: number | undefined;
791
+ progress_current?: number | undefined;
792
+ progress_target?: number | undefined;
793
+ share_card?: {
794
+ title: string;
795
+ badge_label: string;
796
+ description: string;
797
+ image_url: string;
798
+ share_url: string;
799
+ share_text: string;
800
+ } | undefined;
801
+ progress?: number | {
802
+ current_value: number;
803
+ target_value: number;
804
+ percentage: number;
805
+ unit: string;
806
+ } | undefined;
807
+ sort_order?: number | undefined;
808
+ requirements?: {
809
+ id: string;
810
+ type: string;
811
+ target_value: number;
812
+ current_value: number;
813
+ description: string;
814
+ }[] | undefined;
815
+ category?: string | undefined;
816
+ }[]>;
817
+ availableAchievements: import("vue").ComputedRef<{
818
+ id: string;
819
+ name: string;
820
+ description: string;
821
+ icon: string;
822
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
823
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
824
+ condition_data?: {
825
+ action?: string | undefined;
826
+ target: number;
827
+ current?: number | undefined;
828
+ } | undefined;
829
+ reward_points?: number | undefined;
830
+ points_awarded?: number | undefined;
831
+ reward_data?: {
832
+ badge_color?: string | undefined;
833
+ badge_text?: string | undefined;
834
+ special_privileges?: string[] | undefined;
835
+ unlocks_feature?: string | undefined;
836
+ } | undefined;
837
+ is_active?: boolean | undefined;
838
+ is_visible?: boolean | undefined;
839
+ is_unlocked?: boolean | undefined;
840
+ is_claimed?: boolean | undefined;
841
+ can_claim?: boolean | undefined;
842
+ unlocked_at?: string | null | undefined;
843
+ claimed_at?: string | null | undefined;
844
+ progress_percentage?: number | undefined;
845
+ progress_current?: number | undefined;
846
+ progress_target?: number | undefined;
847
+ share_card?: {
848
+ title: string;
849
+ badge_label: string;
850
+ description: string;
851
+ image_url: string;
852
+ share_url: string;
853
+ share_text: string;
854
+ } | undefined;
855
+ progress?: number | {
856
+ current_value: number;
857
+ target_value: number;
858
+ percentage: number;
859
+ unit: string;
860
+ } | undefined;
861
+ sort_order?: number | undefined;
862
+ requirements?: {
863
+ id: string;
864
+ type: string;
865
+ target_value: number;
866
+ current_value: number;
867
+ description: string;
868
+ }[] | undefined;
869
+ category?: string | undefined;
870
+ }[]>;
871
+ activeQuests: import("vue").ComputedRef<{
872
+ id: string;
873
+ name?: string | undefined;
874
+ title?: string | undefined;
875
+ description: string;
876
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
877
+ objectives: {
878
+ id: string;
879
+ quest_id?: string | undefined;
880
+ description: string;
881
+ type: string;
882
+ target: number;
883
+ target_value?: number | undefined;
884
+ current: number;
885
+ current_value?: number | undefined;
886
+ is_completed?: boolean | undefined;
887
+ completed?: boolean | undefined;
888
+ bonus_points?: number | undefined;
889
+ unit?: string | undefined;
890
+ }[];
891
+ rewards?: {
892
+ type: "points" | "badge" | "privilege" | "item";
893
+ value: number | string;
894
+ description: string;
895
+ }[] | undefined;
896
+ reward_points: number;
897
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
898
+ is_active?: boolean | undefined;
899
+ starts_at?: string | undefined;
900
+ expires_at: string | null;
901
+ completed_at: string | null;
902
+ accepted_at?: string | null | undefined;
903
+ progress?: {
904
+ current: number;
905
+ total: number;
906
+ percentage: number;
907
+ } | undefined;
908
+ progress_percentage?: number | undefined;
909
+ category?: string | undefined;
910
+ }[]>;
911
+ completedQuests: import("vue").ComputedRef<{
912
+ id: string;
913
+ name?: string | undefined;
914
+ title?: string | undefined;
915
+ description: string;
916
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
917
+ objectives: {
918
+ id: string;
919
+ quest_id?: string | undefined;
920
+ description: string;
921
+ type: string;
922
+ target: number;
923
+ target_value?: number | undefined;
924
+ current: number;
925
+ current_value?: number | undefined;
926
+ is_completed?: boolean | undefined;
927
+ completed?: boolean | undefined;
928
+ bonus_points?: number | undefined;
929
+ unit?: string | undefined;
930
+ }[];
931
+ rewards?: {
932
+ type: "points" | "badge" | "privilege" | "item";
933
+ value: number | string;
934
+ description: string;
935
+ }[] | undefined;
936
+ reward_points: number;
937
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
938
+ is_active?: boolean | undefined;
939
+ starts_at?: string | undefined;
940
+ expires_at: string | null;
941
+ completed_at: string | null;
942
+ accepted_at?: string | null | undefined;
943
+ progress?: {
944
+ current: number;
945
+ total: number;
946
+ percentage: number;
947
+ } | undefined;
948
+ progress_percentage?: number | undefined;
949
+ category?: string | undefined;
950
+ }[]>;
951
+ rewardBalance: import("vue").ComputedRef<number>;
952
+ currentXP: import("vue").ComputedRef<number>;
953
+ currentLevel: import("vue").ComputedRef<number>;
954
+ nextLevel: import("vue").ComputedRef<{
955
+ level_number: number;
956
+ name: string;
957
+ badge_color: string;
958
+ badge_icon: string;
959
+ benefits: string[];
960
+ min_points?: number | undefined;
961
+ } | null | undefined>;
962
+ levelProgress: import("vue").ComputedRef<number>;
963
+ recentXPGain: import("vue").ComputedRef<number>;
964
+ loadAchievements: (useCache?: boolean) => Promise<Achievement[]>;
965
+ loadQuests: (useCache?: boolean) => Promise<Quest[]>;
966
+ loadCompletedQuests: (useCache?: boolean) => Promise<Quest[]>;
967
+ loadRewards: (useCache?: boolean) => Promise<Reward[]>;
968
+ loadLeaderboard: (period?: LeaderboardPeriod, limit?: number) => Promise<LeaderboardEntry[]>;
969
+ loadUserStats: (useCache?: boolean) => Promise<UserStats>;
970
+ loadAchievementById: (achievementId: string) => Promise<Achievement>;
971
+ setQuestFilter: (nextFilter: string) => void;
972
+ getAchievementShareCard: (achievementId: string) => Promise<AchievementShareCard>;
973
+ fetchAchievementShareCardAsset: (achievementId: string) => Promise<string>;
974
+ claimAchievement: (achievementId: string) => Promise<void>;
975
+ acceptQuest: (questId: string) => Promise<void>;
976
+ completeQuest: (questId: string) => Promise<void>;
977
+ abandonQuest: (questId: string) => Promise<void>;
978
+ redeemReward: (rewardId: string) => Promise<void>;
979
+ subscribeToGamificationUpdates: () => void;
980
+ unsubscribeFromGamificationUpdates: () => void;
981
+ clearLastAchievementUnlockedEvent: () => void;
982
+ loadAllData: () => Promise<void>;
983
+ $reset: () => void;
984
+ }, "rewards" | "achievements" | "quests" | "dailyQuests" | "questFilter" | "claimedRewards" | "rewardTransactions" | "leaderboard" | "activeLeaderboardContext" | "userStats" | "lastAchievementUnlockedEvent" | "loadingAchievements" | "loadingQuests" | "loadingRewards" | "loadingLeaderboard" | "loadingStats" | "claiming" | "lastAchievementsUpdate" | "lastQuestsUpdate" | "lastRewardsUpdate" | "lastLeaderboardUpdate" | "lastStatsUpdate">, Pick<{
985
+ achievements: import("vue").Ref<{
986
+ id: string;
987
+ name: string;
988
+ description: string;
989
+ icon: string;
990
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
991
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
992
+ condition_data?: {
993
+ action?: string | undefined;
994
+ target: number;
995
+ current?: number | undefined;
996
+ } | undefined;
997
+ reward_points?: number | undefined;
998
+ points_awarded?: number | undefined;
999
+ reward_data?: {
1000
+ badge_color?: string | undefined;
1001
+ badge_text?: string | undefined;
1002
+ special_privileges?: string[] | undefined;
1003
+ unlocks_feature?: string | undefined;
1004
+ } | undefined;
1005
+ is_active?: boolean | undefined;
1006
+ is_visible?: boolean | undefined;
1007
+ is_unlocked?: boolean | undefined;
1008
+ is_claimed?: boolean | undefined;
1009
+ can_claim?: boolean | undefined;
1010
+ unlocked_at?: string | null | undefined;
1011
+ claimed_at?: string | null | undefined;
1012
+ progress_percentage?: number | undefined;
1013
+ progress_current?: number | undefined;
1014
+ progress_target?: number | undefined;
1015
+ share_card?: {
1016
+ title: string;
1017
+ badge_label: string;
1018
+ description: string;
1019
+ image_url: string;
1020
+ share_url: string;
1021
+ share_text: string;
1022
+ } | undefined;
1023
+ progress?: number | {
1024
+ current_value: number;
1025
+ target_value: number;
1026
+ percentage: number;
1027
+ unit: string;
1028
+ } | undefined;
1029
+ sort_order?: number | undefined;
1030
+ requirements?: {
1031
+ id: string;
1032
+ type: string;
1033
+ target_value: number;
1034
+ current_value: number;
1035
+ description: string;
1036
+ }[] | undefined;
1037
+ category?: string | undefined;
1038
+ }[], Achievement[] | {
1039
+ id: string;
1040
+ name: string;
1041
+ description: string;
1042
+ icon: string;
1043
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
1044
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
1045
+ condition_data?: {
1046
+ action?: string | undefined;
1047
+ target: number;
1048
+ current?: number | undefined;
1049
+ } | undefined;
1050
+ reward_points?: number | undefined;
1051
+ points_awarded?: number | undefined;
1052
+ reward_data?: {
1053
+ badge_color?: string | undefined;
1054
+ badge_text?: string | undefined;
1055
+ special_privileges?: string[] | undefined;
1056
+ unlocks_feature?: string | undefined;
1057
+ } | undefined;
1058
+ is_active?: boolean | undefined;
1059
+ is_visible?: boolean | undefined;
1060
+ is_unlocked?: boolean | undefined;
1061
+ is_claimed?: boolean | undefined;
1062
+ can_claim?: boolean | undefined;
1063
+ unlocked_at?: string | null | undefined;
1064
+ claimed_at?: string | null | undefined;
1065
+ progress_percentage?: number | undefined;
1066
+ progress_current?: number | undefined;
1067
+ progress_target?: number | undefined;
1068
+ share_card?: {
1069
+ title: string;
1070
+ badge_label: string;
1071
+ description: string;
1072
+ image_url: string;
1073
+ share_url: string;
1074
+ share_text: string;
1075
+ } | undefined;
1076
+ progress?: number | {
1077
+ current_value: number;
1078
+ target_value: number;
1079
+ percentage: number;
1080
+ unit: string;
1081
+ } | undefined;
1082
+ sort_order?: number | undefined;
1083
+ requirements?: {
1084
+ id: string;
1085
+ type: string;
1086
+ target_value: number;
1087
+ current_value: number;
1088
+ description: string;
1089
+ }[] | undefined;
1090
+ category?: string | undefined;
1091
+ }[]>;
1092
+ quests: import("vue").Ref<{
1093
+ id: string;
1094
+ name?: string | undefined;
1095
+ title?: string | undefined;
1096
+ description: string;
1097
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
1098
+ objectives: {
1099
+ id: string;
1100
+ quest_id?: string | undefined;
1101
+ description: string;
1102
+ type: string;
1103
+ target: number;
1104
+ target_value?: number | undefined;
1105
+ current: number;
1106
+ current_value?: number | undefined;
1107
+ is_completed?: boolean | undefined;
1108
+ completed?: boolean | undefined;
1109
+ bonus_points?: number | undefined;
1110
+ unit?: string | undefined;
1111
+ }[];
1112
+ rewards?: {
1113
+ type: "points" | "badge" | "privilege" | "item";
1114
+ value: number | string;
1115
+ description: string;
1116
+ }[] | undefined;
1117
+ reward_points: number;
1118
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
1119
+ is_active?: boolean | undefined;
1120
+ starts_at?: string | undefined;
1121
+ expires_at: string | null;
1122
+ completed_at: string | null;
1123
+ accepted_at?: string | null | undefined;
1124
+ progress?: {
1125
+ current: number;
1126
+ total: number;
1127
+ percentage: number;
1128
+ } | undefined;
1129
+ progress_percentage?: number | undefined;
1130
+ category?: string | undefined;
1131
+ }[], Quest[] | {
1132
+ id: string;
1133
+ name?: string | undefined;
1134
+ title?: string | undefined;
1135
+ description: string;
1136
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
1137
+ objectives: {
1138
+ id: string;
1139
+ quest_id?: string | undefined;
1140
+ description: string;
1141
+ type: string;
1142
+ target: number;
1143
+ target_value?: number | undefined;
1144
+ current: number;
1145
+ current_value?: number | undefined;
1146
+ is_completed?: boolean | undefined;
1147
+ completed?: boolean | undefined;
1148
+ bonus_points?: number | undefined;
1149
+ unit?: string | undefined;
1150
+ }[];
1151
+ rewards?: {
1152
+ type: "points" | "badge" | "privilege" | "item";
1153
+ value: number | string;
1154
+ description: string;
1155
+ }[] | undefined;
1156
+ reward_points: number;
1157
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
1158
+ is_active?: boolean | undefined;
1159
+ starts_at?: string | undefined;
1160
+ expires_at: string | null;
1161
+ completed_at: string | null;
1162
+ accepted_at?: string | null | undefined;
1163
+ progress?: {
1164
+ current: number;
1165
+ total: number;
1166
+ percentage: number;
1167
+ } | undefined;
1168
+ progress_percentage?: number | undefined;
1169
+ category?: string | undefined;
1170
+ }[]>;
1171
+ dailyQuests: import("vue").Ref<{
1172
+ id: string;
1173
+ name?: string | undefined;
1174
+ title?: string | undefined;
1175
+ description: string;
1176
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
1177
+ objectives: {
1178
+ id: string;
1179
+ quest_id?: string | undefined;
1180
+ description: string;
1181
+ type: string;
1182
+ target: number;
1183
+ target_value?: number | undefined;
1184
+ current: number;
1185
+ current_value?: number | undefined;
1186
+ is_completed?: boolean | undefined;
1187
+ completed?: boolean | undefined;
1188
+ bonus_points?: number | undefined;
1189
+ unit?: string | undefined;
1190
+ }[];
1191
+ rewards?: {
1192
+ type: "points" | "badge" | "privilege" | "item";
1193
+ value: number | string;
1194
+ description: string;
1195
+ }[] | undefined;
1196
+ reward_points: number;
1197
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
1198
+ is_active?: boolean | undefined;
1199
+ starts_at?: string | undefined;
1200
+ expires_at: string | null;
1201
+ completed_at: string | null;
1202
+ accepted_at?: string | null | undefined;
1203
+ progress?: {
1204
+ current: number;
1205
+ total: number;
1206
+ percentage: number;
1207
+ } | undefined;
1208
+ progress_percentage?: number | undefined;
1209
+ category?: string | undefined;
1210
+ }[], Quest[] | {
1211
+ id: string;
1212
+ name?: string | undefined;
1213
+ title?: string | undefined;
1214
+ description: string;
1215
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
1216
+ objectives: {
1217
+ id: string;
1218
+ quest_id?: string | undefined;
1219
+ description: string;
1220
+ type: string;
1221
+ target: number;
1222
+ target_value?: number | undefined;
1223
+ current: number;
1224
+ current_value?: number | undefined;
1225
+ is_completed?: boolean | undefined;
1226
+ completed?: boolean | undefined;
1227
+ bonus_points?: number | undefined;
1228
+ unit?: string | undefined;
1229
+ }[];
1230
+ rewards?: {
1231
+ type: "points" | "badge" | "privilege" | "item";
1232
+ value: number | string;
1233
+ description: string;
1234
+ }[] | undefined;
1235
+ reward_points: number;
1236
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
1237
+ is_active?: boolean | undefined;
1238
+ starts_at?: string | undefined;
1239
+ expires_at: string | null;
1240
+ completed_at: string | null;
1241
+ accepted_at?: string | null | undefined;
1242
+ progress?: {
1243
+ current: number;
1244
+ total: number;
1245
+ percentage: number;
1246
+ } | undefined;
1247
+ progress_percentage?: number | undefined;
1248
+ category?: string | undefined;
1249
+ }[]>;
1250
+ questFilter: import("vue").Ref<QuestFilter, QuestFilter>;
1251
+ rewards: import("vue").Ref<{
1252
+ id: string;
1253
+ name: string;
1254
+ description: string;
1255
+ cost_points: number;
1256
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
1257
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
1258
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
1259
+ icon?: string | undefined;
1260
+ preview_image?: string | undefined;
1261
+ reward_data?: Record<string, unknown> | undefined;
1262
+ can_redeem?: boolean | undefined;
1263
+ user_points?: number | undefined;
1264
+ points_needed?: number | undefined;
1265
+ stock_quantity?: number | null | undefined;
1266
+ stock_remaining?: number | null | undefined;
1267
+ max_per_user?: number | undefined;
1268
+ user_redemptions?: number | undefined;
1269
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
1270
+ data?: {
1271
+ duration?: number | undefined;
1272
+ value?: unknown;
1273
+ icon?: string | undefined;
1274
+ color?: string | undefined;
1275
+ } | undefined;
1276
+ stock?: number | undefined;
1277
+ limited_quantity?: number | null | undefined;
1278
+ remaining_quantity?: number | null | undefined;
1279
+ redemption_limit?: number | undefined;
1280
+ is_available?: boolean | undefined;
1281
+ is_claimed?: boolean | undefined;
1282
+ redeemed_count?: number | undefined;
1283
+ redeemed_at?: string | undefined;
1284
+ }[], Reward[] | {
1285
+ id: string;
1286
+ name: string;
1287
+ description: string;
1288
+ cost_points: number;
1289
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
1290
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
1291
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
1292
+ icon?: string | undefined;
1293
+ preview_image?: string | undefined;
1294
+ reward_data?: Record<string, unknown> | undefined;
1295
+ can_redeem?: boolean | undefined;
1296
+ user_points?: number | undefined;
1297
+ points_needed?: number | undefined;
1298
+ stock_quantity?: number | null | undefined;
1299
+ stock_remaining?: number | null | undefined;
1300
+ max_per_user?: number | undefined;
1301
+ user_redemptions?: number | undefined;
1302
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
1303
+ data?: {
1304
+ duration?: number | undefined;
1305
+ value?: unknown;
1306
+ icon?: string | undefined;
1307
+ color?: string | undefined;
1308
+ } | undefined;
1309
+ stock?: number | undefined;
1310
+ limited_quantity?: number | null | undefined;
1311
+ remaining_quantity?: number | null | undefined;
1312
+ redemption_limit?: number | undefined;
1313
+ is_available?: boolean | undefined;
1314
+ is_claimed?: boolean | undefined;
1315
+ redeemed_count?: number | undefined;
1316
+ redeemed_at?: string | undefined;
1317
+ }[]>;
1318
+ claimedRewards: import("vue").Ref<{
1319
+ id: string;
1320
+ reward_id: string;
1321
+ reward: {
1322
+ id: string;
1323
+ name: string;
1324
+ description: string;
1325
+ cost_points: number;
1326
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
1327
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
1328
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
1329
+ icon?: string | undefined;
1330
+ preview_image?: string | undefined;
1331
+ reward_data?: Record<string, unknown> | undefined;
1332
+ can_redeem?: boolean | undefined;
1333
+ user_points?: number | undefined;
1334
+ points_needed?: number | undefined;
1335
+ stock_quantity?: number | null | undefined;
1336
+ stock_remaining?: number | null | undefined;
1337
+ max_per_user?: number | undefined;
1338
+ user_redemptions?: number | undefined;
1339
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
1340
+ data?: {
1341
+ duration?: number | undefined;
1342
+ value?: unknown;
1343
+ icon?: string | undefined;
1344
+ color?: string | undefined;
1345
+ } | undefined;
1346
+ stock?: number | undefined;
1347
+ limited_quantity?: number | null | undefined;
1348
+ remaining_quantity?: number | null | undefined;
1349
+ redemption_limit?: number | undefined;
1350
+ is_available?: boolean | undefined;
1351
+ is_claimed?: boolean | undefined;
1352
+ redeemed_count?: number | undefined;
1353
+ redeemed_at?: string | undefined;
1354
+ };
1355
+ claimed_at: string;
1356
+ status: "active" | "expired";
1357
+ expires_at?: string | undefined;
1358
+ }[], ClaimedReward[] | {
1359
+ id: string;
1360
+ reward_id: string;
1361
+ reward: {
1362
+ id: string;
1363
+ name: string;
1364
+ description: string;
1365
+ cost_points: number;
1366
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
1367
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
1368
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
1369
+ icon?: string | undefined;
1370
+ preview_image?: string | undefined;
1371
+ reward_data?: Record<string, unknown> | undefined;
1372
+ can_redeem?: boolean | undefined;
1373
+ user_points?: number | undefined;
1374
+ points_needed?: number | undefined;
1375
+ stock_quantity?: number | null | undefined;
1376
+ stock_remaining?: number | null | undefined;
1377
+ max_per_user?: number | undefined;
1378
+ user_redemptions?: number | undefined;
1379
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
1380
+ data?: {
1381
+ duration?: number | undefined;
1382
+ value?: unknown;
1383
+ icon?: string | undefined;
1384
+ color?: string | undefined;
1385
+ } | undefined;
1386
+ stock?: number | undefined;
1387
+ limited_quantity?: number | null | undefined;
1388
+ remaining_quantity?: number | null | undefined;
1389
+ redemption_limit?: number | undefined;
1390
+ is_available?: boolean | undefined;
1391
+ is_claimed?: boolean | undefined;
1392
+ redeemed_count?: number | undefined;
1393
+ redeemed_at?: string | undefined;
1394
+ };
1395
+ claimed_at: string;
1396
+ status: "active" | "expired";
1397
+ expires_at?: string | undefined;
1398
+ }[]>;
1399
+ rewardTransactions: import("vue").Ref<{
1400
+ id: string;
1401
+ reward_id: string;
1402
+ reward: {
1403
+ id: string;
1404
+ name: string;
1405
+ description: string;
1406
+ cost_points: number;
1407
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
1408
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
1409
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
1410
+ icon?: string | undefined;
1411
+ preview_image?: string | undefined;
1412
+ reward_data?: Record<string, unknown> | undefined;
1413
+ can_redeem?: boolean | undefined;
1414
+ user_points?: number | undefined;
1415
+ points_needed?: number | undefined;
1416
+ stock_quantity?: number | null | undefined;
1417
+ stock_remaining?: number | null | undefined;
1418
+ max_per_user?: number | undefined;
1419
+ user_redemptions?: number | undefined;
1420
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
1421
+ data?: {
1422
+ duration?: number | undefined;
1423
+ value?: unknown;
1424
+ icon?: string | undefined;
1425
+ color?: string | undefined;
1426
+ } | undefined;
1427
+ stock?: number | undefined;
1428
+ limited_quantity?: number | null | undefined;
1429
+ remaining_quantity?: number | null | undefined;
1430
+ redemption_limit?: number | undefined;
1431
+ is_available?: boolean | undefined;
1432
+ is_claimed?: boolean | undefined;
1433
+ redeemed_count?: number | undefined;
1434
+ redeemed_at?: string | undefined;
1435
+ };
1436
+ points_spent: number;
1437
+ transaction_type: "redemption" | "refund";
1438
+ created_at: string;
1439
+ metadata: Record<string, unknown>;
1440
+ }[], RewardTransaction[] | {
1441
+ id: string;
1442
+ reward_id: string;
1443
+ reward: {
1444
+ id: string;
1445
+ name: string;
1446
+ description: string;
1447
+ cost_points: number;
1448
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
1449
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
1450
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
1451
+ icon?: string | undefined;
1452
+ preview_image?: string | undefined;
1453
+ reward_data?: Record<string, unknown> | undefined;
1454
+ can_redeem?: boolean | undefined;
1455
+ user_points?: number | undefined;
1456
+ points_needed?: number | undefined;
1457
+ stock_quantity?: number | null | undefined;
1458
+ stock_remaining?: number | null | undefined;
1459
+ max_per_user?: number | undefined;
1460
+ user_redemptions?: number | undefined;
1461
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
1462
+ data?: {
1463
+ duration?: number | undefined;
1464
+ value?: unknown;
1465
+ icon?: string | undefined;
1466
+ color?: string | undefined;
1467
+ } | undefined;
1468
+ stock?: number | undefined;
1469
+ limited_quantity?: number | null | undefined;
1470
+ remaining_quantity?: number | null | undefined;
1471
+ redemption_limit?: number | undefined;
1472
+ is_available?: boolean | undefined;
1473
+ is_claimed?: boolean | undefined;
1474
+ redeemed_count?: number | undefined;
1475
+ redeemed_at?: string | undefined;
1476
+ };
1477
+ points_spent: number;
1478
+ transaction_type: "redemption" | "refund";
1479
+ created_at: string;
1480
+ metadata: Record<string, unknown>;
1481
+ }[]>;
1482
+ leaderboard: import("vue").Ref<{
1483
+ rank: number;
1484
+ user_id: string;
1485
+ handle: string;
1486
+ name: string;
1487
+ avatar_url?: string | null | undefined;
1488
+ points: number;
1489
+ period_points?: number | undefined;
1490
+ total_points: number;
1491
+ level: number;
1492
+ current_level?: number | undefined;
1493
+ level_details?: {
1494
+ level_number: number;
1495
+ name: string;
1496
+ badge_color: string;
1497
+ badge_icon: string;
1498
+ benefits: string[];
1499
+ min_points?: number | undefined;
1500
+ } | undefined;
1501
+ achievements_count?: number | undefined;
1502
+ change: number;
1503
+ trend?: number | "up" | "down" | "same" | null | undefined;
1504
+ is_current_user: boolean;
1505
+ space_id?: string | null | undefined;
1506
+ }[], LeaderboardEntry[] | {
1507
+ rank: number;
1508
+ user_id: string;
1509
+ handle: string;
1510
+ name: string;
1511
+ avatar_url?: string | null | undefined;
1512
+ points: number;
1513
+ period_points?: number | undefined;
1514
+ total_points: number;
1515
+ level: number;
1516
+ current_level?: number | undefined;
1517
+ level_details?: {
1518
+ level_number: number;
1519
+ name: string;
1520
+ badge_color: string;
1521
+ badge_icon: string;
1522
+ benefits: string[];
1523
+ min_points?: number | undefined;
1524
+ } | undefined;
1525
+ achievements_count?: number | undefined;
1526
+ change: number;
1527
+ trend?: number | "up" | "down" | "same" | null | undefined;
1528
+ is_current_user: boolean;
1529
+ space_id?: string | null | undefined;
1530
+ }[]>;
1531
+ activeLeaderboardContext: import("vue").Ref<{
1532
+ period: LeaderboardPeriod;
1533
+ limit: number;
1534
+ }, LeaderboardQueryContext | {
1535
+ period: LeaderboardPeriod;
1536
+ limit: number;
1537
+ }>;
1538
+ userStats: import("vue").Ref<{
1539
+ id: string;
1540
+ user_id: string;
1541
+ total_points: number;
1542
+ coin_balance: number;
1543
+ lifetime_points: number;
1544
+ current_level: number;
1545
+ level: {
1546
+ level_number: number;
1547
+ name: string;
1548
+ badge_color: string;
1549
+ badge_icon: string;
1550
+ benefits: string[];
1551
+ min_points?: number | undefined;
1552
+ };
1553
+ next_level: {
1554
+ level_number: number;
1555
+ name: string;
1556
+ badge_color: string;
1557
+ badge_icon: string;
1558
+ benefits: string[];
1559
+ min_points?: number | undefined;
1560
+ } | null;
1561
+ level_progress: number;
1562
+ points_to_next_level: number;
1563
+ points_this_week: number;
1564
+ points_this_month: number;
1565
+ points_this_year?: number | undefined;
1566
+ rank?: number | undefined;
1567
+ percentile?: number | undefined;
1568
+ badges?: {
1569
+ id: string;
1570
+ name: string;
1571
+ description: string;
1572
+ icon: string;
1573
+ color: string;
1574
+ rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
1575
+ earned_at: string;
1576
+ }[] | undefined;
1577
+ streaks?: {
1578
+ current: number;
1579
+ longest: number;
1580
+ } | undefined;
1581
+ streak?: {
1582
+ current_count: number;
1583
+ longest_streak: number;
1584
+ last_activity_at?: string | undefined;
1585
+ frozen: boolean;
1586
+ freeze_available: number;
1587
+ } | undefined;
1588
+ daily_limits?: {
1589
+ points_awarded: number;
1590
+ max_points: number;
1591
+ points_remaining: number;
1592
+ is_reached: boolean;
1593
+ resets_at: string;
1594
+ } | undefined;
1595
+ privileges: {
1596
+ id: string;
1597
+ slug: string;
1598
+ name: string;
1599
+ description: string;
1600
+ unlocked_at: string;
1601
+ expires_at?: string | undefined;
1602
+ category?: string | undefined;
1603
+ is_active?: boolean | undefined;
1604
+ privilege_id?: string | undefined;
1605
+ }[];
1606
+ stats: Record<string, unknown>;
1607
+ } | null, UserStats | {
1608
+ id: string;
1609
+ user_id: string;
1610
+ total_points: number;
1611
+ coin_balance: number;
1612
+ lifetime_points: number;
1613
+ current_level: number;
1614
+ level: {
1615
+ level_number: number;
1616
+ name: string;
1617
+ badge_color: string;
1618
+ badge_icon: string;
1619
+ benefits: string[];
1620
+ min_points?: number | undefined;
1621
+ };
1622
+ next_level: {
1623
+ level_number: number;
1624
+ name: string;
1625
+ badge_color: string;
1626
+ badge_icon: string;
1627
+ benefits: string[];
1628
+ min_points?: number | undefined;
1629
+ } | null;
1630
+ level_progress: number;
1631
+ points_to_next_level: number;
1632
+ points_this_week: number;
1633
+ points_this_month: number;
1634
+ points_this_year?: number | undefined;
1635
+ rank?: number | undefined;
1636
+ percentile?: number | undefined;
1637
+ badges?: {
1638
+ id: string;
1639
+ name: string;
1640
+ description: string;
1641
+ icon: string;
1642
+ color: string;
1643
+ rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
1644
+ earned_at: string;
1645
+ }[] | undefined;
1646
+ streaks?: {
1647
+ current: number;
1648
+ longest: number;
1649
+ } | undefined;
1650
+ streak?: {
1651
+ current_count: number;
1652
+ longest_streak: number;
1653
+ last_activity_at?: string | undefined;
1654
+ frozen: boolean;
1655
+ freeze_available: number;
1656
+ } | undefined;
1657
+ daily_limits?: {
1658
+ points_awarded: number;
1659
+ max_points: number;
1660
+ points_remaining: number;
1661
+ is_reached: boolean;
1662
+ resets_at: string;
1663
+ } | undefined;
1664
+ privileges: {
1665
+ id: string;
1666
+ slug: string;
1667
+ name: string;
1668
+ description: string;
1669
+ unlocked_at: string;
1670
+ expires_at?: string | undefined;
1671
+ category?: string | undefined;
1672
+ is_active?: boolean | undefined;
1673
+ privilege_id?: string | undefined;
1674
+ }[];
1675
+ stats: Record<string, unknown>;
1676
+ } | null>;
1677
+ lastAchievementUnlockedEvent: import("vue").Ref<{
1678
+ achievementId: string;
1679
+ title: string;
1680
+ description: string;
1681
+ icon: string;
1682
+ unlockedAt: string;
1683
+ points?: number | undefined;
1684
+ } | null, AchievementUnlockNotification | {
1685
+ achievementId: string;
1686
+ title: string;
1687
+ description: string;
1688
+ icon: string;
1689
+ unlockedAt: string;
1690
+ points?: number | undefined;
1691
+ } | null>;
1692
+ loadingAchievements: import("vue").Ref<boolean, boolean>;
1693
+ loadingQuests: import("vue").Ref<boolean, boolean>;
1694
+ loadingRewards: import("vue").Ref<boolean, boolean>;
1695
+ loadingLeaderboard: import("vue").Ref<boolean, boolean>;
1696
+ loadingStats: import("vue").Ref<boolean, boolean>;
1697
+ claiming: import("vue").Ref<boolean, boolean>;
1698
+ lastAchievementsUpdate: import("vue").Ref<Date | null, Date | null>;
1699
+ lastQuestsUpdate: import("vue").Ref<Date | null, Date | null>;
1700
+ lastRewardsUpdate: import("vue").Ref<Date | null, Date | null>;
1701
+ lastLeaderboardUpdate: import("vue").Ref<Date | null, Date | null>;
1702
+ lastStatsUpdate: import("vue").Ref<Date | null, Date | null>;
1703
+ isAchievementsStale: import("vue").ComputedRef<boolean>;
1704
+ isQuestsStale: import("vue").ComputedRef<boolean>;
1705
+ isRewardsStale: import("vue").ComputedRef<boolean>;
1706
+ isLeaderboardStale: import("vue").ComputedRef<boolean>;
1707
+ isStatsStale: import("vue").ComputedRef<boolean>;
1708
+ unlockedAchievements: import("vue").ComputedRef<{
1709
+ id: string;
1710
+ name: string;
1711
+ description: string;
1712
+ icon: string;
1713
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
1714
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
1715
+ condition_data?: {
1716
+ action?: string | undefined;
1717
+ target: number;
1718
+ current?: number | undefined;
1719
+ } | undefined;
1720
+ reward_points?: number | undefined;
1721
+ points_awarded?: number | undefined;
1722
+ reward_data?: {
1723
+ badge_color?: string | undefined;
1724
+ badge_text?: string | undefined;
1725
+ special_privileges?: string[] | undefined;
1726
+ unlocks_feature?: string | undefined;
1727
+ } | undefined;
1728
+ is_active?: boolean | undefined;
1729
+ is_visible?: boolean | undefined;
1730
+ is_unlocked?: boolean | undefined;
1731
+ is_claimed?: boolean | undefined;
1732
+ can_claim?: boolean | undefined;
1733
+ unlocked_at?: string | null | undefined;
1734
+ claimed_at?: string | null | undefined;
1735
+ progress_percentage?: number | undefined;
1736
+ progress_current?: number | undefined;
1737
+ progress_target?: number | undefined;
1738
+ share_card?: {
1739
+ title: string;
1740
+ badge_label: string;
1741
+ description: string;
1742
+ image_url: string;
1743
+ share_url: string;
1744
+ share_text: string;
1745
+ } | undefined;
1746
+ progress?: number | {
1747
+ current_value: number;
1748
+ target_value: number;
1749
+ percentage: number;
1750
+ unit: string;
1751
+ } | undefined;
1752
+ sort_order?: number | undefined;
1753
+ requirements?: {
1754
+ id: string;
1755
+ type: string;
1756
+ target_value: number;
1757
+ current_value: number;
1758
+ description: string;
1759
+ }[] | undefined;
1760
+ category?: string | undefined;
1761
+ }[]>;
1762
+ availableAchievements: import("vue").ComputedRef<{
1763
+ id: string;
1764
+ name: string;
1765
+ description: string;
1766
+ icon: string;
1767
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
1768
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
1769
+ condition_data?: {
1770
+ action?: string | undefined;
1771
+ target: number;
1772
+ current?: number | undefined;
1773
+ } | undefined;
1774
+ reward_points?: number | undefined;
1775
+ points_awarded?: number | undefined;
1776
+ reward_data?: {
1777
+ badge_color?: string | undefined;
1778
+ badge_text?: string | undefined;
1779
+ special_privileges?: string[] | undefined;
1780
+ unlocks_feature?: string | undefined;
1781
+ } | undefined;
1782
+ is_active?: boolean | undefined;
1783
+ is_visible?: boolean | undefined;
1784
+ is_unlocked?: boolean | undefined;
1785
+ is_claimed?: boolean | undefined;
1786
+ can_claim?: boolean | undefined;
1787
+ unlocked_at?: string | null | undefined;
1788
+ claimed_at?: string | null | undefined;
1789
+ progress_percentage?: number | undefined;
1790
+ progress_current?: number | undefined;
1791
+ progress_target?: number | undefined;
1792
+ share_card?: {
1793
+ title: string;
1794
+ badge_label: string;
1795
+ description: string;
1796
+ image_url: string;
1797
+ share_url: string;
1798
+ share_text: string;
1799
+ } | undefined;
1800
+ progress?: number | {
1801
+ current_value: number;
1802
+ target_value: number;
1803
+ percentage: number;
1804
+ unit: string;
1805
+ } | undefined;
1806
+ sort_order?: number | undefined;
1807
+ requirements?: {
1808
+ id: string;
1809
+ type: string;
1810
+ target_value: number;
1811
+ current_value: number;
1812
+ description: string;
1813
+ }[] | undefined;
1814
+ category?: string | undefined;
1815
+ }[]>;
1816
+ activeQuests: import("vue").ComputedRef<{
1817
+ id: string;
1818
+ name?: string | undefined;
1819
+ title?: string | undefined;
1820
+ description: string;
1821
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
1822
+ objectives: {
1823
+ id: string;
1824
+ quest_id?: string | undefined;
1825
+ description: string;
1826
+ type: string;
1827
+ target: number;
1828
+ target_value?: number | undefined;
1829
+ current: number;
1830
+ current_value?: number | undefined;
1831
+ is_completed?: boolean | undefined;
1832
+ completed?: boolean | undefined;
1833
+ bonus_points?: number | undefined;
1834
+ unit?: string | undefined;
1835
+ }[];
1836
+ rewards?: {
1837
+ type: "points" | "badge" | "privilege" | "item";
1838
+ value: number | string;
1839
+ description: string;
1840
+ }[] | undefined;
1841
+ reward_points: number;
1842
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
1843
+ is_active?: boolean | undefined;
1844
+ starts_at?: string | undefined;
1845
+ expires_at: string | null;
1846
+ completed_at: string | null;
1847
+ accepted_at?: string | null | undefined;
1848
+ progress?: {
1849
+ current: number;
1850
+ total: number;
1851
+ percentage: number;
1852
+ } | undefined;
1853
+ progress_percentage?: number | undefined;
1854
+ category?: string | undefined;
1855
+ }[]>;
1856
+ completedQuests: import("vue").ComputedRef<{
1857
+ id: string;
1858
+ name?: string | undefined;
1859
+ title?: string | undefined;
1860
+ description: string;
1861
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
1862
+ objectives: {
1863
+ id: string;
1864
+ quest_id?: string | undefined;
1865
+ description: string;
1866
+ type: string;
1867
+ target: number;
1868
+ target_value?: number | undefined;
1869
+ current: number;
1870
+ current_value?: number | undefined;
1871
+ is_completed?: boolean | undefined;
1872
+ completed?: boolean | undefined;
1873
+ bonus_points?: number | undefined;
1874
+ unit?: string | undefined;
1875
+ }[];
1876
+ rewards?: {
1877
+ type: "points" | "badge" | "privilege" | "item";
1878
+ value: number | string;
1879
+ description: string;
1880
+ }[] | undefined;
1881
+ reward_points: number;
1882
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
1883
+ is_active?: boolean | undefined;
1884
+ starts_at?: string | undefined;
1885
+ expires_at: string | null;
1886
+ completed_at: string | null;
1887
+ accepted_at?: string | null | undefined;
1888
+ progress?: {
1889
+ current: number;
1890
+ total: number;
1891
+ percentage: number;
1892
+ } | undefined;
1893
+ progress_percentage?: number | undefined;
1894
+ category?: string | undefined;
1895
+ }[]>;
1896
+ rewardBalance: import("vue").ComputedRef<number>;
1897
+ currentXP: import("vue").ComputedRef<number>;
1898
+ currentLevel: import("vue").ComputedRef<number>;
1899
+ nextLevel: import("vue").ComputedRef<{
1900
+ level_number: number;
1901
+ name: string;
1902
+ badge_color: string;
1903
+ badge_icon: string;
1904
+ benefits: string[];
1905
+ min_points?: number | undefined;
1906
+ } | null | undefined>;
1907
+ levelProgress: import("vue").ComputedRef<number>;
1908
+ recentXPGain: import("vue").ComputedRef<number>;
1909
+ loadAchievements: (useCache?: boolean) => Promise<Achievement[]>;
1910
+ loadQuests: (useCache?: boolean) => Promise<Quest[]>;
1911
+ loadCompletedQuests: (useCache?: boolean) => Promise<Quest[]>;
1912
+ loadRewards: (useCache?: boolean) => Promise<Reward[]>;
1913
+ loadLeaderboard: (period?: LeaderboardPeriod, limit?: number) => Promise<LeaderboardEntry[]>;
1914
+ loadUserStats: (useCache?: boolean) => Promise<UserStats>;
1915
+ loadAchievementById: (achievementId: string) => Promise<Achievement>;
1916
+ setQuestFilter: (nextFilter: string) => void;
1917
+ getAchievementShareCard: (achievementId: string) => Promise<AchievementShareCard>;
1918
+ fetchAchievementShareCardAsset: (achievementId: string) => Promise<string>;
1919
+ claimAchievement: (achievementId: string) => Promise<void>;
1920
+ acceptQuest: (questId: string) => Promise<void>;
1921
+ completeQuest: (questId: string) => Promise<void>;
1922
+ abandonQuest: (questId: string) => Promise<void>;
1923
+ redeemReward: (rewardId: string) => Promise<void>;
1924
+ subscribeToGamificationUpdates: () => void;
1925
+ unsubscribeFromGamificationUpdates: () => void;
1926
+ clearLastAchievementUnlockedEvent: () => void;
1927
+ loadAllData: () => Promise<void>;
1928
+ $reset: () => void;
1929
+ }, "isAchievementsStale" | "isQuestsStale" | "isRewardsStale" | "isLeaderboardStale" | "isStatsStale" | "unlockedAchievements" | "availableAchievements" | "activeQuests" | "completedQuests" | "rewardBalance" | "currentXP" | "currentLevel" | "nextLevel" | "levelProgress" | "recentXPGain">, Pick<{
1930
+ achievements: import("vue").Ref<{
1931
+ id: string;
1932
+ name: string;
1933
+ description: string;
1934
+ icon: string;
1935
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
1936
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
1937
+ condition_data?: {
1938
+ action?: string | undefined;
1939
+ target: number;
1940
+ current?: number | undefined;
1941
+ } | undefined;
1942
+ reward_points?: number | undefined;
1943
+ points_awarded?: number | undefined;
1944
+ reward_data?: {
1945
+ badge_color?: string | undefined;
1946
+ badge_text?: string | undefined;
1947
+ special_privileges?: string[] | undefined;
1948
+ unlocks_feature?: string | undefined;
1949
+ } | undefined;
1950
+ is_active?: boolean | undefined;
1951
+ is_visible?: boolean | undefined;
1952
+ is_unlocked?: boolean | undefined;
1953
+ is_claimed?: boolean | undefined;
1954
+ can_claim?: boolean | undefined;
1955
+ unlocked_at?: string | null | undefined;
1956
+ claimed_at?: string | null | undefined;
1957
+ progress_percentage?: number | undefined;
1958
+ progress_current?: number | undefined;
1959
+ progress_target?: number | undefined;
1960
+ share_card?: {
1961
+ title: string;
1962
+ badge_label: string;
1963
+ description: string;
1964
+ image_url: string;
1965
+ share_url: string;
1966
+ share_text: string;
1967
+ } | undefined;
1968
+ progress?: number | {
1969
+ current_value: number;
1970
+ target_value: number;
1971
+ percentage: number;
1972
+ unit: string;
1973
+ } | undefined;
1974
+ sort_order?: number | undefined;
1975
+ requirements?: {
1976
+ id: string;
1977
+ type: string;
1978
+ target_value: number;
1979
+ current_value: number;
1980
+ description: string;
1981
+ }[] | undefined;
1982
+ category?: string | undefined;
1983
+ }[], Achievement[] | {
1984
+ id: string;
1985
+ name: string;
1986
+ description: string;
1987
+ icon: string;
1988
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
1989
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
1990
+ condition_data?: {
1991
+ action?: string | undefined;
1992
+ target: number;
1993
+ current?: number | undefined;
1994
+ } | undefined;
1995
+ reward_points?: number | undefined;
1996
+ points_awarded?: number | undefined;
1997
+ reward_data?: {
1998
+ badge_color?: string | undefined;
1999
+ badge_text?: string | undefined;
2000
+ special_privileges?: string[] | undefined;
2001
+ unlocks_feature?: string | undefined;
2002
+ } | undefined;
2003
+ is_active?: boolean | undefined;
2004
+ is_visible?: boolean | undefined;
2005
+ is_unlocked?: boolean | undefined;
2006
+ is_claimed?: boolean | undefined;
2007
+ can_claim?: boolean | undefined;
2008
+ unlocked_at?: string | null | undefined;
2009
+ claimed_at?: string | null | undefined;
2010
+ progress_percentage?: number | undefined;
2011
+ progress_current?: number | undefined;
2012
+ progress_target?: number | undefined;
2013
+ share_card?: {
2014
+ title: string;
2015
+ badge_label: string;
2016
+ description: string;
2017
+ image_url: string;
2018
+ share_url: string;
2019
+ share_text: string;
2020
+ } | undefined;
2021
+ progress?: number | {
2022
+ current_value: number;
2023
+ target_value: number;
2024
+ percentage: number;
2025
+ unit: string;
2026
+ } | undefined;
2027
+ sort_order?: number | undefined;
2028
+ requirements?: {
2029
+ id: string;
2030
+ type: string;
2031
+ target_value: number;
2032
+ current_value: number;
2033
+ description: string;
2034
+ }[] | undefined;
2035
+ category?: string | undefined;
2036
+ }[]>;
2037
+ quests: import("vue").Ref<{
2038
+ id: string;
2039
+ name?: string | undefined;
2040
+ title?: string | undefined;
2041
+ description: string;
2042
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
2043
+ objectives: {
2044
+ id: string;
2045
+ quest_id?: string | undefined;
2046
+ description: string;
2047
+ type: string;
2048
+ target: number;
2049
+ target_value?: number | undefined;
2050
+ current: number;
2051
+ current_value?: number | undefined;
2052
+ is_completed?: boolean | undefined;
2053
+ completed?: boolean | undefined;
2054
+ bonus_points?: number | undefined;
2055
+ unit?: string | undefined;
2056
+ }[];
2057
+ rewards?: {
2058
+ type: "points" | "badge" | "privilege" | "item";
2059
+ value: number | string;
2060
+ description: string;
2061
+ }[] | undefined;
2062
+ reward_points: number;
2063
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
2064
+ is_active?: boolean | undefined;
2065
+ starts_at?: string | undefined;
2066
+ expires_at: string | null;
2067
+ completed_at: string | null;
2068
+ accepted_at?: string | null | undefined;
2069
+ progress?: {
2070
+ current: number;
2071
+ total: number;
2072
+ percentage: number;
2073
+ } | undefined;
2074
+ progress_percentage?: number | undefined;
2075
+ category?: string | undefined;
2076
+ }[], Quest[] | {
2077
+ id: string;
2078
+ name?: string | undefined;
2079
+ title?: string | undefined;
2080
+ description: string;
2081
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
2082
+ objectives: {
2083
+ id: string;
2084
+ quest_id?: string | undefined;
2085
+ description: string;
2086
+ type: string;
2087
+ target: number;
2088
+ target_value?: number | undefined;
2089
+ current: number;
2090
+ current_value?: number | undefined;
2091
+ is_completed?: boolean | undefined;
2092
+ completed?: boolean | undefined;
2093
+ bonus_points?: number | undefined;
2094
+ unit?: string | undefined;
2095
+ }[];
2096
+ rewards?: {
2097
+ type: "points" | "badge" | "privilege" | "item";
2098
+ value: number | string;
2099
+ description: string;
2100
+ }[] | undefined;
2101
+ reward_points: number;
2102
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
2103
+ is_active?: boolean | undefined;
2104
+ starts_at?: string | undefined;
2105
+ expires_at: string | null;
2106
+ completed_at: string | null;
2107
+ accepted_at?: string | null | undefined;
2108
+ progress?: {
2109
+ current: number;
2110
+ total: number;
2111
+ percentage: number;
2112
+ } | undefined;
2113
+ progress_percentage?: number | undefined;
2114
+ category?: string | undefined;
2115
+ }[]>;
2116
+ dailyQuests: import("vue").Ref<{
2117
+ id: string;
2118
+ name?: string | undefined;
2119
+ title?: string | undefined;
2120
+ description: string;
2121
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
2122
+ objectives: {
2123
+ id: string;
2124
+ quest_id?: string | undefined;
2125
+ description: string;
2126
+ type: string;
2127
+ target: number;
2128
+ target_value?: number | undefined;
2129
+ current: number;
2130
+ current_value?: number | undefined;
2131
+ is_completed?: boolean | undefined;
2132
+ completed?: boolean | undefined;
2133
+ bonus_points?: number | undefined;
2134
+ unit?: string | undefined;
2135
+ }[];
2136
+ rewards?: {
2137
+ type: "points" | "badge" | "privilege" | "item";
2138
+ value: number | string;
2139
+ description: string;
2140
+ }[] | undefined;
2141
+ reward_points: number;
2142
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
2143
+ is_active?: boolean | undefined;
2144
+ starts_at?: string | undefined;
2145
+ expires_at: string | null;
2146
+ completed_at: string | null;
2147
+ accepted_at?: string | null | undefined;
2148
+ progress?: {
2149
+ current: number;
2150
+ total: number;
2151
+ percentage: number;
2152
+ } | undefined;
2153
+ progress_percentage?: number | undefined;
2154
+ category?: string | undefined;
2155
+ }[], Quest[] | {
2156
+ id: string;
2157
+ name?: string | undefined;
2158
+ title?: string | undefined;
2159
+ description: string;
2160
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
2161
+ objectives: {
2162
+ id: string;
2163
+ quest_id?: string | undefined;
2164
+ description: string;
2165
+ type: string;
2166
+ target: number;
2167
+ target_value?: number | undefined;
2168
+ current: number;
2169
+ current_value?: number | undefined;
2170
+ is_completed?: boolean | undefined;
2171
+ completed?: boolean | undefined;
2172
+ bonus_points?: number | undefined;
2173
+ unit?: string | undefined;
2174
+ }[];
2175
+ rewards?: {
2176
+ type: "points" | "badge" | "privilege" | "item";
2177
+ value: number | string;
2178
+ description: string;
2179
+ }[] | undefined;
2180
+ reward_points: number;
2181
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
2182
+ is_active?: boolean | undefined;
2183
+ starts_at?: string | undefined;
2184
+ expires_at: string | null;
2185
+ completed_at: string | null;
2186
+ accepted_at?: string | null | undefined;
2187
+ progress?: {
2188
+ current: number;
2189
+ total: number;
2190
+ percentage: number;
2191
+ } | undefined;
2192
+ progress_percentage?: number | undefined;
2193
+ category?: string | undefined;
2194
+ }[]>;
2195
+ questFilter: import("vue").Ref<QuestFilter, QuestFilter>;
2196
+ rewards: import("vue").Ref<{
2197
+ id: string;
2198
+ name: string;
2199
+ description: string;
2200
+ cost_points: number;
2201
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
2202
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
2203
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
2204
+ icon?: string | undefined;
2205
+ preview_image?: string | undefined;
2206
+ reward_data?: Record<string, unknown> | undefined;
2207
+ can_redeem?: boolean | undefined;
2208
+ user_points?: number | undefined;
2209
+ points_needed?: number | undefined;
2210
+ stock_quantity?: number | null | undefined;
2211
+ stock_remaining?: number | null | undefined;
2212
+ max_per_user?: number | undefined;
2213
+ user_redemptions?: number | undefined;
2214
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
2215
+ data?: {
2216
+ duration?: number | undefined;
2217
+ value?: unknown;
2218
+ icon?: string | undefined;
2219
+ color?: string | undefined;
2220
+ } | undefined;
2221
+ stock?: number | undefined;
2222
+ limited_quantity?: number | null | undefined;
2223
+ remaining_quantity?: number | null | undefined;
2224
+ redemption_limit?: number | undefined;
2225
+ is_available?: boolean | undefined;
2226
+ is_claimed?: boolean | undefined;
2227
+ redeemed_count?: number | undefined;
2228
+ redeemed_at?: string | undefined;
2229
+ }[], Reward[] | {
2230
+ id: string;
2231
+ name: string;
2232
+ description: string;
2233
+ cost_points: number;
2234
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
2235
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
2236
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
2237
+ icon?: string | undefined;
2238
+ preview_image?: string | undefined;
2239
+ reward_data?: Record<string, unknown> | undefined;
2240
+ can_redeem?: boolean | undefined;
2241
+ user_points?: number | undefined;
2242
+ points_needed?: number | undefined;
2243
+ stock_quantity?: number | null | undefined;
2244
+ stock_remaining?: number | null | undefined;
2245
+ max_per_user?: number | undefined;
2246
+ user_redemptions?: number | undefined;
2247
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
2248
+ data?: {
2249
+ duration?: number | undefined;
2250
+ value?: unknown;
2251
+ icon?: string | undefined;
2252
+ color?: string | undefined;
2253
+ } | undefined;
2254
+ stock?: number | undefined;
2255
+ limited_quantity?: number | null | undefined;
2256
+ remaining_quantity?: number | null | undefined;
2257
+ redemption_limit?: number | undefined;
2258
+ is_available?: boolean | undefined;
2259
+ is_claimed?: boolean | undefined;
2260
+ redeemed_count?: number | undefined;
2261
+ redeemed_at?: string | undefined;
2262
+ }[]>;
2263
+ claimedRewards: import("vue").Ref<{
2264
+ id: string;
2265
+ reward_id: string;
2266
+ reward: {
2267
+ id: string;
2268
+ name: string;
2269
+ description: string;
2270
+ cost_points: number;
2271
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
2272
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
2273
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
2274
+ icon?: string | undefined;
2275
+ preview_image?: string | undefined;
2276
+ reward_data?: Record<string, unknown> | undefined;
2277
+ can_redeem?: boolean | undefined;
2278
+ user_points?: number | undefined;
2279
+ points_needed?: number | undefined;
2280
+ stock_quantity?: number | null | undefined;
2281
+ stock_remaining?: number | null | undefined;
2282
+ max_per_user?: number | undefined;
2283
+ user_redemptions?: number | undefined;
2284
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
2285
+ data?: {
2286
+ duration?: number | undefined;
2287
+ value?: unknown;
2288
+ icon?: string | undefined;
2289
+ color?: string | undefined;
2290
+ } | undefined;
2291
+ stock?: number | undefined;
2292
+ limited_quantity?: number | null | undefined;
2293
+ remaining_quantity?: number | null | undefined;
2294
+ redemption_limit?: number | undefined;
2295
+ is_available?: boolean | undefined;
2296
+ is_claimed?: boolean | undefined;
2297
+ redeemed_count?: number | undefined;
2298
+ redeemed_at?: string | undefined;
2299
+ };
2300
+ claimed_at: string;
2301
+ status: "active" | "expired";
2302
+ expires_at?: string | undefined;
2303
+ }[], ClaimedReward[] | {
2304
+ id: string;
2305
+ reward_id: string;
2306
+ reward: {
2307
+ id: string;
2308
+ name: string;
2309
+ description: string;
2310
+ cost_points: number;
2311
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
2312
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
2313
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
2314
+ icon?: string | undefined;
2315
+ preview_image?: string | undefined;
2316
+ reward_data?: Record<string, unknown> | undefined;
2317
+ can_redeem?: boolean | undefined;
2318
+ user_points?: number | undefined;
2319
+ points_needed?: number | undefined;
2320
+ stock_quantity?: number | null | undefined;
2321
+ stock_remaining?: number | null | undefined;
2322
+ max_per_user?: number | undefined;
2323
+ user_redemptions?: number | undefined;
2324
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
2325
+ data?: {
2326
+ duration?: number | undefined;
2327
+ value?: unknown;
2328
+ icon?: string | undefined;
2329
+ color?: string | undefined;
2330
+ } | undefined;
2331
+ stock?: number | undefined;
2332
+ limited_quantity?: number | null | undefined;
2333
+ remaining_quantity?: number | null | undefined;
2334
+ redemption_limit?: number | undefined;
2335
+ is_available?: boolean | undefined;
2336
+ is_claimed?: boolean | undefined;
2337
+ redeemed_count?: number | undefined;
2338
+ redeemed_at?: string | undefined;
2339
+ };
2340
+ claimed_at: string;
2341
+ status: "active" | "expired";
2342
+ expires_at?: string | undefined;
2343
+ }[]>;
2344
+ rewardTransactions: import("vue").Ref<{
2345
+ id: string;
2346
+ reward_id: string;
2347
+ reward: {
2348
+ id: string;
2349
+ name: string;
2350
+ description: string;
2351
+ cost_points: number;
2352
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
2353
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
2354
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
2355
+ icon?: string | undefined;
2356
+ preview_image?: string | undefined;
2357
+ reward_data?: Record<string, unknown> | undefined;
2358
+ can_redeem?: boolean | undefined;
2359
+ user_points?: number | undefined;
2360
+ points_needed?: number | undefined;
2361
+ stock_quantity?: number | null | undefined;
2362
+ stock_remaining?: number | null | undefined;
2363
+ max_per_user?: number | undefined;
2364
+ user_redemptions?: number | undefined;
2365
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
2366
+ data?: {
2367
+ duration?: number | undefined;
2368
+ value?: unknown;
2369
+ icon?: string | undefined;
2370
+ color?: string | undefined;
2371
+ } | undefined;
2372
+ stock?: number | undefined;
2373
+ limited_quantity?: number | null | undefined;
2374
+ remaining_quantity?: number | null | undefined;
2375
+ redemption_limit?: number | undefined;
2376
+ is_available?: boolean | undefined;
2377
+ is_claimed?: boolean | undefined;
2378
+ redeemed_count?: number | undefined;
2379
+ redeemed_at?: string | undefined;
2380
+ };
2381
+ points_spent: number;
2382
+ transaction_type: "redemption" | "refund";
2383
+ created_at: string;
2384
+ metadata: Record<string, unknown>;
2385
+ }[], RewardTransaction[] | {
2386
+ id: string;
2387
+ reward_id: string;
2388
+ reward: {
2389
+ id: string;
2390
+ name: string;
2391
+ description: string;
2392
+ cost_points: number;
2393
+ reward_type?: "badge" | "title" | "cosmetic" | "boost" | "feature" | undefined;
2394
+ type?: "cosmetic" | "privilege" | "boost" | "item" | undefined;
2395
+ category?: "badge" | "privilege" | "cosmetic" | "bonus" | undefined;
2396
+ icon?: string | undefined;
2397
+ preview_image?: string | undefined;
2398
+ reward_data?: Record<string, unknown> | undefined;
2399
+ can_redeem?: boolean | undefined;
2400
+ user_points?: number | undefined;
2401
+ points_needed?: number | undefined;
2402
+ stock_quantity?: number | null | undefined;
2403
+ stock_remaining?: number | null | undefined;
2404
+ max_per_user?: number | undefined;
2405
+ user_redemptions?: number | undefined;
2406
+ availability_status?: "available" | "insufficient_points" | "out_of_stock" | "limit_reached" | "inactive" | string | undefined;
2407
+ data?: {
2408
+ duration?: number | undefined;
2409
+ value?: unknown;
2410
+ icon?: string | undefined;
2411
+ color?: string | undefined;
2412
+ } | undefined;
2413
+ stock?: number | undefined;
2414
+ limited_quantity?: number | null | undefined;
2415
+ remaining_quantity?: number | null | undefined;
2416
+ redemption_limit?: number | undefined;
2417
+ is_available?: boolean | undefined;
2418
+ is_claimed?: boolean | undefined;
2419
+ redeemed_count?: number | undefined;
2420
+ redeemed_at?: string | undefined;
2421
+ };
2422
+ points_spent: number;
2423
+ transaction_type: "redemption" | "refund";
2424
+ created_at: string;
2425
+ metadata: Record<string, unknown>;
2426
+ }[]>;
2427
+ leaderboard: import("vue").Ref<{
2428
+ rank: number;
2429
+ user_id: string;
2430
+ handle: string;
2431
+ name: string;
2432
+ avatar_url?: string | null | undefined;
2433
+ points: number;
2434
+ period_points?: number | undefined;
2435
+ total_points: number;
2436
+ level: number;
2437
+ current_level?: number | undefined;
2438
+ level_details?: {
2439
+ level_number: number;
2440
+ name: string;
2441
+ badge_color: string;
2442
+ badge_icon: string;
2443
+ benefits: string[];
2444
+ min_points?: number | undefined;
2445
+ } | undefined;
2446
+ achievements_count?: number | undefined;
2447
+ change: number;
2448
+ trend?: number | "up" | "down" | "same" | null | undefined;
2449
+ is_current_user: boolean;
2450
+ space_id?: string | null | undefined;
2451
+ }[], LeaderboardEntry[] | {
2452
+ rank: number;
2453
+ user_id: string;
2454
+ handle: string;
2455
+ name: string;
2456
+ avatar_url?: string | null | undefined;
2457
+ points: number;
2458
+ period_points?: number | undefined;
2459
+ total_points: number;
2460
+ level: number;
2461
+ current_level?: number | undefined;
2462
+ level_details?: {
2463
+ level_number: number;
2464
+ name: string;
2465
+ badge_color: string;
2466
+ badge_icon: string;
2467
+ benefits: string[];
2468
+ min_points?: number | undefined;
2469
+ } | undefined;
2470
+ achievements_count?: number | undefined;
2471
+ change: number;
2472
+ trend?: number | "up" | "down" | "same" | null | undefined;
2473
+ is_current_user: boolean;
2474
+ space_id?: string | null | undefined;
2475
+ }[]>;
2476
+ activeLeaderboardContext: import("vue").Ref<{
2477
+ period: LeaderboardPeriod;
2478
+ limit: number;
2479
+ }, LeaderboardQueryContext | {
2480
+ period: LeaderboardPeriod;
2481
+ limit: number;
2482
+ }>;
2483
+ userStats: import("vue").Ref<{
2484
+ id: string;
2485
+ user_id: string;
2486
+ total_points: number;
2487
+ coin_balance: number;
2488
+ lifetime_points: number;
2489
+ current_level: number;
2490
+ level: {
2491
+ level_number: number;
2492
+ name: string;
2493
+ badge_color: string;
2494
+ badge_icon: string;
2495
+ benefits: string[];
2496
+ min_points?: number | undefined;
2497
+ };
2498
+ next_level: {
2499
+ level_number: number;
2500
+ name: string;
2501
+ badge_color: string;
2502
+ badge_icon: string;
2503
+ benefits: string[];
2504
+ min_points?: number | undefined;
2505
+ } | null;
2506
+ level_progress: number;
2507
+ points_to_next_level: number;
2508
+ points_this_week: number;
2509
+ points_this_month: number;
2510
+ points_this_year?: number | undefined;
2511
+ rank?: number | undefined;
2512
+ percentile?: number | undefined;
2513
+ badges?: {
2514
+ id: string;
2515
+ name: string;
2516
+ description: string;
2517
+ icon: string;
2518
+ color: string;
2519
+ rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
2520
+ earned_at: string;
2521
+ }[] | undefined;
2522
+ streaks?: {
2523
+ current: number;
2524
+ longest: number;
2525
+ } | undefined;
2526
+ streak?: {
2527
+ current_count: number;
2528
+ longest_streak: number;
2529
+ last_activity_at?: string | undefined;
2530
+ frozen: boolean;
2531
+ freeze_available: number;
2532
+ } | undefined;
2533
+ daily_limits?: {
2534
+ points_awarded: number;
2535
+ max_points: number;
2536
+ points_remaining: number;
2537
+ is_reached: boolean;
2538
+ resets_at: string;
2539
+ } | undefined;
2540
+ privileges: {
2541
+ id: string;
2542
+ slug: string;
2543
+ name: string;
2544
+ description: string;
2545
+ unlocked_at: string;
2546
+ expires_at?: string | undefined;
2547
+ category?: string | undefined;
2548
+ is_active?: boolean | undefined;
2549
+ privilege_id?: string | undefined;
2550
+ }[];
2551
+ stats: Record<string, unknown>;
2552
+ } | null, UserStats | {
2553
+ id: string;
2554
+ user_id: string;
2555
+ total_points: number;
2556
+ coin_balance: number;
2557
+ lifetime_points: number;
2558
+ current_level: number;
2559
+ level: {
2560
+ level_number: number;
2561
+ name: string;
2562
+ badge_color: string;
2563
+ badge_icon: string;
2564
+ benefits: string[];
2565
+ min_points?: number | undefined;
2566
+ };
2567
+ next_level: {
2568
+ level_number: number;
2569
+ name: string;
2570
+ badge_color: string;
2571
+ badge_icon: string;
2572
+ benefits: string[];
2573
+ min_points?: number | undefined;
2574
+ } | null;
2575
+ level_progress: number;
2576
+ points_to_next_level: number;
2577
+ points_this_week: number;
2578
+ points_this_month: number;
2579
+ points_this_year?: number | undefined;
2580
+ rank?: number | undefined;
2581
+ percentile?: number | undefined;
2582
+ badges?: {
2583
+ id: string;
2584
+ name: string;
2585
+ description: string;
2586
+ icon: string;
2587
+ color: string;
2588
+ rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
2589
+ earned_at: string;
2590
+ }[] | undefined;
2591
+ streaks?: {
2592
+ current: number;
2593
+ longest: number;
2594
+ } | undefined;
2595
+ streak?: {
2596
+ current_count: number;
2597
+ longest_streak: number;
2598
+ last_activity_at?: string | undefined;
2599
+ frozen: boolean;
2600
+ freeze_available: number;
2601
+ } | undefined;
2602
+ daily_limits?: {
2603
+ points_awarded: number;
2604
+ max_points: number;
2605
+ points_remaining: number;
2606
+ is_reached: boolean;
2607
+ resets_at: string;
2608
+ } | undefined;
2609
+ privileges: {
2610
+ id: string;
2611
+ slug: string;
2612
+ name: string;
2613
+ description: string;
2614
+ unlocked_at: string;
2615
+ expires_at?: string | undefined;
2616
+ category?: string | undefined;
2617
+ is_active?: boolean | undefined;
2618
+ privilege_id?: string | undefined;
2619
+ }[];
2620
+ stats: Record<string, unknown>;
2621
+ } | null>;
2622
+ lastAchievementUnlockedEvent: import("vue").Ref<{
2623
+ achievementId: string;
2624
+ title: string;
2625
+ description: string;
2626
+ icon: string;
2627
+ unlockedAt: string;
2628
+ points?: number | undefined;
2629
+ } | null, AchievementUnlockNotification | {
2630
+ achievementId: string;
2631
+ title: string;
2632
+ description: string;
2633
+ icon: string;
2634
+ unlockedAt: string;
2635
+ points?: number | undefined;
2636
+ } | null>;
2637
+ loadingAchievements: import("vue").Ref<boolean, boolean>;
2638
+ loadingQuests: import("vue").Ref<boolean, boolean>;
2639
+ loadingRewards: import("vue").Ref<boolean, boolean>;
2640
+ loadingLeaderboard: import("vue").Ref<boolean, boolean>;
2641
+ loadingStats: import("vue").Ref<boolean, boolean>;
2642
+ claiming: import("vue").Ref<boolean, boolean>;
2643
+ lastAchievementsUpdate: import("vue").Ref<Date | null, Date | null>;
2644
+ lastQuestsUpdate: import("vue").Ref<Date | null, Date | null>;
2645
+ lastRewardsUpdate: import("vue").Ref<Date | null, Date | null>;
2646
+ lastLeaderboardUpdate: import("vue").Ref<Date | null, Date | null>;
2647
+ lastStatsUpdate: import("vue").Ref<Date | null, Date | null>;
2648
+ isAchievementsStale: import("vue").ComputedRef<boolean>;
2649
+ isQuestsStale: import("vue").ComputedRef<boolean>;
2650
+ isRewardsStale: import("vue").ComputedRef<boolean>;
2651
+ isLeaderboardStale: import("vue").ComputedRef<boolean>;
2652
+ isStatsStale: import("vue").ComputedRef<boolean>;
2653
+ unlockedAchievements: import("vue").ComputedRef<{
2654
+ id: string;
2655
+ name: string;
2656
+ description: string;
2657
+ icon: string;
2658
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
2659
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
2660
+ condition_data?: {
2661
+ action?: string | undefined;
2662
+ target: number;
2663
+ current?: number | undefined;
2664
+ } | undefined;
2665
+ reward_points?: number | undefined;
2666
+ points_awarded?: number | undefined;
2667
+ reward_data?: {
2668
+ badge_color?: string | undefined;
2669
+ badge_text?: string | undefined;
2670
+ special_privileges?: string[] | undefined;
2671
+ unlocks_feature?: string | undefined;
2672
+ } | undefined;
2673
+ is_active?: boolean | undefined;
2674
+ is_visible?: boolean | undefined;
2675
+ is_unlocked?: boolean | undefined;
2676
+ is_claimed?: boolean | undefined;
2677
+ can_claim?: boolean | undefined;
2678
+ unlocked_at?: string | null | undefined;
2679
+ claimed_at?: string | null | undefined;
2680
+ progress_percentage?: number | undefined;
2681
+ progress_current?: number | undefined;
2682
+ progress_target?: number | undefined;
2683
+ share_card?: {
2684
+ title: string;
2685
+ badge_label: string;
2686
+ description: string;
2687
+ image_url: string;
2688
+ share_url: string;
2689
+ share_text: string;
2690
+ } | undefined;
2691
+ progress?: number | {
2692
+ current_value: number;
2693
+ target_value: number;
2694
+ percentage: number;
2695
+ unit: string;
2696
+ } | undefined;
2697
+ sort_order?: number | undefined;
2698
+ requirements?: {
2699
+ id: string;
2700
+ type: string;
2701
+ target_value: number;
2702
+ current_value: number;
2703
+ description: string;
2704
+ }[] | undefined;
2705
+ category?: string | undefined;
2706
+ }[]>;
2707
+ availableAchievements: import("vue").ComputedRef<{
2708
+ id: string;
2709
+ name: string;
2710
+ description: string;
2711
+ icon: string;
2712
+ rarity?: "common" | "uncommon" | "rare" | "epic" | "legendary" | undefined;
2713
+ condition_type?: "count" | "streak" | "points" | "social" | undefined;
2714
+ condition_data?: {
2715
+ action?: string | undefined;
2716
+ target: number;
2717
+ current?: number | undefined;
2718
+ } | undefined;
2719
+ reward_points?: number | undefined;
2720
+ points_awarded?: number | undefined;
2721
+ reward_data?: {
2722
+ badge_color?: string | undefined;
2723
+ badge_text?: string | undefined;
2724
+ special_privileges?: string[] | undefined;
2725
+ unlocks_feature?: string | undefined;
2726
+ } | undefined;
2727
+ is_active?: boolean | undefined;
2728
+ is_visible?: boolean | undefined;
2729
+ is_unlocked?: boolean | undefined;
2730
+ is_claimed?: boolean | undefined;
2731
+ can_claim?: boolean | undefined;
2732
+ unlocked_at?: string | null | undefined;
2733
+ claimed_at?: string | null | undefined;
2734
+ progress_percentage?: number | undefined;
2735
+ progress_current?: number | undefined;
2736
+ progress_target?: number | undefined;
2737
+ share_card?: {
2738
+ title: string;
2739
+ badge_label: string;
2740
+ description: string;
2741
+ image_url: string;
2742
+ share_url: string;
2743
+ share_text: string;
2744
+ } | undefined;
2745
+ progress?: number | {
2746
+ current_value: number;
2747
+ target_value: number;
2748
+ percentage: number;
2749
+ unit: string;
2750
+ } | undefined;
2751
+ sort_order?: number | undefined;
2752
+ requirements?: {
2753
+ id: string;
2754
+ type: string;
2755
+ target_value: number;
2756
+ current_value: number;
2757
+ description: string;
2758
+ }[] | undefined;
2759
+ category?: string | undefined;
2760
+ }[]>;
2761
+ activeQuests: import("vue").ComputedRef<{
2762
+ id: string;
2763
+ name?: string | undefined;
2764
+ title?: string | undefined;
2765
+ description: string;
2766
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
2767
+ objectives: {
2768
+ id: string;
2769
+ quest_id?: string | undefined;
2770
+ description: string;
2771
+ type: string;
2772
+ target: number;
2773
+ target_value?: number | undefined;
2774
+ current: number;
2775
+ current_value?: number | undefined;
2776
+ is_completed?: boolean | undefined;
2777
+ completed?: boolean | undefined;
2778
+ bonus_points?: number | undefined;
2779
+ unit?: string | undefined;
2780
+ }[];
2781
+ rewards?: {
2782
+ type: "points" | "badge" | "privilege" | "item";
2783
+ value: number | string;
2784
+ description: string;
2785
+ }[] | undefined;
2786
+ reward_points: number;
2787
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
2788
+ is_active?: boolean | undefined;
2789
+ starts_at?: string | undefined;
2790
+ expires_at: string | null;
2791
+ completed_at: string | null;
2792
+ accepted_at?: string | null | undefined;
2793
+ progress?: {
2794
+ current: number;
2795
+ total: number;
2796
+ percentage: number;
2797
+ } | undefined;
2798
+ progress_percentage?: number | undefined;
2799
+ category?: string | undefined;
2800
+ }[]>;
2801
+ completedQuests: import("vue").ComputedRef<{
2802
+ id: string;
2803
+ name?: string | undefined;
2804
+ title?: string | undefined;
2805
+ description: string;
2806
+ type: "daily" | "weekly" | "monthly" | "special" | "challenge";
2807
+ objectives: {
2808
+ id: string;
2809
+ quest_id?: string | undefined;
2810
+ description: string;
2811
+ type: string;
2812
+ target: number;
2813
+ target_value?: number | undefined;
2814
+ current: number;
2815
+ current_value?: number | undefined;
2816
+ is_completed?: boolean | undefined;
2817
+ completed?: boolean | undefined;
2818
+ bonus_points?: number | undefined;
2819
+ unit?: string | undefined;
2820
+ }[];
2821
+ rewards?: {
2822
+ type: "points" | "badge" | "privilege" | "item";
2823
+ value: number | string;
2824
+ description: string;
2825
+ }[] | undefined;
2826
+ reward_points: number;
2827
+ status?: "available" | "in_progress" | "completed" | "expired" | undefined;
2828
+ is_active?: boolean | undefined;
2829
+ starts_at?: string | undefined;
2830
+ expires_at: string | null;
2831
+ completed_at: string | null;
2832
+ accepted_at?: string | null | undefined;
2833
+ progress?: {
2834
+ current: number;
2835
+ total: number;
2836
+ percentage: number;
2837
+ } | undefined;
2838
+ progress_percentage?: number | undefined;
2839
+ category?: string | undefined;
2840
+ }[]>;
2841
+ rewardBalance: import("vue").ComputedRef<number>;
2842
+ currentXP: import("vue").ComputedRef<number>;
2843
+ currentLevel: import("vue").ComputedRef<number>;
2844
+ nextLevel: import("vue").ComputedRef<{
2845
+ level_number: number;
2846
+ name: string;
2847
+ badge_color: string;
2848
+ badge_icon: string;
2849
+ benefits: string[];
2850
+ min_points?: number | undefined;
2851
+ } | null | undefined>;
2852
+ levelProgress: import("vue").ComputedRef<number>;
2853
+ recentXPGain: import("vue").ComputedRef<number>;
2854
+ loadAchievements: (useCache?: boolean) => Promise<Achievement[]>;
2855
+ loadQuests: (useCache?: boolean) => Promise<Quest[]>;
2856
+ loadCompletedQuests: (useCache?: boolean) => Promise<Quest[]>;
2857
+ loadRewards: (useCache?: boolean) => Promise<Reward[]>;
2858
+ loadLeaderboard: (period?: LeaderboardPeriod, limit?: number) => Promise<LeaderboardEntry[]>;
2859
+ loadUserStats: (useCache?: boolean) => Promise<UserStats>;
2860
+ loadAchievementById: (achievementId: string) => Promise<Achievement>;
2861
+ setQuestFilter: (nextFilter: string) => void;
2862
+ getAchievementShareCard: (achievementId: string) => Promise<AchievementShareCard>;
2863
+ fetchAchievementShareCardAsset: (achievementId: string) => Promise<string>;
2864
+ claimAchievement: (achievementId: string) => Promise<void>;
2865
+ acceptQuest: (questId: string) => Promise<void>;
2866
+ completeQuest: (questId: string) => Promise<void>;
2867
+ abandonQuest: (questId: string) => Promise<void>;
2868
+ redeemReward: (rewardId: string) => Promise<void>;
2869
+ subscribeToGamificationUpdates: () => void;
2870
+ unsubscribeFromGamificationUpdates: () => void;
2871
+ clearLastAchievementUnlockedEvent: () => void;
2872
+ loadAllData: () => Promise<void>;
2873
+ $reset: () => void;
2874
+ }, "$reset" | "loadAchievements" | "loadQuests" | "loadCompletedQuests" | "loadRewards" | "loadLeaderboard" | "loadUserStats" | "loadAchievementById" | "setQuestFilter" | "getAchievementShareCard" | "fetchAchievementShareCardAsset" | "claimAchievement" | "acceptQuest" | "completeQuest" | "abandonQuest" | "redeemReward" | "subscribeToGamificationUpdates" | "unsubscribeFromGamificationUpdates" | "clearLastAchievementUnlockedEvent" | "loadAllData">>;
2875
+ //# sourceMappingURL=gamification.d.ts.map