playcademy 0.18.0 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/index.d.ts +24 -12
  3. package/dist/index.js +465 -255
  4. package/dist/utils.js +558 -351
  5. package/dist/version.js +1 -1
  6. package/package.json +1 -1
  7. package/dist/constants/src/achievements.ts +0 -107
  8. package/dist/constants/src/auth.ts +0 -13
  9. package/dist/constants/src/character.ts +0 -16
  10. package/dist/constants/src/domains.ts +0 -50
  11. package/dist/constants/src/env-vars.ts +0 -20
  12. package/dist/constants/src/index.ts +0 -18
  13. package/dist/constants/src/overworld.ts +0 -330
  14. package/dist/constants/src/system.ts +0 -10
  15. package/dist/constants/src/timeback.ts +0 -118
  16. package/dist/constants/src/typescript.ts +0 -21
  17. package/dist/constants/src/workers.ts +0 -36
  18. package/dist/edge-play/src/constants.ts +0 -27
  19. package/dist/edge-play/src/entry/middleware.ts +0 -247
  20. package/dist/edge-play/src/entry/queue.test.ts +0 -279
  21. package/dist/edge-play/src/entry/queue.ts +0 -107
  22. package/dist/edge-play/src/entry/session.ts +0 -45
  23. package/dist/edge-play/src/entry/setup.ts +0 -78
  24. package/dist/edge-play/src/entry/types.ts +0 -30
  25. package/dist/edge-play/src/entry.ts +0 -94
  26. package/dist/edge-play/src/html.d.ts +0 -5
  27. package/dist/edge-play/src/index.ts +0 -4
  28. package/dist/edge-play/src/lib/errors.ts +0 -51
  29. package/dist/edge-play/src/lib/index.ts +0 -3
  30. package/dist/edge-play/src/lib/self-dispatch.test.ts +0 -244
  31. package/dist/edge-play/src/lib/self-dispatch.ts +0 -41
  32. package/dist/edge-play/src/lib/validation.test.ts +0 -190
  33. package/dist/edge-play/src/lib/validation.ts +0 -64
  34. package/dist/edge-play/src/polyfills.js +0 -54
  35. package/dist/edge-play/src/register-routes.ts +0 -59
  36. package/dist/edge-play/src/routes/health.ts +0 -104
  37. package/dist/edge-play/src/routes/index.ts +0 -66
  38. package/dist/edge-play/src/routes/integrations/timeback/end-activity.ts +0 -181
  39. package/dist/edge-play/src/routes/integrations/timeback/get-xp.ts +0 -159
  40. package/dist/edge-play/src/routes/root.html +0 -253
  41. package/dist/edge-play/src/routes/root.ts +0 -22
  42. package/dist/edge-play/src/stub-entry.ts +0 -161
  43. package/dist/edge-play/src/types.ts +0 -124
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var cliVersion = false ? "0.0.0-dev" : "0.18.0";
2
+ var cliVersion = false ? "0.0.0-dev" : "0.18.2";
3
3
  export {
4
4
  cliVersion
5
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playcademy",
3
- "version": "0.18.0",
3
+ "version": "0.18.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,107 +0,0 @@
1
- /**
2
- * Achievement definitions - single source of truth for all achievements
3
- *
4
- * Used by:
5
- * - apps/cademy seed scripts
6
- * - packages/sandbox seeding
7
- * - packages/fns achievement awarding
8
- *
9
- * NOTE: Uses string literals instead of AchievementCompletionType enum
10
- * to avoid circular dependency with @playcademy/data
11
- */
12
-
13
- /**
14
- * Achievement IDs as constants to avoid magic strings
15
- */
16
- export const ACHIEVEMENT_IDS = {
17
- PLAY_ANY_GAME_DAILY: 'play_any_game_daily',
18
- DAILY_CHEST_OPEN: 'daily_chest_open',
19
- LEADERBOARD_TOP3_DAILY: 'leaderboard_top3_daily',
20
- LEADERBOARD_TOP3_WEEKLY: 'leaderboard_top3_weekly',
21
- FIRST_SCORE_ANY_GAME: 'first_score_any_game',
22
- PERSONAL_BEST_ANY_GAME: 'personal_best_any_game',
23
- } as const
24
-
25
- export type AchievementId = (typeof ACHIEVEMENT_IDS)[keyof typeof ACHIEVEMENT_IDS]
26
-
27
- /**
28
- * Achievement definitions for platform seeding
29
- */
30
- export const ACHIEVEMENT_DEFINITIONS = [
31
- {
32
- id: ACHIEVEMENT_IDS.PLAY_ANY_GAME_DAILY,
33
- title: 'Play any game',
34
- description: 'Play any arcade game for at least 60 seconds in a single session.',
35
- scope: 'daily' as const,
36
- rewardCredits: 10,
37
- limit: 1,
38
- completionType: 'time_played_session' as const,
39
- completionConfig: { minSeconds: 60 },
40
- target: { anyArcadeGame: true },
41
- active: true,
42
- },
43
- {
44
- id: ACHIEVEMENT_IDS.DAILY_CHEST_OPEN,
45
- title: 'Opened the daily chest',
46
- description: 'Find the chest on the map and open it to claim your reward.',
47
- scope: 'daily' as const,
48
- rewardCredits: 10,
49
- limit: 1,
50
- completionType: 'interaction' as const,
51
- completionConfig: { triggerId: 'bunny_chest' },
52
- target: { map: 'arcade' },
53
- active: true,
54
- },
55
- {
56
- id: ACHIEVEMENT_IDS.LEADERBOARD_TOP3_DAILY,
57
- title: 'Daily Champion',
58
- description: 'Finish in the top 3 of any game leaderboard for the day.',
59
- scope: 'daily' as const,
60
- rewardCredits: 25, // Base reward, overridden by rankRewards
61
- limit: 1,
62
- completionType: 'leaderboard_rank' as const,
63
- completionConfig: {
64
- rankRewards: [50, 30, 15], // [1st place, 2nd place, 3rd place]
65
- },
66
- target: { anyArcadeGame: true },
67
- active: true,
68
- },
69
- {
70
- id: ACHIEVEMENT_IDS.LEADERBOARD_TOP3_WEEKLY,
71
- title: 'Weekly Legend',
72
- description: 'Finish in the top 3 of any game leaderboard for the week.',
73
- scope: 'weekly' as const,
74
- rewardCredits: 50, // Base reward, overridden by rankRewards
75
- limit: 1,
76
- completionType: 'leaderboard_rank' as const,
77
- completionConfig: {
78
- rankRewards: [100, 60, 30], // [1st place, 2nd place, 3rd place]
79
- },
80
- target: { anyArcadeGame: true },
81
- active: true,
82
- },
83
- {
84
- id: ACHIEVEMENT_IDS.FIRST_SCORE_ANY_GAME,
85
- title: 'First Score',
86
- description: 'Submit your first score in any arcade game.',
87
- scope: 'game' as const, // Scoped per game, no time limit
88
- rewardCredits: 5,
89
- limit: 1,
90
- completionType: 'first_score' as const,
91
- completionConfig: {},
92
- target: { anyArcadeGame: true },
93
- active: true,
94
- },
95
- {
96
- id: ACHIEVEMENT_IDS.PERSONAL_BEST_ANY_GAME,
97
- title: 'Personal Best',
98
- description: 'Beat your personal best score in any arcade game.',
99
- scope: 'daily' as const,
100
- rewardCredits: 5,
101
- limit: 3, // Can earn 3 times per day
102
- completionType: 'personal_best' as const,
103
- completionConfig: {},
104
- target: { anyArcadeGame: true },
105
- active: true,
106
- },
107
- ]
@@ -1,13 +0,0 @@
1
- /**
2
- * Authentication Constants
3
- *
4
- * Constants related to authentication providers.
5
- */
6
-
7
- /**
8
- * Auth Provider Constants
9
- */
10
- export const AUTH_PROVIDER_IDS = {
11
- TIMEBACK: 'timeback',
12
- TIMEBACK_LTI: 'timeback-lti',
13
- } as const
@@ -1,16 +0,0 @@
1
- /**
2
- * Character Constants
3
- *
4
- * Configuration for player character customization.
5
- */
6
-
7
- /** Accessory slot configuration with unlock levels */
8
- export const ACCESSORY_SLOTS = [
9
- { type: 'head', unlockLevel: 1, displayName: 'Head', maxItems: 1 },
10
- { type: 'face', unlockLevel: 2, displayName: 'Face', maxItems: 1 },
11
- { type: 'hands', unlockLevel: 10, displayName: 'Hands', maxItems: 1 },
12
- { type: 'back', unlockLevel: 15, displayName: 'Back', maxItems: 1 },
13
- ] as const
14
-
15
- /** Valid accessory slot types */
16
- export const VALID_SLOT_TYPES = ['head', 'face', 'hands', 'back'] as const
@@ -1,50 +0,0 @@
1
- /**
2
- * Domain and URL Constants
3
- *
4
- * Centralized domain names and base URLs for the Playcademy platform.
5
- * These constants are shared across multiple packages to ensure consistency.
6
- */
7
-
8
- /**
9
- * Playcademy domain names
10
- */
11
- export const PLAYCADEMY_DOMAINS = {
12
- /** Primary domain (hub, landing pages) */
13
- apex: 'playcademy.net',
14
- /** Marketing/alternative domain */
15
- apexAlt: 'playcademy.com',
16
- /** Game backend worker domain */
17
- games: 'playcademy.gg',
18
- } as const
19
-
20
- /**
21
- * Platform hub base URLs by environment
22
- * Used by CLI, SDK, and other packages to make API requests
23
- */
24
- export const PLAYCADEMY_BASE_URLS = {
25
- production: 'https://hub.playcademy.net',
26
- staging: 'https://hub.dev.playcademy.net',
27
- } as const
28
-
29
- /**
30
- * Game backend worker domains by environment
31
- * Workers are deployed to Cloudflare and accessible at:
32
- * - Production: {slug}.playcademy.gg
33
- * - Staging: {slug}-staging.playcademy.gg
34
- */
35
- export const GAME_WORKER_DOMAINS = {
36
- production: 'playcademy.gg',
37
- staging: 'staging.playcademy.gg',
38
- } as const
39
-
40
- /**
41
- * Log collector worker URL
42
- * Used by CLI to stream real-time logs from deployed games
43
- * Works for both production and staging (game slugs include environment suffix)
44
- */
45
- export const LOG_COLLECTOR_URL = 'https://logs.playcademy.gg'
46
-
47
- /**
48
- * Type exports
49
- */
50
- export type PlatformEnvironment = 'production' | 'staging'
@@ -1,20 +0,0 @@
1
- /**
2
- * Environment Variable Names
3
- *
4
- * Centralized environment variable names used across the platform.
5
- * These ensure consistency between deployers and runtime environments.
6
- */
7
-
8
- /**
9
- * Environment variables for game backend workers
10
- * Used by both the deployment system (@playcademy/api-core)
11
- * and the worker runtime (@playcademy/edge-play)
12
- */
13
- export const WORKER_ENV_VARS = {
14
- /** Game-specific API key for calling platform API */
15
- PLAYCADEMY_API_KEY: 'PLAYCADEMY_API_KEY',
16
- /** Game ID (UUID) */
17
- GAME_ID: 'GAME_ID',
18
- /** Platform API base URL */
19
- PLAYCADEMY_BASE_URL: 'PLAYCADEMY_BASE_URL',
20
- } as const
@@ -1,18 +0,0 @@
1
- /**
2
- * @playcademy/constants
3
- *
4
- * Centralized constants shared across the Playcademy platform.
5
- * This package contains domain names, URLs, environment variable names,
6
- * and other constants that need to be consistent across multiple packages.
7
- */
8
-
9
- export * from './achievements'
10
- export * from './auth'
11
- export * from './typescript'
12
- export * from './character'
13
- export * from './domains'
14
- export * from './env-vars'
15
- export * from './overworld'
16
- export * from './system'
17
- export * from './timeback'
18
- export * from './workers'
@@ -1,330 +0,0 @@
1
- /**
2
- * Overworld & Game Constants
3
- *
4
- * All constants related to the game world, including items, rendering,
5
- * maps, physics, UI, and core platform games.
6
- */
7
-
8
- // ═══════════════════════════════════════════════════════════════════════
9
- // VIEWPORT & LEVEL SYSTEM
10
- // ═══════════════════════════════════════════════════════════════════════
11
-
12
- /**
13
- * Minimum viewport dimensions for the game.
14
- *
15
- * Height reduced from 640px to 600px to accommodate devices with taskbars
16
- * (e.g., Chromebooks in school deployments that showed 632px viewport).
17
- */
18
- export const MIN_VIEWPORT_WIDTH = 960
19
- export const MIN_VIEWPORT_HEIGHT = 560
20
-
21
- /**
22
- * Maximum player level
23
- */
24
- export const MAX_LEVEL = 100
25
-
26
- // ═══════════════════════════════════════════════════════════════════════
27
- // ITEMS & ECONOMY
28
- // ═══════════════════════════════════════════════════════════════════════
29
-
30
- /**
31
- * Item Slugs - Canonical slugs for core platform items
32
- */
33
- export const ITEM_SLUGS = {
34
- /** Primary platform currency */
35
- PLAYCADEMY_CREDITS: 'PLAYCADEMY_CREDITS',
36
-
37
- /** Experience points currency */
38
- PLAYCADEMY_XP: 'PLAYCADEMY_XP',
39
-
40
- /** Core platform badges */
41
- FOUNDING_MEMBER_BADGE: 'FOUNDING_MEMBER_BADGE',
42
- EARLY_ADOPTER_BADGE: 'EARLY_ADOPTER_BADGE',
43
- FIRST_GAME_BADGE: 'FIRST_GAME_BADGE',
44
-
45
- /** Example items */
46
- COMMON_SWORD: 'COMMON_SWORD',
47
- SMALL_HEALTH_POTION: 'SMALL_HEALTH_POTION',
48
- SMALL_BACKPACK: 'SMALL_BACKPACK',
49
-
50
- /** Placeable items */
51
- LAVA_LAMP: 'LAVA_LAMP',
52
- BOOMBOX: 'BOOMBOX',
53
- CABIN_BED: 'CABIN_BED',
54
- } as const
55
-
56
- /**
57
- * Currency-specific constants for easier access
58
- */
59
- export const CURRENCIES = {
60
- /** Primary platform currency slug */
61
- PRIMARY: ITEM_SLUGS.PLAYCADEMY_CREDITS,
62
-
63
- /** Experience points slug */
64
- XP: ITEM_SLUGS.PLAYCADEMY_XP,
65
- } as const
66
-
67
- /**
68
- * Currency symbol constants
69
- */
70
- export const CURRENCY_SYMBOLS = {
71
- /** Primary platform currency symbol */
72
- PLAYCADEMY_CREDITS: 'PC',
73
-
74
- /** Experience points symbol */
75
- PLAYCADEMY_XP: 'XP',
76
-
77
- /** Default currency symbol */
78
- DEFAULT: '¤',
79
- } as const
80
-
81
- /**
82
- * Badge constants for easier access
83
- */
84
- export const BADGES = {
85
- FOUNDING_MEMBER: ITEM_SLUGS.FOUNDING_MEMBER_BADGE,
86
- EARLY_ADOPTER: ITEM_SLUGS.EARLY_ADOPTER_BADGE,
87
- FIRST_GAME: ITEM_SLUGS.FIRST_GAME_BADGE,
88
- } as const
89
-
90
- // ═══════════════════════════════════════════════════════════════════════
91
- // RENDERING & VISUALS
92
- // ═══════════════════════════════════════════════════════════════════════
93
-
94
- /**
95
- * Sprite System Constants
96
- */
97
- export const SPRITE_COMPONENTS = ['body', 'outfit', 'hairstyle', 'eyes', 'accessory'] as const
98
- export const SPRITE_LAYER_ORDER = ['body', 'outfit', 'hairstyle', 'eyes', 'accessory'] as const
99
-
100
- /**
101
- * Renderer Z-layer constants – centralised depth values used by the Three.js
102
- * front-end so magic numbers aren't scattered around the codebase.
103
- */
104
- export const Z_LAYERS = {
105
- /** Depth step between successive Tiled tile-layers (background → foreground). */
106
- TILE_LAYER_STEP: 0.01,
107
-
108
- /** Depth step between stacked sprite components inside a single character. */
109
- SPRITE_COMPONENT_STEP: 0.002,
110
-
111
- /** Minimum Z for Y-sorted entities (top of screen). */
112
- ENTITY_MIN: 0.011,
113
-
114
- /** Maximum Z for Y-sorted entities (bottom of screen). */
115
- ENTITY_MAX: 0.0115,
116
-
117
- /** Fallback Z when map bounds are unavailable. */
118
- ENTITY_FALLBACK: 0.011_25,
119
-
120
- /** Offset applied to placeable item sprites so they sit above characters. */
121
- PLACEABLE_OFFSET: 0.012,
122
-
123
- /** Shadow offset below entity base Z (shadows appear below characters). */
124
- SHADOW_OFFSET: -0.001,
125
- } as const
126
-
127
- /**
128
- * Shadow constants
129
- */
130
- export const SHADOW_CONSTANTS = {
131
- /** Shadow radius as a fraction of tileWidth */
132
- RADIUS_MULTIPLIER: 0.4,
133
-
134
- /** Y offset in world units as a fraction of one tile width. */
135
- Y_OFFSET_TILES: -0.9,
136
-
137
- /** Shadow opacity (semi-transparent) */
138
- OPACITY: 0.4,
139
-
140
- /** Y-axis scale for elliptical perspective */
141
- Y_SCALE: 0.6,
142
-
143
- /** Minimum shadow size during jumps (30% of original) */
144
- SCALE_MIN: 0.1,
145
-
146
- /** Maximum jump height for scaling calculations */
147
- MAX_JUMP_HEIGHT: 100,
148
- } as const
149
-
150
- /**
151
- * Nameplate constants
152
- */
153
- export const NAMEPLATE_CONSTANTS = {
154
- /** Adjust nameplate position from base height */
155
- BASE_Y_ADJUST: -1,
156
- /** Extra pixels to raise when a head accessory is equipped */
157
- HEAD_ACCESSORY_EXTRA_PX: 5,
158
- /** Available background colors for nameplates */
159
- BACKGROUND_COLORS: [
160
- '#2d3748', // Default gray
161
- '#dc2626', // Red
162
- '#ea580c', // Orange
163
- '#ca8a04', // Amber
164
- '#16a34a', // Green
165
- '#0891b2', // Cyan
166
- '#2563eb', // Blue
167
- '#7c3aed', // Purple
168
- '#c026d3', // Pink
169
- '#e11d48', // Rose
170
- '#134e4a', // Dark teal
171
- '#831843', // Dark pink
172
- ],
173
- /** Default background color */
174
- DEFAULT_BACKGROUND_COLOR: '#2d3748',
175
- } as const
176
-
177
- /**
178
- * Particle system constants
179
- */
180
- export const LANDING_PARTICLES = {
181
- /** Number of particles per landing */
182
- COUNT: 6,
183
-
184
- /** Base duration in ms */
185
- DURATION: 500,
186
-
187
- /** Spread radius as fraction of tileWidth */
188
- SPREAD: 0.4,
189
-
190
- /** Dust particle color */
191
- COLOR: '#777',
192
-
193
- /** Particle size in pixels in the game world */
194
- SIZE: 3,
195
-
196
- /** Vertical offset as a fraction of tile width (world units). */
197
- Y_OFFSET_TILES: -0.9,
198
- } as const
199
-
200
- // ═══════════════════════════════════════════════════════════════════════
201
- // MAPS
202
- // ═══════════════════════════════════════════════════════════════════════
203
-
204
- /**
205
- * Map System Constants
206
- */
207
- export const MAP_CONSTANTS = {
208
- /** Name of the Tiled layer containing map entry points */
209
- ENTRY_POINT_LAYER_NAME: 'EntryPoints',
210
-
211
- /** Name of the Tiled layer containing collision objects */
212
- COLLISION_LAYER_NAME: 'Object Layer 1',
213
-
214
- /** Name of the Tiled layer containing placeable objects */
215
- PLACEABLE_AREA_LAYER_NAME: 'PlaceableArea',
216
-
217
- /** Base path for tilesets */
218
- TILESET_BASE_PATH: '/public/tilesets',
219
- } as const
220
-
221
- // ═══════════════════════════════════════════════════════════════════════
222
- // PHYSICS & MOVEMENT
223
- // ═══════════════════════════════════════════════════════════════════════
224
-
225
- /**
226
- * Player movement and physics constants
227
- */
228
- export const PLAYER_PHYSICS = {
229
- /** Initial upward velocity when jumping (pixels per second) */
230
- JUMP_FORCE: 150,
231
-
232
- /** Downward acceleration due to gravity (pixels per second^2) */
233
- GRAVITY: -450,
234
- } as const
235
-
236
- /**
237
- * Bunny hop (jump queuing) constants – Counter-Strike style mechanics.
238
- */
239
- export const BUNNY_HOP = {
240
- /** Base time window (ms) within which a queued jump is valid. */
241
- QUEUE_WINDOW_MS: 100,
242
-
243
- /** Downward velocity threshold (px/s) to allow jump queuing. */
244
- FALL_SPEED_THRESHOLD: -50,
245
-
246
- /** Vertical offset threshold (px) to allow queuing close to ground. */
247
- CLOSE_TO_GROUND_THRESHOLD: 30,
248
-
249
- /** Speed increase per successful hop. */
250
- SPEED_INCREMENT: 0.15,
251
-
252
- /** Maximum total speed multiplier. */
253
- MAX_SPEED_MULTIPLIER: 5,
254
-
255
- /** Multiplier applied to jump force on chained hops (slightly lower). */
256
- HOP_JUMP_FORCE_MULTIPLIER: 0.95,
257
- } as const
258
-
259
- // ═══════════════════════════════════════════════════════════════════════
260
- // UI & UX
261
- // ═══════════════════════════════════════════════════════════════════════
262
-
263
- /**
264
- * Audio defaults
265
- */
266
- export const AUDIO_DEFAULTS = {
267
- /** Master output volume */
268
- MASTER_VOLUME: 0.5,
269
-
270
- /** Background music enabled by default */
271
- MUSIC_ENABLED: true,
272
- /** Background music volume */
273
- MUSIC_VOLUME: 0.5,
274
-
275
- /** Sound effects enabled by default */
276
- SFX_ENABLED: true,
277
- /** Sound effects volume */
278
- SFX_VOLUME: 0.5,
279
- } as const
280
-
281
- /**
282
- * Toast Duration Constants
283
- * Centralized toast notification display durations in milliseconds.
284
- */
285
- export const TOAST_DURATION = {
286
- /** Short duration for simple confirmations */
287
- SHORT: 3000,
288
-
289
- /** Standard duration for most notifications */
290
- STANDARD: 5000,
291
-
292
- /** Long duration for important notifications */
293
- LONG: 8000,
294
-
295
- /** Error message duration */
296
- ERROR: 4000,
297
- } as const
298
-
299
- /**
300
- * Cache Control Headers
301
- * Centralized cache control strategies for different asset types and API responses.
302
- */
303
- export const CACHE_CONTROL = {
304
- /** Immutable assets with content-based versioning (sprites, audio, etc.) */
305
- IMMUTABLE: 'public, max-age=31536000, immutable',
306
-
307
- /** JSON data - cached for 1 day in browser, 1 year in CDN */
308
- JSON_DATA: 'public, max-age=86400, s-maxage=31536000, must-revalidate',
309
-
310
- /** Character components API - cached for 1 hour in browser, 3 hours in CDN */
311
- API_CHARACTER_COMPONENTS: 'public, max-age=21600, s-maxage=21600, stale-while-revalidate=3600',
312
-
313
- /** Level configs API - cached for 1 hour in browser, 12 hours in CDN */
314
- API_LEVEL_CONFIGS: 'public, max-age=3600, s-maxage=86400, stale-while-revalidate=120',
315
-
316
- /** Sprite templates API - cached for 1 day in browser, 1 week in CDN */
317
- API_SPRITE_TEMPLATES: 'public, max-age=86400, s-maxage=86400, stale-while-revalidate=3600',
318
- } as const
319
-
320
- // ═══════════════════════════════════════════════════════════════════════
321
- // CORE PLATFORM GAMES
322
- // ═══════════════════════════════════════════════════════════════════════
323
-
324
- /**
325
- * Core Game UUIDs - Canonical UUIDs for core platform games
326
- */
327
- export const CORE_GAME_UUIDS = {
328
- /** Internal playground game for development and testing */
329
- PLAYGROUND: '00000000-0000-0000-0000-000000000001',
330
- } as const
@@ -1,10 +0,0 @@
1
- /**
2
- * System-Level Platform Constants
3
- *
4
- * Core platform settings that affect the entire system.
5
- */
6
-
7
- /**
8
- * Timezone for platform-wide operations
9
- */
10
- export const PLATFORM_TIMEZONE = 'America/New_York' as const