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 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.1",
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.1",
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.1";
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 authImport = hasAuthFile ? "\nimport type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'\nimport type { User } from './server/lib/auth'" : "\nimport type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'";
3709
- const variableFields = [" playcademyUser?: UserInfo"];
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
@@ -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.25-beta.1",
24
+ version: "0.0.25-beta.2",
25
25
  type: "module",
26
26
  exports: {
27
27
  "./server": {
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.1",
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.1",
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.1";
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 authImport = hasAuthFile ? "\nimport type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'\nimport type { User } from './server/lib/auth'" : "\nimport type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'";
7454
- const variableFields = [" playcademyUser?: UserInfo"];
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.1",
3
- "sdkVersion": "0.20.1-beta.1",
4
- "runtimeBuildId": "c4a97727e78f",
5
- "inputFingerprint": "c4a97727e78f1bc21dcd41838fe35410c806804caf62b592fa594fbe8e290c92",
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.1" : "0.0.0-dev",
14339
- sdkVersion: true ? "0.20.1-beta.1" : "0.0.0-dev",
14340
- buildId: true ? "c4a97727e78f" : "dev-source"
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 requested = [
19180
- ...new Set(
19181
- new URL(request2.url).searchParams.getAll("skill").map(normalizeSkillId).filter((skill) => skill.length > 0)
19182
- )
19183
- ];
19184
- if (requested.length === 0) {
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.1",
3
- "sdkVersion": "0.20.1-beta.1",
4
- "runtimeBuildId": "c4a97727e78f",
5
- "inputFingerprint": "c4a97727e78f1bc21dcd41838fe35410c806804caf62b592fa594fbe8e290c92",
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.1",
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.1";
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 authImport = hasAuthFile ? "\nimport type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'\nimport type { User } from './server/lib/auth'" : "\nimport type { UserInfo } from './node_modules/@playcademy/sdk/dist/types.d.ts'";
6043
- const variableFields = [" playcademyUser?: UserInfo"];
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.1";
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.1",
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.1",
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",