@playcademy/sandbox 0.3.17-beta.2 → 0.3.17-beta.21

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.
@@ -5,83 +5,97 @@ import { ItemRow } from '@playcademy/data/types';
5
5
  * Demo user data for sandbox testing
6
6
  */
7
7
  declare const DEMO_USER_IDS: {
8
- readonly player: "00000000-0000-0000-0000-000000000001";
9
- readonly developer: "00000000-0000-0000-0000-000000000002";
10
- readonly admin: "00000000-0000-0000-0000-000000000003";
11
- readonly pendingDeveloper: "00000000-0000-0000-0000-000000000004";
12
- readonly unverifiedPlayer: "00000000-0000-0000-0000-000000000005";
8
+ readonly player: '00000000-0000-0000-0000-000000000001';
9
+ readonly developer: '00000000-0000-0000-0000-000000000002';
10
+ readonly admin: '00000000-0000-0000-0000-000000000003';
11
+ readonly pendingDeveloper: '00000000-0000-0000-0000-000000000004';
12
+ readonly unverifiedPlayer: '00000000-0000-0000-0000-000000000005';
13
+ readonly anonymousPlayer: '00000000-0000-0000-0000-000000000006';
13
14
  };
14
15
  declare const DEMO_USERS: {
15
16
  readonly admin: {
16
17
  readonly id: "00000000-0000-0000-0000-000000000003";
17
- readonly name: "Admin User";
18
- readonly username: "admin_user";
19
- readonly email: "admin@playcademy.com";
18
+ readonly name: 'Admin User';
19
+ readonly username: 'admin_user';
20
+ readonly email: 'admin@playcademy.com';
20
21
  readonly emailVerified: true;
21
22
  readonly image: null;
22
- readonly role: "admin";
23
- readonly developerStatus: "approved";
23
+ readonly role: 'admin';
24
+ readonly developerStatus: 'approved';
24
25
  readonly createdAt: Date;
25
26
  readonly updatedAt: Date;
26
27
  };
27
28
  readonly player: {
28
29
  readonly id: "00000000-0000-0000-0000-000000000001";
29
- readonly name: "Player User";
30
- readonly username: "player_user";
31
- readonly email: "player@playcademy.com";
30
+ readonly name: 'Player User';
31
+ readonly username: 'player_user';
32
+ readonly email: 'player@playcademy.com';
32
33
  readonly emailVerified: true;
33
34
  readonly image: null;
34
- readonly role: "player";
35
- readonly developerStatus: "none";
35
+ readonly role: 'player';
36
+ readonly developerStatus: 'none';
36
37
  readonly createdAt: Date;
37
38
  readonly updatedAt: Date;
38
39
  };
39
40
  readonly developer: {
40
41
  readonly id: "00000000-0000-0000-0000-000000000002";
41
- readonly name: "Developer User";
42
- readonly username: "developer_user";
43
- readonly email: "developer@playcademy.com";
42
+ readonly name: 'Developer User';
43
+ readonly username: 'developer_user';
44
+ readonly email: 'developer@playcademy.com';
44
45
  readonly emailVerified: true;
45
46
  readonly image: null;
46
- readonly role: "developer";
47
- readonly developerStatus: "approved";
47
+ readonly role: 'developer';
48
+ readonly developerStatus: 'approved';
48
49
  readonly createdAt: Date;
49
50
  readonly updatedAt: Date;
50
51
  };
51
52
  readonly pendingDeveloper: {
52
53
  readonly id: "00000000-0000-0000-0000-000000000004";
53
- readonly name: "Pending Developer";
54
- readonly username: "pending_dev";
55
- readonly email: "pending@playcademy.com";
54
+ readonly name: 'Pending Developer';
55
+ readonly username: 'pending_dev';
56
+ readonly email: 'pending@playcademy.com';
56
57
  readonly emailVerified: true;
57
58
  readonly image: null;
58
- readonly role: "developer";
59
- readonly developerStatus: "pending";
59
+ readonly role: 'developer';
60
+ readonly developerStatus: 'pending';
60
61
  readonly createdAt: Date;
61
62
  readonly updatedAt: Date;
62
63
  };
63
64
  readonly unverifiedPlayer: {
64
65
  readonly id: "00000000-0000-0000-0000-000000000005";
65
- readonly name: "Unverified Player";
66
- readonly username: "unverified_player";
67
- readonly email: "unverified@playcademy.com";
66
+ readonly name: 'Unverified Player';
67
+ readonly username: 'unverified_player';
68
+ readonly email: 'unverified@playcademy.com';
68
69
  readonly emailVerified: false;
69
70
  readonly image: null;
70
- readonly role: "player";
71
- readonly developerStatus: "none";
71
+ readonly role: 'player';
72
+ readonly developerStatus: 'none';
73
+ readonly createdAt: Date;
74
+ readonly updatedAt: Date;
75
+ };
76
+ readonly anonymousPlayer: {
77
+ readonly id: "00000000-0000-0000-0000-000000000006";
78
+ readonly name: "Demo Player";
79
+ readonly username: 'anonymous_demo_player';
80
+ readonly email: 'player@anon.demo.playcademy.gg';
81
+ readonly emailVerified: false;
82
+ readonly image: null;
83
+ readonly isAnonymous: true;
84
+ readonly role: 'player';
85
+ readonly developerStatus: 'none';
72
86
  readonly createdAt: Date;
73
87
  readonly updatedAt: Date;
74
88
  };
75
89
  };
