@playcademy/sdk 0.17.0 → 0.17.1-beta.1

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.d.ts CHANGED
@@ -1564,6 +1564,7 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
1564
1564
  save: (attemptId: string, input: _playcademy_types.SaveAssessmentInput) => Promise<_playcademy_types.AssessmentSaveResult>;
1565
1565
  submitItem: (attemptId: string, input: _playcademy_types.SubmitAssessmentItemInput) => Promise<_playcademy_types.SubmitAssessmentItemResult>;
1566
1566
  submit: (attemptId: string, input: _playcademy_types.SubmitAssessmentInput) => Promise<_playcademy_types.AssessmentSubmitResult>;
1567
+ finalize: (attemptId: string, input: _playcademy_types.FinalizeAssessmentInput) => Promise<_playcademy_types.AssessmentFinalizeResult>;
1567
1568
  };
1568
1569
  readonly user: TimebackUser;
1569
1570
  readonly currentRunId: string | undefined;
package/dist/index.js CHANGED
@@ -3094,7 +3094,7 @@ function createTimebackNamespace(client) {
3094
3094
  if (pendingAssessmentSubmissions.has(snapshot.attemptId)) {
3095
3095
  return snapshot;
3096
3096
  }
3097
- if (snapshot.status === "completed") {
3097
+ if (snapshot.status !== "in_progress") {
3098
3098
  await engine.activity.finishAssessment(snapshot.attemptId);
3099
3099
  clearAssessmentTrackingWarnings(snapshot.attemptId);
3100
3100
  return snapshot;
@@ -3278,6 +3278,19 @@ function createTimebackNamespace(client) {
3278
3278
  }
3279
3279
  throw error;
3280
3280
  }
3281
+ },
3282
+ finalize: async (attemptId, input) => {
3283
+ assertPlatformMode(client, "timeback.assessments.finalize()");
3284
+ if (!attemptId?.trim()) {
3285
+ throw new Error("attemptId is required");
3286
+ }
3287
+ if (!input.submissionId?.trim()) {
3288
+ throw new Error("submissionId is required");
3289
+ }
3290
+ if (!Number.isFinite(input.xpAwarded) || input.xpAwarded < 0) {
3291
+ throw new Error("xpAwarded must be a finite, non-negative number");
3292
+ }
3293
+ return client["requestGameBackend"](`${ASSESSMENTS_ROUTE}/${encodeURIComponent(attemptId)}/finalize`, "POST", input, undefined, { retryPolicy: ASSESSMENT_SUBMIT_RETRY_POLICY });
3281
3294
  }
3282
3295
  },
