@playcademy/sdk 0.20.1-beta.1 → 0.20.1-beta.3

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/server.js CHANGED
@@ -199,13 +199,6 @@ var init_config_loader = __esm(() => {
199
199
  init_file_loader();
200
200
  });
201
201
 
202
- // src/core/timeback/assessment-request.ts
203
- function canonicalAssessmentInput(input) {
204
- const request = { ...input };
205
- delete request.preparationReceipt;
206
- return request;
207
- }
208
-
209
202
  // ../constants/src/auth.ts
210
203
  var DEFAULT_PERSONAL_API_KEY_PERMISSIONS = {
211
204
  games: ["read", "write", "delete"],
@@ -216,6 +209,8 @@ var DEFAULT_PERSONAL_API_KEY_PERMISSIONS = {
216
209
  var PLAYCADEMY_BROWSER_TIME_ZONE_HEADER = "x-playcademy-browser-time-zone";
217
210
  var PLAYCADEMY_ASSESSMENT_ASSET_SHA256_HEADER = "x-playcademy-content-sha256";
218
211
  var ASSESSMENT_ASSET_MAX_BYTES = 4 * 1024 * 1024;
212
+ // ../constants/src/skills.ts
213
+ var SKILL_STATUS_MAX_SKILLS = 50;
219
214
  // ../constants/src/timeback.ts
220
215
  var TIMEBACK_ROUTES = {
221
216
  END_ACTIVITY: "/integrations/timeback/end-activity",
@@ -257,6 +252,44 @@ var TIMEBACK_GAME_METRIC_COMPARISON_TOLERANCE = {
257
252
  time: 60,
258
253
  score: 0.5 / 10 ** TIMEBACK_GAME_METRIC_DECIMAL_PLACES.score
259
254
  };
255
+ // ../utils/src/skills.ts
256
+ function normalizeSkillId(skill) {
257
+ return skill.trim().toLowerCase();
258
+ }
259
+ function normalizeSkillIds(skills2, max) {
260
+ const normalized = [...new Set(skills2.map(normalizeSkillId).filter((skill) => skill.length > 0))];
261
+ if (normalized.length === 0) {
262
+ return { ok: false, error: "At least one skill is required" };
263
+ }
264
+ if (normalized.length > max) {
265
+ return { ok: false, error: `At most ${max} skills can be requested at once` };
266
+ }
267
+ return { ok: true, skills: normalized };
268
+ }
269
+
270
+ // src/server/namespaces/skills.ts
271
+ function createSkillsNamespace(client) {
272
+ return {
273
+ getStatus: (request) => {
274
+ const normalized = normalizeSkillIds(request.skills, SKILL_STATUS_MAX_SKILLS);
275
+ if (!normalized.ok) {
276
+ throw new Error(normalized.error);
277
+ }
278
+ return client["request"]("/api/skills/status", "POST", {
279
+ game: request.game,
280
+ studentId: request.studentId,
281
+ skills: normalized.skills
282
+ });
283
+ }
284
+ };
285
+ }
286
+ // src/core/timeback/assessment-request.ts
287
+ function canonicalAssessmentInput(input) {
288
+ const request = { ...input };
289
+ delete request.preparationReceipt;
290
+ return request;
291
+ }
292
+
260
293
  // src/core/guards.ts
261
294
  var VALID_GRADES = TIMEBACK_GRADES;
262
295
  var VALID_SUBJECTS = TIMEBACK_SUBJECTS;
@@ -526,7 +559,7 @@ function extractApiErrorInfo(error) {
526
559
  }
527
560
 
528
561
  // src/version.ts
529
- var SDK_VERSION = "0.20.1-beta.1";
562
+ var SDK_VERSION = "0.20.1-beta.3";
530
563
 
531
564
  // src/server/request.ts
532
565
  async function makeApiRequest(opts) {
@@ -618,6 +651,7 @@ class PlaycademyClient {
618
651
  return this.state.config;
619
652
  }
620
653
  timeback = createTimebackNamespace(this);
654
+ skills = createSkillsNamespace(this);
621
655
  }
622
656
 
623
657
  // src/server/client.ts