@playcademy/vite-plugin 0.1.37 → 0.1.38

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.
@@ -3,4 +3,4 @@
3
3
  */
4
4
  export { startSandbox } from './server';
5
5
  export { extractProjectInfo } from './project-info';
6
- export { detectTimebackOptions } from './timeback';
6
+ export { detectTimebackOptions, getEffectiveTimebackId, hasTimebackCredentials, validateTimebackConfig, generateTimebackJson, } from './timeback';
@@ -11,4 +11,5 @@ export declare function startSandbox(viteConfig: ResolvedConfig, autoStart?: boo
11
11
  realtimeEnabled?: boolean;
12
12
  realtimePort?: number;
13
13
  logLevel?: 'debug' | 'info' | 'warn' | 'error';
14
+ timebackId?: string;
14
15
  }): Promise<SandboxManager>;
@@ -1,7 +1,13 @@
1
1
  /**
2
- * TimeBack configuration detection from environment variables
2
+ * TimeBack configuration and enrollment utilities
3
3
  */
4
+ import type { ResolvedConfig } from 'vite';
4
5
  import type { TimebackConfig } from '@playcademy/sandbox/config';
6
+ import type { PlaycademyTimebackOptions } from '../../types/options';
7
+ /**
8
+ * Get the effective timebackId - defaults to 'mock' if courses are configured
9
+ */
10
+ export declare function getEffectiveTimebackId(timeback?: Pick<PlaycademyTimebackOptions, 'timebackId' | 'courses'>): string | undefined;
5
11
  /**
6
12
  * Auto-detect TimeBack configuration from environment variables
7
13
  *
@@ -9,3 +15,18 @@ import type { TimebackConfig } from '@playcademy/sandbox/config';
9
15
  * Returns undefined if no TimeBack configuration is detected.
10
16
  */
11
17
  export declare function detectTimebackOptions(): Partial<TimebackConfig> | undefined;
18
+ /**
19
+ * Check if TimeBack credentials are fully configured
20
+ */
21
+ export declare function hasTimebackCredentials(): boolean;
22
+ /**
23
+ * Validate TimeBack config and warn if real course IDs are used without credentials
24
+ */
25
+ export declare function validateTimebackConfig(viteConfig: ResolvedConfig, timeback?: PlaycademyTimebackOptions): void;
26
+ /**
27
+ * Generate TimeBack data JSON from timeback config.
28
+ * Includes role and enrollments for passing to the game shell.
29
+ *
30
+ * @returns JSON string with { role, enrollments } or undefined if no courses configured
31
+ */
32
+ export declare function generateTimebackJson(timeback?: PlaycademyTimebackOptions): string | undefined;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 't' hotkey - cycle TimeBack user role
3
+ */
4
+ import type { HotkeyOptions } from '../../types';
5
+ export declare const cycleTimebackRoleHotkey: (options: HotkeyOptions) => {
6
+ key: string;
7
+ description: string;
8
+ action: () => void;
9
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI Hotkeys for the Playcademy Vite plugin
3
+ */
4
+ import type { HotkeyOptions } from '../../types';
5
+ export declare function getHotkeys(options: HotkeyOptions): {
6
+ key: string;
7
+ description: string;
8
+ action: () => void;
9
+ }[];
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 'd' hotkey - recreate sandbox database
3
+ */
4
+ import type { HotkeyOptions } from '../../types';
5
+ export declare const recreateDatabaseHotkey: (options: HotkeyOptions) => {
6
+ key: string;
7
+ description: string;
8
+ action: () => Promise<void>;
9
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 'm' hotkey - toggle platform/standalone mode
3
+ */
4
+ import type { HotkeyOptions } from '../../types';
5
+ export declare const toggleModeHotkey: (options: HotkeyOptions) => {
6
+ key: string;
7
+ description: string;
8
+ action: () => Promise<void>;
9
+ };
@@ -1,3 +1,8 @@
1
1
  import type { ViteDevServer } from 'vite';
2
2
  import type { SandboxManager } from '../types';
3
- export declare function devServerMiddleware(server: ViteDevServer, sandbox: SandboxManager, gameUrl: string | undefined, showBadge: boolean): void;
3
+ import type { PlaycademyTimebackOptions } from '../types/options';
4
+ export interface ShellOptions {
5
+ showBadge: boolean;
6
+ timeback?: PlaycademyTimebackOptions;
7
+ }
8
+ export declare function devServerMiddleware(server: ViteDevServer, sandbox: SandboxManager, gameUrl: string | undefined, options: ShellOptions): void;
@@ -7,7 +7,7 @@
7
7
  * these references at module scope to properly clean them up on restart.
8
8
  */
9
9
  import type { ViteDevServer } from 'vite';
10
- import type { CliServerManager, SandboxManager } from '../types';
10
+ import type { CliServerManager, SandboxManager, TimebackRoleOverride } from '../types';
11
11
  import type { PlaycademyMode } from '../types/options';
12
12
  /**
13
13
  * Module-level server references
@@ -17,6 +17,7 @@ export declare const serverState: {
17
17
  backend: CliServerManager | null;
18
18
  viteServer: ViteDevServer | null;
19
19
  currentMode: PlaycademyMode;
20
+ timebackRoleOverride: TimebackRoleOverride | null;
20
21
  };
21
22
  /**
22
23
  * Get sandbox server reference
@@ -54,3 +55,11 @@ export declare function getViteServerRef(): ViteDevServer | null;
54
55
  * Set Vite dev server reference
55
56
  */
56
57
  export declare function setViteServerRef(server: ViteDevServer | null): void;
58
+ /**
59
+ * Get current TimeBack role override
60
+ */
61
+ export declare function getTimebackRoleOverride(): TimebackRoleOverride | null;
62
+ /**
63
+ * Set TimeBack role override
64
+ */
65
+ export declare function setTimebackRoleOverride(role: TimebackRoleOverride | null): void;
@@ -2,4 +2,5 @@
2
2
  * Type exports for the Playcademy Vite Plugin
3
3
  */
4
4
  export type { PlaycademyExportOptions, PlaycademySandboxOptions, PlaycademyShellOptions, PlaycademyPluginOptions, PlaycademyMode, } from './options';
5
- export type { ResolvedPluginOptions, PluginContext, PlaycademyOutputData, ProjectInfo, SandboxManager, CliServerManager, CliDevServerOptions, PlatformModeOptions, StandaloneModeOptions, ModeSwitcherOptions, } from './internal';
5
+ export type { ResolvedPluginOptions, PluginContext, PlaycademyOutputData, ProjectInfo, SandboxManager, CliServerManager, CliDevServerOptions, PlatformModeOptions, StandaloneModeOptions, HotkeyOptions, TimebackRoleOverride, } from './internal';
6
+ export { TIMEBACK_ROLES } from './internal';
@@ -2,7 +2,12 @@
2
2
  * Internal plugin state and context types
3
3
  */
4
4
  import type { ResolvedConfig } from 'vite';
5
- import type { PlaycademyMode } from './options';
5
+ import type { PlaycademyMode, PlaycademyTimebackOptions } from './options';
6
+ /**
7
+ * TimeBack roles that can be cycled through in dev mode
8
+ */
9
+ export declare const TIMEBACK_ROLES: readonly ["student", "parent", "teacher", "administrator"];
10
+ export type TimebackRoleOverride = (typeof TIMEBACK_ROLES)[number];
6
11
  /**
7
12
  * Internal resolved plugin options
8
13
  */
@@ -21,6 +26,7 @@ export interface ResolvedPluginOptions {
21
26
  realtimeEnabled: boolean;
22
27
  realtimePort?: number;
23
28
  showBadge: boolean;
29
+ timeback?: PlaycademyTimebackOptions;
24
30
  }
25
31
  /**
26
32
  * Plugin context shared across hooks
@@ -97,6 +103,7 @@ export interface PlatformModeOptions {
97
103
  showBadge: boolean;
98
104
  preferredBackendPort: number;
99
105
  configPath?: string;
106
+ timeback?: PlaycademyTimebackOptions;
100
107
  }
101
108
  /**
102
109
  * Options for standalone mode (backend only)
@@ -106,9 +113,9 @@ export interface StandaloneModeOptions {
106
113
  configPath?: string;
107
114
  }
108
115
  /**
109
- * Options for mode switching
116
+ * Options for hotkeys and mode switching
110
117
  */
111
- export interface ModeSwitcherOptions {
118
+ export interface HotkeyOptions {
112
119
  viteConfig: ResolvedConfig;
113
120
  platformModeOptions: PlatformModeOptions;
114
121
  }
@@ -207,6 +207,54 @@ export interface PlaycademySandboxOptions {
207
207
  port?: number;
208
208
  };
209
209
  }
210
+ /**
211
+ * TimeBack integration configuration for local development
212
+ *
213
+ * @example
214
+ * ```ts
215
+ * // Mock enrollments (timebackId auto-generated, role defaults to 'student')
216
+ * timeback: {
217
+ * courses: {
218
+ * 'FastMath:3': 'mock',
219
+ * 'FastMath:4': 'mock',
220
+ * },
221
+ * }
222
+ *
223
+ * // Testing as a parent viewing their child's progress
224
+ * timeback: {
225
+ * role: 'parent',
226
+ * courses: {
227
+ * 'FastMath:3': 'mock',
228
+ * },
229
+ * }
230
+ *
231
+ * // Real TimeBack integration (requires env credentials)
232
+ * timeback: {
233
+ * timebackId: 'real-student-sourced-id',
234
+ * courses: {
235
+ * 'FastMath:3': 'real-course-id-g3',
236
+ * 'FastMath:4': 'real-course-id-g4',
237
+ * },
238
+ * }
239
+ * ```
240
+ */
241
+ export interface PlaycademyTimebackOptions {
242
+ /**
243
+ * TimeBack ID for the test user. Optional for mock testing (auto-generated).
244
+ * Required when testing against real TimeBack - use the student's sourcedId.
245
+ */
246
+ timebackId?: string;
247
+ /**
248
+ * User role for testing. Defaults to 'student'.
249
+ * Use this to test parent/teacher views of your game.
250
+ */
251
+ role?: 'student' | 'parent' | 'teacher' | 'administrator' | 'guardian';
252
+ /**
253
+ * Course enrollments mapping 'Subject:Grade' to 'mock' or real course ID.
254
+ * Only courses listed here will be enrolled - allows testing partial enrollment.
255
+ */
256
+ courses: Record<string, 'mock' | string>;
257
+ }
210
258
  /**
211
259
  * Configuration options for the development shell wrapper
212
260
  *
@@ -334,4 +382,21 @@ export interface PlaycademyPluginOptions {
334
382
  * ```
335
383
  */
336
384
  shell?: PlaycademyShellOptions;
385
+ /**
386
+ * TimeBack integration configuration.
387
+ *
388
+ * Configure mock or real TimeBack enrollments for local development.
389
+ * `timebackId` is auto-generated for mock testing.
390
+ *
391
+ * @example
392
+ * ```ts
393
+ * timeback: {
394
+ * courses: {
395
+ * 'FastMath:3': 'mock',
396
+ * 'FastMath:4': 'mock',
397
+ * },
398
+ * }
399
+ * ```
400
+ */
401
+ timeback?: PlaycademyTimebackOptions;
337
402
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcademy/vite-plugin",
3
- "version": "0.1.37",
3
+ "version": "0.1.38",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -21,11 +21,11 @@
21
21
  "dependencies": {
22
22
  "archiver": "^7.0.1",
23
23
  "picocolors": "^1.1.1",
24
- "playcademy": "0.14.24"
24
+ "playcademy": "0.14.25"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@inquirer/prompts": "^7.8.6",
28
- "@playcademy/sandbox": "0.1.11",
28
+ "@playcademy/sandbox": "0.2.0",
29
29
  "@types/archiver": "^6.0.3",
30
30
  "@types/bun": "latest"
31
31
  },
@@ -1,9 +0,0 @@
1
- /**
2
- * Mode switching functionality
3
- * Handles toggling between platform and standalone modes
4
- */
5
- import type { ModeSwitcherOptions } from '../types';
6
- /**
7
- * Toggle between platform and standalone modes
8
- */
9
- export declare function toggleMode(options: ModeSwitcherOptions): Promise<void>;
@@ -1,14 +0,0 @@
1
- /**
2
- * Sandbox database recreation functionality
3
- * Handles recreating the sandbox database on-demand
4
- */
5
- import type { ResolvedConfig } from 'vite';
6
- import type { PlatformModeOptions } from '../types';
7
- export interface RecreateSandboxDatabaseOptions {
8
- viteConfig: ResolvedConfig;
9
- platformModeOptions: PlatformModeOptions;
10
- }
11
- /**
12
- * Recreate the sandbox database
13
- */
14
- export declare function recreateSandboxDatabase(options: RecreateSandboxDatabaseOptions): Promise<void>;