3283
3296
  get user() {
@@ -3684,7 +3697,7 @@ async function request({
3684
3697
  return rawText && rawText.length > 0 ? rawText : undefined;
3685
3698
  }
3686
3699
  // src/version.ts
3687
- var SDK_VERSION = "0.17.0";
3700
+ var SDK_VERSION = "0.17.1-beta.1";
3688
3701
 
3689
3702
  // src/clients/base.ts
3690
3703
  class PlaycademyBaseClient {
@@ -1,7 +1,7 @@
1
1
  import { SchemaInfo } from '@playcademy/cloudflare';
2
2
  import { GamePermission, AUTH_PROVIDER_IDS } from '@playcademy/constants';
3
3
  import { TimebackGrade, TimebackSubject, ELevel, HeartbeatRequest, EndActivityRequest, EndActivityScoreData, EndActivityResponse, TimebackCourseConfig, CourseConfig, OrganizationConfig, ComponentConfig, ResourceConfig, ComponentResourceConfig } from '@playcademy/types/timeback';
4
- export { AssessmentAttemptSnapshot, AssessmentFlow, AssessmentItemSubmission, AssessmentResponseUpdate, AssessmentResponseValue, AssessmentResponses, AssessmentSaveResult, AssessmentScore, AssessmentStandardRef, AssessmentSubmitResult, ConventionalAssessmentAttemptSnapshot, ConventionalAssessmentSubmitResult, DiagnosticAssessmentItemReceipt, DiagnosticAssessmentSubmitResult, DiagnosticRoutingSnapshot, DiagnosticRoutingTrackSnapshot, ELevel, PlatformRoutedDiagnosticAttemptSnapshot, PlatformRoutedDiagnosticSelectionContext, PlayableAssessment, PlayableAssessmentChoice, PlayableAssessmentGraphic, PlayableAssessmentHotspot, PlayableAssessmentInteraction, PlayableAssessmentItem, PlayableContentNode, SaveAssessmentInput, StartAssessmentInput, StartDiagnosticAssessmentInput, SubmitAssessmentInput, SubmitAssessmentItemInput, SubmitAssessmentItemResult, SubmitDiagnosticAssessmentItemInput, SubmitDiagnosticAssessmentItemResult } from '@playcademy/types/timeback';
4
+ export { AssessmentAttemptSnapshot, AssessmentFinalizeResult, AssessmentFlow, AssessmentItemSubmission, AssessmentResponseUpdate, AssessmentResponseValue, AssessmentResponses, AssessmentSaveResult, AssessmentScore, AssessmentStandardRef, AssessmentSubmitResult, ConventionalAssessmentAttemptSnapshot, ConventionalAssessmentSubmitResult, DiagnosticAssessmentItemReceipt, DiagnosticAssessmentSubmitResult, DiagnosticRoutingSnapshot, DiagnosticRoutingTrackSnapshot, ELevel, FinalizeAssessmentInput, PlatformRoutedDiagnosticAttemptSnapshot, PlatformRoutedDiagnosticSelectionContext, PlayableAssessment, PlayableAssessmentAttemptSnapshot, PlayableAssessmentChoice, PlayableAssessmentGraphic, PlayableAssessmentHotspot, PlayableAssessmentInteraction, PlayableAssessmentItem, PlayableContentNode, SaveAssessmentInput, SettledAssessmentAttemptSnapshot, StartAssessmentInput, 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
7
  export { AuthenticatedUser, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, GameCourseMetrics, GameLeaderboardEntry, GameManifest, GameMetricComparisonKind, GameMetricComparisonMetric, GameMetricComparisonRow, GameMetricComparisonRowStatus, GameMetricsProxyResponse, GameMetricsResponse, GameMetricsUnsupportedReason, GamePlatform, GameRunMetrics, GameRunMetricsComparison, GameRunMetricsComparisonStatus, GameRunMetricsComparisonSummary, GameTimebackIntegration, GameType, GameUser, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LocalDayContext, LocalDaySource, ManifestV1, ManifestV2, ManifestVersions, PopulateStudentResponse, UserEnrollment, UserInfo, UserOrganization, UserRank, UserRankResponse, UserRoleEnumType, UserScore, UserTimebackData } from '@playcademy/types';
package/dist/internal.js CHANGED
@@ -3094,7 +3094,7 @@ function createTimebackNamespace(client) {
3094
3094
  if (pendingAssessmentSubmissions.has(snapshot.attemptId)) {
3095
3095
  return snapshot;
3096
3096
  }
3097
- if (snapshot.status === "completed") {
3097
+ if (snapshot.status !== "in_progress") {
3098
3098
  await engine.activity.finishAssessment(snapshot.attemptId);
3099
3099
  clearAssessmentTrackingWarnings(snapshot.attemptId);
3100
3100
  return snapshot;
@@ -3278,6 +3278,19 @@ function createTimebackNamespace(client) {
3278
3278
  }
3279
3279
  throw error;
3280
3280
  }
3281
+ },
3282
+ finalize: async (attemptId, input) => {
3283
+ assertPlatformMode(client, "timeback.assessments.finalize()");
3284
+ if (!attemptId?.trim()) {
3285
+ throw new Error("attemptId is required");
3286
+ }
3287
+ if (!input.submissionId?.trim()) {
3288
+ throw new Error("submissionId is required");
3289
+ }
3290
+ if (!Number.isFinite(input.xpAwarded) || input.xpAwarded < 0) {
3291
+ throw new Error("xpAwarded must be a finite, non-negative number");
3292
+ }
3293
+ return client["requestGameBackend"](`${ASSESSMENTS_ROUTE}/${encodeURIComponent(attemptId)}/finalize`, "POST", input, undefined, { retryPolicy: ASSESSMENT_SUBMIT_RETRY_POLICY });
3281
3294
  }
3282
3295
  },
3283
3296
  get user() {
@@ -4579,7 +4592,7 @@ async function request({
4579
4592
  return rawText && rawText.length > 0 ? rawText : undefined;
4580
4593
  }
4581
4594
  // src/version.ts
4582
- var SDK_VERSION = "0.17.0";
4595
+ var SDK_VERSION = "0.17.1-beta.1";
4583
4596
 
4584
4597
  // src/clients/base.ts
4585
4598
  class PlaycademyBaseClient {
@@ -378,6 +378,9 @@ declare class PlaycademyClient {
378
378
  submit: (studentId: string, attemptId: string, input: _playcademy_types.SubmitAssessmentRequest, context: {
379
379
  sensorUrl: string;
380
380
  }) => Promise<_playcademy_types.AssessmentSubmitResult>;
381
+ finalize: (studentId: string, attemptId: string, input: _playcademy_types.FinalizeAssessmentInput, context: {
382
+ sensorUrl: string;
383
+ }) => Promise<_playcademy_types.AssessmentFinalizeResult>;
381
384
  };
382
385
  endActivity: (studentId: string, payload: _playcademy_types.EndActivityPayload) => Promise<_playcademy_types.EndActivityResponse>;
383
386
  getStudentXp: (studentId: string, options?: {
@@ -117,6 +117,13 @@ function createTimebackNamespace(client) {
117
117
  studentId,
118
118
  appName: client.config.name,
119
119
  sensorUrl: context.sensorUrl
120
+ }),
121
+ finalize: (studentId, attemptId, input, context) => client["request"](`/api/timeback/assessments/${encodeURIComponent(attemptId)}/finalize`, "POST", {
122
+ ...input,
123
+ gameId: client.gameId,
124
+ studentId,
125
+ appName: client.config.name,
126
+ sensorUrl: context.sensorUrl
120
127
  })
121
128
  },
122
129
  endActivity: async (studentId, payload) => {
@@ -315,7 +322,7 @@ function extractApiErrorInfo(error) {
315
322
  }
316
323
 
317
324
  // src/version.ts
318
- var SDK_VERSION = "0.17.0";
325
+ var SDK_VERSION = "0.17.1-beta.1";
319
326
 
320
327
  // src/server/request.ts
321
328
  async function makeApiRequest(opts) {
package/dist/server.d.ts CHANGED
@@ -378,6 +378,9 @@ declare class PlaycademyClient$1 {
378
378
  submit: (studentId: string, attemptId: string, input: _playcademy_types.SubmitAssessmentRequest, context: {
379
379
  sensorUrl: string;
380
380
  }) => Promise<_playcademy_types.AssessmentSubmitResult>;
381
+ finalize: (studentId: string, attemptId: string, input: _playcademy_types.FinalizeAssessmentInput, context: {
382
+ sensorUrl: string;
383
+ }) => Promise<_playcademy_types.AssessmentFinalizeResult>;
381
384
  };
382
385
  endActivity: (studentId: string, payload: _playcademy_types.EndActivityPayload) => Promise<_playcademy_types.EndActivityResponse>;
383
386
  getStudentXp: (studentId: string, options?: {
package/dist/server.js CHANGED
@@ -306,6 +306,13 @@ function createTimebackNamespace(client) {
306
306
  studentId,
307
307
  appName: client.config.name,
308
308
  sensorUrl: context.sensorUrl
309
+ }),
310
+ finalize: (studentId, attemptId, input, context) => client["request"](`/api/timeback/assessments/${encodeURIComponent(attemptId)}/finalize`, "POST", {
311
+ ...input,
312
+ gameId: client.gameId,
313
+ studentId,
314
+ appName: client.config.name,
315
+ sensorUrl: context.sensorUrl
309
316
  })
310
317
  },
311
318
  endActivity: async (studentId, payload) => {
@@ -504,7 +511,7 @@ function extractApiErrorInfo(error) {
504
511
  }
505
512
 
506
513
  // src/version.ts
507
- var SDK_VERSION = "0.17.0";
514
+ var SDK_VERSION = "0.17.1-beta.1";
508
515
 
509
516
  // src/server/request.ts
510
517
  async function makeApiRequest(opts) {
package/dist/types.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as _playcademy_types from '@playcademy/types';
2
2
  import { GameManifest, LocalDayContext } from '@playcademy/types';
3
3
  export { AuthenticatedUser, DeveloperStatusEnumType, DeveloperStatusResponse, DeveloperStatusValue, GameCourseMetrics, GameLeaderboardEntry, GameManifest, GameMetricComparisonKind, GameMetricComparisonMetric, GameMetricComparisonRow, GameMetricComparisonRowStatus, GameMetricsProxyResponse, GameMetricsResponse, GameMetricsUnsupportedReason, GamePlatform, GameRunMetrics, GameRunMetricsComparison, GameRunMetricsComparisonStatus, GameRunMetricsComparisonSummary, GameTimebackIntegration, GameType, GameUser, LeaderboardEntry, LeaderboardOptions, LeaderboardTimeframe, LocalDayContext, LocalDaySource, ManifestV1, ManifestV2, ManifestVersions, PopulateStudentResponse, 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
- export { AssessmentAttemptSnapshot, AssessmentFlow, AssessmentItemSubmission, AssessmentResponseUpdate, AssessmentResponseValue, AssessmentResponses, AssessmentSaveResult, AssessmentScore, AssessmentStandardRef, AssessmentSubmitResult, ConventionalAssessmentAttemptSnapshot, ConventionalAssessmentSubmitResult, DiagnosticAssessmentItemReceipt, DiagnosticAssessmentSubmitResult, DiagnosticRoutingSnapshot, DiagnosticRoutingTrackSnapshot, ELevel, PlatformRoutedDiagnosticAttemptSnapshot, PlatformRoutedDiagnosticSelectionContext, PlayableAssessment, PlayableAssessmentChoice, PlayableAssessmentGraphic, PlayableAssessmentHotspot, PlayableAssessmentInteraction, PlayableAssessmentItem, PlayableContentNode, SaveAssessmentInput, StartAssessmentInput, StartDiagnosticAssessmentInput, SubmitAssessmentInput, SubmitAssessmentItemInput, SubmitAssessmentItemResult, SubmitDiagnosticAssessmentItemInput, SubmitDiagnosticAssessmentItemResult } from '@playcademy/types/timeback';
5
+ export { AssessmentAttemptSnapshot, AssessmentFinalizeResult, AssessmentFlow, AssessmentItemSubmission, AssessmentResponseUpdate, AssessmentResponseValue, AssessmentResponses, AssessmentSaveResult, AssessmentScore, AssessmentStandardRef, AssessmentSubmitResult, ConventionalAssessmentAttemptSnapshot, ConventionalAssessmentSubmitResult, DiagnosticAssessmentItemReceipt, DiagnosticAssessmentSubmitResult, DiagnosticRoutingSnapshot, DiagnosticRoutingTrackSnapshot, ELevel, FinalizeAssessmentInput, PlatformRoutedDiagnosticAttemptSnapshot, PlatformRoutedDiagnosticSelectionContext, PlayableAssessment, PlayableAssessmentAttemptSnapshot, PlayableAssessmentChoice, PlayableAssessmentGraphic, PlayableAssessmentHotspot, PlayableAssessmentInteraction, PlayableAssessmentItem, PlayableContentNode, SaveAssessmentInput, SettledAssessmentAttemptSnapshot, StartAssessmentInput, StartDiagnosticAssessmentInput, SubmitAssessmentInput, SubmitAssessmentItemInput, SubmitAssessmentItemResult, SubmitDiagnosticAssessmentItemInput, SubmitDiagnosticAssessmentItemResult } from '@playcademy/types/timeback';
6
6
  import { TimebackUserRole, UserEnrollment, UserOrganization, UserInfo } from '@playcademy/types/user';
7
7
  import { GamePermission, AUTH_PROVIDER_IDS } from '@playcademy/constants';
8
8
  import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
@@ -2020,6 +2020,7 @@ declare class PlaycademyClient extends PlaycademyBaseClient {
2020
2020
  save: (attemptId: string, input: _playcademy_types.SaveAssessmentInput) => Promise<_playcademy_types.AssessmentSaveResult>;
2021
2021
  submitItem: (attemptId: string, input: _playcademy_types.SubmitAssessmentItemInput) => Promise<_playcademy_types.SubmitAssessmentItemResult>;
2022
2022
  submit: (attemptId: string, input: _playcademy_types.SubmitAssessmentInput) => Promise<_playcademy_types.AssessmentSubmitResult>;
2023
+ finalize: (attemptId: string, input: _playcademy_types.FinalizeAssessmentInput) => Promise<_playcademy_types.AssessmentFinalizeResult>;
2023
2024
  };
2024
2025
  readonly user: TimebackUser;
2025
2026
  readonly currentRunId: string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcademy/sdk",
3
- "version": "0.17.0",
3
+ "version": "0.17.1-beta.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {