playcademy 0.28.0 → 0.28.1-beta.10
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/README.md +13 -0
- package/dist/bin.js +2 -1
- package/dist/bucket.d.ts +8 -0
- package/dist/bucket.js +37 -14
- package/dist/cli.js +57 -23
- package/dist/constants.d.ts +11 -6
- package/dist/constants.js +24 -22
- package/dist/db.js +50 -24
- package/dist/index.d.ts +86 -14
- package/dist/index.js +10104 -728
- package/dist/runtime/dashboard-runtime/manifest.json +4 -4
- package/dist/runtime/game-runtime/index.js +11788 -499
- package/dist/runtime/game-runtime/manifest.json +4 -4
- package/dist/templates/playcademy-env.d.ts.template +2 -1
- package/dist/templates/playcademy-gitignore.template +1 -0
- package/dist/utils.d.ts +8 -1
- package/dist/utils.js +8631 -205
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -264,6 +264,19 @@ Remove TimeBack integration (keeps game metadata).
|
|
|
264
264
|
playcademy timeback cleanup
|
|
265
265
|
```
|
|
266
266
|
|
|
267
|
+
#### `timeback assessments import`
|
|
268
|
+
|
|
269
|
+
Import the ordered live assessment catalog and host-only QTI fixture data from the platform for
|
|
270
|
+
local game testing.
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
playcademy timeback assessments import
|
|
274
|
+
playcademy timeback assessments import --env production
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Fixtures are written to `.playcademy/timeback/assessment-fixtures.json`. The local dev host serves
|
|
278
|
+
them through the normal game SDK assessment methods and resets local attempts when it restarts.
|
|
279
|
+
|
|
267
280
|
## Environment Variables
|
|
268
281
|
|
|
269
282
|
- `CI` - Set to `1` or `true` to disable interactive prompts
|
package/dist/bin.js
CHANGED
|
@@ -15,7 +15,8 @@ var CLI_DIRECTORIES = {
|
|
|
15
15
|
WORKSPACE: WORKSPACE_NAME,
|
|
16
16
|
DATABASE: join(WORKSPACE_NAME, "db"),
|
|
17
17
|
KV: join(WORKSPACE_NAME, "kv"),
|
|
18
|
-
BUCKET: join(WORKSPACE_NAME, "bucket")
|
|
18
|
+
BUCKET: join(WORKSPACE_NAME, "bucket"),
|
|
19
|
+
TIMEBACK: join(WORKSPACE_NAME, "timeback")
|
|
19
20
|
};
|
|
20
21
|
var PLAYCADEMY_HOME = join(homedir(), ".playcademy");
|
|
21
22
|
var CLI_USER_DIRECTORIES = {
|
package/dist/bucket.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GamePermission } from '@playcademy/constants';
|
|
1
2
|
import { TimebackCourseConfig, CourseConfig, OrganizationConfig, ComponentConfig, ResourceConfig, ComponentResourceConfig } from '@playcademy/types/timeback';
|
|
2
3
|
import { Miniflare } from 'miniflare';
|
|
3
4
|
|
|
@@ -148,6 +149,13 @@ interface PlaycademyConfig {
|
|
|
148
149
|
description?: string;
|
|
149
150
|
/** Game emoji icon */
|
|
150
151
|
emoji?: string;
|
|
152
|
+
/**
|
|
153
|
+
* Browser permissions to request for the game's iframe (e.g.
|
|
154
|
+
* `['microphone']`). Opt-in per game; only `microphone` and `camera` are
|
|
155
|
+
* delegated this way. Fullscreen, autoplay, and gamepad are granted to
|
|
156
|
+
* every game automatically.
|
|
157
|
+
*/
|
|
158
|
+
permissions?: GamePermission[];
|
|
151
159
|
/** Build command to run before deployment */
|
|
152
160
|
buildCommand?: string[];
|
|
153
161
|
/** Path to build output */
|
package/dist/bucket.js
CHANGED
|
@@ -44,7 +44,7 @@ var GAME_API_ROUTES_DIRECTORY = join2(GAME_SERVER_ROOT_DIRECTORY, "api");
|
|
|
44
44
|
// ../better-auth/package.json
|
|
45
45
|
var package_default = {
|
|
46
46
|
name: "@playcademy/better-auth",
|
|
47
|
-
version: "0.0.
|
|
47
|
+
version: "0.0.21-beta.10",
|
|
48
48
|
type: "module",
|
|
49
49
|
exports: {
|
|
50
50
|
"./server": {
|
|
@@ -87,18 +87,7 @@ var package_default = {
|
|
|
87
87
|
// src/constants/auth.ts
|
|
88
88
|
var BETTER_AUTH_VERSION = package_default.dependencies["better-auth"];
|
|
89
89
|
|
|
90
|
-
// src/constants/config.ts
|
|
91
|
-
var ENV_FILES = [
|
|
92
|
-
".env",
|
|
93
|
-
// Loaded first
|
|
94
|
-
".env.development",
|
|
95
|
-
// Overrides .env
|
|
96
|
-
".env.local"
|
|
97
|
-
// Overrides all (highest priority)
|
|
98
|
-
];
|
|
99
|
-
|
|
100
90
|
// src/constants/bucket.ts
|
|
101
|
-
var BUCKET_ALWAYS_SKIP = [".git", ".DS_Store", ".gitignore", ...ENV_FILES];
|
|
102
91
|
var PRESIGNED_UPLOAD_THRESHOLD = 4 * 1024 * 1024;
|
|
103
92
|
|
|
104
93
|
// src/constants/cloudflare.ts
|
|
@@ -138,7 +127,8 @@ var CLI_DIRECTORIES = {
|
|
|
138
127
|
WORKSPACE: WORKSPACE_NAME,
|
|
139
128
|
DATABASE: join5(WORKSPACE_NAME, "db"),
|
|
140
129
|
KV: join5(WORKSPACE_NAME, "kv"),
|
|
141
|
-
BUCKET: join5(WORKSPACE_NAME, "bucket")
|
|
130
|
+
BUCKET: join5(WORKSPACE_NAME, "bucket"),
|
|
131
|
+
TIMEBACK: join5(WORKSPACE_NAME, "timeback")
|
|
142
132
|
};
|
|
143
133
|
var PLAYCADEMY_HOME = join5(homedir(), ".playcademy");
|
|
144
134
|
var CLI_USER_DIRECTORIES = {
|
|
@@ -281,11 +271,44 @@ var PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPES = [
|
|
|
281
271
|
"text-entry",
|
|
282
272
|
"order",
|
|
283
273
|
"match",
|
|
284
|
-
"hottext"
|
|
274
|
+
"hottext",
|
|
275
|
+
"hotspot",
|
|
276
|
+
"gap-match",
|
|
277
|
+
"graphic-gap-match",
|
|
278
|
+
"select-point",
|
|
279
|
+
"graphic-associate",
|
|
280
|
+
"position-object"
|
|
285
281
|
];
|
|
286
282
|
var PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPE_SET = new Set(
|
|
287
283
|
PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPES
|
|
288
284
|
);
|
|
285
|
+
var PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPES = [
|
|
286
|
+
"choice",
|
|
287
|
+
"inline-choice",
|
|
288
|
+
"text-entry",
|
|
289
|
+
"order",
|
|
290
|
+
"match",
|
|
291
|
+
"hottext",
|
|
292
|
+
"gap-match",
|
|
293
|
+
"hotspot",
|
|
294
|
+
"graphic-associate",
|
|
295
|
+
"graphic-gap-match"
|
|
296
|
+
];
|
|
297
|
+
var PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPE_SET = new Set(
|
|
298
|
+
PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPES
|
|
299
|
+
);
|
|
300
|
+
var QTI_RASTER_IMAGE_MIME_TYPES = [
|
|
301
|
+
"image/png",
|
|
302
|
+
"image/jpeg",
|
|
303
|
+
// Some browsers and operating systems still report the legacy jpg spelling.
|
|
304
|
+
"image/jpg",
|
|
305
|
+
"image/gif",
|
|
306
|
+
"image/webp",
|
|
307
|
+
"image/bmp"
|
|
308
|
+
];
|
|
309
|
+
var QTI_RASTER_IMAGE_SUBTYPE_PATTERN = QTI_RASTER_IMAGE_MIME_TYPES.map(
|
|
310
|
+
(type) => type.slice("image/".length)
|
|
311
|
+
).join("|");
|
|
289
312
|
var TIMEBACK_DISCREPANCY_QUEUE_WINDOW_VALUES = new Set(TIMEBACK_DISCREPANCY_QUEUE_WINDOWS);
|
|
290
313
|
var TIMEBACK_DISCREPANCY_QUEUE_METRIC_VALUES = new Set(TIMEBACK_DISCREPANCY_QUEUE_METRICS);
|
|
291
314
|
|
package/dist/cli.js
CHANGED
|
@@ -1207,7 +1207,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
1207
1207
|
// ../better-auth/package.json
|
|
1208
1208
|
var package_default = {
|
|
1209
1209
|
name: "@playcademy/better-auth",
|
|
1210
|
-
version: "0.0.
|
|
1210
|
+
version: "0.0.21-beta.10",
|
|
1211
1211
|
type: "module",
|
|
1212
1212
|
exports: {
|
|
1213
1213
|
"./server": {
|
|
@@ -1252,6 +1252,12 @@ var BETTER_AUTH_VERSION = package_default.dependencies["better-auth"];
|
|
|
1252
1252
|
var PLAYCADEMY_AUTH_VERSION = "latest";
|
|
1253
1253
|
var AUTH_CONFIG_FILE = "auth.ts";
|
|
1254
1254
|
|
|
1255
|
+
// src/constants/bucket.ts
|
|
1256
|
+
var PRESIGNED_UPLOAD_THRESHOLD = 4 * 1024 * 1024;
|
|
1257
|
+
|
|
1258
|
+
// src/constants/cloudflare.ts
|
|
1259
|
+
var QUEUE_NAME_PREFIX = "playcademy";
|
|
1260
|
+
|
|
1255
1261
|
// src/constants/config.ts
|
|
1256
1262
|
var ENV_FILES = [
|
|
1257
1263
|
".env",
|
|
@@ -1277,13 +1283,6 @@ var TSCONFIG_REQUIRED_INCLUDES = [
|
|
|
1277
1283
|
// Server-side code
|
|
1278
1284
|
];
|
|
1279
1285
|
|
|
1280
|
-
// src/constants/bucket.ts
|
|
1281
|
-
var BUCKET_ALWAYS_SKIP = [".git", ".DS_Store", ".gitignore", ...ENV_FILES];
|
|
1282
|
-
var PRESIGNED_UPLOAD_THRESHOLD = 4 * 1024 * 1024;
|
|
1283
|
-
|
|
1284
|
-
// src/constants/cloudflare.ts
|
|
1285
|
-
var QUEUE_NAME_PREFIX = "playcademy";
|
|
1286
|
-
|
|
1287
1286
|
// src/constants/database.ts
|
|
1288
1287
|
import { join as join4 } from "path";
|
|
1289
1288
|
var DEFAULT_DATABASE_DIRECTORY = join4("server", "db");
|
|
@@ -1339,7 +1338,8 @@ var CLI_DIRECTORIES = {
|
|
|
1339
1338
|
WORKSPACE: WORKSPACE_NAME,
|
|
1340
1339
|
DATABASE: join6(WORKSPACE_NAME, "db"),
|
|
1341
1340
|
KV: join6(WORKSPACE_NAME, "kv"),
|
|
1342
|
-
BUCKET: join6(WORKSPACE_NAME, "bucket")
|
|
1341
|
+
BUCKET: join6(WORKSPACE_NAME, "bucket"),
|
|
1342
|
+
TIMEBACK: join6(WORKSPACE_NAME, "timeback")
|
|
1343
1343
|
};
|
|
1344
1344
|
var PLAYCADEMY_HOME = join6(homedir(), ".playcademy");
|
|
1345
1345
|
var CLI_USER_DIRECTORIES = {
|
|
@@ -1372,6 +1372,18 @@ var CONFIG_FILE_NAMES = [
|
|
|
1372
1372
|
];
|
|
1373
1373
|
|
|
1374
1374
|
// ../constants/src/timeback.ts
|
|
1375
|
+
var TIMEBACK_GRADES = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
|
|
1376
|
+
var TIMEBACK_SUBJECTS = [
|
|
1377
|
+
"Reading",
|
|
1378
|
+
"Language",
|
|
1379
|
+
"Vocabulary",
|
|
1380
|
+
"Social Studies",
|
|
1381
|
+
"Writing",
|
|
1382
|
+
"Science",
|
|
1383
|
+
"FastMath",
|
|
1384
|
+
"Math",
|
|
1385
|
+
"None"
|
|
1386
|
+
];
|
|
1375
1387
|
var TIMEBACK_ORG_NAME = "Playcademy Studios";
|
|
1376
1388
|
var TIMEBACK_ORG_TYPE = "department";
|
|
1377
1389
|
var TIMEBACK_COURSE_DEFAULTS = {
|
|
@@ -2048,17 +2060,6 @@ function processConfigVariables(config) {
|
|
|
2048
2060
|
}
|
|
2049
2061
|
|
|
2050
2062
|
// ../timeback/dist/constants.js
|
|
2051
|
-
var TIMEBACK_SUBJECTS = [
|
|
2052
|
-
"Math",
|
|
2053
|
-
"FastMath",
|
|
2054
|
-
"Science",
|
|
2055
|
-
"Social Studies",
|
|
2056
|
-
"Language",
|
|
2057
|
-
"Reading",
|
|
2058
|
-
"Vocabulary",
|
|
2059
|
-
"Writing"
|
|
2060
|
-
];
|
|
2061
|
-
var TIMEBACK_GRADE_LEVELS = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
|
|
2062
2063
|
var TIMEBACK_GRADE_LEVEL_LABELS = {
|
|
2063
2064
|
"-1": "pre-k",
|
|
2064
2065
|
"0": "kindergarten",
|
|
@@ -2121,11 +2122,44 @@ var PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPES = [
|
|
|
2121
2122
|
"text-entry",
|
|
2122
2123
|
"order",
|
|
2123
2124
|
"match",
|
|
2124
|
-
"hottext"
|
|
2125
|
+
"hottext",
|
|
2126
|
+
"hotspot",
|
|
2127
|
+
"gap-match",
|
|
2128
|
+
"graphic-gap-match",
|
|
2129
|
+
"select-point",
|
|
2130
|
+
"graphic-associate",
|
|
2131
|
+
"position-object"
|
|
2125
2132
|
];
|
|
2126
2133
|
var PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPE_SET = new Set(
|
|
2127
2134
|
PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPES
|
|
2128
2135
|
);
|
|
2136
|
+
var PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPES = [
|
|
2137
|
+
"choice",
|
|
2138
|
+
"inline-choice",
|
|
2139
|
+
"text-entry",
|
|
2140
|
+
"order",
|
|
2141
|
+
"match",
|
|
2142
|
+
"hottext",
|
|
2143
|
+
"gap-match",
|
|
2144
|
+
"hotspot",
|
|
2145
|
+
"graphic-associate",
|
|
2146
|
+
"graphic-gap-match"
|
|
2147
|
+
];
|
|
2148
|
+
var PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPE_SET = new Set(
|
|
2149
|
+
PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPES
|
|
2150
|
+
);
|
|
2151
|
+
var QTI_RASTER_IMAGE_MIME_TYPES = [
|
|
2152
|
+
"image/png",
|
|
2153
|
+
"image/jpeg",
|
|
2154
|
+
// Some browsers and operating systems still report the legacy jpg spelling.
|
|
2155
|
+
"image/jpg",
|
|
2156
|
+
"image/gif",
|
|
2157
|
+
"image/webp",
|
|
2158
|
+
"image/bmp"
|
|
2159
|
+
];
|
|
2160
|
+
var QTI_RASTER_IMAGE_SUBTYPE_PATTERN = QTI_RASTER_IMAGE_MIME_TYPES.map(
|
|
2161
|
+
(type) => type.slice("image/".length)
|
|
2162
|
+
).join("|");
|
|
2129
2163
|
var TIMEBACK_DISCREPANCY_QUEUE_WINDOW_VALUES = new Set(TIMEBACK_DISCREPANCY_QUEUE_WINDOWS);
|
|
2130
2164
|
var TIMEBACK_DISCREPANCY_QUEUE_METRIC_VALUES = new Set(TIMEBACK_DISCREPANCY_QUEUE_METRICS);
|
|
2131
2165
|
|
|
@@ -3007,7 +3041,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as re
|
|
|
3007
3041
|
import { join as join13 } from "node:path";
|
|
3008
3042
|
|
|
3009
3043
|
// src/version.ts
|
|
3010
|
-
var cliVersion = false ? "0.0.0-dev" : "0.28.
|
|
3044
|
+
var cliVersion = false ? "0.0.0-dev" : "0.28.1-beta.10";
|
|
3011
3045
|
|
|
3012
3046
|
// src/lib/init/database.ts
|
|
3013
3047
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -3252,7 +3286,7 @@ async function promptForTimeBackIntegration(options) {
|
|
|
3252
3286
|
}
|
|
3253
3287
|
const grades = await checkbox({
|
|
3254
3288
|
message: "Select grade levels:",
|
|
3255
|
-
choices:
|
|
3289
|
+
choices: TIMEBACK_GRADES.map((grade) => ({
|
|
3256
3290
|
value: grade,
|
|
3257
3291
|
name: TIMEBACK_GRADE_LEVEL_LABELS[grade.toString()]
|
|
3258
3292
|
})),
|
package/dist/constants.d.ts
CHANGED
|
@@ -59,15 +59,18 @@ declare const AUTH_CONFIG_FILE = "auth.ts";
|
|
|
59
59
|
* Bucket-related constants
|
|
60
60
|
*/
|
|
61
61
|
/**
|
|
62
|
-
* Files and directories that are always excluded from bucket
|
|
62
|
+
* Files and directories that are always excluded from bucket uploads
|
|
63
63
|
*
|
|
64
|
-
* These are
|
|
64
|
+
* These exact names are skipped regardless of .gitignore patterns:
|
|
65
65
|
* - .git - Git repository data
|
|
66
66
|
* - .DS_Store - macOS filesystem metadata
|
|
67
67
|
* - .gitignore - Git ignore configuration (shouldn't be uploaded to storage)
|
|
68
|
-
*
|
|
68
|
+
*
|
|
69
|
+
* Environment files are excluded separately by the `.env*` name pattern in
|
|
70
|
+
* the collector, so every variant (`.env.production`, `.envrc`, ...) is
|
|
71
|
+
* covered, not just the ones the CLI loads.
|
|
69
72
|
*/
|
|
70
|
-
declare const BUCKET_ALWAYS_SKIP: readonly [
|
|
73
|
+
declare const BUCKET_ALWAYS_SKIP: readonly ['.git', '.DS_Store', '.gitignore'];
|
|
71
74
|
declare const PRESIGNED_UPLOAD_THRESHOLD: number;
|
|
72
75
|
/**
|
|
73
76
|
* Default directory synced to the bucket by `playcademy bucket sync`.
|
|
@@ -277,8 +280,8 @@ declare const GODOT_EXECUTABLE_PATTERNS: {
|
|
|
277
280
|
declare const CALLBACK_PORT = 6175;
|
|
278
281
|
/** Path for the OAuth callback endpoint */
|
|
279
282
|
declare const CALLBACK_PATH = "/callback";
|
|
280
|
-
/** Timeout for
|
|
281
|
-
declare const SSO_AUTH_TIMEOUT_MS =
|
|
283
|
+
/** Timeout for the whole browser SSO flow (login page + provider auth + MFA) */
|
|
284
|
+
declare const SSO_AUTH_TIMEOUT_MS = 90000;
|
|
282
285
|
|
|
283
286
|
/**
|
|
284
287
|
* Path constants for CLI directories and files
|
|
@@ -289,6 +292,7 @@ declare const CLI_DIRECTORIES: {
|
|
|
289
292
|
readonly DATABASE: string;
|
|
290
293
|
readonly KV: string;
|
|
291
294
|
readonly BUCKET: string;
|
|
295
|
+
readonly TIMEBACK: string;
|
|
292
296
|
};
|
|
293
297
|
declare const CLI_USER_DIRECTORIES: {
|
|
294
298
|
readonly CONFIG: string;
|
|
@@ -310,6 +314,7 @@ declare const CLI_FILES: {
|
|
|
310
314
|
readonly AUTH_STORE: 'auth.json';
|
|
311
315
|
readonly GAMES_STORE: 'games.json';
|
|
312
316
|
readonly INITIAL_DATABASE: 'initial.sqlite';
|
|
317
|
+
readonly ASSESSMENT_FIXTURES: 'assessment-fixtures.json';
|
|
313
318
|
};
|
|
314
319
|
|
|
315
320
|
/**
|
package/dist/constants.js
CHANGED
|
@@ -21,7 +21,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
21
21
|
// ../better-auth/package.json
|
|
22
22
|
var package_default = {
|
|
23
23
|
name: "@playcademy/better-auth",
|
|
24
|
-
version: "0.0.
|
|
24
|
+
version: "0.0.21-beta.10",
|
|
25
25
|
type: "module",
|
|
26
26
|
exports: {
|
|
27
27
|
"./server": {
|
|
@@ -73,6 +73,24 @@ var OAUTH_CALLBACK_URL_PATTERN = "{appUrl}/api/auth/callback/{provider}";
|
|
|
73
73
|
var PLACEHOLDER_APP_URL = "https://your-app.playcademy.gg";
|
|
74
74
|
var AUTH_CONFIG_FILE = "auth.ts";
|
|
75
75
|
|
|
76
|
+
// src/constants/bucket.ts
|
|
77
|
+
var BUCKET_ALWAYS_SKIP = [".git", ".DS_Store", ".gitignore"];
|
|
78
|
+
var PRESIGNED_UPLOAD_THRESHOLD = 4 * 1024 * 1024;
|
|
79
|
+
var DEFAULT_BUCKET_DIRECTORY = "bucket";
|
|
80
|
+
|
|
81
|
+
// src/constants/cloudflare.ts
|
|
82
|
+
var CLOUDFLARE_BINDINGS = {
|
|
83
|
+
/** R2 bucket binding name */
|
|
84
|
+
BUCKET: "BUCKET",
|
|
85
|
+
/** KV namespace binding name */
|
|
86
|
+
KV: "KV",
|
|
87
|
+
/** D1 database binding name */
|
|
88
|
+
DB: "DB"
|
|
89
|
+
};
|
|
90
|
+
var MINIFLARE_D1_DIRECTORY = "miniflare-D1DatabaseObject";
|
|
91
|
+
var QUEUE_NAME_PREFIX = "playcademy";
|
|
92
|
+
var SELF_WORKER_NAME_BINDING = "__PLAYCADEMY_WORKER_NAME";
|
|
93
|
+
|
|
76
94
|
// src/constants/config.ts
|
|
77
95
|
var ENV_FILES = [
|
|
78
96
|
".env",
|
|
@@ -98,24 +116,6 @@ var TSCONFIG_REQUIRED_INCLUDES = [
|
|
|
98
116
|
// Server-side code
|
|
99
117
|
];
|
|
100
118
|
|
|
101
|
-
// src/constants/bucket.ts
|
|
102
|
-
var BUCKET_ALWAYS_SKIP = [".git", ".DS_Store", ".gitignore", ...ENV_FILES];
|
|
103
|
-
var PRESIGNED_UPLOAD_THRESHOLD = 4 * 1024 * 1024;
|
|
104
|
-
var DEFAULT_BUCKET_DIRECTORY = "bucket";
|
|
105
|
-
|
|
106
|
-
// src/constants/cloudflare.ts
|
|
107
|
-
var CLOUDFLARE_BINDINGS = {
|
|
108
|
-
/** R2 bucket binding name */
|
|
109
|
-
BUCKET: "BUCKET",
|
|
110
|
-
/** KV namespace binding name */
|
|
111
|
-
KV: "KV",
|
|
112
|
-
/** D1 database binding name */
|
|
113
|
-
DB: "DB"
|
|
114
|
-
};
|
|
115
|
-
var MINIFLARE_D1_DIRECTORY = "miniflare-D1DatabaseObject";
|
|
116
|
-
var QUEUE_NAME_PREFIX = "playcademy";
|
|
117
|
-
var SELF_WORKER_NAME_BINDING = "__PLAYCADEMY_WORKER_NAME";
|
|
118
|
-
|
|
119
119
|
// src/constants/database.ts
|
|
120
120
|
import { join as join3 } from "path";
|
|
121
121
|
var DEFAULT_DATABASE_DIRECTORY = join3("server", "db");
|
|
@@ -182,7 +182,7 @@ var GODOT_EXECUTABLE_PATTERNS = {
|
|
|
182
182
|
// src/constants/http-server.ts
|
|
183
183
|
var CALLBACK_PORT = 6175;
|
|
184
184
|
var CALLBACK_PATH = "/callback";
|
|
185
|
-
var SSO_AUTH_TIMEOUT_MS =
|
|
185
|
+
var SSO_AUTH_TIMEOUT_MS = 9e4;
|
|
186
186
|
|
|
187
187
|
// src/constants/paths.ts
|
|
188
188
|
import { homedir } from "node:os";
|
|
@@ -192,7 +192,8 @@ var CLI_DIRECTORIES = {
|
|
|
192
192
|
WORKSPACE: WORKSPACE_NAME,
|
|
193
193
|
DATABASE: join5(WORKSPACE_NAME, "db"),
|
|
194
194
|
KV: join5(WORKSPACE_NAME, "kv"),
|
|
195
|
-
BUCKET: join5(WORKSPACE_NAME, "bucket")
|
|
195
|
+
BUCKET: join5(WORKSPACE_NAME, "bucket"),
|
|
196
|
+
TIMEBACK: join5(WORKSPACE_NAME, "timeback")
|
|
196
197
|
};
|
|
197
198
|
var PLAYCADEMY_HOME = join5(homedir(), ".playcademy");
|
|
198
199
|
var CLI_USER_DIRECTORIES = {
|
|
@@ -216,7 +217,8 @@ var CLI_DEFAULT_OUTPUTS = {
|
|
|
216
217
|
var CLI_FILES = {
|
|
217
218
|
AUTH_STORE: "auth.json",
|
|
218
219
|
GAMES_STORE: "games.json",
|
|
219
|
-
INITIAL_DATABASE: "initial.sqlite"
|
|
220
|
+
INITIAL_DATABASE: "initial.sqlite",
|
|
221
|
+
ASSESSMENT_FIXTURES: "assessment-fixtures.json"
|
|
220
222
|
};
|
|
221
223
|
|
|
222
224
|
// src/constants/ports.ts
|
package/dist/db.js
CHANGED
|
@@ -2335,7 +2335,7 @@ var GAME_API_ROUTES_DIRECTORY = join2(GAME_SERVER_ROOT_DIRECTORY, "api");
|
|
|
2335
2335
|
// ../better-auth/package.json
|
|
2336
2336
|
var package_default = {
|
|
2337
2337
|
name: "@playcademy/better-auth",
|
|
2338
|
-
version: "0.0.
|
|
2338
|
+
version: "0.0.21-beta.10",
|
|
2339
2339
|
type: "module",
|
|
2340
2340
|
exports: {
|
|
2341
2341
|
"./server": {
|
|
@@ -2378,18 +2378,7 @@ var package_default = {
|
|
|
2378
2378
|
// src/constants/auth.ts
|
|
2379
2379
|
var BETTER_AUTH_VERSION = package_default.dependencies["better-auth"];
|
|
2380
2380
|
|
|
2381
|
-
// src/constants/config.ts
|
|
2382
|
-
var ENV_FILES = [
|
|
2383
|
-
".env",
|
|
2384
|
-
// Loaded first
|
|
2385
|
-
".env.development",
|
|
2386
|
-
// Overrides .env
|
|
2387
|
-
".env.local"
|
|
2388
|
-
// Overrides all (highest priority)
|
|
2389
|
-
];
|
|
2390
|
-
|
|
2391
2381
|
// src/constants/bucket.ts
|
|
2392
|
-
var BUCKET_ALWAYS_SKIP = [".git", ".DS_Store", ".gitignore", ...ENV_FILES];
|
|
2393
2382
|
var PRESIGNED_UPLOAD_THRESHOLD = 4 * 1024 * 1024;
|
|
2394
2383
|
|
|
2395
2384
|
// src/constants/cloudflare.ts
|
|
@@ -2451,7 +2440,8 @@ var CLI_DIRECTORIES = {
|
|
|
2451
2440
|
WORKSPACE: WORKSPACE_NAME,
|
|
2452
2441
|
DATABASE: join5(WORKSPACE_NAME, "db"),
|
|
2453
2442
|
KV: join5(WORKSPACE_NAME, "kv"),
|
|
2454
|
-
BUCKET: join5(WORKSPACE_NAME, "bucket")
|
|
2443
|
+
BUCKET: join5(WORKSPACE_NAME, "bucket"),
|
|
2444
|
+
TIMEBACK: join5(WORKSPACE_NAME, "timeback")
|
|
2455
2445
|
};
|
|
2456
2446
|
var PLAYCADEMY_HOME = join5(homedir(), ".playcademy");
|
|
2457
2447
|
var CLI_USER_DIRECTORIES = {
|
|
@@ -2468,7 +2458,8 @@ var CLI_DEFAULT_OUTPUTS = {
|
|
|
2468
2458
|
var CLI_FILES = {
|
|
2469
2459
|
AUTH_STORE: "auth.json",
|
|
2470
2460
|
GAMES_STORE: "games.json",
|
|
2471
|
-
INITIAL_DATABASE: "initial.sqlite"
|
|
2461
|
+
INITIAL_DATABASE: "initial.sqlite",
|
|
2462
|
+
ASSESSMENT_FIXTURES: "assessment-fixtures.json"
|
|
2472
2463
|
};
|
|
2473
2464
|
|
|
2474
2465
|
// src/constants/timeback.ts
|
|
@@ -3394,6 +3385,17 @@ async function requireAuthenticatedClient() {
|
|
|
3394
3385
|
|
|
3395
3386
|
// src/lib/core/errors.ts
|
|
3396
3387
|
import { ApiError as ApiError2 } from "@playcademy/sdk/internal";
|
|
3388
|
+
|
|
3389
|
+
// src/lib/core/exit.ts
|
|
3390
|
+
function exitAfterStdoutDrain(code) {
|
|
3391
|
+
return new Promise(() => {
|
|
3392
|
+
process.stdout.write("", () => {
|
|
3393
|
+
process.exit(code);
|
|
3394
|
+
});
|
|
3395
|
+
});
|
|
3396
|
+
}
|
|
3397
|
+
|
|
3398
|
+
// src/lib/core/errors.ts
|
|
3397
3399
|
function getErrorMessage(error) {
|
|
3398
3400
|
if (error instanceof ApiError2) {
|
|
3399
3401
|
if (error.message) {
|
|
@@ -3418,15 +3420,6 @@ function getErrorMessage(error) {
|
|
|
3418
3420
|
return "Unknown error";
|
|
3419
3421
|
}
|
|
3420
3422
|
|
|
3421
|
-
// src/lib/core/exit.ts
|
|
3422
|
-
function exitAfterStdoutDrain(code) {
|
|
3423
|
-
return new Promise(() => {
|
|
3424
|
-
process.stdout.write("", () => {
|
|
3425
|
-
process.exit(code);
|
|
3426
|
-
});
|
|
3427
|
-
});
|
|
3428
|
-
}
|
|
3429
|
-
|
|
3430
3423
|
// ../utils/src/uuid.ts
|
|
3431
3424
|
var UUID_REGEX = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
3432
3425
|
function isValidUUID(value) {
|
|
@@ -4207,11 +4200,44 @@ var PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPES = [
|
|
|
4207
4200
|
"text-entry",
|
|
4208
4201
|
"order",
|
|
4209
4202
|
"match",
|
|
4210
|
-
"hottext"
|
|
4203
|
+
"hottext",
|
|
4204
|
+
"hotspot",
|
|
4205
|
+
"gap-match",
|
|
4206
|
+
"graphic-gap-match",
|
|
4207
|
+
"select-point",
|
|
4208
|
+
"graphic-associate",
|
|
4209
|
+
"position-object"
|
|
4211
4210
|
];
|
|
4212
4211
|
var PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPE_SET = new Set(
|
|
4213
4212
|
PLAYCADEMY_SUPPORTED_QTI_INTERACTION_TYPES
|
|
4214
4213
|
);
|
|
4214
|
+
var PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPES = [
|
|
4215
|
+
"choice",
|
|
4216
|
+
"inline-choice",
|
|
4217
|
+
"text-entry",
|
|
4218
|
+
"order",
|
|
4219
|
+
"match",
|
|
4220
|
+
"hottext",
|
|
4221
|
+
"gap-match",
|
|
4222
|
+
"hotspot",
|
|
4223
|
+
"graphic-associate",
|
|
4224
|
+
"graphic-gap-match"
|
|
4225
|
+
];
|
|
4226
|
+
var PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPE_SET = new Set(
|
|
4227
|
+
PLAYCADEMY_AUTHORABLE_QTI_INTERACTION_TYPES
|
|
4228
|
+
);
|
|
4229
|
+
var QTI_RASTER_IMAGE_MIME_TYPES = [
|
|
4230
|
+
"image/png",
|
|
4231
|
+
"image/jpeg",
|
|
4232
|
+
// Some browsers and operating systems still report the legacy jpg spelling.
|
|
4233
|
+
"image/jpg",
|
|
4234
|
+
"image/gif",
|
|
4235
|
+
"image/webp",
|
|
4236
|
+
"image/bmp"
|
|
4237
|
+
];
|
|
4238
|
+
var QTI_RASTER_IMAGE_SUBTYPE_PATTERN = QTI_RASTER_IMAGE_MIME_TYPES.map(
|
|
4239
|
+
(type) => type.slice("image/".length)
|
|
4240
|
+
).join("|");
|
|
4215
4241
|
var TIMEBACK_DISCREPANCY_QUEUE_WINDOW_VALUES = new Set(TIMEBACK_DISCREPANCY_QUEUE_WINDOWS);
|
|
4216
4242
|
var TIMEBACK_DISCREPANCY_QUEUE_METRIC_VALUES = new Set(TIMEBACK_DISCREPANCY_QUEUE_METRICS);
|
|
4217
4243
|
|