76
90
  declare const DEMO_USER: {
77
91
  readonly id: "00000000-0000-0000-0000-000000000001";
78
- readonly name: "Player User";
79
- readonly username: "player_user";
80
- readonly email: "player@playcademy.com";
92
+ readonly name: 'Player User';
93
+ readonly username: 'player_user';
94
+ readonly email: 'player@playcademy.com';
81
95
  readonly emailVerified: true;
82
96
  readonly image: null;
83
- readonly role: "player";
84
- readonly developerStatus: "none";
97
+ readonly role: 'player';
98
+ readonly developerStatus: 'none';
85
99
  readonly createdAt: Date;
86
100
  readonly updatedAt: Date;
87
101
  };
@@ -93,108 +107,122 @@ declare const DEMO_USER: {
93
107
  declare const DEMO_TOKENS: {
94
108
  readonly 'sandbox-demo-token': {
95
109
  readonly id: "00000000-0000-0000-0000-000000000001";
96
- readonly name: "Player User";
97
- readonly username: "player_user";
98
- readonly email: "player@playcademy.com";
110
+ readonly name: 'Player User';
111
+ readonly username: 'player_user';
112
+ readonly email: 'player@playcademy.com';
99
113
  readonly emailVerified: true;
100
114
  readonly image: null;
101
- readonly role: "player";
102
- readonly developerStatus: "none";
115
+ readonly role: 'player';
116
+ readonly developerStatus: 'none';
103
117
  readonly createdAt: Date;
104
118
  readonly updatedAt: Date;
105
119
  };
106
120
  readonly 'sandbox-admin-token': {
107
121
  readonly id: "00000000-0000-0000-0000-000000000003";
108
- readonly name: "Admin User";
109
- readonly username: "admin_user";
110
- readonly email: "admin@playcademy.com";
122
+ readonly name: 'Admin User';
123
+ readonly username: 'admin_user';
124
+ readonly email: 'admin@playcademy.com';
111
125
  readonly emailVerified: true;
112
126
  readonly image: null;
113
- readonly role: "admin";
114
- readonly developerStatus: "approved";
127
+ readonly role: 'admin';
128
+ readonly developerStatus: 'approved';
115
129
  readonly createdAt: Date;
116
130
  readonly updatedAt: Date;
117
131
  };
118
132
  readonly 'sandbox-player-token': {
119
133
  readonly id: "00000000-0000-0000-0000-000000000001";
120
- readonly name: "Player User";
121
- readonly username: "player_user";
122
- readonly email: "player@playcademy.com";
134
+ readonly name: 'Player User';
135
+ readonly username: 'player_user';
136
+ readonly email: 'player@playcademy.com';
123
137
  readonly emailVerified: true;
124
138
  readonly image: null;
125
- readonly role: "player";
126
- readonly developerStatus: "none";
139
+ readonly role: 'player';
140
+ readonly developerStatus: 'none';
141
+ readonly createdAt: Date;
142
+ readonly updatedAt: Date;
143
+ };
144
+ readonly 'sandbox-anonymous-token': {
145
+ readonly id: "00000000-0000-0000-0000-000000000006";
146
+ readonly name: "Demo Player";
147
+ readonly username: 'anonymous_demo_player';
148
+ readonly email: 'player@anon.demo.playcademy.gg';
149
+ readonly emailVerified: false;
150
+ readonly image: null;
151
+ readonly isAnonymous: true;
152
+ readonly role: 'player';
153
+ readonly developerStatus: 'none';
127
154
  readonly createdAt: Date;
128
155
  readonly updatedAt: Date;
129
156
  };
130
157
  readonly 'sandbox-developer-token': {
131
158
  readonly id: "00000000-0000-0000-0000-000000000002";
132
- readonly name: "Developer User";
133
- readonly username: "developer_user";
134
- readonly email: "developer@playcademy.com";
159
+ readonly name: 'Developer User';
160
+ readonly username: 'developer_user';
161
+ readonly email: 'developer@playcademy.com';
135
162
  readonly emailVerified: true;
136
163
  readonly image: null;
137
- readonly role: "developer";
138
- readonly developerStatus: "approved";
164
+ readonly role: 'developer';
165
+ readonly developerStatus: 'approved';
139
166
  readonly createdAt: Date;
140
167
  readonly updatedAt: Date;
141
168
  };
142
169
  readonly 'sandbox-pending-dev-token': {
143
170
  readonly id: "00000000-0000-0000-0000-000000000004";
144
- readonly name: "Pending Developer";
145
- readonly username: "pending_dev";
146
- readonly email: "pending@playcademy.com";
171
+ readonly name: 'Pending Developer';
172
+ readonly username: 'pending_dev';
173
+ readonly email: 'pending@playcademy.com';
147
174
  readonly emailVerified: true;
148
175
  readonly image: null;
149
- readonly role: "developer";
150
- readonly developerStatus: "pending";
176
+ readonly role: 'developer';
177
+ readonly developerStatus: 'pending';
151
178
  readonly createdAt: Date;
152
179
  readonly updatedAt: Date;
153
180
  };
154
181
  readonly 'sandbox-unverified-token': {
155
182
  readonly id: "00000000-0000-0000-0000-000000000005";
156
- readonly name: "Unverified Player";
157
- readonly username: "unverified_player";
158
- readonly email: "unverified@playcademy.com";
183
+ readonly name: 'Unverified Player';
184
+ readonly username: 'unverified_player';
185
+ readonly email: 'unverified@playcademy.com';
159
186
  readonly emailVerified: false;
160
187
  readonly image: null;
161
- readonly role: "player";
162
- readonly developerStatus: "none";
188
+ readonly role: 'player';
189
+ readonly developerStatus: 'none';
163
190
  readonly createdAt: Date;
164
191
  readonly updatedAt: Date;
165
192
  };
166
193
  readonly 'mock-game-token-for-local-dev': {
167
194
  readonly id: "00000000-0000-0000-0000-000000000001";
168
- readonly name: "Player User";
169
- readonly username: "player_user";
170
- readonly email: "player@playcademy.com";
195
+ readonly name: 'Player User';
196
+ readonly username: 'player_user';
197
+ readonly email: 'player@playcademy.com';
171
198
  readonly emailVerified: true;
172
199
  readonly image: null;
173
- readonly role: "player";
174
- readonly developerStatus: "none";
200
+ readonly role: 'player';
201
+ readonly developerStatus: 'none';
175
202
  readonly createdAt: Date;
176
203
  readonly updatedAt: Date;
177
204
  };
178
205
  readonly 'sandbox-game-backend-token': {
179
206
  readonly id: "00000000-0000-0000-0000-000000000002";
180
- readonly name: "Developer User";
181
- readonly username: "developer_user";
182
- readonly email: "developer@playcademy.com";
207
+ readonly name: 'Developer User';
208
+ readonly username: 'developer_user';
209
+ readonly email: 'developer@playcademy.com';
183
210
  readonly emailVerified: true;
184
211
  readonly image: null;
185
- readonly role: "developer";
186
- readonly developerStatus: "approved";
212
+ readonly role: 'developer';
213
+ readonly developerStatus: 'approved';
187
214
  readonly createdAt: Date;
188
215
  readonly updatedAt: Date;
189
216
  };
190
217
  };
191
218
  /** Well-known token strings by role (for use in tests) */
192
219
  declare const SANDBOX_TOKENS: {
193
- readonly player: "sandbox-player-token";
194
- readonly developer: "sandbox-developer-token";
195
- readonly admin: "sandbox-admin-token";
196
- readonly pendingDeveloper: "sandbox-pending-dev-token";
197
- readonly unverified: "sandbox-unverified-token";
220
+ readonly player: 'sandbox-player-token';
221
+ readonly anonymous: 'sandbox-anonymous-token';
222
+ readonly developer: 'sandbox-developer-token';
223
+ readonly admin: 'sandbox-admin-token';
224
+ readonly pendingDeveloper: 'sandbox-pending-dev-token';
225
+ readonly unverified: 'sandbox-unverified-token';
198
226
  };
199
227
  declare const DEMO_TOKEN = "sandbox-demo-token";
200
228
  declare const MOCK_GAME_ID = "mock-game-id-from-template";
package/dist/constants.js CHANGED
@@ -135,7 +135,7 @@ var init_achievements = __esm(() => {
135
135
  });
136
136
 
137
137
  // ../constants/src/auth.ts
138
- var AUTH_PROVIDER_IDS;
138
+ var AUTH_PROVIDER_IDS, DEMO_DISPLAY_NAME_PLACEHOLDER = "Demo Player";
139
139
  var init_auth = __esm(() => {
140
140
  AUTH_PROVIDER_IDS = {
141
141
  TIMEBACK: "timeback",
@@ -149,10 +149,10 @@ var init_typescript = __esm(() => {
149
149
  TypeScriptPackages = {
150
150
  tsc: "tsc",
151
151
  nativePreview: "@typescript/native-preview",
152
- nativePreviewPinned: "@typescript/native-preview@7.0.0-dev.20260221.1"
152
+ nativePreviewBeta: "@typescript/native-preview@beta"
153
153
  };
154
154
  TYPESCRIPT_RUNNER = {
155
- package: TypeScriptPackages.nativePreviewPinned,
155
+ package: TypeScriptPackages.nativePreviewBeta,
156
156
  bin: "tsgo"
157
157
  };
158
158
  });
@@ -222,7 +222,8 @@ var init_overworld = __esm(() => {
222
222
  ERROR: 4000
223
223
  };
224
224
  CORE_GAME_UUIDS = {
225
- PLAYGROUND: "00000000-0000-0000-0000-000000000001"
225
+ PLAYGROUND: "00000000-0000-0000-0000-000000000001",
226
+ DEMO: "00000000-0000-0000-0000-000000000002"
226
227
  };
227
228
  });
228
229
 
@@ -234,7 +235,9 @@ var TIMEBACK_ROUTES, TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY", TIMEBACK_ORG_NAME =
234
235
  var init_timeback = __esm(() => {
235
236
  TIMEBACK_ROUTES = {
236
237
  END_ACTIVITY: "/integrations/timeback/end-activity",
237
- GET_XP: "/integrations/timeback/xp"
238
+ GET_XP: "/integrations/timeback/xp",
239
+ HEARTBEAT: "/integrations/timeback/heartbeat",
240
+ ADVANCE_COURSE: "/integrations/timeback/advance-course"
238
241
  };
239
242
  TIMEBACK_COURSE_DEFAULTS = {
240
243
  gradingScheme: "STANDARD",
@@ -275,7 +278,7 @@ var init_timeback = __esm(() => {
275
278
  });
276
279
 
277
280
  // ../constants/src/workers.ts
278
- var WORKER_NAMING, SECRETS_PREFIX = "secrets_";
281
+ var WORKER_NAMING, SECRETS_PREFIX = "secrets_", CLOUDFLARE_COMPATIBILITY_DATE = "2025-10-11";
279
282
  var init_workers = __esm(() => {
280
283
  WORKER_NAMING = {
281
284
  STAGING_PREFIX: "staging-",
@@ -299,13 +302,15 @@ var init_src = __esm(() => {
299
302
  // src/constants/demo-users.ts
300
303
  var now, DEMO_USER_IDS, DEMO_USERS, DEMO_USER;
301
304
  var init_demo_users = __esm(() => {
305
+ init_src();
302
306
  now = new Date;
303
307
  DEMO_USER_IDS = {
304
308
  player: "00000000-0000-0000-0000-000000000001",
305
309
  developer: "00000000-0000-0000-0000-000000000002",
306
310
  admin: "00000000-0000-0000-0000-000000000003",
307
311
  pendingDeveloper: "00000000-0000-0000-0000-000000000004",
308
- unverifiedPlayer: "00000000-0000-0000-0000-000000000005"
312
+ unverifiedPlayer: "00000000-0000-0000-0000-000000000005",
313
+ anonymousPlayer: "00000000-0000-0000-0000-000000000006"
309
314
  };
310
315
  DEMO_USERS = {
311
316
  admin: {
@@ -367,6 +372,19 @@ var init_demo_users = __esm(() => {
367
372
  developerStatus: "none",
368
373
  createdAt: now,
369
374
  updatedAt: now
375
+ },
376
+ anonymousPlayer: {
377
+ id: DEMO_USER_IDS.anonymousPlayer,
378
+ name: DEMO_DISPLAY_NAME_PLACEHOLDER,
379
+ username: "anonymous_demo_player",
380
+ email: "player@anon.demo.playcademy.gg",
381
+ emailVerified: false,
382
+ image: null,
383
+ isAnonymous: true,
384
+ role: "player",
385
+ developerStatus: "none",
386
+ createdAt: now,
387
+ updatedAt: now
370
388
  }
371
389
  };
372
390
  DEMO_USER = DEMO_USERS.player;
@@ -380,6 +398,7 @@ var init_demo_tokens = __esm(() => {
380
398
  "sandbox-demo-token": DEMO_USERS.player,
381
399
  "sandbox-admin-token": DEMO_USERS.admin,
382
400
  "sandbox-player-token": DEMO_USERS.player,
401
+ "sandbox-anonymous-token": DEMO_USERS.anonymousPlayer,
383
402
  "sandbox-developer-token": DEMO_USERS.developer,
384
403
  "sandbox-pending-dev-token": DEMO_USERS.pendingDeveloper,
385
404
  "sandbox-unverified-token": DEMO_USERS.unverifiedPlayer,
@@ -388,6 +407,7 @@ var init_demo_tokens = __esm(() => {
388
407
  };
389
408
  SANDBOX_TOKENS = {
390
409
  player: "sandbox-player-token",
410
+ anonymous: "sandbox-anonymous-token",
391
411
  developer: "sandbox-developer-token",
392
412
  admin: "sandbox-admin-token",
393
413
  pendingDeveloper: "sandbox-pending-dev-token",
@@ -18,35 +18,35 @@ export declare function createSandboxAuthProvider(): AuthProvider;
18
18
  */
19
19
  export declare function getDemoUser(role?: 'admin' | 'developer' | 'player'): {
20
20
  readonly id: "00000000-0000-0000-0000-000000000003";
21
- readonly name: "Admin User";
22
- readonly username: "admin_user";
23
- readonly email: "admin@playcademy.com";
21
+ readonly name: 'Admin User';
22
+ readonly username: 'admin_user';
23
+ readonly email: 'admin@playcademy.com';
24
24
  readonly emailVerified: true;
25
25
  readonly image: null;
26
- readonly role: "admin";
27
- readonly developerStatus: "approved";
26
+ readonly role: 'admin';
27
+ readonly developerStatus: 'approved';
28
28
  readonly createdAt: Date;
29
29
  readonly updatedAt: Date;
30
30
  } | {
31
31
  readonly id: "00000000-0000-0000-0000-000000000001";
32
- readonly name: "Player User";
33
- readonly username: "player_user";
34
- readonly email: "player@playcademy.com";
32
+ readonly name: 'Player User';
33
+ readonly username: 'player_user';
34
+ readonly email: 'player@playcademy.com';
35
35
  readonly emailVerified: true;
36
36
  readonly image: null;
37
- readonly role: "player";
38
- readonly developerStatus: "none";
37
+ readonly role: 'player';
38
+ readonly developerStatus: 'none';
39
39
  readonly createdAt: Date;
40
40
  readonly updatedAt: Date;
41
41
  } | {
42
42
  readonly id: "00000000-0000-0000-0000-000000000002";
43
- readonly name: "Developer User";
44
- readonly username: "developer_user";
45
- readonly email: "developer@playcademy.com";
43
+ readonly name: 'Developer User';
44
+ readonly username: 'developer_user';
45
+ readonly email: 'developer@playcademy.com';
46
46
  readonly emailVerified: true;
47
47
  readonly image: null;
48
- readonly role: "developer";
49
- readonly developerStatus: "approved";
48
+ readonly role: 'developer';
49
+ readonly developerStatus: 'approved';
50
50
  readonly createdAt: Date;
51
51
  readonly updatedAt: Date;
52
52
  };
package/dist/server.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import * as _electric_sql_pglite from '@electric-sql/pglite';
2
+ import * as drizzle_orm_pglite from 'drizzle-orm/pglite';
3
+ import * as schema from '@playcademy/data/tables';
1
4
  import * as _hono_node_server from '@hono/node-server';
2
5
  import { TimebackOrgType, TimebackUserRole } from '@playcademy/types/user';
3
6
 
@@ -58,6 +61,7 @@ interface TimebackCourseConfig {
58
61
  * Used for seeding and display
59
62
  */
60
63
  interface ProjectInfo {
64
+ gameId?: string;
61
65
  slug: string;
62
66
  displayName: string;
63
67
  version: string;
@@ -288,6 +292,9 @@ declare const version: string;
288
292
  */
289
293
  declare function startServer(port: number, project?: ProjectInfo, options?: Omit<ServerOptions, 'port' | 'project'>): Promise<{
290
294
  main: _hono_node_server.ServerType;
295
+ db: drizzle_orm_pglite.PgliteDatabase<typeof schema> & {
296
+ $client: _electric_sql_pglite.PGlite;
297
+ };
291
298
  gameId: string | undefined;
292
299
  timebackMode: "local" | "mock" | "remote" | null;
293
300
  setRole: (role: TimebackUserRole) => void;