playcademy 0.32.1-beta.1 → 0.32.1-beta.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.
- package/dist/bucket.js +1 -1
- package/dist/cli.js +13 -4
- package/dist/constants.js +1 -1
- package/dist/db.js +1 -1
- package/dist/index.js +13 -4
- package/dist/runtime/dashboard-runtime/manifest.json +4 -4
- package/dist/runtime/game-runtime/index.js +89 -31
- package/dist/runtime/game-runtime/manifest.json +4 -4
- package/dist/utils.js +13 -4
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/bucket.js
CHANGED
|
@@ -42,7 +42,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
42
42
|
// ../better-auth/package.json
|
|
43
43
|
var package_default = {
|
|
44
44
|
name: "@playcademy/better-auth",
|
|
45
|
-
version: "0.0.25-beta.
|
|
45
|
+
version: "0.0.25-beta.2",
|
|
46
46
|
type: "module",
|
|
47
47
|
exports: {
|
|
48
48
|
"./server": {
|
package/dist/cli.js
CHANGED
|
@@ -1208,7 +1208,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
1208
1208
|
// ../better-auth/package.json
|
|
1209
1209
|
var package_default = {
|
|
1210
1210
|
name: "@playcademy/better-auth",
|
|
1211
|
-
version: "0.0.25-beta.
|
|
1211
|
+
version: "0.0.25-beta.2",
|
|
1212
1212
|
type: "module",
|
|
1213
1213
|
exports: {
|
|
1214
1214
|
"./server": {
|
|
@@ -3045,7 +3045,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as re
|
|
|
3045
3045
|
import { join as join12 } from "node:path";
|
|
3046
3046
|
|
|
3047
3047
|
// src/version.ts
|
|
3048
|
-
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.
|
|
3048
|
+
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.2";
|
|
3049
3049
|
|
|
3050
3050
|
// src/lib/init/database.ts
|
|
3051
3051
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -3705,8 +3705,17 @@ function generateBindingsTypeString(features, queueBindings = []) {
|
|
|
3705
3705
|
${bindings.join("\n")}` : "";
|
|
3706
3706
|
}
|
|
3707
3707
|
function generateAuthVariablesString(hasAuth, hasAuthFile) {
|
|
3708
|
-
const
|
|
3709
|
-
|
|
3708
|
+
const sdkImports = [
|
|
3709
|
+
"import type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'",
|
|
3710
|
+
"import type { PlaycademyClient, PlaycademyConfig } from './node_modules/@playcademy/sdk/dist/server.d.ts'"
|
|
3711
|
+
];
|
|
3712
|
+
const authImport = `
|
|
3713
|
+
${[...sdkImports, ...hasAuthFile ? ["import type { User } from './server/lib/auth'"] : []].join("\n")}`;
|
|
3714
|
+
const variableFields = [
|
|
3715
|
+
" sdk: PlaycademyClient",
|
|
3716
|
+
" config: PlaycademyConfig",
|
|
3717
|
+
" playcademyUser?: UserInfo"
|
|
3718
|
+
];
|
|
3710
3719
|
if (hasAuth && hasAuthFile) {
|
|
3711
3720
|
variableFields.push(" user?: User");
|
|
3712
3721
|
}
|
package/dist/constants.js
CHANGED
package/dist/db.js
CHANGED
|
@@ -2333,7 +2333,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
2333
2333
|
// ../better-auth/package.json
|
|
2334
2334
|
var package_default = {
|
|
2335
2335
|
name: "@playcademy/better-auth",
|
|
2336
|
-
version: "0.0.25-beta.
|
|
2336
|
+
version: "0.0.25-beta.2",
|
|
2337
2337
|
type: "module",
|
|
2338
2338
|
exports: {
|
|
2339
2339
|
"./server": {
|
package/dist/index.js
CHANGED
|
@@ -2345,7 +2345,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
2345
2345
|
// ../better-auth/package.json
|
|
2346
2346
|
var package_default = {
|
|
2347
2347
|
name: "@playcademy/better-auth",
|
|
2348
|
-
version: "0.0.25-beta.
|
|
2348
|
+
version: "0.0.25-beta.2",
|
|
2349
2349
|
type: "module",
|
|
2350
2350
|
exports: {
|
|
2351
2351
|
"./server": {
|
|
@@ -6487,7 +6487,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync2, readFileSync as re
|
|
|
6487
6487
|
import { join as join12 } from "node:path";
|
|
6488
6488
|
|
|
6489
6489
|
// src/version.ts
|
|
6490
|
-
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.
|
|
6490
|
+
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.2";
|
|
6491
6491
|
|
|
6492
6492
|
// src/lib/init/database.ts
|
|
6493
6493
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -7450,8 +7450,17 @@ function generateBindingsTypeString(features, queueBindings = []) {
|
|
|
7450
7450
|
${bindings.join("\n")}` : "";
|
|
7451
7451
|
}
|
|
7452
7452
|
function generateAuthVariablesString(hasAuth, hasAuthFile) {
|
|
7453
|
-
const
|
|
7454
|
-
|
|
7453
|
+
const sdkImports = [
|
|
7454
|
+
"import type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'",
|
|
7455
|
+
"import type { PlaycademyClient, PlaycademyConfig } from './node_modules/@playcademy/sdk/dist/server.d.ts'"
|
|
7456
|
+
];
|
|
7457
|
+
const authImport = `
|
|
7458
|
+
${[...sdkImports, ...hasAuthFile ? ["import type { User } from './server/lib/auth'"] : []].join("\n")}`;
|
|
7459
|
+
const variableFields = [
|
|
7460
|
+
" sdk: PlaycademyClient",
|
|
7461
|
+
" config: PlaycademyConfig",
|
|
7462
|
+
" playcademyUser?: UserInfo"
|
|
7463
|
+
];
|
|
7455
7464
|
if (hasAuth && hasAuthFile) {
|
|
7456
7465
|
variableFields.push(" user?: User");
|
|
7457
7466
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.32.1-beta.
|
|
3
|
-
"sdkVersion": "0.20.1-beta.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.32.1-beta.2",
|
|
3
|
+
"sdkVersion": "0.20.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "60bda087f629",
|
|
5
|
+
"inputFingerprint": "60bda087f6290b606ffabc32df42c395674d1315ad54a0ea00e482fefcd6e8fc",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
|
@@ -8,18 +8,6 @@ var __export = (target, all) => {
|
|
|
8
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
// ../sdk/src/core/timeback/assessment-request.ts
|
|
12
|
-
function canonicalAssessmentInput(input) {
|
|
13
|
-
const request2 = { ...input };
|
|
14
|
-
delete request2.preparationReceipt;
|
|
15
|
-
return request2;
|
|
16
|
-
}
|
|
17
|
-
var init_assessment_request = __esm({
|
|
18
|
-
"../sdk/src/core/timeback/assessment-request.ts"() {
|
|
19
|
-
"use strict";
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
|
|
23
11
|
// ../constants/src/auth.ts
|
|
24
12
|
var init_auth = __esm({
|
|
25
13
|
"../constants/src/auth.ts"() {
|
|
@@ -190,6 +178,18 @@ var init_src = __esm({
|
|
|
190
178
|
}
|
|
191
179
|
});
|
|
192
180
|
|
|
181
|
+
// ../sdk/src/core/timeback/assessment-request.ts
|
|
182
|
+
function canonicalAssessmentInput(input) {
|
|
183
|
+
const request2 = { ...input };
|
|
184
|
+
delete request2.preparationReceipt;
|
|
185
|
+
return request2;
|
|
186
|
+
}
|
|
187
|
+
var init_assessment_request = __esm({
|
|
188
|
+
"../sdk/src/core/timeback/assessment-request.ts"() {
|
|
189
|
+
"use strict";
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
193
|
// ../sdk/src/core/guards.ts
|
|
194
194
|
function isValidGrade(value) {
|
|
195
195
|
return typeof value === "number" && Number.isInteger(value) && VALID_GRADES.includes(value);
|
|
@@ -14335,9 +14335,9 @@ var init_list = __esm({
|
|
|
14335
14335
|
// ../edge-play/src/game/lib/metadata.ts
|
|
14336
14336
|
function getRuntimeMetadata() {
|
|
14337
14337
|
return {
|
|
14338
|
-
cliVersion: true ? "0.32.1-beta.
|
|
14339
|
-
sdkVersion: true ? "0.20.1-beta.
|
|
14340
|
-
buildId: true ? "
|
|
14338
|
+
cliVersion: true ? "0.32.1-beta.2" : "0.0.0-dev",
|
|
14339
|
+
sdkVersion: true ? "0.20.1-beta.2" : "0.0.0-dev",
|
|
14340
|
+
buildId: true ? "60bda087f629" : "dev-source"
|
|
14341
14341
|
};
|
|
14342
14342
|
}
|
|
14343
14343
|
var init_metadata = __esm({
|
|
@@ -16485,6 +16485,71 @@ var cors = (options) => {
|
|
|
16485
16485
|
};
|
|
16486
16486
|
};
|
|
16487
16487
|
|
|
16488
|
+
// ../sdk/src/server/namespaces/skills.ts
|
|
16489
|
+
init_src();
|
|
16490
|
+
|
|
16491
|
+
// ../utils/src/skills.ts
|
|
16492
|
+
function normalizeSkillId(skill) {
|
|
16493
|
+
return skill.trim().toLowerCase();
|
|
16494
|
+
}
|
|
16495
|
+
function normalizeSkillIds(skills, max) {
|
|
16496
|
+
const normalized = [...new Set(skills.map(normalizeSkillId).filter((skill) => skill.length > 0))];
|
|
16497
|
+
if (normalized.length === 0) {
|
|
16498
|
+
return { ok: false, error: "At least one skill is required" };
|
|
16499
|
+
}
|
|
16500
|
+
if (normalized.length > max) {
|
|
16501
|
+
return { ok: false, error: `At most ${max} skills can be requested at once` };
|
|
16502
|
+
}
|
|
16503
|
+
return { ok: true, skills: normalized };
|
|
16504
|
+
}
|
|
16505
|
+
|
|
16506
|
+
// ../sdk/src/server/namespaces/skills.ts
|
|
16507
|
+
function createSkillsNamespace(client) {
|
|
16508
|
+
return {
|
|
16509
|
+
/**
|
|
16510
|
+
* Ask another game for a student's current status on some of its skills.
|
|
16511
|
+
*
|
|
16512
|
+
* Your game decides what to do with the answer; the platform only
|
|
16513
|
+
* delivers it. When the other game can't answer (`supported: false`:
|
|
16514
|
+
* not deployed, no `getSkillStatus` handler, slow, or broken), fall
|
|
16515
|
+
* back to your own default, usually treating the skills as not mastered.
|
|
16516
|
+
*
|
|
16517
|
+
* Skill IDs are trimmed, lowercased, and de-duplicated. Results come
|
|
16518
|
+
* back in that normalized form, in request order.
|
|
16519
|
+
*
|
|
16520
|
+
* @param request.game - Slug of the game to ask
|
|
16521
|
+
* @param request.studentId - Playcademy user ID of the student
|
|
16522
|
+
* @param request.skills - Skill IDs to ask about (at most 50)
|
|
16523
|
+
* @throws {Error} No skills, or more than 50 after normalizing
|
|
16524
|
+
* @throws {ApiError} 404 if the game doesn't exist
|
|
16525
|
+
*
|
|
16526
|
+
* @example
|
|
16527
|
+
* ```typescript
|
|
16528
|
+
* const res = await client.skills.getStatus({
|
|
16529
|
+
* game: 'mathquest',
|
|
16530
|
+
* studentId,
|
|
16531
|
+
* skills: ['k.addition', 'k.qualified'],
|
|
16532
|
+
* })
|
|
16533
|
+
*
|
|
16534
|
+
* const mastered = res.supported
|
|
16535
|
+
* ? res.results.every(result => result.status === 'mastered')
|
|
16536
|
+
* : false
|
|
16537
|
+
* ```
|
|
16538
|
+
*/
|
|
16539
|
+
getStatus: (request2) => {
|
|
16540
|
+
const normalized = normalizeSkillIds(request2.skills, SKILL_STATUS_MAX_SKILLS);
|
|
16541
|
+
if (!normalized.ok) {
|
|
16542
|
+
throw new Error(normalized.error);
|
|
16543
|
+
}
|
|
16544
|
+
return client["request"]("/api/skills/status", "POST", {
|
|
16545
|
+
game: request2.game,
|
|
16546
|
+
studentId: request2.studentId,
|
|
16547
|
+
skills: normalized.skills
|
|
16548
|
+
});
|
|
16549
|
+
}
|
|
16550
|
+
};
|
|
16551
|
+
}
|
|
16552
|
+
|
|
16488
16553
|
// ../sdk/src/server/namespaces/timeback.ts
|
|
16489
16554
|
init_assessment_request();
|
|
16490
16555
|
|
|
@@ -16944,6 +17009,8 @@ var PlaycademyClient = class _PlaycademyClient {
|
|
|
16944
17009
|
// ─────────────────────────────────────────────────────────────────
|
|
16945
17010
|
/** TimeBack integration methods (endActivity) */
|
|
16946
17011
|
timeback = createTimebackNamespace(this);
|
|
17012
|
+
/** Cross-game skill status (getStatus) */
|
|
17013
|
+
skills = createSkillsNamespace(this);
|
|
16947
17014
|
};
|
|
16948
17015
|
|
|
16949
17016
|
// ../sdk/src/server/utils/verify-game-token.ts
|
|
@@ -19172,24 +19239,15 @@ init_fns();
|
|
|
19172
19239
|
var STATUSES = new Set(SKILL_STATUSES);
|
|
19173
19240
|
var MASTERY_SOURCES = new Set(SKILL_MASTERY_SOURCES);
|
|
19174
19241
|
var ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:\d{2}))?$/;
|
|
19175
|
-
function normalizeSkillId(skill) {
|
|
19176
|
-
return skill.trim().toLowerCase();
|
|
19177
|
-
}
|
|
19178
19242
|
function parseSkillRequest(request2) {
|
|
19179
|
-
const
|
|
19180
|
-
|
|
19181
|
-
|
|
19182
|
-
|
|
19183
|
-
|
|
19184
|
-
|
|
19185
|
-
return { ok: false, error: "At least one skill is required" };
|
|
19186
|
-
}
|
|
19187
|
-
if (requested.length > SKILL_STATUS_MAX_SKILLS) {
|
|
19188
|
-
return {
|
|
19189
|
-
ok: false,
|
|
19190
|
-
error: `At most ${SKILL_STATUS_MAX_SKILLS} skills can be requested at once`
|
|
19191
|
-
};
|
|
19243
|
+
const normalized = normalizeSkillIds(
|
|
19244
|
+
new URL(request2.url).searchParams.getAll("skill"),
|
|
19245
|
+
SKILL_STATUS_MAX_SKILLS
|
|
19246
|
+
);
|
|
19247
|
+
if (!normalized.ok) {
|
|
19248
|
+
return normalized;
|
|
19192
19249
|
}
|
|
19250
|
+
const requested = normalized.skills;
|
|
19193
19251
|
return {
|
|
19194
19252
|
ok: true,
|
|
19195
19253
|
request: { requested, valid: requested.filter((skill) => SKILL_ID_PATTERN.test(skill)) }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.32.1-beta.
|
|
3
|
-
"sdkVersion": "0.20.1-beta.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.32.1-beta.2",
|
|
3
|
+
"sdkVersion": "0.20.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "60bda087f629",
|
|
5
|
+
"inputFingerprint": "60bda087f6290b606ffabc32df42c395674d1315ad54a0ea00e482fefcd6e8fc",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
package/dist/utils.js
CHANGED
|
@@ -397,7 +397,7 @@ var DASHBOARD_API_ROUTES_DIRECTORY = "api";
|
|
|
397
397
|
// ../better-auth/package.json
|
|
398
398
|
var package_default = {
|
|
399
399
|
name: "@playcademy/better-auth",
|
|
400
|
-
version: "0.0.25-beta.
|
|
400
|
+
version: "0.0.25-beta.2",
|
|
401
401
|
type: "module",
|
|
402
402
|
exports: {
|
|
403
403
|
"./server": {
|
|
@@ -2878,7 +2878,7 @@ import { existsSync as existsSync10, mkdirSync as mkdirSync2, writeFileSync as w
|
|
|
2878
2878
|
import { dirname as dirname4, join as join14 } from "node:path";
|
|
2879
2879
|
|
|
2880
2880
|
// src/version.ts
|
|
2881
|
-
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.
|
|
2881
|
+
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.2";
|
|
2882
2882
|
|
|
2883
2883
|
// src/lib/build/binary-resource.ts
|
|
2884
2884
|
function writeFileTree(baseDir, files) {
|
|
@@ -6039,8 +6039,17 @@ function generateBindingsTypeString(features, queueBindings = []) {
|
|
|
6039
6039
|
${bindings.join("\n")}` : "";
|
|
6040
6040
|
}
|
|
6041
6041
|
function generateAuthVariablesString(hasAuth, hasAuthFile) {
|
|
6042
|
-
const
|
|
6043
|
-
|
|
6042
|
+
const sdkImports = [
|
|
6043
|
+
"import type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'",
|
|
6044
|
+
"import type { PlaycademyClient, PlaycademyConfig } from './node_modules/@playcademy/sdk/dist/server.d.ts'"
|
|
6045
|
+
];
|
|
6046
|
+
const authImport = `
|
|
6047
|
+
${[...sdkImports, ...hasAuthFile ? ["import type { User } from './server/lib/auth'"] : []].join("\n")}`;
|
|
6048
|
+
const variableFields = [
|
|
6049
|
+
" sdk: PlaycademyClient",
|
|
6050
|
+
" config: PlaycademyConfig",
|
|
6051
|
+
" playcademyUser?: UserInfo"
|
|
6052
|
+
];
|
|
6044
6053
|
if (hasAuth && hasAuthFile) {
|
|
6045
6054
|
variableFields.push(" user?: User");
|
|
6046
6055
|
}
|
package/dist/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __pcCreateRequire } from 'node:module'; const require = __pcCreateRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/version.ts
|
|
4
|
-
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.
|
|
4
|
+
var cliVersion = false ? "0.0.0-dev" : "0.32.1-beta.2";
|
|
5
5
|
export {
|
|
6
6
|
cliVersion
|
|
7
7
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playcademy",
|
|
3
|
-
"version": "0.32.1-beta.
|
|
3
|
+
"version": "0.32.1-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@inquirer/prompts": "^7.8.6",
|
|
58
|
-
"@playcademy/sdk": "0.20.1-beta.
|
|
58
|
+
"@playcademy/sdk": "0.20.1-beta.2",
|
|
59
59
|
"chokidar": "^4.0.3",
|
|
60
60
|
"colorette": "^2.0.20",
|
|
61
61
|
"commander": "^14.0.1",
|