@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.
- package/CHANGELOG.md +14 -0
- package/dist/QwikCardApp.d.ts.map +1 -1
- package/dist/QwikCardApp.js +26 -24
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +33 -2
- package/dist/web/widgetAssets.d.ts +2 -2
- package/dist/web/widgetAssets.d.ts.map +1 -1
- package/dist/web/widgetAssets.js +2 -2
- package/dist/web/widgetTypes.d.ts +11 -9
- package/dist/web/widgetTypes.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/QwikCardApp.tsx +27 -26
- package/src/api/client.ts +49 -5
- package/src/web/widgetAssets.ts +2 -4
- package/src/web/widgetTypes.ts +11 -9
|
@@ -56,17 +56,19 @@ export interface WidgetNotification {
|
|
|
56
56
|
timestamp?: number;
|
|
57
57
|
read?: boolean;
|
|
58
58
|
}
|
|
59
|
-
export type
|
|
60
|
-
export type
|
|
61
|
-
export interface
|
|
62
|
-
|
|
63
|
-
type:
|
|
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
|
|
68
|
-
endDate
|
|
69
|
-
status:
|
|
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
|
-
|
|
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":"AAAA,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAE/C,MAAM,MAAM,mBAAmB,GAC3B;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,oBAAoB,CAAC;CAChC,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,mBAAmB,CAAC;CAC3B,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"widgetTypes.d.ts","sourceRoot":"","sources":["../../src/web/widgetTypes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/QwikCardApp.tsx
CHANGED
|
@@ -94,34 +94,35 @@ function AppContent({ leaderboardId }: { leaderboardId?: string }) {
|
|
|
94
94
|
earnedDelta: 0,
|
|
95
95
|
qwikCoins,
|
|
96
96
|
},
|
|
97
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
target
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
316
|
-
|
|
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:
|
|
319
|
-
total
|
|
362
|
+
entries: normalizedEntries,
|
|
363
|
+
total,
|
|
320
364
|
};
|
|
321
365
|
}
|
|
322
366
|
|