@playcademy/sdk 0.2.2 → 0.2.3
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/dist/index.d.ts +300 -339
- package/dist/index.js +186 -29
- package/dist/internal.d.ts +2989 -2224
- package/dist/internal.js +218 -64
- package/dist/server.d.ts +298 -39
- package/dist/server.js +104 -8
- package/dist/types.d.ts +2134 -563
- package/package.json +4 -2
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { InferSelectModel } from 'drizzle-orm';
|
|
1
2
|
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
3
|
+
import * as drizzle_zod from 'drizzle-zod';
|
|
2
4
|
import { z } from 'zod';
|
|
3
|
-
import * as _playcademy_timeback_types from '@playcademy/timeback/types';
|
|
4
|
-
import { CourseConfig, OrganizationConfig, ComponentConfig, ResourceConfig, ComponentResourceConfig } from '@playcademy/timeback/types';
|
|
5
5
|
import { AUTH_PROVIDER_IDS } from '@playcademy/constants';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -19,7 +19,659 @@ declare function parseOAuthState(state: string): {
|
|
|
19
19
|
data?: Record<string, string>;
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Game Types
|
|
24
|
+
*
|
|
25
|
+
* Literal types and API DTOs. Database row types are in @playcademy/data/types.
|
|
26
|
+
*
|
|
27
|
+
* @module types/game
|
|
28
|
+
*/
|
|
29
|
+
type GameType = 'hosted' | 'external';
|
|
30
|
+
type GamePlatform = 'web' | 'godot' | 'unity' | (string & {});
|
|
31
|
+
/**
|
|
32
|
+
* Game manifest file format (manifest.json).
|
|
33
|
+
* Note: createdAt is a string here because it's parsed from JSON file.
|
|
34
|
+
*/
|
|
35
|
+
interface ManifestV1 {
|
|
36
|
+
version: string;
|
|
37
|
+
platform: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
}
|
|
40
|
+
interface DomainValidationRecords {
|
|
41
|
+
ownership?: {
|
|
42
|
+
name?: string;
|
|
43
|
+
value?: string;
|
|
44
|
+
type?: string;
|
|
45
|
+
};
|
|
46
|
+
ssl?: Array<{
|
|
47
|
+
txt_name?: string;
|
|
48
|
+
txt_value?: string;
|
|
49
|
+
}>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Permitted HTTP verbs */
|
|
53
|
+
type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* User Types
|
|
57
|
+
*
|
|
58
|
+
* Enums, DTOs and API response types. Database row types are in @playcademy/data/types.
|
|
59
|
+
*
|
|
60
|
+
* @module types/user
|
|
61
|
+
*/
|
|
62
|
+
type UserRoleEnumType = 'admin' | 'player' | 'developer';
|
|
63
|
+
type DeveloperStatusEnumType = 'none' | 'pending' | 'approved';
|
|
64
|
+
type DeveloperStatusValue = DeveloperStatusEnumType;
|
|
65
|
+
type TimebackUserRole = 'administrator' | 'aide' | 'guardian' | 'parent' | 'proctor' | 'relative' | 'student' | 'teacher';
|
|
66
|
+
type TimebackOrgType = 'department' | 'school' | 'district' | 'local' | 'state' | 'national';
|
|
67
|
+
interface UserEnrollment {
|
|
68
|
+
gameId?: string;
|
|
69
|
+
courseId: string;
|
|
70
|
+
grade: number;
|
|
71
|
+
subject: string;
|
|
72
|
+
orgId?: string;
|
|
73
|
+
}
|
|
74
|
+
interface UserOrganization {
|
|
75
|
+
id: string;
|
|
76
|
+
name: string | null;
|
|
77
|
+
type: TimebackOrgType | string;
|
|
78
|
+
isPrimary: boolean;
|
|
79
|
+
}
|
|
80
|
+
interface TimebackStudentProfile {
|
|
81
|
+
role: TimebackUserRole;
|
|
82
|
+
organizations: UserOrganization[];
|
|
83
|
+
}
|
|
84
|
+
interface UserTimebackData extends TimebackStudentProfile {
|
|
85
|
+
id: string;
|
|
86
|
+
enrollments: UserEnrollment[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* OpenID Connect UserInfo claims (NOT a database row).
|
|
90
|
+
*/
|
|
91
|
+
interface UserInfo {
|
|
92
|
+
sub: string;
|
|
93
|
+
email: string;
|
|
94
|
+
name: string | null;
|
|
95
|
+
email_verified?: boolean;
|
|
96
|
+
given_name?: string;
|
|
97
|
+
family_name?: string;
|
|
98
|
+
issuer?: string;
|
|
99
|
+
lti_roles?: unknown;
|
|
100
|
+
lti_context?: unknown;
|
|
101
|
+
lti_resource_link?: unknown;
|
|
102
|
+
timeback_id?: string;
|
|
103
|
+
}
|
|
104
|
+
interface DeveloperStatusResponse {
|
|
105
|
+
status: DeveloperStatusEnumType;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Authenticated user for API responses.
|
|
109
|
+
* Differs from UserRow: omits timebackId, adds hasTimebackAccount and timeback.
|
|
110
|
+
*/
|
|
111
|
+
interface AuthenticatedUser {
|
|
112
|
+
id: string;
|
|
113
|
+
email: string;
|
|
114
|
+
emailVerified: boolean;
|
|
115
|
+
name: string | null;
|
|
116
|
+
image: string | null;
|
|
117
|
+
username: string | null;
|
|
118
|
+
role: UserRoleEnumType;
|
|
119
|
+
developerStatus: DeveloperStatusEnumType;
|
|
120
|
+
characterCreated: boolean;
|
|
121
|
+
createdAt: Date;
|
|
122
|
+
updatedAt: Date;
|
|
123
|
+
hasTimebackAccount: boolean;
|
|
124
|
+
timeback?: UserTimebackData;
|
|
125
|
+
}
|
|
126
|
+
interface GameUser {
|
|
127
|
+
id: string;
|
|
128
|
+
name: string | null;
|
|
129
|
+
role: UserRoleEnumType;
|
|
130
|
+
username: string | null;
|
|
131
|
+
email: string | null;
|
|
132
|
+
timeback?: UserTimebackData;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Leaderboard Types
|
|
137
|
+
*
|
|
138
|
+
* @module types/leaderboard
|
|
139
|
+
*/
|
|
140
|
+
type LeaderboardTimeframe = 'all_time' | 'monthly' | 'weekly' | 'daily';
|
|
141
|
+
interface LeaderboardOptions {
|
|
142
|
+
timeframe?: LeaderboardTimeframe;
|
|
143
|
+
limit?: number;
|
|
144
|
+
offset?: number;
|
|
145
|
+
gameId?: string;
|
|
146
|
+
}
|
|
147
|
+
interface LeaderboardEntry {
|
|
148
|
+
rank: number;
|
|
149
|
+
userId: string;
|
|
150
|
+
username: string;
|
|
151
|
+
userImage?: string | null;
|
|
152
|
+
score: number;
|
|
153
|
+
achievedAt: Date;
|
|
154
|
+
metadata?: Record<string, unknown>;
|
|
155
|
+
gameId?: string;
|
|
156
|
+
gameTitle?: string;
|
|
157
|
+
gameSlug?: string;
|
|
158
|
+
}
|
|
159
|
+
interface UserRank {
|
|
160
|
+
rank: number;
|
|
161
|
+
totalPlayers: number;
|
|
162
|
+
score: number;
|
|
163
|
+
percentile: number;
|
|
164
|
+
}
|
|
165
|
+
interface UserRankResponse {
|
|
166
|
+
rank: number;
|
|
167
|
+
score: number;
|
|
168
|
+
userId: string;
|
|
169
|
+
}
|
|
170
|
+
interface UserScore {
|
|
171
|
+
id: string;
|
|
172
|
+
score: number;
|
|
173
|
+
achievedAt: Date;
|
|
174
|
+
metadata?: Record<string, unknown>;
|
|
175
|
+
gameId: string;
|
|
176
|
+
gameTitle: string;
|
|
177
|
+
gameSlug: string;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Leaderboard entry with required game context.
|
|
181
|
+
* Used when fetching leaderboards for a specific game.
|
|
182
|
+
*/
|
|
183
|
+
interface GameLeaderboardEntry {
|
|
184
|
+
rank: number;
|
|
185
|
+
userId: string;
|
|
186
|
+
username: string;
|
|
187
|
+
userImage?: string | null;
|
|
188
|
+
score: number;
|
|
189
|
+
achievedAt: Date;
|
|
190
|
+
metadata?: Record<string, unknown>;
|
|
191
|
+
gameId: string;
|
|
192
|
+
gameTitle: string;
|
|
193
|
+
gameSlug: string;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Achievement Types
|
|
198
|
+
*
|
|
199
|
+
* @module types/achievement
|
|
200
|
+
*/
|
|
201
|
+
type AchievementScopeType = 'daily' | 'weekly' | 'monthly' | 'yearly' | 'game' | 'global' | 'map' | 'level' | 'event';
|
|
202
|
+
declare enum AchievementCompletionType {
|
|
203
|
+
TIME_PLAYED_SESSION = "time_played_session",
|
|
204
|
+
INTERACTION = "interaction",
|
|
205
|
+
LEADERBOARD_RANK = "leaderboard_rank",
|
|
206
|
+
FIRST_SCORE = "first_score",
|
|
207
|
+
PERSONAL_BEST = "personal_best"
|
|
208
|
+
}
|
|
209
|
+
interface AchievementCurrent {
|
|
210
|
+
id: string;
|
|
211
|
+
title: string;
|
|
212
|
+
description?: string | null;
|
|
213
|
+
scope: AchievementScopeType;
|
|
214
|
+
rewardCredits: number;
|
|
215
|
+
limit: number;
|
|
216
|
+
completionType: string;
|
|
217
|
+
completionConfig: unknown;
|
|
218
|
+
target: unknown;
|
|
219
|
+
active: boolean;
|
|
220
|
+
createdAt?: Date | null;
|
|
221
|
+
updatedAt?: Date | null;
|
|
222
|
+
status: 'available' | 'completed';
|
|
223
|
+
scopeKey: string;
|
|
224
|
+
windowStart: string;
|
|
225
|
+
windowEnd: string;
|
|
226
|
+
}
|
|
227
|
+
interface AchievementWithStatus {
|
|
228
|
+
id: string;
|
|
229
|
+
title: string;
|
|
230
|
+
description: string | null;
|
|
231
|
+
scope: AchievementScopeType;
|
|
232
|
+
rewardCredits: number;
|
|
233
|
+
limit: number;
|
|
234
|
+
completionType: string;
|
|
235
|
+
completionConfig: unknown;
|
|
236
|
+
target: unknown;
|
|
237
|
+
active: boolean;
|
|
238
|
+
createdAt: Date | null;
|
|
239
|
+
updatedAt: Date | null;
|
|
240
|
+
status: 'available' | 'completed';
|
|
241
|
+
scopeKey: string;
|
|
242
|
+
windowStart?: string;
|
|
243
|
+
windowEnd?: string;
|
|
244
|
+
}
|
|
245
|
+
interface AchievementHistoryEntry {
|
|
246
|
+
achievementId: string;
|
|
247
|
+
title: string;
|
|
248
|
+
rewardCredits: number;
|
|
249
|
+
createdAt: Date;
|
|
250
|
+
scopeKey: string;
|
|
251
|
+
}
|
|
252
|
+
interface AchievementProgressResponse {
|
|
253
|
+
achievementId: string;
|
|
254
|
+
status: 'completed' | 'already_completed';
|
|
255
|
+
rewardCredits: number;
|
|
256
|
+
scopeKey: string;
|
|
257
|
+
createdAt: Date;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* TimeBack Enums & Literal Types
|
|
262
|
+
*
|
|
263
|
+
* Basic type definitions used throughout the TimeBack integration.
|
|
264
|
+
*
|
|
265
|
+
* @module types/timeback/types
|
|
266
|
+
*/
|
|
267
|
+
/**
|
|
268
|
+
* Valid TimeBack subject values for course configuration.
|
|
269
|
+
* These are the supported subject values for OneRoster courses.
|
|
270
|
+
*/
|
|
271
|
+
type TimebackSubject = 'Reading' | 'Language' | 'Vocabulary' | 'Social Studies' | 'Writing' | 'Science' | 'FastMath' | 'Math' | 'None';
|
|
272
|
+
/**
|
|
273
|
+
* Grade levels per AE OneRoster GradeEnum.
|
|
274
|
+
* -1 = Pre-K, 0 = Kindergarten, 1-12 = Grades 1-12, 13 = AP
|
|
275
|
+
*/
|
|
276
|
+
type TimebackGrade = -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13;
|
|
277
|
+
/**
|
|
278
|
+
* Valid Caliper subject values.
|
|
279
|
+
* Matches OneRoster subjects, with "None" as a Caliper-specific fallback.
|
|
280
|
+
*/
|
|
281
|
+
type CaliperSubject = 'Reading' | 'Language' | 'Vocabulary' | 'Social Studies' | 'Writing' | 'Science' | 'FastMath' | 'Math' | 'None';
|
|
282
|
+
/**
|
|
283
|
+
* OneRoster organization types.
|
|
284
|
+
*/
|
|
285
|
+
type OrganizationType = 'department' | 'school' | 'district' | 'local' | 'state' | 'national';
|
|
286
|
+
/**
|
|
287
|
+
* Lesson types for PowerPath integration.
|
|
288
|
+
*/
|
|
289
|
+
type LessonType = 'powerpath-100' | 'quiz' | 'test-out' | 'placement' | 'unit-test' | 'alpha-read-article' | null;
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* TimeBack Configuration Types
|
|
293
|
+
*
|
|
294
|
+
* Configuration interfaces for Organization, Course, Component,
|
|
295
|
+
* Resource, and complete TimeBack setup.
|
|
296
|
+
*
|
|
297
|
+
* @module types/timeback/config
|
|
298
|
+
*/
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Organization configuration for TimeBack (user input - optionals allowed)
|
|
302
|
+
*/
|
|
303
|
+
interface OrganizationConfig {
|
|
304
|
+
/** Display name for your organization */
|
|
305
|
+
name?: string;
|
|
306
|
+
/** Organization type */
|
|
307
|
+
type?: OrganizationType;
|
|
308
|
+
/** Unique identifier (defaults to Playcademy's org) */
|
|
309
|
+
identifier?: string;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Course goals for daily student targets
|
|
313
|
+
*/
|
|
314
|
+
interface CourseGoals {
|
|
315
|
+
/** Target XP students should earn per day */
|
|
316
|
+
dailyXp?: number;
|
|
317
|
+
/** Target lessons per day */
|
|
318
|
+
dailyLessons?: number;
|
|
319
|
+
/** Target active minutes per day */
|
|
320
|
+
dailyActiveMinutes?: number;
|
|
321
|
+
/** Target accuracy percentage */
|
|
322
|
+
dailyAccuracy?: number;
|
|
323
|
+
/** Target mastered units per day */
|
|
324
|
+
dailyMasteredUnits?: number;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Course metrics and totals
|
|
328
|
+
*/
|
|
329
|
+
interface CourseMetrics {
|
|
330
|
+
/** Total XP available in the course */
|
|
331
|
+
totalXp?: number;
|
|
332
|
+
/** Total lessons/activities in the course */
|
|
333
|
+
totalLessons?: number;
|
|
334
|
+
/** Total number of grade levels covered by this course */
|
|
335
|
+
totalGrades?: number;
|
|
336
|
+
/** The type of course (e.g. 'optional', 'hole-filling', 'base') */
|
|
337
|
+
courseType?: 'base' | 'hole-filling' | 'optional' | 'Base' | 'Hole-Filling' | 'Optional';
|
|
338
|
+
/** Indicates whether the course is supplemental content */
|
|
339
|
+
isSupplemental?: boolean;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Complete course metadata structure
|
|
343
|
+
*/
|
|
344
|
+
interface CourseMetadata {
|
|
345
|
+
/** Define the type of course and priority for the student */
|
|
346
|
+
courseType?: 'base' | 'hole-filling' | 'optional';
|
|
347
|
+
/** Boolean value to determine if a course is supplemental to a base course */
|
|
348
|
+
isSupplemental?: boolean;
|
|
349
|
+
/** Boolean value to determine if a course is custom to an individual student */
|
|
350
|
+
isCustom?: boolean;
|
|
351
|
+
/** Signals whether a course is in production with students */
|
|
352
|
+
publishStatus?: 'draft' | 'testing' | 'published' | 'deactivated';
|
|
353
|
+
/** Who to contact when issues reported with questions */
|
|
354
|
+
contactEmail?: string;
|
|
355
|
+
/** Primary app identifier */
|
|
356
|
+
primaryApp?: string;
|
|
357
|
+
/** Learning goals for students */
|
|
358
|
+
goals?: CourseGoals;
|
|
359
|
+
/** Course metrics and totals */
|
|
360
|
+
metrics?: CourseMetrics;
|
|
361
|
+
/** Vendor-specific metadata (e.g., AlphaLearn) */
|
|
362
|
+
[key: string]: unknown;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Course configuration for TimeBack (user input)
|
|
366
|
+
*/
|
|
367
|
+
interface CourseConfig {
|
|
368
|
+
/** Allocated OneRoster sourcedId (set after creation) */
|
|
369
|
+
sourcedId?: string;
|
|
370
|
+
/** Course title (defaults to game name) */
|
|
371
|
+
title?: string;
|
|
372
|
+
/** Subjects (REQUIRED for TimeBack integration) */
|
|
373
|
+
subjects: TimebackSubject[];
|
|
374
|
+
/** Used when recording progress/sessions if not explicitly specified per event. */
|
|
375
|
+
defaultSubject?: TimebackSubject;
|
|
376
|
+
/** Grade levels (REQUIRED for TimeBack integration) */
|
|
377
|
+
grades: TimebackGrade[];
|
|
378
|
+
/** Short course code (optional, auto-generated) */
|
|
379
|
+
courseCode?: string;
|
|
380
|
+
/** Course level (auto-derived from grades) */
|
|
381
|
+
level?: 'Elementary' | 'Middle' | 'High' | 'AP' | string;
|
|
382
|
+
/** Grading system */
|
|
383
|
+
gradingScheme?: 'STANDARD';
|
|
384
|
+
/** Total XP available in this course (REQUIRED before setup) */
|
|
385
|
+
totalXp?: number | null;
|
|
386
|
+
/** Total masterable units in this course (REQUIRED before setup) */
|
|
387
|
+
masterableUnits?: number | null;
|
|
388
|
+
/** Custom Playcademy metadata */
|
|
389
|
+
metadata?: CourseMetadata;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Component configuration for TimeBack (user input)
|
|
393
|
+
*/
|
|
394
|
+
interface ComponentConfig {
|
|
395
|
+
/** Component title (defaults to "{course.title} Activities") */
|
|
396
|
+
title?: string;
|
|
397
|
+
/** Display order */
|
|
398
|
+
sortOrder?: number;
|
|
399
|
+
/** Required prior components */
|
|
400
|
+
prerequisites?: string[];
|
|
401
|
+
/** How prerequisites work */
|
|
402
|
+
prerequisiteCriteria?: 'ALL' | 'ANY';
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Playcademy-specific resource extensions
|
|
406
|
+
*/
|
|
407
|
+
interface PlaycademyResourceMetadata {
|
|
408
|
+
/** Mastery configuration for tracking discrete learning units */
|
|
409
|
+
mastery?: {
|
|
410
|
+
/** Total number of masterable units in the resource */
|
|
411
|
+
masterableUnits: number;
|
|
412
|
+
/** Type of mastery unit for semantic clarity */
|
|
413
|
+
unitType?: 'level' | 'rank' | 'skill' | 'module';
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Resource configuration for TimeBack (user input)
|
|
418
|
+
*/
|
|
419
|
+
interface ResourceConfig {
|
|
420
|
+
/** Resource title (defaults to "{course.title} Game") */
|
|
421
|
+
title?: string;
|
|
422
|
+
/** Internal resource ID (auto-generated from package.json) */
|
|
423
|
+
vendorResourceId?: string;
|
|
424
|
+
/** Vendor identifier */
|
|
425
|
+
vendorId?: string;
|
|
426
|
+
/** Application identifier */
|
|
427
|
+
applicationId?: string;
|
|
428
|
+
/** Resource roles */
|
|
429
|
+
roles?: ('primary' | 'secondary')[];
|
|
430
|
+
/** Resource importance */
|
|
431
|
+
importance?: 'primary' | 'secondary';
|
|
432
|
+
/** Interactive resource metadata */
|
|
433
|
+
metadata?: {
|
|
434
|
+
/** Resource type */
|
|
435
|
+
type?: 'interactive';
|
|
436
|
+
/** Launch URL (defaults to Playcademy game URL) */
|
|
437
|
+
launchUrl?: string;
|
|
438
|
+
/** Platform name */
|
|
439
|
+
toolProvider?: string;
|
|
440
|
+
/** Teaching method */
|
|
441
|
+
instructionalMethod?: 'exploratory' | 'direct-instruction';
|
|
442
|
+
/** Subject area */
|
|
443
|
+
subject?: TimebackSubject;
|
|
444
|
+
/** Target grades */
|
|
445
|
+
grades?: TimebackGrade[];
|
|
446
|
+
/** Content language */
|
|
447
|
+
language?: string;
|
|
448
|
+
/** Base XP for completion */
|
|
449
|
+
xp?: number;
|
|
450
|
+
/** Playcademy-specific extensions */
|
|
451
|
+
playcademy?: PlaycademyResourceMetadata;
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Component Resource link configuration (user input)
|
|
456
|
+
*/
|
|
457
|
+
interface ComponentResourceConfig {
|
|
458
|
+
/** Link title (defaults to "{resource.title} Activity") */
|
|
459
|
+
title?: string;
|
|
460
|
+
/** Display order */
|
|
461
|
+
sortOrder?: number;
|
|
462
|
+
/** Lesson type for PowerPath integration */
|
|
463
|
+
lessonType?: LessonType;
|
|
464
|
+
}
|
|
465
|
+
interface TimebackCourseConfig {
|
|
466
|
+
subject: string;
|
|
467
|
+
grade: number;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* TimeBack Client SDK DTOs
|
|
472
|
+
*
|
|
473
|
+
* Data transfer objects for the TimeBack client SDK including
|
|
474
|
+
* progress tracking, session management, and activity completion.
|
|
475
|
+
*
|
|
476
|
+
* Note: TimebackClientConfig lives in @playcademy/timeback as it's
|
|
477
|
+
* SDK configuration, not a DTO.
|
|
478
|
+
*
|
|
479
|
+
* @module types/timeback/client
|
|
480
|
+
*/
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Activity data for ending an activity
|
|
484
|
+
*/
|
|
485
|
+
interface ActivityData {
|
|
486
|
+
/** Unique activity identifier (required) */
|
|
487
|
+
activityId: string;
|
|
488
|
+
/** Grade level for this activity (required for multi-grade course routing) */
|
|
489
|
+
grade: number;
|
|
490
|
+
/** Subject area (required for multi-grade course routing) */
|
|
491
|
+
subject: CaliperSubject;
|
|
492
|
+
/** Activity display name (optional) */
|
|
493
|
+
activityName?: string;
|
|
494
|
+
/** Course identifier (auto-filled from config if not provided) */
|
|
495
|
+
courseId?: string;
|
|
496
|
+
/** Course display name (auto-filled from config if not provided) */
|
|
497
|
+
courseName?: string;
|
|
498
|
+
/** Student email address (optional) */
|
|
499
|
+
studentEmail?: string;
|
|
500
|
+
/** Application name for Caliper events (defaults to 'Game') */
|
|
501
|
+
appName?: string;
|
|
502
|
+
/** Sensor URL for Caliper events (defaults to baseUrl) */
|
|
503
|
+
sensorUrl?: string;
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Score data with optional XP override for ending an activity
|
|
507
|
+
*/
|
|
508
|
+
interface EndActivityScoreData {
|
|
509
|
+
/** Number of questions answered correctly */
|
|
510
|
+
correctQuestions: number;
|
|
511
|
+
/** Total number of questions */
|
|
512
|
+
totalQuestions: number;
|
|
513
|
+
/** Optional XP override - bypasses automatic XP calculation */
|
|
514
|
+
xpAwarded?: number;
|
|
515
|
+
/** Number of learning units mastered */
|
|
516
|
+
masteredUnits?: number;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* TimeBack API Request/Response Types
|
|
521
|
+
*
|
|
522
|
+
* Types for TimeBack API endpoints including XP tracking,
|
|
523
|
+
* setup, verification, and activity completion.
|
|
524
|
+
*
|
|
525
|
+
* @module types/timeback/api
|
|
526
|
+
*/
|
|
527
|
+
|
|
528
|
+
interface TodayXpResponse {
|
|
529
|
+
xp: number;
|
|
530
|
+
date: string;
|
|
531
|
+
}
|
|
532
|
+
interface TotalXpResponse {
|
|
533
|
+
totalXp: number;
|
|
534
|
+
}
|
|
535
|
+
interface XpHistoryResponse {
|
|
536
|
+
history: Array<{
|
|
537
|
+
date: string;
|
|
538
|
+
xp: number;
|
|
539
|
+
}>;
|
|
540
|
+
}
|
|
541
|
+
interface PopulateStudentResponse {
|
|
542
|
+
status: string;
|
|
543
|
+
message?: string;
|
|
544
|
+
}
|
|
545
|
+
interface GameTimebackIntegration {
|
|
546
|
+
id: string;
|
|
547
|
+
gameId: string;
|
|
548
|
+
courseId: string;
|
|
549
|
+
grade: number;
|
|
550
|
+
subject: string;
|
|
551
|
+
totalXp?: number | null;
|
|
552
|
+
lastVerifiedAt?: Date | null;
|
|
553
|
+
createdAt: Date;
|
|
554
|
+
updatedAt: Date;
|
|
555
|
+
}
|
|
556
|
+
interface EndActivityResponse {
|
|
557
|
+
status: 'ok';
|
|
558
|
+
courseId: string;
|
|
559
|
+
xpAwarded: number;
|
|
560
|
+
masteredUnits?: number;
|
|
561
|
+
pctCompleteApp?: number;
|
|
562
|
+
scoreStatus?: string;
|
|
563
|
+
inProgress?: string;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Inventory & Shop Types
|
|
568
|
+
*
|
|
569
|
+
* Literal types for inventory system. Database row types are in @playcademy/data/types.
|
|
570
|
+
*
|
|
571
|
+
* @module types/inventory
|
|
572
|
+
*/
|
|
573
|
+
/**
|
|
574
|
+
* Item categories available on the platform.
|
|
575
|
+
*/
|
|
576
|
+
type ItemType = 'currency' | 'badge' | 'trophy' | 'collectible' | 'consumable' | 'unlock' | 'upgrade' | 'accessory' | 'other';
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Map & Placement Types
|
|
580
|
+
*
|
|
581
|
+
* Literal types and JSON shapes for maps. Database row types are in @playcademy/data/types.
|
|
582
|
+
*
|
|
583
|
+
* @module types/map
|
|
584
|
+
*/
|
|
585
|
+
/**
|
|
586
|
+
* Allowed map interaction types.
|
|
587
|
+
*/
|
|
588
|
+
type InteractionType = 'game_entry' | 'game_registry' | 'info' | 'teleport' | 'door_in' | 'door_out' | 'npc_interaction' | 'quest_trigger';
|
|
589
|
+
/**
|
|
590
|
+
* Metadata for interactive map elements.
|
|
591
|
+
*/
|
|
592
|
+
interface MapElementMetadata {
|
|
593
|
+
description?: string;
|
|
594
|
+
title?: string;
|
|
595
|
+
targetMapIdentifier?: string;
|
|
596
|
+
targetSpawnTileX?: number;
|
|
597
|
+
targetSpawnTileY?: number;
|
|
598
|
+
sourceTiledObjects?: Array<Record<string, unknown>>;
|
|
599
|
+
[key: string]: unknown;
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Metadata describing how an item should be placed on the map.
|
|
603
|
+
*/
|
|
604
|
+
interface PlaceableItemMetadata {
|
|
605
|
+
tilesWide?: number;
|
|
606
|
+
tilesHigh?: number;
|
|
607
|
+
flippable?: boolean;
|
|
608
|
+
[key: string]: unknown;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Simplified map data for API responses.
|
|
612
|
+
*/
|
|
613
|
+
interface MapData {
|
|
614
|
+
id: string;
|
|
615
|
+
identifier: string;
|
|
616
|
+
displayName: string;
|
|
617
|
+
description?: string | null;
|
|
618
|
+
metadata?: Record<string, unknown> | null;
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Input for creating a map object.
|
|
622
|
+
*/
|
|
623
|
+
interface CreateMapObjectData {
|
|
624
|
+
itemId: string;
|
|
625
|
+
worldX: number;
|
|
626
|
+
worldY: number;
|
|
627
|
+
width?: number;
|
|
628
|
+
height?: number;
|
|
629
|
+
rotation?: number;
|
|
630
|
+
scale?: number;
|
|
631
|
+
metadata?: Record<string, unknown>;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* Character & Avatar Types
|
|
636
|
+
*
|
|
637
|
+
* Literal types for character system. Database row types are in @playcademy/data/types.
|
|
638
|
+
*
|
|
639
|
+
* @module types/character
|
|
640
|
+
*/
|
|
641
|
+
/**
|
|
642
|
+
* Character component categories.
|
|
643
|
+
*/
|
|
644
|
+
type CharacterComponentType = 'body' | 'outfit' | 'hairstyle' | 'eyes' | 'accessory';
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* Notification Types
|
|
648
|
+
*
|
|
649
|
+
* @module types/notification
|
|
650
|
+
*/
|
|
651
|
+
|
|
652
|
+
declare enum NotificationType {
|
|
653
|
+
ACHIEVEMENT = "achievement",
|
|
654
|
+
SYSTEM = "system",
|
|
655
|
+
PROMO = "promo"
|
|
656
|
+
}
|
|
657
|
+
declare enum NotificationStatus {
|
|
658
|
+
PENDING = "pending",
|
|
659
|
+
DELIVERED = "delivered",
|
|
660
|
+
SEEN = "seen",
|
|
661
|
+
CLICKED = "clicked",
|
|
662
|
+
DISMISSED = "dismissed",
|
|
663
|
+
EXPIRED = "expired"
|
|
664
|
+
}
|
|
665
|
+
interface NotificationStats {
|
|
666
|
+
total: number;
|
|
667
|
+
delivered: number;
|
|
668
|
+
seen: number;
|
|
669
|
+
clicked: number;
|
|
670
|
+
dismissed: number;
|
|
671
|
+
expired: number;
|
|
672
|
+
clickThroughRate: number;
|
|
673
|
+
}
|
|
674
|
+
|
|
23
675
|
declare const users: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
24
676
|
name: "user";
|
|
25
677
|
schema: undefined;
|
|
@@ -148,7 +800,7 @@ declare const users: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
148
800
|
tableName: "user";
|
|
149
801
|
dataType: "string";
|
|
150
802
|
columnType: "PgEnumColumn";
|
|
151
|
-
data: "admin" | "
|
|
803
|
+
data: "admin" | "developer" | "player";
|
|
152
804
|
driverParam: string;
|
|
153
805
|
notNull: true;
|
|
154
806
|
hasDefault: true;
|
|
@@ -165,7 +817,7 @@ declare const users: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
165
817
|
tableName: "user";
|
|
166
818
|
dataType: "string";
|
|
167
819
|
columnType: "PgEnumColumn";
|
|
168
|
-
data: "
|
|
820
|
+
data: "approved" | "none" | "pending";
|
|
169
821
|
driverParam: string;
|
|
170
822
|
notNull: true;
|
|
171
823
|
hasDefault: true;
|
|
@@ -237,6 +889,23 @@ type GameMetadata = {
|
|
|
237
889
|
emoji?: string;
|
|
238
890
|
[key: string]: unknown;
|
|
239
891
|
};
|
|
892
|
+
/**
|
|
893
|
+
* DNS validation records for custom hostname
|
|
894
|
+
* Structure for the validationRecords JSON field in game_custom_hostnames table
|
|
895
|
+
*/
|
|
896
|
+
type CustomHostnameValidationRecords = {
|
|
897
|
+
/** TXT record for ownership verification */
|
|
898
|
+
ownership?: {
|
|
899
|
+
name?: string;
|
|
900
|
+
value?: string;
|
|
901
|
+
type?: string;
|
|
902
|
+
};
|
|
903
|
+
/** TXT records for SSL certificate validation */
|
|
904
|
+
ssl?: Array<{
|
|
905
|
+
txt_name?: string;
|
|
906
|
+
txt_value?: string;
|
|
907
|
+
}>;
|
|
908
|
+
};
|
|
240
909
|
declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
241
910
|
name: "games";
|
|
242
911
|
schema: undefined;
|
|
@@ -337,7 +1006,7 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
337
1006
|
tableName: "games";
|
|
338
1007
|
dataType: "string";
|
|
339
1008
|
columnType: "PgEnumColumn";
|
|
340
|
-
data: "
|
|
1009
|
+
data: "external" | "hosted";
|
|
341
1010
|
driverParam: string;
|
|
342
1011
|
notNull: true;
|
|
343
1012
|
hasDefault: true;
|
|
@@ -388,7 +1057,7 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
388
1057
|
tableName: "games";
|
|
389
1058
|
dataType: "string";
|
|
390
1059
|
columnType: "PgEnumColumn";
|
|
391
|
-
data: "
|
|
1060
|
+
data: "godot" | "unity" | "web";
|
|
392
1061
|
driverParam: string;
|
|
393
1062
|
notNull: true;
|
|
394
1063
|
hasDefault: true;
|
|
@@ -470,55 +1139,254 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
470
1139
|
identity: undefined;
|
|
471
1140
|
generated: undefined;
|
|
472
1141
|
}, {}, {}>;
|
|
473
|
-
};
|
|
474
|
-
dialect: "pg";
|
|
475
|
-
}>;
|
|
476
|
-
declare const gameSessions: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
477
|
-
name: "game_sessions";
|
|
478
|
-
schema: undefined;
|
|
479
|
-
columns: {
|
|
480
|
-
id: drizzle_orm_pg_core.PgColumn<{
|
|
481
|
-
name: "id";
|
|
482
|
-
tableName: "game_sessions";
|
|
1142
|
+
};
|
|
1143
|
+
dialect: "pg";
|
|
1144
|
+
}>;
|
|
1145
|
+
declare const gameSessions: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
1146
|
+
name: "game_sessions";
|
|
1147
|
+
schema: undefined;
|
|
1148
|
+
columns: {
|
|
1149
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
1150
|
+
name: "id";
|
|
1151
|
+
tableName: "game_sessions";
|
|
1152
|
+
dataType: "string";
|
|
1153
|
+
columnType: "PgUUID";
|
|
1154
|
+
data: string;
|
|
1155
|
+
driverParam: string;
|
|
1156
|
+
notNull: true;
|
|
1157
|
+
hasDefault: true;
|
|
1158
|
+
isPrimaryKey: true;
|
|
1159
|
+
isAutoincrement: false;
|
|
1160
|
+
hasRuntimeDefault: false;
|
|
1161
|
+
enumValues: undefined;
|
|
1162
|
+
baseColumn: never;
|
|
1163
|
+
identity: undefined;
|
|
1164
|
+
generated: undefined;
|
|
1165
|
+
}, {}, {}>;
|
|
1166
|
+
userId: drizzle_orm_pg_core.PgColumn<{
|
|
1167
|
+
name: "user_id";
|
|
1168
|
+
tableName: "game_sessions";
|
|
1169
|
+
dataType: "string";
|
|
1170
|
+
columnType: "PgText";
|
|
1171
|
+
data: string;
|
|
1172
|
+
driverParam: string;
|
|
1173
|
+
notNull: true;
|
|
1174
|
+
hasDefault: false;
|
|
1175
|
+
isPrimaryKey: false;
|
|
1176
|
+
isAutoincrement: false;
|
|
1177
|
+
hasRuntimeDefault: false;
|
|
1178
|
+
enumValues: [string, ...string[]];
|
|
1179
|
+
baseColumn: never;
|
|
1180
|
+
identity: undefined;
|
|
1181
|
+
generated: undefined;
|
|
1182
|
+
}, {}, {}>;
|
|
1183
|
+
gameId: drizzle_orm_pg_core.PgColumn<{
|
|
1184
|
+
name: "game_id";
|
|
1185
|
+
tableName: "game_sessions";
|
|
1186
|
+
dataType: "string";
|
|
1187
|
+
columnType: "PgUUID";
|
|
1188
|
+
data: string;
|
|
1189
|
+
driverParam: string;
|
|
1190
|
+
notNull: true;
|
|
1191
|
+
hasDefault: false;
|
|
1192
|
+
isPrimaryKey: false;
|
|
1193
|
+
isAutoincrement: false;
|
|
1194
|
+
hasRuntimeDefault: false;
|
|
1195
|
+
enumValues: undefined;
|
|
1196
|
+
baseColumn: never;
|
|
1197
|
+
identity: undefined;
|
|
1198
|
+
generated: undefined;
|
|
1199
|
+
}, {}, {}>;
|
|
1200
|
+
startedAt: drizzle_orm_pg_core.PgColumn<{
|
|
1201
|
+
name: "started_at";
|
|
1202
|
+
tableName: "game_sessions";
|
|
1203
|
+
dataType: "date";
|
|
1204
|
+
columnType: "PgTimestamp";
|
|
1205
|
+
data: Date;
|
|
1206
|
+
driverParam: string;
|
|
1207
|
+
notNull: true;
|
|
1208
|
+
hasDefault: true;
|
|
1209
|
+
isPrimaryKey: false;
|
|
1210
|
+
isAutoincrement: false;
|
|
1211
|
+
hasRuntimeDefault: false;
|
|
1212
|
+
enumValues: undefined;
|
|
1213
|
+
baseColumn: never;
|
|
1214
|
+
identity: undefined;
|
|
1215
|
+
generated: undefined;
|
|
1216
|
+
}, {}, {}>;
|
|
1217
|
+
endedAt: drizzle_orm_pg_core.PgColumn<{
|
|
1218
|
+
name: "ended_at";
|
|
1219
|
+
tableName: "game_sessions";
|
|
1220
|
+
dataType: "date";
|
|
1221
|
+
columnType: "PgTimestamp";
|
|
1222
|
+
data: Date;
|
|
1223
|
+
driverParam: string;
|
|
1224
|
+
notNull: false;
|
|
1225
|
+
hasDefault: false;
|
|
1226
|
+
isPrimaryKey: false;
|
|
1227
|
+
isAutoincrement: false;
|
|
1228
|
+
hasRuntimeDefault: false;
|
|
1229
|
+
enumValues: undefined;
|
|
1230
|
+
baseColumn: never;
|
|
1231
|
+
identity: undefined;
|
|
1232
|
+
generated: undefined;
|
|
1233
|
+
}, {}, {}>;
|
|
1234
|
+
};
|
|
1235
|
+
dialect: "pg";
|
|
1236
|
+
}>;
|
|
1237
|
+
/**
|
|
1238
|
+
* Custom hostnames table
|
|
1239
|
+
*
|
|
1240
|
+
* Stores custom domain mappings for games with SSL provisioning via Cloudflare.
|
|
1241
|
+
*/
|
|
1242
|
+
declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
1243
|
+
name: "game_custom_hostnames";
|
|
1244
|
+
schema: undefined;
|
|
1245
|
+
columns: {
|
|
1246
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
1247
|
+
name: "id";
|
|
1248
|
+
tableName: "game_custom_hostnames";
|
|
1249
|
+
dataType: "string";
|
|
1250
|
+
columnType: "PgUUID";
|
|
1251
|
+
data: string;
|
|
1252
|
+
driverParam: string;
|
|
1253
|
+
notNull: true;
|
|
1254
|
+
hasDefault: true;
|
|
1255
|
+
isPrimaryKey: true;
|
|
1256
|
+
isAutoincrement: false;
|
|
1257
|
+
hasRuntimeDefault: false;
|
|
1258
|
+
enumValues: undefined;
|
|
1259
|
+
baseColumn: never;
|
|
1260
|
+
identity: undefined;
|
|
1261
|
+
generated: undefined;
|
|
1262
|
+
}, {}, {}>;
|
|
1263
|
+
gameId: drizzle_orm_pg_core.PgColumn<{
|
|
1264
|
+
name: "game_id";
|
|
1265
|
+
tableName: "game_custom_hostnames";
|
|
1266
|
+
dataType: "string";
|
|
1267
|
+
columnType: "PgUUID";
|
|
1268
|
+
data: string;
|
|
1269
|
+
driverParam: string;
|
|
1270
|
+
notNull: true;
|
|
1271
|
+
hasDefault: false;
|
|
1272
|
+
isPrimaryKey: false;
|
|
1273
|
+
isAutoincrement: false;
|
|
1274
|
+
hasRuntimeDefault: false;
|
|
1275
|
+
enumValues: undefined;
|
|
1276
|
+
baseColumn: never;
|
|
1277
|
+
identity: undefined;
|
|
1278
|
+
generated: undefined;
|
|
1279
|
+
}, {}, {}>;
|
|
1280
|
+
userId: drizzle_orm_pg_core.PgColumn<{
|
|
1281
|
+
name: "user_id";
|
|
1282
|
+
tableName: "game_custom_hostnames";
|
|
1283
|
+
dataType: "string";
|
|
1284
|
+
columnType: "PgText";
|
|
1285
|
+
data: string;
|
|
1286
|
+
driverParam: string;
|
|
1287
|
+
notNull: true;
|
|
1288
|
+
hasDefault: false;
|
|
1289
|
+
isPrimaryKey: false;
|
|
1290
|
+
isAutoincrement: false;
|
|
1291
|
+
hasRuntimeDefault: false;
|
|
1292
|
+
enumValues: [string, ...string[]];
|
|
1293
|
+
baseColumn: never;
|
|
1294
|
+
identity: undefined;
|
|
1295
|
+
generated: undefined;
|
|
1296
|
+
}, {}, {}>;
|
|
1297
|
+
hostname: drizzle_orm_pg_core.PgColumn<{
|
|
1298
|
+
name: "hostname";
|
|
1299
|
+
tableName: "game_custom_hostnames";
|
|
1300
|
+
dataType: "string";
|
|
1301
|
+
columnType: "PgText";
|
|
1302
|
+
data: string;
|
|
1303
|
+
driverParam: string;
|
|
1304
|
+
notNull: true;
|
|
1305
|
+
hasDefault: false;
|
|
1306
|
+
isPrimaryKey: false;
|
|
1307
|
+
isAutoincrement: false;
|
|
1308
|
+
hasRuntimeDefault: false;
|
|
1309
|
+
enumValues: [string, ...string[]];
|
|
1310
|
+
baseColumn: never;
|
|
1311
|
+
identity: undefined;
|
|
1312
|
+
generated: undefined;
|
|
1313
|
+
}, {}, {}>;
|
|
1314
|
+
cloudflareId: drizzle_orm_pg_core.PgColumn<{
|
|
1315
|
+
name: "cloudflare_id";
|
|
1316
|
+
tableName: "game_custom_hostnames";
|
|
1317
|
+
dataType: "string";
|
|
1318
|
+
columnType: "PgText";
|
|
1319
|
+
data: string;
|
|
1320
|
+
driverParam: string;
|
|
1321
|
+
notNull: true;
|
|
1322
|
+
hasDefault: false;
|
|
1323
|
+
isPrimaryKey: false;
|
|
1324
|
+
isAutoincrement: false;
|
|
1325
|
+
hasRuntimeDefault: false;
|
|
1326
|
+
enumValues: [string, ...string[]];
|
|
1327
|
+
baseColumn: never;
|
|
1328
|
+
identity: undefined;
|
|
1329
|
+
generated: undefined;
|
|
1330
|
+
}, {}, {}>;
|
|
1331
|
+
environment: drizzle_orm_pg_core.PgColumn<{
|
|
1332
|
+
name: "environment";
|
|
1333
|
+
tableName: "game_custom_hostnames";
|
|
1334
|
+
dataType: "string";
|
|
1335
|
+
columnType: "PgEnumColumn";
|
|
1336
|
+
data: "production" | "staging";
|
|
1337
|
+
driverParam: string;
|
|
1338
|
+
notNull: true;
|
|
1339
|
+
hasDefault: true;
|
|
1340
|
+
isPrimaryKey: false;
|
|
1341
|
+
isAutoincrement: false;
|
|
1342
|
+
hasRuntimeDefault: false;
|
|
1343
|
+
enumValues: ["staging", "production"];
|
|
1344
|
+
baseColumn: never;
|
|
1345
|
+
identity: undefined;
|
|
1346
|
+
generated: undefined;
|
|
1347
|
+
}, {}, {}>;
|
|
1348
|
+
status: drizzle_orm_pg_core.PgColumn<{
|
|
1349
|
+
name: "status";
|
|
1350
|
+
tableName: "game_custom_hostnames";
|
|
483
1351
|
dataType: "string";
|
|
484
|
-
columnType: "
|
|
485
|
-
data:
|
|
1352
|
+
columnType: "PgEnumColumn";
|
|
1353
|
+
data: "active" | "blocked" | "deleted" | "pending" | "pending_deletion" | "pending_deployment" | "pending_validation";
|
|
486
1354
|
driverParam: string;
|
|
487
1355
|
notNull: true;
|
|
488
1356
|
hasDefault: true;
|
|
489
|
-
isPrimaryKey:
|
|
1357
|
+
isPrimaryKey: false;
|
|
490
1358
|
isAutoincrement: false;
|
|
491
1359
|
hasRuntimeDefault: false;
|
|
492
|
-
enumValues:
|
|
1360
|
+
enumValues: ["pending", "pending_validation", "pending_deployment", "pending_deletion", "active", "blocked", "deleted"];
|
|
493
1361
|
baseColumn: never;
|
|
494
1362
|
identity: undefined;
|
|
495
1363
|
generated: undefined;
|
|
496
1364
|
}, {}, {}>;
|
|
497
|
-
|
|
498
|
-
name: "
|
|
499
|
-
tableName: "
|
|
1365
|
+
sslStatus: drizzle_orm_pg_core.PgColumn<{
|
|
1366
|
+
name: "ssl_status";
|
|
1367
|
+
tableName: "game_custom_hostnames";
|
|
500
1368
|
dataType: "string";
|
|
501
|
-
columnType: "
|
|
502
|
-
data:
|
|
1369
|
+
columnType: "PgEnumColumn";
|
|
1370
|
+
data: "active" | "deleted" | "initializing" | "pending_deployment" | "pending_issuance" | "pending_validation";
|
|
503
1371
|
driverParam: string;
|
|
504
1372
|
notNull: true;
|
|
505
|
-
hasDefault:
|
|
1373
|
+
hasDefault: true;
|
|
506
1374
|
isPrimaryKey: false;
|
|
507
1375
|
isAutoincrement: false;
|
|
508
1376
|
hasRuntimeDefault: false;
|
|
509
|
-
enumValues: [
|
|
1377
|
+
enumValues: ["initializing", "pending_validation", "pending_issuance", "pending_deployment", "active", "deleted"];
|
|
510
1378
|
baseColumn: never;
|
|
511
1379
|
identity: undefined;
|
|
512
1380
|
generated: undefined;
|
|
513
1381
|
}, {}, {}>;
|
|
514
|
-
|
|
515
|
-
name: "
|
|
516
|
-
tableName: "
|
|
517
|
-
dataType: "
|
|
518
|
-
columnType: "
|
|
519
|
-
data:
|
|
520
|
-
driverParam:
|
|
521
|
-
notNull:
|
|
1382
|
+
validationRecords: drizzle_orm_pg_core.PgColumn<{
|
|
1383
|
+
name: "validation_records";
|
|
1384
|
+
tableName: "game_custom_hostnames";
|
|
1385
|
+
dataType: "json";
|
|
1386
|
+
columnType: "PgJsonb";
|
|
1387
|
+
data: CustomHostnameValidationRecords;
|
|
1388
|
+
driverParam: unknown;
|
|
1389
|
+
notNull: false;
|
|
522
1390
|
hasDefault: false;
|
|
523
1391
|
isPrimaryKey: false;
|
|
524
1392
|
isAutoincrement: false;
|
|
@@ -527,10 +1395,12 @@ declare const gameSessions: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
527
1395
|
baseColumn: never;
|
|
528
1396
|
identity: undefined;
|
|
529
1397
|
generated: undefined;
|
|
530
|
-
}, {}, {
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
1398
|
+
}, {}, {
|
|
1399
|
+
$type: CustomHostnameValidationRecords;
|
|
1400
|
+
}>;
|
|
1401
|
+
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
1402
|
+
name: "created_at";
|
|
1403
|
+
tableName: "game_custom_hostnames";
|
|
534
1404
|
dataType: "date";
|
|
535
1405
|
columnType: "PgTimestamp";
|
|
536
1406
|
data: Date;
|
|
@@ -545,15 +1415,15 @@ declare const gameSessions: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
545
1415
|
identity: undefined;
|
|
546
1416
|
generated: undefined;
|
|
547
1417
|
}, {}, {}>;
|
|
548
|
-
|
|
549
|
-
name: "
|
|
550
|
-
tableName: "
|
|
1418
|
+
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
1419
|
+
name: "updated_at";
|
|
1420
|
+
tableName: "game_custom_hostnames";
|
|
551
1421
|
dataType: "date";
|
|
552
1422
|
columnType: "PgTimestamp";
|
|
553
1423
|
data: Date;
|
|
554
1424
|
driverParam: string;
|
|
555
|
-
notNull:
|
|
556
|
-
hasDefault:
|
|
1425
|
+
notNull: true;
|
|
1426
|
+
hasDefault: true;
|
|
557
1427
|
isPrimaryKey: false;
|
|
558
1428
|
isAutoincrement: false;
|
|
559
1429
|
hasRuntimeDefault: false;
|
|
@@ -659,7 +1529,7 @@ declare const items: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
659
1529
|
tableName: "items";
|
|
660
1530
|
dataType: "string";
|
|
661
1531
|
columnType: "PgEnumColumn";
|
|
662
|
-
data: "
|
|
1532
|
+
data: "accessory" | "badge" | "collectible" | "consumable" | "currency" | "other" | "trophy" | "unlock" | "upgrade";
|
|
663
1533
|
driverParam: string;
|
|
664
1534
|
notNull: true;
|
|
665
1535
|
hasDefault: true;
|
|
@@ -814,15 +1684,233 @@ declare const inventoryItems: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
814
1684
|
identity: undefined;
|
|
815
1685
|
generated: undefined;
|
|
816
1686
|
}, {}, {}>;
|
|
817
|
-
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
818
|
-
name: "updated_at";
|
|
819
|
-
tableName: "inventory_items";
|
|
820
|
-
dataType: "date";
|
|
821
|
-
columnType: "PgTimestamp";
|
|
822
|
-
data: Date;
|
|
823
|
-
driverParam: string;
|
|
1687
|
+
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
1688
|
+
name: "updated_at";
|
|
1689
|
+
tableName: "inventory_items";
|
|
1690
|
+
dataType: "date";
|
|
1691
|
+
columnType: "PgTimestamp";
|
|
1692
|
+
data: Date;
|
|
1693
|
+
driverParam: string;
|
|
1694
|
+
notNull: false;
|
|
1695
|
+
hasDefault: true;
|
|
1696
|
+
isPrimaryKey: false;
|
|
1697
|
+
isAutoincrement: false;
|
|
1698
|
+
hasRuntimeDefault: false;
|
|
1699
|
+
enumValues: undefined;
|
|
1700
|
+
baseColumn: never;
|
|
1701
|
+
identity: undefined;
|
|
1702
|
+
generated: undefined;
|
|
1703
|
+
}, {}, {}>;
|
|
1704
|
+
};
|
|
1705
|
+
dialect: "pg";
|
|
1706
|
+
}>;
|
|
1707
|
+
declare const currencies: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
1708
|
+
name: "currencies";
|
|
1709
|
+
schema: undefined;
|
|
1710
|
+
columns: {
|
|
1711
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
1712
|
+
name: "id";
|
|
1713
|
+
tableName: "currencies";
|
|
1714
|
+
dataType: "string";
|
|
1715
|
+
columnType: "PgUUID";
|
|
1716
|
+
data: string;
|
|
1717
|
+
driverParam: string;
|
|
1718
|
+
notNull: true;
|
|
1719
|
+
hasDefault: true;
|
|
1720
|
+
isPrimaryKey: true;
|
|
1721
|
+
isAutoincrement: false;
|
|
1722
|
+
hasRuntimeDefault: false;
|
|
1723
|
+
enumValues: undefined;
|
|
1724
|
+
baseColumn: never;
|
|
1725
|
+
identity: undefined;
|
|
1726
|
+
generated: undefined;
|
|
1727
|
+
}, {}, {}>;
|
|
1728
|
+
itemId: drizzle_orm_pg_core.PgColumn<{
|
|
1729
|
+
name: "item_id";
|
|
1730
|
+
tableName: "currencies";
|
|
1731
|
+
dataType: "string";
|
|
1732
|
+
columnType: "PgUUID";
|
|
1733
|
+
data: string;
|
|
1734
|
+
driverParam: string;
|
|
1735
|
+
notNull: true;
|
|
1736
|
+
hasDefault: false;
|
|
1737
|
+
isPrimaryKey: false;
|
|
1738
|
+
isAutoincrement: false;
|
|
1739
|
+
hasRuntimeDefault: false;
|
|
1740
|
+
enumValues: undefined;
|
|
1741
|
+
baseColumn: never;
|
|
1742
|
+
identity: undefined;
|
|
1743
|
+
generated: undefined;
|
|
1744
|
+
}, {}, {}>;
|
|
1745
|
+
symbol: drizzle_orm_pg_core.PgColumn<{
|
|
1746
|
+
name: "symbol";
|
|
1747
|
+
tableName: "currencies";
|
|
1748
|
+
dataType: "string";
|
|
1749
|
+
columnType: "PgText";
|
|
1750
|
+
data: string;
|
|
1751
|
+
driverParam: string;
|
|
1752
|
+
notNull: false;
|
|
1753
|
+
hasDefault: false;
|
|
1754
|
+
isPrimaryKey: false;
|
|
1755
|
+
isAutoincrement: false;
|
|
1756
|
+
hasRuntimeDefault: false;
|
|
1757
|
+
enumValues: [string, ...string[]];
|
|
1758
|
+
baseColumn: never;
|
|
1759
|
+
identity: undefined;
|
|
1760
|
+
generated: undefined;
|
|
1761
|
+
}, {}, {}>;
|
|
1762
|
+
isPrimary: drizzle_orm_pg_core.PgColumn<{
|
|
1763
|
+
name: "is_primary";
|
|
1764
|
+
tableName: "currencies";
|
|
1765
|
+
dataType: "boolean";
|
|
1766
|
+
columnType: "PgBoolean";
|
|
1767
|
+
data: boolean;
|
|
1768
|
+
driverParam: boolean;
|
|
1769
|
+
notNull: true;
|
|
1770
|
+
hasDefault: true;
|
|
1771
|
+
isPrimaryKey: false;
|
|
1772
|
+
isAutoincrement: false;
|
|
1773
|
+
hasRuntimeDefault: false;
|
|
1774
|
+
enumValues: undefined;
|
|
1775
|
+
baseColumn: never;
|
|
1776
|
+
identity: undefined;
|
|
1777
|
+
generated: undefined;
|
|
1778
|
+
}, {}, {}>;
|
|
1779
|
+
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
1780
|
+
name: "created_at";
|
|
1781
|
+
tableName: "currencies";
|
|
1782
|
+
dataType: "date";
|
|
1783
|
+
columnType: "PgTimestamp";
|
|
1784
|
+
data: Date;
|
|
1785
|
+
driverParam: string;
|
|
1786
|
+
notNull: true;
|
|
1787
|
+
hasDefault: true;
|
|
1788
|
+
isPrimaryKey: false;
|
|
1789
|
+
isAutoincrement: false;
|
|
1790
|
+
hasRuntimeDefault: false;
|
|
1791
|
+
enumValues: undefined;
|
|
1792
|
+
baseColumn: never;
|
|
1793
|
+
identity: undefined;
|
|
1794
|
+
generated: undefined;
|
|
1795
|
+
}, {}, {}>;
|
|
1796
|
+
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
1797
|
+
name: "updated_at";
|
|
1798
|
+
tableName: "currencies";
|
|
1799
|
+
dataType: "date";
|
|
1800
|
+
columnType: "PgTimestamp";
|
|
1801
|
+
data: Date;
|
|
1802
|
+
driverParam: string;
|
|
1803
|
+
notNull: false;
|
|
1804
|
+
hasDefault: true;
|
|
1805
|
+
isPrimaryKey: false;
|
|
1806
|
+
isAutoincrement: false;
|
|
1807
|
+
hasRuntimeDefault: false;
|
|
1808
|
+
enumValues: undefined;
|
|
1809
|
+
baseColumn: never;
|
|
1810
|
+
identity: undefined;
|
|
1811
|
+
generated: undefined;
|
|
1812
|
+
}, {}, {}>;
|
|
1813
|
+
};
|
|
1814
|
+
dialect: "pg";
|
|
1815
|
+
}>;
|
|
1816
|
+
declare const shopListings: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
1817
|
+
name: "shop_listings";
|
|
1818
|
+
schema: undefined;
|
|
1819
|
+
columns: {
|
|
1820
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
1821
|
+
name: "id";
|
|
1822
|
+
tableName: "shop_listings";
|
|
1823
|
+
dataType: "string";
|
|
1824
|
+
columnType: "PgUUID";
|
|
1825
|
+
data: string;
|
|
1826
|
+
driverParam: string;
|
|
1827
|
+
notNull: true;
|
|
1828
|
+
hasDefault: true;
|
|
1829
|
+
isPrimaryKey: true;
|
|
1830
|
+
isAutoincrement: false;
|
|
1831
|
+
hasRuntimeDefault: false;
|
|
1832
|
+
enumValues: undefined;
|
|
1833
|
+
baseColumn: never;
|
|
1834
|
+
identity: undefined;
|
|
1835
|
+
generated: undefined;
|
|
1836
|
+
}, {}, {}>;
|
|
1837
|
+
itemId: drizzle_orm_pg_core.PgColumn<{
|
|
1838
|
+
name: "item_id";
|
|
1839
|
+
tableName: "shop_listings";
|
|
1840
|
+
dataType: "string";
|
|
1841
|
+
columnType: "PgUUID";
|
|
1842
|
+
data: string;
|
|
1843
|
+
driverParam: string;
|
|
1844
|
+
notNull: true;
|
|
1845
|
+
hasDefault: false;
|
|
1846
|
+
isPrimaryKey: false;
|
|
1847
|
+
isAutoincrement: false;
|
|
1848
|
+
hasRuntimeDefault: false;
|
|
1849
|
+
enumValues: undefined;
|
|
1850
|
+
baseColumn: never;
|
|
1851
|
+
identity: undefined;
|
|
1852
|
+
generated: undefined;
|
|
1853
|
+
}, {}, {}>;
|
|
1854
|
+
currencyId: drizzle_orm_pg_core.PgColumn<{
|
|
1855
|
+
name: "currency_id";
|
|
1856
|
+
tableName: "shop_listings";
|
|
1857
|
+
dataType: "string";
|
|
1858
|
+
columnType: "PgUUID";
|
|
1859
|
+
data: string;
|
|
1860
|
+
driverParam: string;
|
|
1861
|
+
notNull: true;
|
|
1862
|
+
hasDefault: false;
|
|
1863
|
+
isPrimaryKey: false;
|
|
1864
|
+
isAutoincrement: false;
|
|
1865
|
+
hasRuntimeDefault: false;
|
|
1866
|
+
enumValues: undefined;
|
|
1867
|
+
baseColumn: never;
|
|
1868
|
+
identity: undefined;
|
|
1869
|
+
generated: undefined;
|
|
1870
|
+
}, {}, {}>;
|
|
1871
|
+
price: drizzle_orm_pg_core.PgColumn<{
|
|
1872
|
+
name: "price";
|
|
1873
|
+
tableName: "shop_listings";
|
|
1874
|
+
dataType: "number";
|
|
1875
|
+
columnType: "PgInteger";
|
|
1876
|
+
data: number;
|
|
1877
|
+
driverParam: string | number;
|
|
1878
|
+
notNull: true;
|
|
1879
|
+
hasDefault: false;
|
|
1880
|
+
isPrimaryKey: false;
|
|
1881
|
+
isAutoincrement: false;
|
|
1882
|
+
hasRuntimeDefault: false;
|
|
1883
|
+
enumValues: undefined;
|
|
1884
|
+
baseColumn: never;
|
|
1885
|
+
identity: undefined;
|
|
1886
|
+
generated: undefined;
|
|
1887
|
+
}, {}, {}>;
|
|
1888
|
+
sellBackPercentage: drizzle_orm_pg_core.PgColumn<{
|
|
1889
|
+
name: "sell_back_percentage";
|
|
1890
|
+
tableName: "shop_listings";
|
|
1891
|
+
dataType: "number";
|
|
1892
|
+
columnType: "PgInteger";
|
|
1893
|
+
data: number;
|
|
1894
|
+
driverParam: string | number;
|
|
1895
|
+
notNull: false;
|
|
1896
|
+
hasDefault: false;
|
|
1897
|
+
isPrimaryKey: false;
|
|
1898
|
+
isAutoincrement: false;
|
|
1899
|
+
hasRuntimeDefault: false;
|
|
1900
|
+
enumValues: undefined;
|
|
1901
|
+
baseColumn: never;
|
|
1902
|
+
identity: undefined;
|
|
1903
|
+
generated: undefined;
|
|
1904
|
+
}, {}, {}>;
|
|
1905
|
+
stock: drizzle_orm_pg_core.PgColumn<{
|
|
1906
|
+
name: "stock";
|
|
1907
|
+
tableName: "shop_listings";
|
|
1908
|
+
dataType: "number";
|
|
1909
|
+
columnType: "PgInteger";
|
|
1910
|
+
data: number;
|
|
1911
|
+
driverParam: string | number;
|
|
824
1912
|
notNull: false;
|
|
825
|
-
hasDefault:
|
|
1913
|
+
hasDefault: false;
|
|
826
1914
|
isPrimaryKey: false;
|
|
827
1915
|
isAutoincrement: false;
|
|
828
1916
|
hasRuntimeDefault: false;
|
|
@@ -831,23 +1919,16 @@ declare const inventoryItems: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
831
1919
|
identity: undefined;
|
|
832
1920
|
generated: undefined;
|
|
833
1921
|
}, {}, {}>;
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
id: drizzle_orm_pg_core.PgColumn<{
|
|
842
|
-
name: "id";
|
|
843
|
-
tableName: "currencies";
|
|
844
|
-
dataType: "string";
|
|
845
|
-
columnType: "PgUUID";
|
|
846
|
-
data: string;
|
|
847
|
-
driverParam: string;
|
|
1922
|
+
isActive: drizzle_orm_pg_core.PgColumn<{
|
|
1923
|
+
name: "is_active";
|
|
1924
|
+
tableName: "shop_listings";
|
|
1925
|
+
dataType: "boolean";
|
|
1926
|
+
columnType: "PgBoolean";
|
|
1927
|
+
data: boolean;
|
|
1928
|
+
driverParam: boolean;
|
|
848
1929
|
notNull: true;
|
|
849
1930
|
hasDefault: true;
|
|
850
|
-
isPrimaryKey:
|
|
1931
|
+
isPrimaryKey: false;
|
|
851
1932
|
isAutoincrement: false;
|
|
852
1933
|
hasRuntimeDefault: false;
|
|
853
1934
|
enumValues: undefined;
|
|
@@ -855,14 +1936,14 @@ declare const currencies: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
855
1936
|
identity: undefined;
|
|
856
1937
|
generated: undefined;
|
|
857
1938
|
}, {}, {}>;
|
|
858
|
-
|
|
859
|
-
name: "
|
|
860
|
-
tableName: "
|
|
861
|
-
dataType: "
|
|
862
|
-
columnType: "
|
|
863
|
-
data:
|
|
1939
|
+
availableFrom: drizzle_orm_pg_core.PgColumn<{
|
|
1940
|
+
name: "available_from";
|
|
1941
|
+
tableName: "shop_listings";
|
|
1942
|
+
dataType: "date";
|
|
1943
|
+
columnType: "PgTimestamp";
|
|
1944
|
+
data: Date;
|
|
864
1945
|
driverParam: string;
|
|
865
|
-
notNull:
|
|
1946
|
+
notNull: false;
|
|
866
1947
|
hasDefault: false;
|
|
867
1948
|
isPrimaryKey: false;
|
|
868
1949
|
isAutoincrement: false;
|
|
@@ -872,35 +1953,18 @@ declare const currencies: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
872
1953
|
identity: undefined;
|
|
873
1954
|
generated: undefined;
|
|
874
1955
|
}, {}, {}>;
|
|
875
|
-
|
|
876
|
-
name: "
|
|
877
|
-
tableName: "
|
|
878
|
-
dataType: "
|
|
879
|
-
columnType: "
|
|
880
|
-
data:
|
|
1956
|
+
availableUntil: drizzle_orm_pg_core.PgColumn<{
|
|
1957
|
+
name: "available_until";
|
|
1958
|
+
tableName: "shop_listings";
|
|
1959
|
+
dataType: "date";
|
|
1960
|
+
columnType: "PgTimestamp";
|
|
1961
|
+
data: Date;
|
|
881
1962
|
driverParam: string;
|
|
882
1963
|
notNull: false;
|
|
883
1964
|
hasDefault: false;
|
|
884
1965
|
isPrimaryKey: false;
|
|
885
1966
|
isAutoincrement: false;
|
|
886
1967
|
hasRuntimeDefault: false;
|
|
887
|
-
enumValues: [string, ...string[]];
|
|
888
|
-
baseColumn: never;
|
|
889
|
-
identity: undefined;
|
|
890
|
-
generated: undefined;
|
|
891
|
-
}, {}, {}>;
|
|
892
|
-
isPrimary: drizzle_orm_pg_core.PgColumn<{
|
|
893
|
-
name: "is_primary";
|
|
894
|
-
tableName: "currencies";
|
|
895
|
-
dataType: "boolean";
|
|
896
|
-
columnType: "PgBoolean";
|
|
897
|
-
data: boolean;
|
|
898
|
-
driverParam: boolean;
|
|
899
|
-
notNull: true;
|
|
900
|
-
hasDefault: true;
|
|
901
|
-
isPrimaryKey: false;
|
|
902
|
-
isAutoincrement: false;
|
|
903
|
-
hasRuntimeDefault: false;
|
|
904
1968
|
enumValues: undefined;
|
|
905
1969
|
baseColumn: never;
|
|
906
1970
|
identity: undefined;
|
|
@@ -908,7 +1972,7 @@ declare const currencies: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
908
1972
|
}, {}, {}>;
|
|
909
1973
|
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
910
1974
|
name: "created_at";
|
|
911
|
-
tableName: "
|
|
1975
|
+
tableName: "shop_listings";
|
|
912
1976
|
dataType: "date";
|
|
913
1977
|
columnType: "PgTimestamp";
|
|
914
1978
|
data: Date;
|
|
@@ -925,7 +1989,7 @@ declare const currencies: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
925
1989
|
}, {}, {}>;
|
|
926
1990
|
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
927
1991
|
name: "updated_at";
|
|
928
|
-
tableName: "
|
|
1992
|
+
tableName: "shop_listings";
|
|
929
1993
|
dataType: "date";
|
|
930
1994
|
columnType: "PgTimestamp";
|
|
931
1995
|
data: Date;
|
|
@@ -1156,7 +2220,7 @@ declare const mapElements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
1156
2220
|
tableName: "map_elements";
|
|
1157
2221
|
dataType: "string";
|
|
1158
2222
|
columnType: "PgEnumColumn";
|
|
1159
|
-
data: "
|
|
2223
|
+
data: "door_in" | "door_out" | "game_entry" | "game_registry" | "info" | "npc_interaction" | "quest_trigger" | "teleport";
|
|
1160
2224
|
driverParam: string;
|
|
1161
2225
|
notNull: true;
|
|
1162
2226
|
hasDefault: false;
|
|
@@ -1709,7 +2773,7 @@ declare const characterComponents: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
1709
2773
|
tableName: "character_components";
|
|
1710
2774
|
dataType: "string";
|
|
1711
2775
|
columnType: "PgEnumColumn";
|
|
1712
|
-
data: "accessory" | "body" | "
|
|
2776
|
+
data: "accessory" | "body" | "eyes" | "hairstyle" | "outfit";
|
|
1713
2777
|
driverParam: string;
|
|
1714
2778
|
notNull: true;
|
|
1715
2779
|
hasDefault: false;
|
|
@@ -2120,34 +3184,47 @@ declare const playerCharacterAccessories: drizzle_orm_pg_core.PgTableWithColumns
|
|
|
2120
3184
|
};
|
|
2121
3185
|
dialect: "pg";
|
|
2122
3186
|
}>;
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
2126
|
-
name: "achievements";
|
|
3187
|
+
declare const notifications: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
3188
|
+
name: "notifications";
|
|
2127
3189
|
schema: undefined;
|
|
2128
3190
|
columns: {
|
|
2129
3191
|
id: drizzle_orm_pg_core.PgColumn<{
|
|
2130
3192
|
name: "id";
|
|
2131
|
-
tableName: "
|
|
3193
|
+
tableName: "notifications";
|
|
2132
3194
|
dataType: "string";
|
|
2133
|
-
columnType: "
|
|
3195
|
+
columnType: "PgUUID";
|
|
2134
3196
|
data: string;
|
|
2135
3197
|
driverParam: string;
|
|
2136
3198
|
notNull: true;
|
|
2137
|
-
hasDefault:
|
|
3199
|
+
hasDefault: true;
|
|
2138
3200
|
isPrimaryKey: true;
|
|
2139
3201
|
isAutoincrement: false;
|
|
2140
3202
|
hasRuntimeDefault: false;
|
|
3203
|
+
enumValues: undefined;
|
|
3204
|
+
baseColumn: never;
|
|
3205
|
+
identity: undefined;
|
|
3206
|
+
generated: undefined;
|
|
3207
|
+
}, {}, {}>;
|
|
3208
|
+
userId: drizzle_orm_pg_core.PgColumn<{
|
|
3209
|
+
name: "user_id";
|
|
3210
|
+
tableName: "notifications";
|
|
3211
|
+
dataType: "string";
|
|
3212
|
+
columnType: "PgText";
|
|
3213
|
+
data: string;
|
|
3214
|
+
driverParam: string;
|
|
3215
|
+
notNull: true;
|
|
3216
|
+
hasDefault: false;
|
|
3217
|
+
isPrimaryKey: false;
|
|
3218
|
+
isAutoincrement: false;
|
|
3219
|
+
hasRuntimeDefault: false;
|
|
2141
3220
|
enumValues: [string, ...string[]];
|
|
2142
3221
|
baseColumn: never;
|
|
2143
3222
|
identity: undefined;
|
|
2144
3223
|
generated: undefined;
|
|
2145
|
-
}, {}, {
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
name: "title";
|
|
2150
|
-
tableName: "achievements";
|
|
3224
|
+
}, {}, {}>;
|
|
3225
|
+
type: drizzle_orm_pg_core.PgColumn<{
|
|
3226
|
+
name: "type";
|
|
3227
|
+
tableName: "notifications";
|
|
2151
3228
|
dataType: "string";
|
|
2152
3229
|
columnType: "PgVarchar";
|
|
2153
3230
|
data: string;
|
|
@@ -2162,16 +3239,16 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2162
3239
|
identity: undefined;
|
|
2163
3240
|
generated: undefined;
|
|
2164
3241
|
}, {}, {
|
|
2165
|
-
length:
|
|
3242
|
+
length: 50;
|
|
2166
3243
|
}>;
|
|
2167
|
-
|
|
2168
|
-
name: "
|
|
2169
|
-
tableName: "
|
|
3244
|
+
title: drizzle_orm_pg_core.PgColumn<{
|
|
3245
|
+
name: "title";
|
|
3246
|
+
tableName: "notifications";
|
|
2170
3247
|
dataType: "string";
|
|
2171
|
-
columnType: "
|
|
3248
|
+
columnType: "PgVarchar";
|
|
2172
3249
|
data: string;
|
|
2173
3250
|
driverParam: string;
|
|
2174
|
-
notNull:
|
|
3251
|
+
notNull: true;
|
|
2175
3252
|
hasDefault: false;
|
|
2176
3253
|
isPrimaryKey: false;
|
|
2177
3254
|
isAutoincrement: false;
|
|
@@ -2180,31 +3257,33 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2180
3257
|
baseColumn: never;
|
|
2181
3258
|
identity: undefined;
|
|
2182
3259
|
generated: undefined;
|
|
2183
|
-
}, {}, {
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
3260
|
+
}, {}, {
|
|
3261
|
+
length: 255;
|
|
3262
|
+
}>;
|
|
3263
|
+
message: drizzle_orm_pg_core.PgColumn<{
|
|
3264
|
+
name: "message";
|
|
3265
|
+
tableName: "notifications";
|
|
2187
3266
|
dataType: "string";
|
|
2188
|
-
columnType: "
|
|
2189
|
-
data:
|
|
3267
|
+
columnType: "PgText";
|
|
3268
|
+
data: string;
|
|
2190
3269
|
driverParam: string;
|
|
2191
3270
|
notNull: true;
|
|
2192
3271
|
hasDefault: false;
|
|
2193
3272
|
isPrimaryKey: false;
|
|
2194
3273
|
isAutoincrement: false;
|
|
2195
3274
|
hasRuntimeDefault: false;
|
|
2196
|
-
enumValues: [
|
|
3275
|
+
enumValues: [string, ...string[]];
|
|
2197
3276
|
baseColumn: never;
|
|
2198
3277
|
identity: undefined;
|
|
2199
3278
|
generated: undefined;
|
|
2200
3279
|
}, {}, {}>;
|
|
2201
|
-
|
|
2202
|
-
name: "
|
|
2203
|
-
tableName: "
|
|
2204
|
-
dataType: "
|
|
2205
|
-
columnType: "
|
|
2206
|
-
data:
|
|
2207
|
-
driverParam:
|
|
3280
|
+
data: drizzle_orm_pg_core.PgColumn<{
|
|
3281
|
+
name: "data";
|
|
3282
|
+
tableName: "notifications";
|
|
3283
|
+
dataType: "json";
|
|
3284
|
+
columnType: "PgJsonb";
|
|
3285
|
+
data: unknown;
|
|
3286
|
+
driverParam: unknown;
|
|
2208
3287
|
notNull: true;
|
|
2209
3288
|
hasDefault: true;
|
|
2210
3289
|
isPrimaryKey: false;
|
|
@@ -2215,49 +3294,47 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2215
3294
|
identity: undefined;
|
|
2216
3295
|
generated: undefined;
|
|
2217
3296
|
}, {}, {}>;
|
|
2218
|
-
|
|
2219
|
-
name: "
|
|
2220
|
-
tableName: "
|
|
2221
|
-
dataType: "
|
|
2222
|
-
columnType: "
|
|
2223
|
-
data:
|
|
2224
|
-
driverParam: string
|
|
3297
|
+
priority: drizzle_orm_pg_core.PgColumn<{
|
|
3298
|
+
name: "priority";
|
|
3299
|
+
tableName: "notifications";
|
|
3300
|
+
dataType: "string";
|
|
3301
|
+
columnType: "PgEnumColumn";
|
|
3302
|
+
data: "high" | "low" | "normal" | "urgent";
|
|
3303
|
+
driverParam: string;
|
|
2225
3304
|
notNull: true;
|
|
2226
3305
|
hasDefault: true;
|
|
2227
3306
|
isPrimaryKey: false;
|
|
2228
3307
|
isAutoincrement: false;
|
|
2229
3308
|
hasRuntimeDefault: false;
|
|
2230
|
-
enumValues:
|
|
3309
|
+
enumValues: ["low", "normal", "high", "urgent"];
|
|
2231
3310
|
baseColumn: never;
|
|
2232
3311
|
identity: undefined;
|
|
2233
3312
|
generated: undefined;
|
|
2234
3313
|
}, {}, {}>;
|
|
2235
|
-
|
|
2236
|
-
name: "
|
|
2237
|
-
tableName: "
|
|
3314
|
+
status: drizzle_orm_pg_core.PgColumn<{
|
|
3315
|
+
name: "status";
|
|
3316
|
+
tableName: "notifications";
|
|
2238
3317
|
dataType: "string";
|
|
2239
|
-
columnType: "
|
|
2240
|
-
data:
|
|
3318
|
+
columnType: "PgEnumColumn";
|
|
3319
|
+
data: "clicked" | "delivered" | "dismissed" | "expired" | "pending" | "seen";
|
|
2241
3320
|
driverParam: string;
|
|
2242
3321
|
notNull: true;
|
|
2243
|
-
hasDefault:
|
|
3322
|
+
hasDefault: true;
|
|
2244
3323
|
isPrimaryKey: false;
|
|
2245
3324
|
isAutoincrement: false;
|
|
2246
3325
|
hasRuntimeDefault: false;
|
|
2247
|
-
enumValues: [
|
|
3326
|
+
enumValues: ["pending", "delivered", "seen", "clicked", "dismissed", "expired"];
|
|
2248
3327
|
baseColumn: never;
|
|
2249
3328
|
identity: undefined;
|
|
2250
3329
|
generated: undefined;
|
|
2251
|
-
}, {}, {
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
data: unknown;
|
|
2260
|
-
driverParam: unknown;
|
|
3330
|
+
}, {}, {}>;
|
|
3331
|
+
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
3332
|
+
name: "created_at";
|
|
3333
|
+
tableName: "notifications";
|
|
3334
|
+
dataType: "date";
|
|
3335
|
+
columnType: "PgTimestamp";
|
|
3336
|
+
data: Date;
|
|
3337
|
+
driverParam: string;
|
|
2261
3338
|
notNull: true;
|
|
2262
3339
|
hasDefault: true;
|
|
2263
3340
|
isPrimaryKey: false;
|
|
@@ -2268,15 +3345,15 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2268
3345
|
identity: undefined;
|
|
2269
3346
|
generated: undefined;
|
|
2270
3347
|
}, {}, {}>;
|
|
2271
|
-
|
|
2272
|
-
name: "
|
|
2273
|
-
tableName: "
|
|
2274
|
-
dataType: "
|
|
2275
|
-
columnType: "
|
|
2276
|
-
data:
|
|
2277
|
-
driverParam:
|
|
2278
|
-
notNull:
|
|
2279
|
-
hasDefault:
|
|
3348
|
+
deliveredAt: drizzle_orm_pg_core.PgColumn<{
|
|
3349
|
+
name: "delivered_at";
|
|
3350
|
+
tableName: "notifications";
|
|
3351
|
+
dataType: "date";
|
|
3352
|
+
columnType: "PgTimestamp";
|
|
3353
|
+
data: Date;
|
|
3354
|
+
driverParam: string;
|
|
3355
|
+
notNull: false;
|
|
3356
|
+
hasDefault: false;
|
|
2280
3357
|
isPrimaryKey: false;
|
|
2281
3358
|
isAutoincrement: false;
|
|
2282
3359
|
hasRuntimeDefault: false;
|
|
@@ -2285,15 +3362,15 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2285
3362
|
identity: undefined;
|
|
2286
3363
|
generated: undefined;
|
|
2287
3364
|
}, {}, {}>;
|
|
2288
|
-
|
|
2289
|
-
name: "
|
|
2290
|
-
tableName: "
|
|
2291
|
-
dataType: "
|
|
2292
|
-
columnType: "
|
|
2293
|
-
data:
|
|
2294
|
-
driverParam:
|
|
2295
|
-
notNull:
|
|
2296
|
-
hasDefault:
|
|
3365
|
+
seenAt: drizzle_orm_pg_core.PgColumn<{
|
|
3366
|
+
name: "seen_at";
|
|
3367
|
+
tableName: "notifications";
|
|
3368
|
+
dataType: "date";
|
|
3369
|
+
columnType: "PgTimestamp";
|
|
3370
|
+
data: Date;
|
|
3371
|
+
driverParam: string;
|
|
3372
|
+
notNull: false;
|
|
3373
|
+
hasDefault: false;
|
|
2297
3374
|
isPrimaryKey: false;
|
|
2298
3375
|
isAutoincrement: false;
|
|
2299
3376
|
hasRuntimeDefault: false;
|
|
@@ -2302,15 +3379,15 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2302
3379
|
identity: undefined;
|
|
2303
3380
|
generated: undefined;
|
|
2304
3381
|
}, {}, {}>;
|
|
2305
|
-
|
|
2306
|
-
name: "
|
|
2307
|
-
tableName: "
|
|
3382
|
+
clickedAt: drizzle_orm_pg_core.PgColumn<{
|
|
3383
|
+
name: "clicked_at";
|
|
3384
|
+
tableName: "notifications";
|
|
2308
3385
|
dataType: "date";
|
|
2309
3386
|
columnType: "PgTimestamp";
|
|
2310
3387
|
data: Date;
|
|
2311
3388
|
driverParam: string;
|
|
2312
3389
|
notNull: false;
|
|
2313
|
-
hasDefault:
|
|
3390
|
+
hasDefault: false;
|
|
2314
3391
|
isPrimaryKey: false;
|
|
2315
3392
|
isAutoincrement: false;
|
|
2316
3393
|
hasRuntimeDefault: false;
|
|
@@ -2319,14 +3396,67 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2319
3396
|
identity: undefined;
|
|
2320
3397
|
generated: undefined;
|
|
2321
3398
|
}, {}, {}>;
|
|
2322
|
-
|
|
2323
|
-
name: "
|
|
2324
|
-
tableName: "
|
|
3399
|
+
expiresAt: drizzle_orm_pg_core.PgColumn<{
|
|
3400
|
+
name: "expires_at";
|
|
3401
|
+
tableName: "notifications";
|
|
2325
3402
|
dataType: "date";
|
|
2326
3403
|
columnType: "PgTimestamp";
|
|
2327
3404
|
data: Date;
|
|
2328
3405
|
driverParam: string;
|
|
2329
3406
|
notNull: false;
|
|
3407
|
+
hasDefault: false;
|
|
3408
|
+
isPrimaryKey: false;
|
|
3409
|
+
isAutoincrement: false;
|
|
3410
|
+
hasRuntimeDefault: false;
|
|
3411
|
+
enumValues: undefined;
|
|
3412
|
+
baseColumn: never;
|
|
3413
|
+
identity: undefined;
|
|
3414
|
+
generated: undefined;
|
|
3415
|
+
}, {}, {}>;
|
|
3416
|
+
method: drizzle_orm_pg_core.PgColumn<{
|
|
3417
|
+
name: "method";
|
|
3418
|
+
tableName: "notifications";
|
|
3419
|
+
dataType: "string";
|
|
3420
|
+
columnType: "PgVarchar";
|
|
3421
|
+
data: string;
|
|
3422
|
+
driverParam: string;
|
|
3423
|
+
notNull: false;
|
|
3424
|
+
hasDefault: false;
|
|
3425
|
+
isPrimaryKey: false;
|
|
3426
|
+
isAutoincrement: false;
|
|
3427
|
+
hasRuntimeDefault: false;
|
|
3428
|
+
enumValues: [string, ...string[]];
|
|
3429
|
+
baseColumn: never;
|
|
3430
|
+
identity: undefined;
|
|
3431
|
+
generated: undefined;
|
|
3432
|
+
}, {}, {
|
|
3433
|
+
length: 50;
|
|
3434
|
+
}>;
|
|
3435
|
+
clickUrl: drizzle_orm_pg_core.PgColumn<{
|
|
3436
|
+
name: "click_url";
|
|
3437
|
+
tableName: "notifications";
|
|
3438
|
+
dataType: "string";
|
|
3439
|
+
columnType: "PgText";
|
|
3440
|
+
data: string;
|
|
3441
|
+
driverParam: string;
|
|
3442
|
+
notNull: false;
|
|
3443
|
+
hasDefault: false;
|
|
3444
|
+
isPrimaryKey: false;
|
|
3445
|
+
isAutoincrement: false;
|
|
3446
|
+
hasRuntimeDefault: false;
|
|
3447
|
+
enumValues: [string, ...string[]];
|
|
3448
|
+
baseColumn: never;
|
|
3449
|
+
identity: undefined;
|
|
3450
|
+
generated: undefined;
|
|
3451
|
+
}, {}, {}>;
|
|
3452
|
+
metadata: drizzle_orm_pg_core.PgColumn<{
|
|
3453
|
+
name: "metadata";
|
|
3454
|
+
tableName: "notifications";
|
|
3455
|
+
dataType: "json";
|
|
3456
|
+
columnType: "PgJsonb";
|
|
3457
|
+
data: unknown;
|
|
3458
|
+
driverParam: unknown;
|
|
3459
|
+
notNull: true;
|
|
2330
3460
|
hasDefault: true;
|
|
2331
3461
|
isPrimaryKey: false;
|
|
2332
3462
|
isAutoincrement: false;
|
|
@@ -2339,88 +3469,600 @@ declare const achievements: drizzle_orm_pg_core.PgTableWithColumns<{
|
|
|
2339
3469
|
};
|
|
2340
3470
|
dialect: "pg";
|
|
2341
3471
|
}>;
|
|
2342
|
-
declare const
|
|
2343
|
-
|
|
3472
|
+
declare const UpsertGameMetadataSchema: z.ZodEffects<z.ZodObject<{
|
|
3473
|
+
displayName: z.ZodString;
|
|
3474
|
+
mapElementId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
3475
|
+
platform: z.ZodEnum<["web", "godot", "unity"]>;
|
|
3476
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
3477
|
+
gameType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["hosted", "external"]>>>;
|
|
3478
|
+
externalUrl: z.ZodOptional<z.ZodString>;
|
|
2344
3479
|
}, "strip", z.ZodTypeAny, {
|
|
2345
|
-
|
|
3480
|
+
displayName: string;
|
|
3481
|
+
mapElementId?: string | null | undefined;
|
|
3482
|
+
platform: "godot" | "unity" | "web";
|
|
3483
|
+
metadata: Record<string, unknown>;
|
|
3484
|
+
gameType: "external" | "hosted";
|
|
3485
|
+
externalUrl?: string | undefined;
|
|
2346
3486
|
}, {
|
|
2347
|
-
|
|
3487
|
+
displayName: string;
|
|
3488
|
+
mapElementId?: string | null | undefined;
|
|
3489
|
+
platform: "godot" | "unity" | "web";
|
|
3490
|
+
metadata?: Record<string, unknown> | undefined;
|
|
3491
|
+
gameType?: "external" | "hosted" | undefined;
|
|
3492
|
+
externalUrl?: string | undefined;
|
|
3493
|
+
}>, {
|
|
3494
|
+
displayName: string;
|
|
3495
|
+
mapElementId?: string | null | undefined;
|
|
3496
|
+
platform: "godot" | "unity" | "web";
|
|
3497
|
+
metadata: Record<string, unknown>;
|
|
3498
|
+
gameType: "external" | "hosted";
|
|
3499
|
+
externalUrl?: string | undefined;
|
|
3500
|
+
}, {
|
|
3501
|
+
displayName: string;
|
|
3502
|
+
mapElementId?: string | null | undefined;
|
|
3503
|
+
platform: "godot" | "unity" | "web";
|
|
3504
|
+
metadata?: Record<string, unknown> | undefined;
|
|
3505
|
+
gameType?: "external" | "hosted" | undefined;
|
|
3506
|
+
externalUrl?: string | undefined;
|
|
2348
3507
|
}>;
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
3508
|
+
|
|
3509
|
+
declare const InsertItemSchema: drizzle_zod.BuildSchema<"insert", {
|
|
3510
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
3511
|
+
name: "id";
|
|
3512
|
+
tableName: "items";
|
|
3513
|
+
dataType: "string";
|
|
3514
|
+
columnType: "PgUUID";
|
|
3515
|
+
data: string;
|
|
3516
|
+
driverParam: string;
|
|
3517
|
+
notNull: true;
|
|
3518
|
+
hasDefault: true;
|
|
3519
|
+
isPrimaryKey: true;
|
|
3520
|
+
isAutoincrement: false;
|
|
3521
|
+
hasRuntimeDefault: false;
|
|
3522
|
+
enumValues: undefined;
|
|
3523
|
+
baseColumn: never;
|
|
3524
|
+
identity: undefined;
|
|
3525
|
+
generated: undefined;
|
|
3526
|
+
}, {}, {}>;
|
|
3527
|
+
slug: drizzle_orm_pg_core.PgColumn<{
|
|
3528
|
+
name: "slug";
|
|
3529
|
+
tableName: "items";
|
|
3530
|
+
dataType: "string";
|
|
3531
|
+
columnType: "PgText";
|
|
3532
|
+
data: string;
|
|
3533
|
+
driverParam: string;
|
|
3534
|
+
notNull: true;
|
|
3535
|
+
hasDefault: false;
|
|
3536
|
+
isPrimaryKey: false;
|
|
3537
|
+
isAutoincrement: false;
|
|
3538
|
+
hasRuntimeDefault: false;
|
|
3539
|
+
enumValues: [string, ...string[]];
|
|
3540
|
+
baseColumn: never;
|
|
3541
|
+
identity: undefined;
|
|
3542
|
+
generated: undefined;
|
|
3543
|
+
}, {}, {}>;
|
|
3544
|
+
gameId: drizzle_orm_pg_core.PgColumn<{
|
|
3545
|
+
name: "game_id";
|
|
3546
|
+
tableName: "items";
|
|
3547
|
+
dataType: "string";
|
|
3548
|
+
columnType: "PgUUID";
|
|
3549
|
+
data: string;
|
|
3550
|
+
driverParam: string;
|
|
3551
|
+
notNull: false;
|
|
3552
|
+
hasDefault: false;
|
|
3553
|
+
isPrimaryKey: false;
|
|
3554
|
+
isAutoincrement: false;
|
|
3555
|
+
hasRuntimeDefault: false;
|
|
3556
|
+
enumValues: undefined;
|
|
3557
|
+
baseColumn: never;
|
|
3558
|
+
identity: undefined;
|
|
3559
|
+
generated: undefined;
|
|
3560
|
+
}, {}, {}>;
|
|
3561
|
+
displayName: drizzle_orm_pg_core.PgColumn<{
|
|
3562
|
+
name: "display_name";
|
|
3563
|
+
tableName: "items";
|
|
3564
|
+
dataType: "string";
|
|
3565
|
+
columnType: "PgText";
|
|
3566
|
+
data: string;
|
|
3567
|
+
driverParam: string;
|
|
3568
|
+
notNull: true;
|
|
3569
|
+
hasDefault: false;
|
|
3570
|
+
isPrimaryKey: false;
|
|
3571
|
+
isAutoincrement: false;
|
|
3572
|
+
hasRuntimeDefault: false;
|
|
3573
|
+
enumValues: [string, ...string[]];
|
|
3574
|
+
baseColumn: never;
|
|
3575
|
+
identity: undefined;
|
|
3576
|
+
generated: undefined;
|
|
3577
|
+
}, {}, {}>;
|
|
3578
|
+
description: drizzle_orm_pg_core.PgColumn<{
|
|
3579
|
+
name: "description";
|
|
3580
|
+
tableName: "items";
|
|
3581
|
+
dataType: "string";
|
|
3582
|
+
columnType: "PgText";
|
|
3583
|
+
data: string;
|
|
3584
|
+
driverParam: string;
|
|
3585
|
+
notNull: false;
|
|
3586
|
+
hasDefault: false;
|
|
3587
|
+
isPrimaryKey: false;
|
|
3588
|
+
isAutoincrement: false;
|
|
3589
|
+
hasRuntimeDefault: false;
|
|
3590
|
+
enumValues: [string, ...string[]];
|
|
3591
|
+
baseColumn: never;
|
|
3592
|
+
identity: undefined;
|
|
3593
|
+
generated: undefined;
|
|
3594
|
+
}, {}, {}>;
|
|
3595
|
+
type: drizzle_orm_pg_core.PgColumn<{
|
|
3596
|
+
name: "type";
|
|
3597
|
+
tableName: "items";
|
|
3598
|
+
dataType: "string";
|
|
3599
|
+
columnType: "PgEnumColumn";
|
|
3600
|
+
data: "accessory" | "badge" | "collectible" | "consumable" | "currency" | "other" | "trophy" | "unlock" | "upgrade";
|
|
3601
|
+
driverParam: string;
|
|
3602
|
+
notNull: true;
|
|
3603
|
+
hasDefault: true;
|
|
3604
|
+
isPrimaryKey: false;
|
|
3605
|
+
isAutoincrement: false;
|
|
3606
|
+
hasRuntimeDefault: false;
|
|
3607
|
+
enumValues: ["currency", "badge", "trophy", "collectible", "consumable", "unlock", "upgrade", "accessory", "other"];
|
|
3608
|
+
baseColumn: never;
|
|
3609
|
+
identity: undefined;
|
|
3610
|
+
generated: undefined;
|
|
3611
|
+
}, {}, {}>;
|
|
3612
|
+
isPlaceable: drizzle_orm_pg_core.PgColumn<{
|
|
3613
|
+
name: "is_placeable";
|
|
3614
|
+
tableName: "items";
|
|
3615
|
+
dataType: "boolean";
|
|
3616
|
+
columnType: "PgBoolean";
|
|
3617
|
+
data: boolean;
|
|
3618
|
+
driverParam: boolean;
|
|
3619
|
+
notNull: true;
|
|
3620
|
+
hasDefault: true;
|
|
3621
|
+
isPrimaryKey: false;
|
|
3622
|
+
isAutoincrement: false;
|
|
3623
|
+
hasRuntimeDefault: false;
|
|
3624
|
+
enumValues: undefined;
|
|
3625
|
+
baseColumn: never;
|
|
3626
|
+
identity: undefined;
|
|
3627
|
+
generated: undefined;
|
|
3628
|
+
}, {}, {}>;
|
|
3629
|
+
imageUrl: drizzle_orm_pg_core.PgColumn<{
|
|
3630
|
+
name: "image_url";
|
|
3631
|
+
tableName: "items";
|
|
3632
|
+
dataType: "string";
|
|
3633
|
+
columnType: "PgText";
|
|
3634
|
+
data: string;
|
|
3635
|
+
driverParam: string;
|
|
3636
|
+
notNull: false;
|
|
3637
|
+
hasDefault: false;
|
|
3638
|
+
isPrimaryKey: false;
|
|
3639
|
+
isAutoincrement: false;
|
|
3640
|
+
hasRuntimeDefault: false;
|
|
3641
|
+
enumValues: [string, ...string[]];
|
|
3642
|
+
baseColumn: never;
|
|
3643
|
+
identity: undefined;
|
|
3644
|
+
generated: undefined;
|
|
3645
|
+
}, {}, {}>;
|
|
3646
|
+
metadata: drizzle_orm_pg_core.PgColumn<{
|
|
3647
|
+
name: "metadata";
|
|
3648
|
+
tableName: "items";
|
|
3649
|
+
dataType: "json";
|
|
3650
|
+
columnType: "PgJsonb";
|
|
3651
|
+
data: unknown;
|
|
3652
|
+
driverParam: unknown;
|
|
3653
|
+
notNull: false;
|
|
3654
|
+
hasDefault: true;
|
|
3655
|
+
isPrimaryKey: false;
|
|
3656
|
+
isAutoincrement: false;
|
|
3657
|
+
hasRuntimeDefault: false;
|
|
3658
|
+
enumValues: undefined;
|
|
3659
|
+
baseColumn: never;
|
|
3660
|
+
identity: undefined;
|
|
3661
|
+
generated: undefined;
|
|
3662
|
+
}, {}, {}>;
|
|
3663
|
+
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
3664
|
+
name: "created_at";
|
|
3665
|
+
tableName: "items";
|
|
3666
|
+
dataType: "date";
|
|
3667
|
+
columnType: "PgTimestamp";
|
|
3668
|
+
data: Date;
|
|
3669
|
+
driverParam: string;
|
|
3670
|
+
notNull: true;
|
|
3671
|
+
hasDefault: true;
|
|
3672
|
+
isPrimaryKey: false;
|
|
3673
|
+
isAutoincrement: false;
|
|
3674
|
+
hasRuntimeDefault: false;
|
|
3675
|
+
enumValues: undefined;
|
|
3676
|
+
baseColumn: never;
|
|
3677
|
+
identity: undefined;
|
|
3678
|
+
generated: undefined;
|
|
3679
|
+
}, {}, {}>;
|
|
3680
|
+
}, {
|
|
3681
|
+
imageUrl: z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>>;
|
|
3682
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
3683
|
+
}>;
|
|
3684
|
+
declare const UpdateItemSchema: z.ZodObject<Omit<{
|
|
3685
|
+
id: z.ZodOptional<z.ZodString>;
|
|
3686
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
3687
|
+
gameId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
3688
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
3689
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
3690
|
+
type: z.ZodOptional<z.ZodEnum<["currency", "badge", "trophy", "collectible", "consumable", "unlock", "upgrade", "accessory", "other"]>>;
|
|
3691
|
+
isPlaceable: z.ZodOptional<z.ZodBoolean>;
|
|
3692
|
+
imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
3693
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
3694
|
+
createdAt: z.ZodOptional<z.ZodDate>;
|
|
3695
|
+
}, "createdAt" | "id">, "strip", z.ZodTypeAny, {
|
|
3696
|
+
slug?: string | undefined;
|
|
3697
|
+
gameId?: string | null | undefined;
|
|
3698
|
+
displayName?: string | undefined;
|
|
3699
|
+
description?: string | null | undefined;
|
|
3700
|
+
type?: "accessory" | "badge" | "collectible" | "consumable" | "currency" | "other" | "trophy" | "unlock" | "upgrade" | undefined;
|
|
3701
|
+
isPlaceable?: boolean | undefined;
|
|
3702
|
+
imageUrl?: string | null | undefined;
|
|
3703
|
+
metadata?: Record<string, unknown> | undefined;
|
|
3704
|
+
}, {
|
|
3705
|
+
slug?: string | undefined;
|
|
3706
|
+
gameId?: string | null | undefined;
|
|
3707
|
+
displayName?: string | undefined;
|
|
3708
|
+
description?: string | null | undefined;
|
|
3709
|
+
type?: "accessory" | "badge" | "collectible" | "consumable" | "currency" | "other" | "trophy" | "unlock" | "upgrade" | undefined;
|
|
3710
|
+
isPlaceable?: boolean | undefined;
|
|
3711
|
+
imageUrl?: string | null | undefined;
|
|
3712
|
+
metadata?: Record<string, unknown> | undefined;
|
|
3713
|
+
}>;
|
|
3714
|
+
declare const InsertCurrencySchema: drizzle_zod.BuildSchema<"insert", {
|
|
3715
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
3716
|
+
name: "id";
|
|
3717
|
+
tableName: "currencies";
|
|
3718
|
+
dataType: "string";
|
|
3719
|
+
columnType: "PgUUID";
|
|
3720
|
+
data: string;
|
|
3721
|
+
driverParam: string;
|
|
3722
|
+
notNull: true;
|
|
3723
|
+
hasDefault: true;
|
|
3724
|
+
isPrimaryKey: true;
|
|
3725
|
+
isAutoincrement: false;
|
|
3726
|
+
hasRuntimeDefault: false;
|
|
3727
|
+
enumValues: undefined;
|
|
3728
|
+
baseColumn: never;
|
|
3729
|
+
identity: undefined;
|
|
3730
|
+
generated: undefined;
|
|
3731
|
+
}, {}, {}>;
|
|
3732
|
+
itemId: drizzle_orm_pg_core.PgColumn<{
|
|
3733
|
+
name: "item_id";
|
|
3734
|
+
tableName: "currencies";
|
|
3735
|
+
dataType: "string";
|
|
3736
|
+
columnType: "PgUUID";
|
|
3737
|
+
data: string;
|
|
3738
|
+
driverParam: string;
|
|
3739
|
+
notNull: true;
|
|
3740
|
+
hasDefault: false;
|
|
3741
|
+
isPrimaryKey: false;
|
|
3742
|
+
isAutoincrement: false;
|
|
3743
|
+
hasRuntimeDefault: false;
|
|
3744
|
+
enumValues: undefined;
|
|
3745
|
+
baseColumn: never;
|
|
3746
|
+
identity: undefined;
|
|
3747
|
+
generated: undefined;
|
|
3748
|
+
}, {}, {}>;
|
|
3749
|
+
symbol: drizzle_orm_pg_core.PgColumn<{
|
|
3750
|
+
name: "symbol";
|
|
3751
|
+
tableName: "currencies";
|
|
3752
|
+
dataType: "string";
|
|
3753
|
+
columnType: "PgText";
|
|
3754
|
+
data: string;
|
|
3755
|
+
driverParam: string;
|
|
3756
|
+
notNull: false;
|
|
3757
|
+
hasDefault: false;
|
|
3758
|
+
isPrimaryKey: false;
|
|
3759
|
+
isAutoincrement: false;
|
|
3760
|
+
hasRuntimeDefault: false;
|
|
3761
|
+
enumValues: [string, ...string[]];
|
|
3762
|
+
baseColumn: never;
|
|
3763
|
+
identity: undefined;
|
|
3764
|
+
generated: undefined;
|
|
3765
|
+
}, {}, {}>;
|
|
3766
|
+
isPrimary: drizzle_orm_pg_core.PgColumn<{
|
|
3767
|
+
name: "is_primary";
|
|
3768
|
+
tableName: "currencies";
|
|
3769
|
+
dataType: "boolean";
|
|
3770
|
+
columnType: "PgBoolean";
|
|
3771
|
+
data: boolean;
|
|
3772
|
+
driverParam: boolean;
|
|
3773
|
+
notNull: true;
|
|
3774
|
+
hasDefault: true;
|
|
3775
|
+
isPrimaryKey: false;
|
|
3776
|
+
isAutoincrement: false;
|
|
3777
|
+
hasRuntimeDefault: false;
|
|
3778
|
+
enumValues: undefined;
|
|
3779
|
+
baseColumn: never;
|
|
3780
|
+
identity: undefined;
|
|
3781
|
+
generated: undefined;
|
|
3782
|
+
}, {}, {}>;
|
|
3783
|
+
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
3784
|
+
name: "created_at";
|
|
3785
|
+
tableName: "currencies";
|
|
3786
|
+
dataType: "date";
|
|
3787
|
+
columnType: "PgTimestamp";
|
|
3788
|
+
data: Date;
|
|
3789
|
+
driverParam: string;
|
|
3790
|
+
notNull: true;
|
|
3791
|
+
hasDefault: true;
|
|
3792
|
+
isPrimaryKey: false;
|
|
3793
|
+
isAutoincrement: false;
|
|
3794
|
+
hasRuntimeDefault: false;
|
|
3795
|
+
enumValues: undefined;
|
|
3796
|
+
baseColumn: never;
|
|
3797
|
+
identity: undefined;
|
|
3798
|
+
generated: undefined;
|
|
3799
|
+
}, {}, {}>;
|
|
3800
|
+
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
3801
|
+
name: "updated_at";
|
|
3802
|
+
tableName: "currencies";
|
|
3803
|
+
dataType: "date";
|
|
3804
|
+
columnType: "PgTimestamp";
|
|
3805
|
+
data: Date;
|
|
3806
|
+
driverParam: string;
|
|
3807
|
+
notNull: false;
|
|
3808
|
+
hasDefault: true;
|
|
3809
|
+
isPrimaryKey: false;
|
|
3810
|
+
isAutoincrement: false;
|
|
3811
|
+
hasRuntimeDefault: false;
|
|
3812
|
+
enumValues: undefined;
|
|
3813
|
+
baseColumn: never;
|
|
3814
|
+
identity: undefined;
|
|
3815
|
+
generated: undefined;
|
|
3816
|
+
}, {}, {}>;
|
|
3817
|
+
}, {
|
|
3818
|
+
itemId: z.ZodString;
|
|
3819
|
+
isPrimary: z.ZodDefault<z.ZodBoolean>;
|
|
3820
|
+
}>;
|
|
3821
|
+
declare const UpdateCurrencySchema: z.ZodObject<{
|
|
3822
|
+
itemId: z.ZodOptional<z.ZodString>;
|
|
3823
|
+
symbol: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
3824
|
+
isPrimary: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
2367
3825
|
}, "strip", z.ZodTypeAny, {
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
3826
|
+
itemId?: string | undefined;
|
|
3827
|
+
symbol?: string | null | undefined;
|
|
3828
|
+
isPrimary?: boolean | undefined;
|
|
2371
3829
|
}, {
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
3830
|
+
itemId?: string | undefined;
|
|
3831
|
+
symbol?: string | null | undefined;
|
|
3832
|
+
isPrimary?: boolean | undefined;
|
|
3833
|
+
}>;
|
|
3834
|
+
declare const InsertShopListingSchema: drizzle_zod.BuildSchema<"insert", {
|
|
3835
|
+
id: drizzle_orm_pg_core.PgColumn<{
|
|
3836
|
+
name: "id";
|
|
3837
|
+
tableName: "shop_listings";
|
|
3838
|
+
dataType: "string";
|
|
3839
|
+
columnType: "PgUUID";
|
|
3840
|
+
data: string;
|
|
3841
|
+
driverParam: string;
|
|
3842
|
+
notNull: true;
|
|
3843
|
+
hasDefault: true;
|
|
3844
|
+
isPrimaryKey: true;
|
|
3845
|
+
isAutoincrement: false;
|
|
3846
|
+
hasRuntimeDefault: false;
|
|
3847
|
+
enumValues: undefined;
|
|
3848
|
+
baseColumn: never;
|
|
3849
|
+
identity: undefined;
|
|
3850
|
+
generated: undefined;
|
|
3851
|
+
}, {}, {}>;
|
|
3852
|
+
itemId: drizzle_orm_pg_core.PgColumn<{
|
|
3853
|
+
name: "item_id";
|
|
3854
|
+
tableName: "shop_listings";
|
|
3855
|
+
dataType: "string";
|
|
3856
|
+
columnType: "PgUUID";
|
|
3857
|
+
data: string;
|
|
3858
|
+
driverParam: string;
|
|
3859
|
+
notNull: true;
|
|
3860
|
+
hasDefault: false;
|
|
3861
|
+
isPrimaryKey: false;
|
|
3862
|
+
isAutoincrement: false;
|
|
3863
|
+
hasRuntimeDefault: false;
|
|
3864
|
+
enumValues: undefined;
|
|
3865
|
+
baseColumn: never;
|
|
3866
|
+
identity: undefined;
|
|
3867
|
+
generated: undefined;
|
|
3868
|
+
}, {}, {}>;
|
|
3869
|
+
currencyId: drizzle_orm_pg_core.PgColumn<{
|
|
3870
|
+
name: "currency_id";
|
|
3871
|
+
tableName: "shop_listings";
|
|
3872
|
+
dataType: "string";
|
|
3873
|
+
columnType: "PgUUID";
|
|
3874
|
+
data: string;
|
|
3875
|
+
driverParam: string;
|
|
3876
|
+
notNull: true;
|
|
3877
|
+
hasDefault: false;
|
|
3878
|
+
isPrimaryKey: false;
|
|
3879
|
+
isAutoincrement: false;
|
|
3880
|
+
hasRuntimeDefault: false;
|
|
3881
|
+
enumValues: undefined;
|
|
3882
|
+
baseColumn: never;
|
|
3883
|
+
identity: undefined;
|
|
3884
|
+
generated: undefined;
|
|
3885
|
+
}, {}, {}>;
|
|
3886
|
+
price: drizzle_orm_pg_core.PgColumn<{
|
|
3887
|
+
name: "price";
|
|
3888
|
+
tableName: "shop_listings";
|
|
3889
|
+
dataType: "number";
|
|
3890
|
+
columnType: "PgInteger";
|
|
3891
|
+
data: number;
|
|
3892
|
+
driverParam: string | number;
|
|
3893
|
+
notNull: true;
|
|
3894
|
+
hasDefault: false;
|
|
3895
|
+
isPrimaryKey: false;
|
|
3896
|
+
isAutoincrement: false;
|
|
3897
|
+
hasRuntimeDefault: false;
|
|
3898
|
+
enumValues: undefined;
|
|
3899
|
+
baseColumn: never;
|
|
3900
|
+
identity: undefined;
|
|
3901
|
+
generated: undefined;
|
|
3902
|
+
}, {}, {}>;
|
|
3903
|
+
sellBackPercentage: drizzle_orm_pg_core.PgColumn<{
|
|
3904
|
+
name: "sell_back_percentage";
|
|
3905
|
+
tableName: "shop_listings";
|
|
3906
|
+
dataType: "number";
|
|
3907
|
+
columnType: "PgInteger";
|
|
3908
|
+
data: number;
|
|
3909
|
+
driverParam: string | number;
|
|
3910
|
+
notNull: false;
|
|
3911
|
+
hasDefault: false;
|
|
3912
|
+
isPrimaryKey: false;
|
|
3913
|
+
isAutoincrement: false;
|
|
3914
|
+
hasRuntimeDefault: false;
|
|
3915
|
+
enumValues: undefined;
|
|
3916
|
+
baseColumn: never;
|
|
3917
|
+
identity: undefined;
|
|
3918
|
+
generated: undefined;
|
|
3919
|
+
}, {}, {}>;
|
|
3920
|
+
stock: drizzle_orm_pg_core.PgColumn<{
|
|
3921
|
+
name: "stock";
|
|
3922
|
+
tableName: "shop_listings";
|
|
3923
|
+
dataType: "number";
|
|
3924
|
+
columnType: "PgInteger";
|
|
3925
|
+
data: number;
|
|
3926
|
+
driverParam: string | number;
|
|
3927
|
+
notNull: false;
|
|
3928
|
+
hasDefault: false;
|
|
3929
|
+
isPrimaryKey: false;
|
|
3930
|
+
isAutoincrement: false;
|
|
3931
|
+
hasRuntimeDefault: false;
|
|
3932
|
+
enumValues: undefined;
|
|
3933
|
+
baseColumn: never;
|
|
3934
|
+
identity: undefined;
|
|
3935
|
+
generated: undefined;
|
|
3936
|
+
}, {}, {}>;
|
|
3937
|
+
isActive: drizzle_orm_pg_core.PgColumn<{
|
|
3938
|
+
name: "is_active";
|
|
3939
|
+
tableName: "shop_listings";
|
|
3940
|
+
dataType: "boolean";
|
|
3941
|
+
columnType: "PgBoolean";
|
|
3942
|
+
data: boolean;
|
|
3943
|
+
driverParam: boolean;
|
|
3944
|
+
notNull: true;
|
|
3945
|
+
hasDefault: true;
|
|
3946
|
+
isPrimaryKey: false;
|
|
3947
|
+
isAutoincrement: false;
|
|
3948
|
+
hasRuntimeDefault: false;
|
|
3949
|
+
enumValues: undefined;
|
|
3950
|
+
baseColumn: never;
|
|
3951
|
+
identity: undefined;
|
|
3952
|
+
generated: undefined;
|
|
3953
|
+
}, {}, {}>;
|
|
3954
|
+
availableFrom: drizzle_orm_pg_core.PgColumn<{
|
|
3955
|
+
name: "available_from";
|
|
3956
|
+
tableName: "shop_listings";
|
|
3957
|
+
dataType: "date";
|
|
3958
|
+
columnType: "PgTimestamp";
|
|
3959
|
+
data: Date;
|
|
3960
|
+
driverParam: string;
|
|
3961
|
+
notNull: false;
|
|
3962
|
+
hasDefault: false;
|
|
3963
|
+
isPrimaryKey: false;
|
|
3964
|
+
isAutoincrement: false;
|
|
3965
|
+
hasRuntimeDefault: false;
|
|
3966
|
+
enumValues: undefined;
|
|
3967
|
+
baseColumn: never;
|
|
3968
|
+
identity: undefined;
|
|
3969
|
+
generated: undefined;
|
|
3970
|
+
}, {}, {}>;
|
|
3971
|
+
availableUntil: drizzle_orm_pg_core.PgColumn<{
|
|
3972
|
+
name: "available_until";
|
|
3973
|
+
tableName: "shop_listings";
|
|
3974
|
+
dataType: "date";
|
|
3975
|
+
columnType: "PgTimestamp";
|
|
3976
|
+
data: Date;
|
|
3977
|
+
driverParam: string;
|
|
3978
|
+
notNull: false;
|
|
3979
|
+
hasDefault: false;
|
|
3980
|
+
isPrimaryKey: false;
|
|
3981
|
+
isAutoincrement: false;
|
|
3982
|
+
hasRuntimeDefault: false;
|
|
3983
|
+
enumValues: undefined;
|
|
3984
|
+
baseColumn: never;
|
|
3985
|
+
identity: undefined;
|
|
3986
|
+
generated: undefined;
|
|
3987
|
+
}, {}, {}>;
|
|
3988
|
+
createdAt: drizzle_orm_pg_core.PgColumn<{
|
|
3989
|
+
name: "created_at";
|
|
3990
|
+
tableName: "shop_listings";
|
|
3991
|
+
dataType: "date";
|
|
3992
|
+
columnType: "PgTimestamp";
|
|
3993
|
+
data: Date;
|
|
3994
|
+
driverParam: string;
|
|
3995
|
+
notNull: true;
|
|
3996
|
+
hasDefault: true;
|
|
3997
|
+
isPrimaryKey: false;
|
|
3998
|
+
isAutoincrement: false;
|
|
3999
|
+
hasRuntimeDefault: false;
|
|
4000
|
+
enumValues: undefined;
|
|
4001
|
+
baseColumn: never;
|
|
4002
|
+
identity: undefined;
|
|
4003
|
+
generated: undefined;
|
|
4004
|
+
}, {}, {}>;
|
|
4005
|
+
updatedAt: drizzle_orm_pg_core.PgColumn<{
|
|
4006
|
+
name: "updated_at";
|
|
4007
|
+
tableName: "shop_listings";
|
|
4008
|
+
dataType: "date";
|
|
4009
|
+
columnType: "PgTimestamp";
|
|
4010
|
+
data: Date;
|
|
4011
|
+
driverParam: string;
|
|
4012
|
+
notNull: false;
|
|
4013
|
+
hasDefault: true;
|
|
4014
|
+
isPrimaryKey: false;
|
|
4015
|
+
isAutoincrement: false;
|
|
4016
|
+
hasRuntimeDefault: false;
|
|
4017
|
+
enumValues: undefined;
|
|
4018
|
+
baseColumn: never;
|
|
4019
|
+
identity: undefined;
|
|
4020
|
+
generated: undefined;
|
|
4021
|
+
}, {}, {}>;
|
|
4022
|
+
}, {
|
|
4023
|
+
price: z.ZodNumber;
|
|
4024
|
+
sellBackPercentage: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
4025
|
+
stock: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
4026
|
+
isActive: z.ZodDefault<z.ZodBoolean>;
|
|
4027
|
+
}>;
|
|
4028
|
+
declare const UpdateShopListingSchema: z.ZodObject<{
|
|
4029
|
+
id: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
4030
|
+
itemId: z.ZodOptional<z.ZodString>;
|
|
4031
|
+
currencyId: z.ZodOptional<z.ZodString>;
|
|
4032
|
+
price: z.ZodOptional<z.ZodNumber>;
|
|
4033
|
+
sellBackPercentage: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
4034
|
+
stock: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
|
|
4035
|
+
isActive: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
4036
|
+
availableFrom: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodDate>>>;
|
|
4037
|
+
availableUntil: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodDate>>>;
|
|
4038
|
+
createdAt: z.ZodOptional<z.ZodOptional<z.ZodDate>>;
|
|
4039
|
+
updatedAt: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodDate>>>;
|
|
4040
|
+
}, "strip", z.ZodTypeAny, {
|
|
4041
|
+
id?: string | undefined;
|
|
4042
|
+
itemId?: string | undefined;
|
|
4043
|
+
currencyId?: string | undefined;
|
|
4044
|
+
price?: number | undefined;
|
|
4045
|
+
sellBackPercentage?: number | null | undefined;
|
|
4046
|
+
stock?: number | null | undefined;
|
|
4047
|
+
isActive?: boolean | undefined;
|
|
4048
|
+
availableFrom?: Date | null | undefined;
|
|
4049
|
+
availableUntil?: Date | null | undefined;
|
|
4050
|
+
createdAt?: Date | undefined;
|
|
4051
|
+
updatedAt?: Date | null | undefined;
|
|
4052
|
+
}, {
|
|
4053
|
+
id?: string | undefined;
|
|
4054
|
+
itemId?: string | undefined;
|
|
4055
|
+
currencyId?: string | undefined;
|
|
4056
|
+
price?: number | undefined;
|
|
4057
|
+
sellBackPercentage?: number | null | undefined;
|
|
4058
|
+
stock?: number | null | undefined;
|
|
4059
|
+
isActive?: boolean | undefined;
|
|
4060
|
+
availableFrom?: Date | null | undefined;
|
|
4061
|
+
availableUntil?: Date | null | undefined;
|
|
4062
|
+
createdAt?: Date | undefined;
|
|
4063
|
+
updatedAt?: Date | null | undefined;
|
|
2375
4064
|
}>;
|
|
2376
4065
|
|
|
2377
|
-
declare enum AchievementCompletionType {
|
|
2378
|
-
TIME_PLAYED_SESSION = "time_played_session",
|
|
2379
|
-
INTERACTION = "interaction",
|
|
2380
|
-
LEADERBOARD_RANK = "leaderboard_rank",
|
|
2381
|
-
FIRST_SCORE = "first_score",
|
|
2382
|
-
PERSONAL_BEST = "personal_best"
|
|
2383
|
-
}
|
|
2384
|
-
type AchievementScopeType = (typeof achievementScopeEnum.enumValues)[number];
|
|
2385
|
-
type Achievement = typeof achievements.$inferSelect;
|
|
2386
|
-
/**
|
|
2387
|
-
* Current-scope achievement with computed status and window metadata
|
|
2388
|
-
*/
|
|
2389
|
-
interface AchievementCurrent {
|
|
2390
|
-
id: string;
|
|
2391
|
-
title: string;
|
|
2392
|
-
description?: string | null;
|
|
2393
|
-
scope: AchievementScopeType;
|
|
2394
|
-
rewardCredits: number;
|
|
2395
|
-
limit: number;
|
|
2396
|
-
completionType: AchievementCompletionType;
|
|
2397
|
-
completionConfig: Record<string, unknown>;
|
|
2398
|
-
target: Record<string, unknown>;
|
|
2399
|
-
active: boolean;
|
|
2400
|
-
createdAt?: Date;
|
|
2401
|
-
updatedAt?: Date;
|
|
2402
|
-
status: 'available' | 'completed';
|
|
2403
|
-
scopeKey: string;
|
|
2404
|
-
windowStart: string;
|
|
2405
|
-
windowEnd: string;
|
|
2406
|
-
}
|
|
2407
|
-
/**
|
|
2408
|
-
* Achievement progress submission response
|
|
2409
|
-
* Used in POST /api/achievements/progress
|
|
2410
|
-
*/
|
|
2411
|
-
interface AchievementProgressResponse {
|
|
2412
|
-
achievementId: string;
|
|
2413
|
-
status: 'completed' | 'already_completed';
|
|
2414
|
-
rewardCredits: number;
|
|
2415
|
-
scopeKey: string;
|
|
2416
|
-
createdAt: string;
|
|
2417
|
-
}
|
|
2418
|
-
|
|
2419
|
-
type CharacterComponent = typeof characterComponents.$inferSelect;
|
|
2420
|
-
type PlayerCharacter = typeof playerCharacters.$inferSelect & {
|
|
2421
|
-
accessories?: PlayerCharacterAccessory[];
|
|
2422
|
-
};
|
|
2423
|
-
type PlayerCharacterAccessory = typeof playerCharacterAccessories.$inferSelect;
|
|
2424
4066
|
type GameRow = typeof games.$inferSelect;
|
|
2425
4067
|
type BaseGame = Omit<GameRow, 'gameType' | 'deploymentUrl' | 'externalUrl'>;
|
|
2426
4068
|
type HostedGame = BaseGame & {
|
|
@@ -2434,145 +4076,204 @@ type ExternalGame = BaseGame & {
|
|
|
2434
4076
|
externalUrl: string;
|
|
2435
4077
|
};
|
|
2436
4078
|
type Game = HostedGame | ExternalGame;
|
|
2437
|
-
type
|
|
2438
|
-
type
|
|
2439
|
-
|
|
2440
|
-
type
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
type
|
|
4079
|
+
type GameSessionRow = typeof gameSessions.$inferSelect;
|
|
4080
|
+
type GameCustomHostnameRow = typeof gameCustomHostnames.$inferSelect;
|
|
4081
|
+
|
|
4082
|
+
type UpsertGameMetadataInput = z.infer<typeof UpsertGameMetadataSchema>;
|
|
4083
|
+
|
|
4084
|
+
type MapRow = typeof maps.$inferSelect;
|
|
4085
|
+
type MapElementRow = typeof mapElements.$inferSelect;
|
|
4086
|
+
type MapObjectRow = typeof mapObjects.$inferSelect;
|
|
4087
|
+
|
|
4088
|
+
type CharacterComponentRow = typeof characterComponents.$inferSelect;
|
|
4089
|
+
type PlayerCharacterRow = typeof playerCharacters.$inferSelect & {
|
|
4090
|
+
accessories?: PlayerCharacterAccessoryRow[];
|
|
4091
|
+
};
|
|
4092
|
+
type PlayerCharacterAccessoryRow = typeof playerCharacterAccessories.$inferSelect;
|
|
4093
|
+
|
|
4094
|
+
type ItemRow = typeof items.$inferSelect;
|
|
4095
|
+
type InventoryItemRow = typeof inventoryItems.$inferSelect;
|
|
4096
|
+
type CurrencyRow = typeof currencies.$inferSelect;
|
|
4097
|
+
type ShopListingRow = typeof shopListings.$inferSelect;
|
|
4098
|
+
type InsertItemInput = z.infer<typeof InsertItemSchema>;
|
|
4099
|
+
type UpdateItemInput = z.infer<typeof UpdateItemSchema>;
|
|
4100
|
+
type InsertCurrencyInput = z.infer<typeof InsertCurrencySchema>;
|
|
4101
|
+
type UpdateCurrencyInput = z.infer<typeof UpdateCurrencySchema>;
|
|
4102
|
+
type InsertShopListingInput = z.infer<typeof InsertShopListingSchema>;
|
|
4103
|
+
type UpdateShopListingInput = z.infer<typeof UpdateShopListingSchema>;
|
|
4104
|
+
|
|
4105
|
+
type UserRow = typeof users.$inferSelect;
|
|
2451
4106
|
|
|
2452
|
-
type User = typeof users.$inferSelect;
|
|
2453
|
-
type UserRoleEnumType = (typeof userRoleEnum.enumValues)[number];
|
|
2454
|
-
type DeveloperStatusResponse = z.infer<typeof DeveloperStatusResponseSchema>;
|
|
2455
4107
|
/**
|
|
2456
|
-
*
|
|
4108
|
+
* Cross-Domain Composite Types
|
|
4109
|
+
* Types that combine data from multiple domains
|
|
2457
4110
|
*/
|
|
2458
|
-
type
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
orgId?: string;
|
|
4111
|
+
type CharacterComponentWithSpriteUrl = CharacterComponentRow & {
|
|
4112
|
+
spriteSheetUrl: string;
|
|
4113
|
+
};
|
|
4114
|
+
type InventoryItemWithItem = InventoryItemRow & {
|
|
4115
|
+
item: ItemRow;
|
|
2464
4116
|
};
|
|
2465
4117
|
/**
|
|
2466
|
-
*
|
|
4118
|
+
* Game with optional manifest metadata from build tools
|
|
2467
4119
|
*/
|
|
2468
|
-
type
|
|
4120
|
+
type FetchedGame = (HostedGame | ExternalGame | GameRow) & {
|
|
4121
|
+
manifest?: ManifestV1;
|
|
4122
|
+
};
|
|
2469
4123
|
/**
|
|
2470
|
-
*
|
|
4124
|
+
* Session Bootstrap Payload Types
|
|
4125
|
+
* Complex types that combine user, inventory, game, and map data for client initialization
|
|
2471
4126
|
*/
|
|
2472
|
-
|
|
4127
|
+
interface PlayerProfile {
|
|
4128
|
+
userId: UserRow['id'];
|
|
4129
|
+
username: UserRow['username'];
|
|
4130
|
+
name: UserRow['name'];
|
|
4131
|
+
image?: UserRow['image'];
|
|
4132
|
+
role?: UserRow['role'];
|
|
4133
|
+
level?: number;
|
|
4134
|
+
experience?: number;
|
|
4135
|
+
experienceToNextLevel?: number;
|
|
4136
|
+
characterCreated?: UserRow['characterCreated'];
|
|
4137
|
+
hasTimebackAccount?: boolean;
|
|
4138
|
+
}
|
|
4139
|
+
interface PlayerCurrency {
|
|
4140
|
+
currencySystemId: CurrencyRow['id'];
|
|
4141
|
+
itemId: ItemRow['id'];
|
|
4142
|
+
name: ItemRow['displayName'];
|
|
4143
|
+
symbol?: CurrencyRow['symbol'];
|
|
4144
|
+
imageUrl?: ItemRow['imageUrl'];
|
|
4145
|
+
isPrimary: CurrencyRow['isPrimary'];
|
|
4146
|
+
balance: number;
|
|
4147
|
+
}
|
|
4148
|
+
interface PlayerInventoryItem {
|
|
4149
|
+
inventoryItemEntryId: InventoryItemRow['id'];
|
|
4150
|
+
item: ItemRow;
|
|
4151
|
+
quantity: InventoryItemRow['quantity'];
|
|
4152
|
+
updatedAt: InventoryItemRow['updatedAt'];
|
|
4153
|
+
}
|
|
4154
|
+
interface PlayerLocation {
|
|
4155
|
+
mapIdentifier: MapRow['identifier'];
|
|
4156
|
+
mapDisplayName: MapRow['displayName'];
|
|
4157
|
+
tileX?: number;
|
|
4158
|
+
tileY?: number;
|
|
4159
|
+
worldX?: number;
|
|
4160
|
+
worldY?: number;
|
|
4161
|
+
direction?: 'up' | 'down' | 'left' | 'right';
|
|
4162
|
+
}
|
|
4163
|
+
interface PlayerSessionPayload {
|
|
4164
|
+
profile: PlayerProfile;
|
|
4165
|
+
currencies: PlayerCurrency[];
|
|
4166
|
+
inventory: PlayerInventoryItem[];
|
|
4167
|
+
ownedGameIds: Game['id'][];
|
|
4168
|
+
currentLocation?: PlayerLocation;
|
|
4169
|
+
characterCreated?: UserRow['characterCreated'];
|
|
4170
|
+
playerCharacter?: PlayerCharacterRow | null;
|
|
4171
|
+
}
|
|
2473
4172
|
/**
|
|
2474
|
-
*
|
|
2475
|
-
*
|
|
4173
|
+
* Map-related Composite Types
|
|
4174
|
+
* DB row + joined game/item data
|
|
2476
4175
|
*/
|
|
2477
|
-
type
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
/** Organization type (school, district, etc.) */
|
|
2483
|
-
type: TimebackOrgType | string;
|
|
2484
|
-
/** Whether this is the user's primary organization */
|
|
2485
|
-
isPrimary: boolean;
|
|
4176
|
+
type MapElementWithGame = MapElementRow & {
|
|
4177
|
+
game: {
|
|
4178
|
+
id: string;
|
|
4179
|
+
displayName: string;
|
|
4180
|
+
} | null;
|
|
2486
4181
|
};
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
4182
|
+
type MapObjectWithItem = MapObjectRow & {
|
|
4183
|
+
item: {
|
|
4184
|
+
id: string;
|
|
4185
|
+
slug: string;
|
|
4186
|
+
displayName: string;
|
|
4187
|
+
description?: string | null;
|
|
4188
|
+
imageUrl?: string | null;
|
|
4189
|
+
isPlaceable: boolean;
|
|
4190
|
+
metadata?: PlaceableItemMetadata | null;
|
|
4191
|
+
};
|
|
2496
4192
|
};
|
|
2497
4193
|
/**
|
|
2498
|
-
*
|
|
4194
|
+
* Game custom hostname with validation records
|
|
2499
4195
|
*/
|
|
2500
|
-
type
|
|
2501
|
-
|
|
2502
|
-
id: string;
|
|
2503
|
-
/** Course enrollments */
|
|
2504
|
-
enrollments: UserEnrollment[];
|
|
4196
|
+
type GameCustomHostname = GameCustomHostnameRow & {
|
|
4197
|
+
validationRecords?: DomainValidationRecords;
|
|
2505
4198
|
};
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
hasTimebackAccount: boolean;
|
|
2513
|
-
/** TimeBack data (id, role, enrollments, organizations) - only present if user has a timeback account */
|
|
2514
|
-
timeback?: UserTimebackData;
|
|
4199
|
+
|
|
4200
|
+
type UserLevelRow = typeof userLevels.$inferSelect;
|
|
4201
|
+
type LevelConfigRow = typeof levelConfigs.$inferSelect;
|
|
4202
|
+
type UserLevelWithConfig = UserLevelRow & {
|
|
4203
|
+
xpToNextLevel: number;
|
|
4204
|
+
nextLevelConfig?: LevelConfigRow;
|
|
2515
4205
|
};
|
|
2516
4206
|
|
|
4207
|
+
type SpriteTemplateRow = typeof spriteTemplates.$inferSelect;
|
|
4208
|
+
|
|
4209
|
+
type NotificationRow = InferSelectModel<typeof notifications>;
|
|
4210
|
+
|
|
2517
4211
|
/**
|
|
2518
|
-
*
|
|
2519
|
-
*
|
|
4212
|
+
* Level & Progression Types
|
|
4213
|
+
*
|
|
4214
|
+
* API response DTOs for level system. Database row types are in @playcademy/data/types.
|
|
4215
|
+
*
|
|
4216
|
+
* @module types/level
|
|
2520
4217
|
*/
|
|
2521
|
-
type ManifestV1 = z.infer<typeof ManifestV1Schema>;
|
|
2522
4218
|
/**
|
|
2523
|
-
*
|
|
4219
|
+
* Result of adding XP to a user.
|
|
2524
4220
|
*/
|
|
2525
|
-
interface
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
name: string;
|
|
2532
|
-
/** Whether the email has been verified */
|
|
2533
|
-
email_verified: boolean;
|
|
2534
|
-
/** Optional given name (first name) */
|
|
2535
|
-
given_name?: string;
|
|
2536
|
-
/** Optional family name (last name) */
|
|
2537
|
-
family_name?: string;
|
|
2538
|
-
/** TimeBack student ID (if user has TimeBack integration) */
|
|
2539
|
-
timeback_id?: string;
|
|
2540
|
-
/** Additional user attributes from the identity provider */
|
|
2541
|
-
[key: string]: unknown;
|
|
4221
|
+
interface XPAddResult {
|
|
4222
|
+
totalXP: number;
|
|
4223
|
+
newLevel: number;
|
|
4224
|
+
leveledUp: boolean;
|
|
4225
|
+
creditsAwarded: number;
|
|
4226
|
+
xpToNextLevel: number;
|
|
2542
4227
|
}
|
|
2543
4228
|
/**
|
|
2544
|
-
*
|
|
2545
|
-
* Types that combine character component data with sprite sheet information
|
|
4229
|
+
* Result of checking whether a level up occurred.
|
|
2546
4230
|
*/
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
4231
|
+
interface LevelUpCheckResult {
|
|
4232
|
+
newLevel: number;
|
|
4233
|
+
remainingXp: number;
|
|
4234
|
+
leveledUp: boolean;
|
|
4235
|
+
creditsAwarded: number;
|
|
4236
|
+
xpToNextLevel: number;
|
|
4237
|
+
}
|
|
2553
4238
|
/**
|
|
2554
|
-
*
|
|
4239
|
+
* Level progress API response.
|
|
2555
4240
|
*/
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
4241
|
+
interface LevelProgressResponse {
|
|
4242
|
+
level: number;
|
|
4243
|
+
currentXp: number;
|
|
4244
|
+
xpToNextLevel: number;
|
|
4245
|
+
totalXP: number;
|
|
4246
|
+
}
|
|
4247
|
+
|
|
2559
4248
|
/**
|
|
2560
|
-
*
|
|
2561
|
-
*
|
|
4249
|
+
* Shop Types
|
|
4250
|
+
*
|
|
4251
|
+
* @module types/shop
|
|
2562
4252
|
*/
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
interface
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
4253
|
+
/**
|
|
4254
|
+
* Currency display info for shop UI.
|
|
4255
|
+
*/
|
|
4256
|
+
interface ShopCurrency {
|
|
4257
|
+
id: string;
|
|
4258
|
+
symbol: string | null;
|
|
4259
|
+
isPrimary: boolean;
|
|
4260
|
+
displayName?: string | null;
|
|
4261
|
+
imageUrl?: string | null;
|
|
2570
4262
|
}
|
|
2571
4263
|
/**
|
|
2572
|
-
* Shop
|
|
2573
|
-
*
|
|
4264
|
+
* Shop item for display.
|
|
4265
|
+
* Combines Item fields (excluding createdAt) with shop listing data.
|
|
2574
4266
|
*/
|
|
2575
|
-
interface ShopDisplayItem
|
|
4267
|
+
interface ShopDisplayItem {
|
|
4268
|
+
id: string;
|
|
4269
|
+
slug: string;
|
|
4270
|
+
gameId?: string | null;
|
|
4271
|
+
displayName: string;
|
|
4272
|
+
description?: string | null;
|
|
4273
|
+
type: string;
|
|
4274
|
+
isPlaceable: boolean;
|
|
4275
|
+
imageUrl?: string | null;
|
|
4276
|
+
metadata?: unknown;
|
|
2576
4277
|
listingId: string;
|
|
2577
4278
|
shopPrice: number;
|
|
2578
4279
|
currencyId: string;
|
|
@@ -2582,65 +4283,33 @@ interface ShopDisplayItem extends Omit<Item, 'createdAt'> {
|
|
|
2582
4283
|
stock?: number | null;
|
|
2583
4284
|
sellBackPercentage?: number | null;
|
|
2584
4285
|
}
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
isPrimary: boolean;
|
|
2589
|
-
displayName?: string | null;
|
|
2590
|
-
imageUrl?: string | null;
|
|
2591
|
-
}
|
|
4286
|
+
/**
|
|
4287
|
+
* Complete shop view response.
|
|
4288
|
+
*/
|
|
2592
4289
|
interface ShopViewResponse {
|
|
2593
4290
|
shopItems: ShopDisplayItem[];
|
|
2594
4291
|
currencies: ShopCurrency[];
|
|
2595
4292
|
}
|
|
4293
|
+
|
|
2596
4294
|
/**
|
|
2597
|
-
*
|
|
2598
|
-
*
|
|
4295
|
+
* Sprite Types
|
|
4296
|
+
*
|
|
4297
|
+
* JSON shapes for sprite configuration. Database row types are in @playcademy/data/types.
|
|
4298
|
+
*
|
|
4299
|
+
* @module types/sprite
|
|
2599
4300
|
*/
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
gameId: string;
|
|
2609
|
-
gameTitle: string;
|
|
2610
|
-
gameSlug: string;
|
|
2611
|
-
}
|
|
2612
|
-
|
|
2613
|
-
type UserLevel = typeof userLevels.$inferSelect;
|
|
2614
|
-
type LevelConfig = typeof levelConfigs.$inferSelect;
|
|
2615
|
-
type UserLevelWithConfig = UserLevel & {
|
|
2616
|
-
xpToNextLevel: number;
|
|
2617
|
-
nextLevelConfig?: LevelConfig;
|
|
2618
|
-
};
|
|
2619
|
-
interface LeaderboardEntry {
|
|
2620
|
-
rank: number;
|
|
2621
|
-
userId: string;
|
|
2622
|
-
username: string;
|
|
2623
|
-
userImage?: string | null;
|
|
2624
|
-
score: number;
|
|
2625
|
-
achievedAt: Date;
|
|
2626
|
-
metadata?: Record<string, unknown>;
|
|
2627
|
-
gameId?: string;
|
|
2628
|
-
gameTitle?: string;
|
|
2629
|
-
gameSlug?: string;
|
|
2630
|
-
}
|
|
2631
|
-
interface UserRank {
|
|
2632
|
-
rank: number;
|
|
2633
|
-
totalPlayers: number;
|
|
2634
|
-
score: number;
|
|
2635
|
-
percentile: number;
|
|
2636
|
-
}
|
|
2637
|
-
interface UserRankResponse {
|
|
2638
|
-
rank: number;
|
|
2639
|
-
score: number;
|
|
2640
|
-
userId: string;
|
|
4301
|
+
/**
|
|
4302
|
+
* Animation frame configuration.
|
|
4303
|
+
*/
|
|
4304
|
+
interface SpriteAnimationFrame {
|
|
4305
|
+
row: number;
|
|
4306
|
+
frameStart: number;
|
|
4307
|
+
numFrames: number;
|
|
4308
|
+
fps: number;
|
|
2641
4309
|
}
|
|
2642
|
-
|
|
2643
|
-
|
|
4310
|
+
/**
|
|
4311
|
+
* Sprite template data structure (stored in JSONB).
|
|
4312
|
+
*/
|
|
2644
4313
|
interface SpriteTemplateData {
|
|
2645
4314
|
tileSize: number;
|
|
2646
4315
|
tileHeight: number;
|
|
@@ -2648,118 +4317,31 @@ interface SpriteTemplateData {
|
|
|
2648
4317
|
rows: number;
|
|
2649
4318
|
spacing: number;
|
|
2650
4319
|
animations: {
|
|
2651
|
-
base_right:
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
base_left: {
|
|
2664
|
-
row: number;
|
|
2665
|
-
frameStart: number;
|
|
2666
|
-
numFrames: number;
|
|
2667
|
-
fps: number;
|
|
2668
|
-
};
|
|
2669
|
-
base_down: {
|
|
2670
|
-
row: number;
|
|
2671
|
-
frameStart: number;
|
|
2672
|
-
numFrames: number;
|
|
2673
|
-
fps: number;
|
|
2674
|
-
};
|
|
2675
|
-
idle_right: {
|
|
2676
|
-
row: number;
|
|
2677
|
-
frameStart: number;
|
|
2678
|
-
numFrames: number;
|
|
2679
|
-
fps: number;
|
|
2680
|
-
};
|
|
2681
|
-
walk_right: {
|
|
2682
|
-
row: number;
|
|
2683
|
-
frameStart: number;
|
|
2684
|
-
numFrames: number;
|
|
2685
|
-
fps: number;
|
|
2686
|
-
};
|
|
2687
|
-
idle_up: {
|
|
2688
|
-
row: number;
|
|
2689
|
-
frameStart: number;
|
|
2690
|
-
numFrames: number;
|
|
2691
|
-
fps: number;
|
|
2692
|
-
};
|
|
2693
|
-
walk_up: {
|
|
2694
|
-
row: number;
|
|
2695
|
-
frameStart: number;
|
|
2696
|
-
numFrames: number;
|
|
2697
|
-
fps: number;
|
|
2698
|
-
};
|
|
2699
|
-
idle_left: {
|
|
2700
|
-
row: number;
|
|
2701
|
-
frameStart: number;
|
|
2702
|
-
numFrames: number;
|
|
2703
|
-
fps: number;
|
|
2704
|
-
};
|
|
2705
|
-
walk_left: {
|
|
2706
|
-
row: number;
|
|
2707
|
-
frameStart: number;
|
|
2708
|
-
numFrames: number;
|
|
2709
|
-
fps: number;
|
|
2710
|
-
};
|
|
2711
|
-
idle_down: {
|
|
2712
|
-
row: number;
|
|
2713
|
-
frameStart: number;
|
|
2714
|
-
numFrames: number;
|
|
2715
|
-
fps: number;
|
|
2716
|
-
};
|
|
2717
|
-
walk_down: {
|
|
2718
|
-
row: number;
|
|
2719
|
-
frameStart: number;
|
|
2720
|
-
numFrames: number;
|
|
2721
|
-
fps: number;
|
|
2722
|
-
};
|
|
4320
|
+
base_right: SpriteAnimationFrame;
|
|
4321
|
+
base_up: SpriteAnimationFrame;
|
|
4322
|
+
base_left: SpriteAnimationFrame;
|
|
4323
|
+
base_down: SpriteAnimationFrame;
|
|
4324
|
+
idle_right: SpriteAnimationFrame;
|
|
4325
|
+
walk_right: SpriteAnimationFrame;
|
|
4326
|
+
idle_up: SpriteAnimationFrame;
|
|
4327
|
+
walk_up: SpriteAnimationFrame;
|
|
4328
|
+
idle_left: SpriteAnimationFrame;
|
|
4329
|
+
walk_left: SpriteAnimationFrame;
|
|
4330
|
+
idle_down: SpriteAnimationFrame;
|
|
4331
|
+
walk_down: SpriteAnimationFrame;
|
|
2723
4332
|
};
|
|
2724
4333
|
}
|
|
2725
|
-
type TodayXpResponse = {
|
|
2726
|
-
xp: number;
|
|
2727
|
-
date: string;
|
|
2728
|
-
};
|
|
2729
|
-
type TotalXpResponse = {
|
|
2730
|
-
totalXp: number;
|
|
2731
|
-
};
|
|
2732
|
-
type XpHistoryResponse = {
|
|
2733
|
-
history: Array<{
|
|
2734
|
-
date: string;
|
|
2735
|
-
xp: number;
|
|
2736
|
-
}>;
|
|
2737
|
-
};
|
|
2738
4334
|
/**
|
|
2739
|
-
*
|
|
2740
|
-
*
|
|
2741
|
-
* NOTE: Per-course overrides (title, courseCode, level, metadata) are defined
|
|
2742
|
-
* in @playcademy/sdk/server as TimebackCourseConfigWithOverrides.
|
|
2743
|
-
* This base type only includes the minimal required fields.
|
|
2744
|
-
*
|
|
2745
|
-
* For totalXp, use metadata.metrics.totalXp (aligns with upstream TimeBack structure).
|
|
4335
|
+
* Sprite sheet configuration with precomputed dimensions.
|
|
2746
4336
|
*/
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
masteredUnits?: number;
|
|
2756
|
-
pctCompleteApp?: number;
|
|
2757
|
-
scoreStatus?: string;
|
|
2758
|
-
inProgress?: string;
|
|
2759
|
-
};
|
|
2760
|
-
|
|
2761
|
-
/** Permitted HTTP verbs */
|
|
2762
|
-
type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
4337
|
+
interface SpriteConfigWithDimensions {
|
|
4338
|
+
textureUrl: string;
|
|
4339
|
+
columns: number;
|
|
4340
|
+
rows: number;
|
|
4341
|
+
spriteWidth: number;
|
|
4342
|
+
spriteHeight: number;
|
|
4343
|
+
animations: Record<string, SpriteAnimationFrame>;
|
|
4344
|
+
}
|
|
2763
4345
|
|
|
2764
4346
|
/**
|
|
2765
4347
|
* Connection monitoring types
|
|
@@ -3294,9 +4876,6 @@ declare abstract class PlaycademyBaseClient {
|
|
|
3294
4876
|
* Initializes connection monitoring if enabled.
|
|
3295
4877
|
*/
|
|
3296
4878
|
private _initializeConnectionMonitor;
|
|
3297
|
-
/**
|
|
3298
|
-
* Initializes an internal game session for automatic session management.
|
|
3299
|
-
*/
|
|
3300
4879
|
private _initializeInternalSession;
|
|
3301
4880
|
/**
|
|
3302
4881
|
* Current user data and inventory management.
|
|
@@ -3340,8 +4919,8 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
|
|
|
3340
4919
|
*/
|
|
3341
4920
|
runtime: {
|
|
3342
4921
|
getGameToken: (gameId: string, options?: {
|
|
3343
|
-
apply?: boolean;
|
|
3344
|
-
}) => Promise<GameTokenResponse>;
|
|
4922
|
+
apply?: boolean | undefined;
|
|
4923
|
+
} | undefined) => Promise<GameTokenResponse>;
|
|
3345
4924
|
exit: () => Promise<void>;
|
|
3346
4925
|
onInit: (handler: (context: GameContextPayload) => void) => void;
|
|
3347
4926
|
onTokenRefresh: (handler: (data: {
|
|
@@ -3365,7 +4944,7 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
|
|
|
3365
4944
|
getListenerCounts: () => Record<string, number>;
|
|
3366
4945
|
assets: {
|
|
3367
4946
|
url(pathOrStrings: string | TemplateStringsArray, ...values: unknown[]): string;
|
|
3368
|
-
fetch: (path: string, options?: RequestInit) => Promise<Response>;
|
|
4947
|
+
fetch: (path: string, options?: RequestInit | undefined) => Promise<Response>;
|
|
3369
4948
|
json: <T = unknown>(path: string) => Promise<T>;
|
|
3370
4949
|
blob: (path: string) => Promise<Blob>;
|
|
3371
4950
|
text: (path: string) => Promise<string>;
|
|
@@ -3388,10 +4967,10 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
|
|
|
3388
4967
|
*/
|
|
3389
4968
|
timeback: {
|
|
3390
4969
|
readonly user: TimebackUser;
|
|
3391
|
-
startActivity: (metadata:
|
|
4970
|
+
startActivity: (metadata: ActivityData) => void;
|
|
3392
4971
|
pauseActivity: () => void;
|
|
3393
4972
|
resumeActivity: () => void;
|
|
3394
|
-
endActivity: (data:
|
|
4973
|
+
endActivity: (data: EndActivityScoreData) => Promise<EndActivityResponse>;
|
|
3395
4974
|
};
|
|
3396
4975
|
/**
|
|
3397
4976
|
* Playcademy Credits (platform currency) management.
|
|
@@ -3408,7 +4987,7 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
|
|
|
3408
4987
|
* - `submit(gameId, score, metadata?)` - Record a game score
|
|
3409
4988
|
*/
|
|
3410
4989
|
scores: {
|
|
3411
|
-
submit: (gameId: string, score: number, metadata?: Record<string, unknown>) => Promise<ScoreSubmission>;
|
|
4990
|
+
submit: (gameId: string, score: number, metadata?: Record<string, unknown> | undefined) => Promise<ScoreSubmission>;
|
|
3412
4991
|
};
|
|
3413
4992
|
/**
|
|
3414
4993
|
* Realtime multiplayer authentication.
|
|
@@ -3425,13 +5004,13 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
|
|
|
3425
5004
|
* - Routes are relative to your game's deployment (e.g., '/hello' → your-game.playcademy.gg/api/hello)
|
|
3426
5005
|
*/
|
|
3427
5006
|
backend: {
|
|
3428
|
-
get<T = unknown>(path: string, headers?: Record<string, string>): Promise<T>;
|
|
3429
|
-
post<T = unknown>(path: string, body?: unknown, headers?: Record<string, string>): Promise<T>;
|
|
3430
|
-
put<T = unknown>(path: string, body?: unknown, headers?: Record<string, string>): Promise<T>;
|
|
3431
|
-
patch<T = unknown>(path: string, body?: unknown, headers?: Record<string, string>): Promise<T>;
|
|
3432
|
-
delete<T = unknown>(path: string, headers?: Record<string, string>): Promise<T>;
|
|
3433
|
-
request<T = unknown>(path: string, method: Method, body?: unknown, headers?: Record<string, string>): Promise<T>;
|
|
3434
|
-
download(path: string, method?: Method, body?: unknown, headers?: Record<string, string>): Promise<Response>;
|
|
5007
|
+
get<T = unknown>(path: string, headers?: Record<string, string> | undefined): Promise<T>;
|
|
5008
|
+
post<T = unknown>(path: string, body?: unknown, headers?: Record<string, string> | undefined): Promise<T>;
|
|
5009
|
+
put<T = unknown>(path: string, body?: unknown, headers?: Record<string, string> | undefined): Promise<T>;
|
|
5010
|
+
patch<T = unknown>(path: string, body?: unknown, headers?: Record<string, string> | undefined): Promise<T>;
|
|
5011
|
+
delete<T = unknown>(path: string, headers?: Record<string, string> | undefined): Promise<T>;
|
|
5012
|
+
request<T = unknown>(path: string, method: Method, body?: unknown, headers?: Record<string, string> | undefined): Promise<T>;
|
|
5013
|
+
download(path: string, method?: Method, body?: unknown, headers?: Record<string, string> | undefined): Promise<Response>;
|
|
3435
5014
|
url(pathOrStrings: string | TemplateStringsArray, ...values: unknown[]): string;
|
|
3436
5015
|
};
|
|
3437
5016
|
/** Auto-initializes a PlaycademyClient with context from the environment */
|
|
@@ -3447,8 +5026,8 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
|
|
|
3447
5026
|
/**
|
|
3448
5027
|
* Type definitions for the game timeback namespace.
|
|
3449
5028
|
*
|
|
3450
|
-
*
|
|
3451
|
-
*
|
|
5029
|
+
* SDK-specific types like TimebackInitContext that wrap the core types
|
|
5030
|
+
* from @playcademy/types/user (which are re-exported via types/data.ts).
|
|
3452
5031
|
*/
|
|
3453
5032
|
|
|
3454
5033
|
/**
|
|
@@ -3557,8 +5136,11 @@ interface InitPayload {
|
|
|
3557
5136
|
/**
|
|
3558
5137
|
* Simplified user data passed to games via InitPayload
|
|
3559
5138
|
* This is a subset of AuthenticatedUser suitable for external game consumption
|
|
5139
|
+
*
|
|
5140
|
+
* Note: Named GameInitUser to distinguish from the cross-game GameUser DTO
|
|
5141
|
+
* exported from @playcademy/types
|
|
3560
5142
|
*/
|
|
3561
|
-
interface
|
|
5143
|
+
interface GameInitUser {
|
|
3562
5144
|
/** Playcademy user ID */
|
|
3563
5145
|
id: string;
|
|
3564
5146
|
/** Unique username */
|
|
@@ -3737,19 +5319,6 @@ interface ScoreSubmission {
|
|
|
3737
5319
|
achievedAt: Date;
|
|
3738
5320
|
}
|
|
3739
5321
|
|
|
3740
|
-
/**
|
|
3741
|
-
* Users namespace types
|
|
3742
|
-
*/
|
|
3743
|
-
interface UserScore {
|
|
3744
|
-
id: string;
|
|
3745
|
-
score: number;
|
|
3746
|
-
achievedAt: Date;
|
|
3747
|
-
metadata?: Record<string, unknown>;
|
|
3748
|
-
gameId: string;
|
|
3749
|
-
gameTitle: string;
|
|
3750
|
-
gameSlug: string;
|
|
3751
|
-
}
|
|
3752
|
-
|
|
3753
5322
|
/**
|
|
3754
5323
|
* Authentication namespace types
|
|
3755
5324
|
*/
|
|
@@ -3888,6 +5457,8 @@ type DevUploadEvent = {
|
|
|
3888
5457
|
} | {
|
|
3889
5458
|
type: 'finalizeStatus';
|
|
3890
5459
|
message: string;
|
|
5460
|
+
} | {
|
|
5461
|
+
type: 'complete';
|
|
3891
5462
|
} | {
|
|
3892
5463
|
type: 'close';
|
|
3893
5464
|
};
|
|
@@ -4117,5 +5688,5 @@ interface PlaycademyServerClientState {
|
|
|
4117
5688
|
courseId?: string;
|
|
4118
5689
|
}
|
|
4119
5690
|
|
|
4120
|
-
export { PlaycademyClient };
|
|
4121
|
-
export type {
|
|
5691
|
+
export { AchievementCompletionType, NotificationStatus, NotificationType, PlaycademyClient };
|
|
5692
|
+
export type { AchievementCurrent, AchievementHistoryEntry, AchievementProgressResponse, AchievementScopeType, AchievementWithStatus, AuthCallbackPayload, AuthOptions, AuthProviderType, AuthResult, AuthServerMessage, AuthStateChangePayload, AuthStateUpdate, AuthenticatedUser, BetterAuthApiKey, BetterAuthApiKeyResponse, BetterAuthSignInResponse, BucketFile, CharacterComponentRow as CharacterComponent, CharacterComponentType, CharacterComponentWithSpriteUrl, CharacterComponentsOptions, ClientConfig, ClientEvents, ConnectionStatePayload, CreateCharacterData, CreateMapObjectData, CurrencyRow as Currency, DevUploadEvent, DevUploadHooks, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, DisconnectContext, DisconnectHandler, DisplayAlertPayload, EventListeners, ExternalGame, FetchedGame, Game, GameContextPayload, GameCustomHostname, GameInitUser, GameLeaderboardEntry, MapRow as GameMap, GamePlatform, GameRow as GameRecord, GameSessionRow as GameSession, GameTimebackIntegration, GameTokenResponse, GameType, GameUser, HostedGame, InitPayload, InsertCurrencyInput, InsertItemInput, InsertShopListingInput, InteractionType, InventoryItemRow as InventoryItem, InventoryItemWithItem, InventoryMutationResponse, ItemRow as Item, ItemType, KeyEventPayload, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LevelConfigRow as LevelConfig, LevelProgressResponse, LevelUpCheckResult, LoginResponse, ManifestV1, MapData, MapElementRow as MapElement, MapElementMetadata, MapElementWithGame, MapObjectRow as MapObject, MapObjectWithItem, NotificationRow as Notification, NotificationStats, PlaceableItemMetadata, PlatformTimebackUser, PlatformTimebackUserContext, PlaycademyServerClientConfig, PlaycademyServerClientState, PlayerCharacterRow as PlayerCharacter, PlayerCharacterAccessoryRow as PlayerCharacterAccessory, PlayerCurrency, PlayerInventoryItem, PlayerProfile, PlayerSessionPayload, PopulateStudentResponse, RealtimeTokenResponse, ScoreSubmission, ShopCurrency, ShopDisplayItem, ShopListingRow as ShopListing, ShopViewResponse, SpriteAnimationFrame, SpriteConfigWithDimensions, SpriteTemplateRow as SpriteTemplate, SpriteTemplateData, StartSessionResponse, TelemetryPayload, TimebackEnrollment, TimebackInitContext, TimebackOrganization, TimebackUser, TimebackUserContext, TodayXpResponse, TokenRefreshPayload, TokenType, TotalXpResponse, UpdateCharacterData, UpdateCurrencyInput, UpdateItemInput, UpdateShopListingInput, UpsertGameMetadataInput, UserRow as User, UserEnrollment, UserInfo, UserLevelRow as UserLevel, UserLevelWithConfig, UserOrganization, UserRank, UserRankResponse, UserRoleEnumType, UserScore, UserTimebackData, XPAddResult, XpHistoryResponse, XpSummaryResponse };
|