@playbasis-ai/qwikcard-sdk 2.3.17 → 2.3.20

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.
@@ -56,17 +56,19 @@ export interface WidgetNotification {
56
56
  timestamp?: number;
57
57
  read?: boolean;
58
58
  }
59
- export type WidgetGoalType = 'financial' | 'habit' | 'performance';
60
- export type WidgetGoalStatus = 'on_track' | 'at_risk' | 'completed';
61
- export interface WidgetGoal {
62
- goalId: string;
63
- type: WidgetGoalType;
59
+ export type WidgetQuestType = 'financial' | 'habit' | 'performance' | 'mission';
60
+ export type WidgetQuestStatus = 'active' | 'completed' | 'available' | 'joined';
61
+ export interface WidgetQuest {
62
+ questId: string;
63
+ type: WidgetQuestType;
64
+ title: string;
65
+ description?: string;
64
66
  target: number;
65
67
  current: number;
66
68
  progressPct: number;
67
- startDate: string;
68
- endDate: string;
69
- status: WidgetGoalStatus;
69
+ startDate?: string;
70
+ endDate?: string;
71
+ status: WidgetQuestStatus;
70
72
  rewards?: {
71
73
  xp?: number;
72
74
  badges?: string[];
@@ -115,7 +117,7 @@ export interface WidgetBootstrapData {
115
117
  tenantId: string;
116
118
  user: WidgetUserState;
117
119
  wallet: WidgetWallet | null;
118
- goals: WidgetGoal[];
120
+ quests: WidgetQuest[];
119
121
  activities: WidgetActivityDay[];
120
122
  transactions?: WidgetTransaction[];
121
123
  collections?: WidgetCollectionItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"widgetTypes.d.ts","sourceRoot":"","sources":["../../src/web/widgetTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widgetTypes.d.ts","sourceRoot":"","sources":["../../src/web/widgetTypes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playbasis-ai/qwikcard-sdk",
3
- "version": "2.3.17",
3
+ "version": "2.3.20",
4
4
  "description": "Playbasis SDK for QwikCard College Rewards - React Native gamification integration",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -94,34 +94,35 @@ function AppContent({ leaderboardId }: { leaderboardId?: string }) {
94
94
  earnedDelta: 0,
95
95
  qwikCoins,
96
96
  },
97
- goals: (() => {
97
+ quests: (() => {
98
98
  const quests = playerQuests.length > 0 ? playerQuests : questCatalog;
99
99
  const nowIso = new Date().toISOString().slice(0, 10);
100
- return quests.map((q) => ({
101
- goalId: q.id,
102
- type: 'financial',
103
- target: q.target ?? 1,
104
- current: q.progress ?? 0,
105
- progressPct:
106
- q.target && q.target > 0
107
- ? Math.round(((q.progress ?? 0) / q.target) * 100)
108
- : 0,
109
- startDate: nowIso,
110
- endDate: q.expiresAt ?? new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(),
111
- status:
112
- q.status === 'completed'
113
- ? 'completed'
114
- : q.status === 'expired'
115
- ? 'at_risk'
116
- : 'on_track',
117
- rewards: {
118
- xp: q.rewards?.find((r) => r.type === 'points')?.amount || 100,
119
- badges: (q.rewards
120
- ?.filter((r) => r.type === 'badge')
121
- .map((r) => r.badgeId)
122
- .filter(Boolean) || []) as string[],
123
- },
124
- }));
100
+ return quests.map((q) => {
101
+ const target = q.target ?? 1;
102
+ const current = q.progress ?? 0;
103
+ const progressPct = target > 0 ? Math.round((current / target) * 100) : 0;
104
+ const status = q.status === 'completed' ? 'completed' : 'available';
105
+
106
+ return {
107
+ questId: q.id,
108
+ title: q.name,
109
+ description: q.description,
110
+ type: 'mission',
111
+ target,
112
+ current,
113
+ progressPct,
114
+ startDate: nowIso,
115
+ endDate: q.expiresAt,
116
+ status,
117
+ rewards: {
118
+ xp: q.rewards?.find((r) => r.type === 'points')?.amount || 100,
119
+ badges: (q.rewards
120
+ ?.filter((r) => r.type === 'badge')
121
+ .map((r) => r.badgeId)
122
+ .filter(Boolean) || []) as string[],
123
+ },
124
+ };
125
+ });
125
126
  })(),
126
127
  badges: allBadges.map((b) => ({
127
128
  id: b.id,
package/src/api/client.ts CHANGED
@@ -311,12 +311,56 @@ export class PlaybasisClient {
311
311
  if (options?.limit) params.set('limit', String(options.limit));
312
312
  if (options?.cursor) params.set('cursor', options.cursor);
313
313
 
314
- const data = await this.request<{
315
- leaderboard?: { entries?: LeaderboardEntry[]; total?: number };
316
- }>('GET', `/leaderboards/${encodeURIComponent(leaderboardId)}?${params}`);
314
+ const data = await this.request<
315
+ | { entries?: LeaderboardEntry[]; total?: number }
316
+ | { items?: LeaderboardEntry[]; total?: number }
317
+ | { leaderboard?: { entries?: LeaderboardEntry[]; total?: number } }
318
+ >('GET', `/leaderboards/${encodeURIComponent(leaderboardId)}?${params}`);
319
+ const leaderboardData = data as { leaderboard?: { entries?: LeaderboardEntry[]; total?: number } };
320
+ const entries =
321
+ 'entries' in data
322
+ ? data.entries
323
+ : 'items' in data
324
+ ? data.items
325
+ : leaderboardData.leaderboard?.entries;
326
+ const total =
327
+ 'total' in data && typeof data.total === 'number'
328
+ ? data.total
329
+ : leaderboardData.leaderboard?.total ?? entries?.length ?? 0;
330
+
331
+ const normalizedEntries = (entries || []).map((entry, index) => {
332
+ const raw = entry as LeaderboardEntry & {
333
+ balance?: number;
334
+ points?: number;
335
+ value?: number;
336
+ name?: string;
337
+ id?: string;
338
+ };
339
+ const score =
340
+ typeof raw.score === 'number'
341
+ ? raw.score
342
+ : typeof raw.balance === 'number'
343
+ ? raw.balance
344
+ : typeof raw.points === 'number'
345
+ ? raw.points
346
+ : typeof raw.value === 'number'
347
+ ? raw.value
348
+ : 0;
349
+ const rank = typeof raw.rank === 'number' ? raw.rank : index + 1;
350
+ const displayName = raw.displayName || raw.name || raw.playerId || 'Player';
351
+ const playerId = raw.playerId || raw.id || displayName;
352
+
353
+ return {
354
+ playerId,
355
+ displayName,
356
+ rank,
357
+ score,
358
+ metadata: raw.metadata,
359
+ };
360
+ });
317
361
  return {
318
- entries: data.leaderboard?.entries || [],
319
- total: data.leaderboard?.total || 0,
362
+ entries: normalizedEntries,
363
+ total,
320
364
  };
321
365
  }
322
366