@playcademy/sdk 0.20.1-beta.1 → 0.20.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/index.js CHANGED
@@ -802,6 +802,8 @@ var DEFAULT_PERSONAL_API_KEY_PERMISSIONS = {
802
802
  var PLAYCADEMY_BROWSER_TIME_ZONE_HEADER = "x-playcademy-browser-time-zone";
803
803
  var PLAYCADEMY_ASSESSMENT_ASSET_SHA256_HEADER = "x-playcademy-content-sha256";
804
804
  var ASSESSMENT_ASSET_MAX_BYTES = 4 * 1024 * 1024;
805
+ // ../constants/src/skills.ts
806
+ var SKILL_STATUS_MAX_SKILLS = 50;
805
807
  // ../constants/src/timeback.ts
806
808
  var TIMEBACK_ROUTES = {
807
809
  END_ACTIVITY: "/integrations/timeback/end-activity",
@@ -3760,7 +3762,7 @@ async function request({
3760
3762
  return rawText && rawText.length > 0 ? rawText : undefined;
3761
3763
  }
3762
3764
  // src/version.ts
3763
- var SDK_VERSION = "0.20.1-beta.1";
3765
+ var SDK_VERSION = "0.20.1-beta.2";
3764
3766
 
3765
3767
  // src/clients/base.ts
3766
3768
  class PlaycademyBaseClient {
@@ -4,7 +4,7 @@ import { TimebackGrade, TimebackSubject, ELevel, HeartbeatRequest, EndActivityRe
4
4
  export { AssessmentAttemptSnapshot, AssessmentAwardRecord, AssessmentFinalizeResult, AssessmentFlow, AssessmentItemGrading, AssessmentItemOutcome, AssessmentItemSubmission, AssessmentMasteryAward, AssessmentPreparationResult, AssessmentResponseUpdate, AssessmentResponseValue, AssessmentResponses, AssessmentReviewStandard, AssessmentSaveResult, AssessmentScore, AssessmentStandardRef, AssessmentSubmitResult, AssessmentTranscript, ConventionalAssessmentAttemptSnapshot, ConventionalAssessmentSubmitResult, DiagnosticAssessmentItemReceipt, DiagnosticAssessmentSubmitResult, DiagnosticRoutingSnapshot, DiagnosticRoutingTrackSnapshot, ELevel, FinalizeAssessmentInput, MasteryAssessmentSubmitResult, PlatformRoutedDiagnosticAttemptSnapshot, PlatformRoutedDiagnosticSelectionContext, PlayableAssessment, PlayableAssessmentAttemptSnapshot, PlayableAssessmentChoice, PlayableAssessmentGraphic, PlayableAssessmentHotspot, PlayableAssessmentInteraction, PlayableAssessmentItem, PlayableChoiceInteraction, PlayableContentNode, PlayableGapMatchChoice, PlayableGapMatchInteraction, PlayableInlineChoiceInteraction, PlayableMatchChoice, PlayableMatchInteraction, PlayableOrderInteraction, RecordAssessmentProgressInput, ResumeAssessmentInput, SaveAssessmentInput, SettledAssessmentAttemptSnapshot, StandardsReviewSelectionContext, StartAssessmentInput, StartAssessmentOptions, StartDiagnosticAssessmentInput, SubmitAssessmentInput, SubmitAssessmentItemInput, SubmitAssessmentItemResult, SubmitDiagnosticAssessmentItemInput, SubmitDiagnosticAssessmentItemResult } from '@playcademy/types/timeback';
5
5
  import * as _playcademy_types from '@playcademy/types';
6
6
  import { GameManifest, LocalDayContext } from '@playcademy/types';
7
- export { AuthenticatedUser, DeploySource, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, GameCourseMetrics, GameLeaderboardEntry, GameManifest, GameMetricComparisonKind, GameMetricComparisonMetric, GameMetricComparisonRow, GameMetricComparisonRowStatus, GameMetricsProxyResponse, GameMetricsResponse, GameMetricsUnsupportedReason, GamePlatform, GameReleaseResponse, GameRunMetrics, GameRunMetricsComparison, GameRunMetricsComparisonStatus, GameRunMetricsComparisonSummary, GameTimebackIntegration, GameType, GameUser, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LocalDayContext, LocalDaySource, ManifestV1, ManifestV2, ManifestVersions, PopulateStudentResponse, Release, ReleasesResponse, SkillMasterySource, SkillStatus, SkillStatusRequestingGame, SkillStatusResponse, SkillStatusResult, UserEnrollment, UserInfo, UserOrganization, UserRank, UserRankResponse, UserRoleEnumType, UserScore, UserTimebackData } from '@playcademy/types';
7
+ export { AuthenticatedUser, DeploySource, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, GameCourseMetrics, GameLeaderboardEntry, GameManifest, GameMetricComparisonKind, GameMetricComparisonMetric, GameMetricComparisonRow, GameMetricComparisonRowStatus, GameMetricsProxyResponse, GameMetricsResponse, GameMetricsUnsupportedReason, GamePlatform, GameReleaseResponse, GameRunMetrics, GameRunMetricsComparison, GameRunMetricsComparisonStatus, GameRunMetricsComparisonSummary, GameTimebackIntegration, GameType, GameUser, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LocalDayContext, LocalDaySource, ManifestV1, ManifestV2, ManifestVersions, PopulateStudentResponse, Release, ReleasesResponse, SkillMasterySource, SkillStatus, SkillStatusLookupResult, SkillStatusRequest, SkillStatusRequestingGame, SkillStatusResponse, SkillStatusResult, SkillStatusUnsupportedReason, UserEnrollment, UserInfo, UserOrganization, UserRank, UserRankResponse, UserRoleEnumType, UserScore, UserTimebackData } from '@playcademy/types';
8
8
  import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
9
9
  import { DomainValidationRecords } from '@playcademy/types/game';
10
10
  import { z } from 'zod';
package/dist/internal.js CHANGED
@@ -802,6 +802,8 @@ var DEFAULT_PERSONAL_API_KEY_PERMISSIONS = {
802
802
  var PLAYCADEMY_BROWSER_TIME_ZONE_HEADER = "x-playcademy-browser-time-zone";
803
803
  var PLAYCADEMY_ASSESSMENT_ASSET_SHA256_HEADER = "x-playcademy-content-sha256";
804
804
  var ASSESSMENT_ASSET_MAX_BYTES = 4 * 1024 * 1024;
805
+ // ../constants/src/skills.ts
806
+ var SKILL_STATUS_MAX_SKILLS = 50;
805
807
  // ../constants/src/timeback.ts
806
808
  var TIMEBACK_ROUTES = {
807
809
  END_ACTIVITY: "/integrations/timeback/end-activity",
@@ -4670,7 +4672,7 @@ async function request({
4670
4672
  return rawText && rawText.length > 0 ? rawText : undefined;
4671
4673
  }
4672
4674
  // src/version.ts
4673
- var SDK_VERSION = "0.20.1-beta.1";
4675
+ var SDK_VERSION = "0.20.1-beta.2";
4674
4676
 
4675
4677
  // src/clients/base.ts
4676
4678
  class PlaycademyBaseClient {
@@ -402,6 +402,10 @@ declare class PlaycademyClient {
402
402
  subject: string;
403
403
  }) => Promise<_playcademy_types.StudentHighestGradeMasteredResponse>;
404
404
  };
405
+ /** Cross-game skill status (getStatus) */
406
+ skills: {
407
+ getStatus: (request: _playcademy_types.SkillStatusRequest) => Promise<_playcademy_types.SkillStatusLookupResult>;
408
+ };
405
409
  }
406
410
 
407
411
  /**
@@ -10,13 +10,6 @@ var __export = (target, all) => {
10
10
  };
11
11
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
12
12
 
13
- // src/core/timeback/assessment-request.ts
14
- function canonicalAssessmentInput(input) {
15
- const request = { ...input };
16
- delete request.preparationReceipt;
17
- return request;
18
- }
19
-
20
13
  // ../constants/src/auth.ts
21
14
  var DEFAULT_PERSONAL_API_KEY_PERMISSIONS = {
22
15
  games: ["read", "write", "delete"],
@@ -27,6 +20,8 @@ var DEFAULT_PERSONAL_API_KEY_PERMISSIONS = {
27
20
  var PLAYCADEMY_BROWSER_TIME_ZONE_HEADER = "x-playcademy-browser-time-zone";
28
21
  var PLAYCADEMY_ASSESSMENT_ASSET_SHA256_HEADER = "x-playcademy-content-sha256";
29
22
  var ASSESSMENT_ASSET_MAX_BYTES = 4 * 1024 * 1024;
23
+ // ../constants/src/skills.ts
24
+ var SKILL_STATUS_MAX_SKILLS = 50;
30
25
  // ../constants/src/timeback.ts
31
26
  var TIMEBACK_ROUTES = {
32
27
  END_ACTIVITY: "/integrations/timeback/end-activity",
@@ -68,6 +63,44 @@ var TIMEBACK_GAME_METRIC_COMPARISON_TOLERANCE = {
68
63
  time: 60,
69
64
  score: 0.5 / 10 ** TIMEBACK_GAME_METRIC_DECIMAL_PLACES.score
70
65
  };
66
+ // ../utils/src/skills.ts
67
+ function normalizeSkillId(skill) {
68
+ return skill.trim().toLowerCase();
69
+ }
70
+ function normalizeSkillIds(skills2, max) {
71
+ const normalized = [...new Set(skills2.map(normalizeSkillId).filter((skill) => skill.length > 0))];
72
+ if (normalized.length === 0) {
73
+ return { ok: false, error: "At least one skill is required" };
74
+ }
75
+ if (normalized.length > max) {
76
+ return { ok: false, error: `At most ${max} skills can be requested at once` };
77
+ }
78
+ return { ok: true, skills: normalized };
79
+ }
80
+
81
+ // src/server/namespaces/skills.ts
82
+ function createSkillsNamespace(client) {
83
+ return {
84
+ getStatus: (request) => {
85
+ const normalized = normalizeSkillIds(request.skills, SKILL_STATUS_MAX_SKILLS);
86
+ if (!normalized.ok) {
87
+ throw new Error(normalized.error);
88
+ }
89
+ return client["request"]("/api/skills/status", "POST", {
90
+ game: request.game,
91
+ studentId: request.studentId,
92
+ skills: normalized.skills
93
+ });
94
+ }
95
+ };
96
+ }
97
+ // src/core/timeback/assessment-request.ts
98
+ function canonicalAssessmentInput(input) {
99
+ const request = { ...input };
100
+ delete request.preparationReceipt;
101
+ return request;
102
+ }
103
+
71
104
  // src/core/guards.ts
72
105
  var VALID_GRADES = TIMEBACK_GRADES;
73
106
  var VALID_SUBJECTS = TIMEBACK_SUBJECTS;
@@ -337,7 +370,7 @@ function extractApiErrorInfo(error) {
337
370
  }
338
371
 
339
372
  // src/version.ts
340
- var SDK_VERSION = "0.20.1-beta.1";
373
+ var SDK_VERSION = "0.20.1-beta.2";
341
374
 
342
375
  // src/server/request.ts
343
376
  async function makeApiRequest(opts) {
@@ -429,6 +462,7 @@ class PlaycademyClient {
429
462
  return this.state.config;
430
463
  }
431
464
  timeback = createTimebackNamespace(this);
465
+ skills = createSkillsNamespace(this);
432
466
  }
433
467
  // src/server/utils/verify-game-token.ts
434
468
  async function verifyGameToken(gameToken, options) {
package/dist/server.d.ts CHANGED
@@ -402,6 +402,10 @@ declare class PlaycademyClient$1 {
402
402
  subject: string;
403
403
  }) => Promise<_playcademy_types.StudentHighestGradeMasteredResponse>;
404
404
  };
405
+ /** Cross-game skill status (getStatus) */
406
+ skills: {
407
+ getStatus: (request: _playcademy_types.SkillStatusRequest) => Promise<_playcademy_types.SkillStatusLookupResult>;
408
+ };
405
409
  }
406
410
 
407
411
  /**
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.2";
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
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _playcademy_types from '@playcademy/types';
2
2
  import { GameManifest, LocalDayContext } from '@playcademy/types';
3
- export { AuthenticatedUser, DeploySource, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, GameCourseMetrics, GameLeaderboardEntry, GameManifest, GameMetricComparisonKind, GameMetricComparisonMetric, GameMetricComparisonRow, GameMetricComparisonRowStatus, GameMetricsProxyResponse, GameMetricsResponse, GameMetricsUnsupportedReason, GamePlatform, GameReleaseResponse, GameRunMetrics, GameRunMetricsComparison, GameRunMetricsComparisonStatus, GameRunMetricsComparisonSummary, GameTimebackIntegration, GameType, GameUser, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LocalDayContext, LocalDaySource, ManifestV1, ManifestV2, ManifestVersions, PopulateStudentResponse, Release, ReleasesResponse, SkillMasterySource, SkillStatus, SkillStatusRequestingGame, SkillStatusResponse, SkillStatusResult, UserEnrollment, UserInfo, UserOrganization, UserRank, UserRankResponse, UserRoleEnumType, UserScore, UserTimebackData } from '@playcademy/types';
3
+ export { AuthenticatedUser, DeploySource, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, GameCourseMetrics, GameLeaderboardEntry, GameManifest, GameMetricComparisonKind, GameMetricComparisonMetric, GameMetricComparisonRow, GameMetricComparisonRowStatus, GameMetricsProxyResponse, GameMetricsResponse, GameMetricsUnsupportedReason, GamePlatform, GameReleaseResponse, GameRunMetrics, GameRunMetricsComparison, GameRunMetricsComparisonStatus, GameRunMetricsComparisonSummary, GameTimebackIntegration, GameType, GameUser, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LocalDayContext, LocalDaySource, ManifestV1, ManifestV2, ManifestVersions, PopulateStudentResponse, Release, ReleasesResponse, SkillMasterySource, SkillStatus, SkillStatusLookupResult, SkillStatusRequest, SkillStatusRequestingGame, SkillStatusResponse, SkillStatusResult, SkillStatusUnsupportedReason, UserEnrollment, UserInfo, UserOrganization, UserRank, UserRankResponse, UserRoleEnumType, UserScore, UserTimebackData } from '@playcademy/types';
4
4
  import { TimebackCourseConfig, CourseConfig, OrganizationConfig, ComponentConfig, ResourceConfig, ComponentResourceConfig, TimebackGrade, TimebackSubject, ELevel, EndActivityRequest, HeartbeatRequest, EndActivityScoreData, EndActivityResponse } from '@playcademy/types/timeback';
5
5
  export { AssessmentAttemptSnapshot, AssessmentAwardRecord, AssessmentFinalizeResult, AssessmentFlow, AssessmentItemGrading, AssessmentItemOutcome, AssessmentItemSubmission, AssessmentMasteryAward, AssessmentPreparationResult, AssessmentResponseUpdate, AssessmentResponseValue, AssessmentResponses, AssessmentReviewStandard, AssessmentSaveResult, AssessmentScore, AssessmentStandardRef, AssessmentSubmitResult, AssessmentTranscript, ConventionalAssessmentAttemptSnapshot, ConventionalAssessmentSubmitResult, DiagnosticAssessmentItemReceipt, DiagnosticAssessmentSubmitResult, DiagnosticRoutingSnapshot, DiagnosticRoutingTrackSnapshot, ELevel, FinalizeAssessmentInput, MasteryAssessmentSubmitResult, PlatformRoutedDiagnosticAttemptSnapshot, PlatformRoutedDiagnosticSelectionContext, PlayableAssessment, PlayableAssessmentAttemptSnapshot, PlayableAssessmentChoice, PlayableAssessmentGraphic, PlayableAssessmentHotspot, PlayableAssessmentInteraction, PlayableAssessmentItem, PlayableChoiceInteraction, PlayableContentNode, PlayableGapMatchChoice, PlayableGapMatchInteraction, PlayableInlineChoiceInteraction, PlayableMatchChoice, PlayableMatchInteraction, PlayableOrderInteraction, RecordAssessmentProgressInput, ResumeAssessmentInput, SaveAssessmentInput, SettledAssessmentAttemptSnapshot, StandardsReviewSelectionContext, StartAssessmentInput, StartAssessmentOptions, StartDiagnosticAssessmentInput, SubmitAssessmentInput, SubmitAssessmentItemInput, SubmitAssessmentItemResult, SubmitDiagnosticAssessmentItemInput, SubmitDiagnosticAssessmentItemResult } from '@playcademy/types/timeback';
6
6
  import { TimebackUserRole, UserEnrollment, UserOrganization, UserInfo } from '@playcademy/types/user';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcademy/sdk",
3
- "version": "0.20.1-beta.1",
3
+ "version": "0.20.1-beta.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {