@playcademy/sdk 0.16.1-beta.5 → 0.16.1-beta.7

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
@@ -3421,7 +3421,7 @@ async function request({
3421
3421
  return rawText && rawText.length > 0 ? rawText : undefined;
3422
3422
  }
3423
3423
  // src/version.ts
3424
- var SDK_VERSION = "0.16.1-beta.5";
3424
+ var SDK_VERSION = "0.16.1-beta.7";
3425
3425
 
3426
3426
  // src/clients/base.ts
3427
3427
  class PlaycademyBaseClient {
@@ -3216,6 +3216,29 @@ interface BucketFile {
3216
3216
  lastModified: string;
3217
3217
  contentType?: string;
3218
3218
  }
3219
+ /**
3220
+ * Options for a single-page bucket listing
3221
+ */
3222
+ interface BucketListPageOptions {
3223
+ /** Restrict results to keys starting with this prefix */
3224
+ prefix?: string;
3225
+ /** Opaque continuation cursor from the previous page's result */
3226
+ cursor?: string;
3227
+ /** Page size (1-1000); the server may return fewer */
3228
+ limit?: number;
3229
+ /** Roll deeper keys into `prefixes` entries, S3 delimiter style */
3230
+ delimiter?: string;
3231
+ }
3232
+ /**
3233
+ * One page of a bucket listing
3234
+ */
3235
+ interface BucketFilePage {
3236
+ files: BucketFile[];
3237
+ /** Rolled-up common prefixes; present for delimiter listings that found any */
3238
+ prefixes?: string[];
3239
+ /** Present only when more pages remain */
3240
+ cursor?: string;
3241
+ }
3219
3242
  /**
3220
3243
  * KV key entry
3221
3244
  */
@@ -3790,6 +3813,7 @@ declare class PlaycademyInternalClient extends PlaycademyBaseClient {
3790
3813
  };
3791
3814
  bucket: {
3792
3815
  list: (slug: string, prefix?: string) => Promise<BucketFile[]>;
3816
+ listPage: (slug: string, options?: BucketListPageOptions) => Promise<BucketFilePage>;
3793
3817
  get: (slug: string, key: string) => Promise<ArrayBuffer>;
3794
3818
  put: (slug: string, key: string, content: Blob | ArrayBuffer | Uint8Array, contentType?: string) => Promise<void>;
3795
3819
  initiateUpload: (slug: string, key: string, contentType: string) => Promise<{
@@ -4051,4 +4075,4 @@ interface BeginInitHandshakeOptions {
4051
4075
  declare function beginInitHandshake({ iframe, origin, payload, onTimeout, onSendError }: BeginInitHandshakeOptions): () => void;
4052
4076
 
4053
4077
  export { ApiError, HANDSHAKE_MAX_DURATION_MS, HANDSHAKE_RESEND_INTERVAL_MS, INIT_WAIT_TIMEOUT_MS, MessageEvents, PlaycademyInternalClient as PlaycademyClient, PlaycademyError, PlaycademyInternalClient, beginInitHandshake, extractApiErrorInfo, isTrustedIframeMessage, messaging };
4054
- export type { ApiErrorCode, ApiErrorInfo, AuthCallbackPayload, AuthOptions, AuthProviderType, AuthResult, AuthServerMessage, AuthStateChangePayload, AuthStateUpdate, BetterAuthApiKey, BetterAuthApiKeyResponse, BetterAuthSignInResponse, BucketFile, ChildCheckpointRelay, ClientConfig, ClientEvents, CourseMastery, CourseXp, DemoEndOptions, DemoEndPayload, DevUploadEvent, DevUploadHooks, EmbedActivity, EmbedActivityAbandoned, EmbedActivityCompleted, EmbedActivityFailed, EmbedLaunchOptions, EmbedResumeEnvelope, EmbedResumeStore, EmbedSession, EmbedSessionTiming, EmbedTimebackRecording, ErrorResponseBody, EventListeners, ExternalGame, FetchedGame, Game, GameContextPayload, GameCustomHostname, GameInitUser, GameRow as GameRecord, GameTokenResponse, GetHighestGradeMasteredOptions, GetMasteryOptions, GetXpOptions, HighestGradeMasteredResponse, HostedGame, InitErrorPayload, InitPayload, KVKeyEntry, KVKeyMetadata, KVSeedEntry, KVStatsResponse, KeyEventPayload, LaunchIntent, LoginResponse, MasteryResponse, MessageEventMap, ParentGameContext, ParentGameHandle, PlatformTimebackUser, PlatformTimebackUserContext, PlaycademyMode, PlaycademyServerClientConfig, PlaycademyServerClientState, ScoreSubmission, StartActivityOptions, StartActivityResult, TelemetryPayload, TimebackActivityEndRelay, TimebackActivityStartRelay, TimebackEnrollment, TimebackHeartbeatRelayRequest, TimebackInitContext, TimebackOrganization, TimebackUser, TimebackUserContext, TimebackUserHighestGradeMastered, TimebackUserMastery, TimebackUserRefreshField, TimebackUserRefreshOptions, TimebackUserXp, TokenRefreshPayload, TokenType, UpsertGameMetadataInput, UserRow as User, XpResponse };
4078
+ export type { ApiErrorCode, ApiErrorInfo, AuthCallbackPayload, AuthOptions, AuthProviderType, AuthResult, AuthServerMessage, AuthStateChangePayload, AuthStateUpdate, BetterAuthApiKey, BetterAuthApiKeyResponse, BetterAuthSignInResponse, BucketFile, BucketFilePage, BucketListPageOptions, ChildCheckpointRelay, ClientConfig, ClientEvents, CourseMastery, CourseXp, DemoEndOptions, DemoEndPayload, DevUploadEvent, DevUploadHooks, EmbedActivity, EmbedActivityAbandoned, EmbedActivityCompleted, EmbedActivityFailed, EmbedLaunchOptions, EmbedResumeEnvelope, EmbedResumeStore, EmbedSession, EmbedSessionTiming, EmbedTimebackRecording, ErrorResponseBody, EventListeners, ExternalGame, FetchedGame, Game, GameContextPayload, GameCustomHostname, GameInitUser, GameRow as GameRecord, GameTokenResponse, GetHighestGradeMasteredOptions, GetMasteryOptions, GetXpOptions, HighestGradeMasteredResponse, HostedGame, InitErrorPayload, InitPayload, KVKeyEntry, KVKeyMetadata, KVSeedEntry, KVStatsResponse, KeyEventPayload, LaunchIntent, LoginResponse, MasteryResponse, MessageEventMap, ParentGameContext, ParentGameHandle, PlatformTimebackUser, PlatformTimebackUserContext, PlaycademyMode, PlaycademyServerClientConfig, PlaycademyServerClientState, ScoreSubmission, StartActivityOptions, StartActivityResult, TelemetryPayload, TimebackActivityEndRelay, TimebackActivityStartRelay, TimebackEnrollment, TimebackHeartbeatRelayRequest, TimebackInitContext, TimebackOrganization, TimebackUser, TimebackUserContext, TimebackUserHighestGradeMastered, TimebackUserMastery, TimebackUserRefreshField, TimebackUserRefreshOptions, TimebackUserXp, TokenRefreshPayload, TokenType, UpsertGameMetadataInput, UserRow as User, XpResponse };
package/dist/internal.js CHANGED
@@ -3461,8 +3461,26 @@ class DeployPipeline {
3461
3461
  }
3462
3462
 
3463
3463
  // src/namespaces/platform/dev.ts
3464
+ var BUCKET_LIST_PAGE_SIZE = 1000;
3464
3465
  function createDevNamespace(client) {
3465
3466
  const deploy = new DeployPipeline(client);
3467
+ async function fetchBucketPage(slug, options = {}) {
3468
+ const params = new URLSearchParams;
3469
+ if (options.prefix) {
3470
+ params.set("prefix", options.prefix);
3471
+ }
3472
+ if (options.cursor) {
3473
+ params.set("cursor", options.cursor);
3474
+ }
3475
+ if (options.limit !== undefined) {
3476
+ params.set("limit", String(options.limit));
3477
+ }
3478
+ if (options.delimiter) {
3479
+ params.set("delimiter", options.delimiter);
3480
+ }
3481
+ const query = params.size > 0 ? `?${params.toString()}` : "";
3482
+ return client["request"](`/games/${slug}/bucket${query}`, "GET");
3483
+ }
3466
3484
  return {
3467
3485
  status: {
3468
3486
  apply: () => client["request"]("/dev/apply", "POST"),
@@ -3594,10 +3612,22 @@ function createDevNamespace(client) {
3594
3612
  },
3595
3613
  bucket: {
3596
3614
  list: async (slug, prefix) => {
3597
- const params = prefix ? `?prefix=${encodeURIComponent(prefix)}` : "";
3598
- const result = await client["request"](`/games/${slug}/bucket${params}`, "GET");
3599
- return result.files;
3615
+ const files = [];
3616
+ let cursor;
3617
+ do {
3618
+ const page = await fetchBucketPage(slug, {
3619
+ prefix,
3620
+ cursor,
3621
+ limit: BUCKET_LIST_PAGE_SIZE
3622
+ });
3623
+ for (const file of page.files) {
3624
+ files.push(file);
3625
+ }
3626
+ cursor = page.cursor;
3627
+ } while (cursor);
3628
+ return files;
3600
3629
  },
3630
+ listPage: fetchBucketPage,
3601
3631
  get: async (slug, key) => {
3602
3632
  const res = await client["request"](`/games/${slug}/bucket/${encodeURIComponent(key)}`, "GET", { raw: true });
3603
3633
  if (!res.ok) {
@@ -4266,7 +4296,7 @@ async function request({
4266
4296
  return rawText && rawText.length > 0 ? rawText : undefined;
4267
4297
  }
4268
4298
  // src/version.ts
4269
- var SDK_VERSION = "0.16.1-beta.5";
4299
+ var SDK_VERSION = "0.16.1-beta.7";
4270
4300
 
4271
4301
  // src/clients/base.ts
4272
4302
  class PlaycademyBaseClient {
@@ -303,7 +303,7 @@ function extractApiErrorInfo(error) {
303
303
  }
304
304
 
305
305
  // src/version.ts
306
- var SDK_VERSION = "0.16.1-beta.5";
306
+ var SDK_VERSION = "0.16.1-beta.7";
307
307
 
308
308
  // src/server/request.ts
309
309
  async function makeApiRequest(opts) {
package/dist/server.js CHANGED
@@ -492,7 +492,7 @@ function extractApiErrorInfo(error) {
492
492
  }
493
493
 
494
494
  // src/version.ts
495
- var SDK_VERSION = "0.16.1-beta.5";
495
+ var SDK_VERSION = "0.16.1-beta.7";
496
496
 
497
497
  // src/server/request.ts
498
498
  async function makeApiRequest(opts) {
package/dist/types.d.ts CHANGED
@@ -2578,6 +2578,29 @@ interface BucketFile {
2578
2578
  lastModified: string;
2579
2579
  contentType?: string;
2580
2580
  }
2581
+ /**
2582
+ * Options for a single-page bucket listing
2583
+ */
2584
+ interface BucketListPageOptions {
2585
+ /** Restrict results to keys starting with this prefix */
2586
+ prefix?: string;
2587
+ /** Opaque continuation cursor from the previous page's result */
2588
+ cursor?: string;
2589
+ /** Page size (1-1000); the server may return fewer */
2590
+ limit?: number;
2591
+ /** Roll deeper keys into `prefixes` entries, S3 delimiter style */
2592
+ delimiter?: string;
2593
+ }
2594
+ /**
2595
+ * One page of a bucket listing
2596
+ */
2597
+ interface BucketFilePage {
2598
+ files: BucketFile[];
2599
+ /** Rolled-up common prefixes; present for delimiter listings that found any */
2600
+ prefixes?: string[];
2601
+ /** Present only when more pages remain */
2602
+ cursor?: string;
2603
+ }
2581
2604
  /**
2582
2605
  * KV key entry
2583
2606
  */
@@ -2671,4 +2694,4 @@ interface PlatformTimebackUser extends PlatformTimebackUserContext {
2671
2694
  }
2672
2695
 
2673
2696
  export { PlaycademyClient };
2674
- export type { AuthCallbackPayload, AuthOptions, AuthProviderType, AuthResult, AuthServerMessage, AuthStateChangePayload, AuthStateUpdate, BetterAuthApiKey, BetterAuthApiKeyResponse, BetterAuthSignInResponse, BucketFile, ChildCheckpointRelay, ClientConfig, ClientEvents, CourseMastery, CourseXp, DemoEndOptions, DemoEndPayload, DevUploadEvent, DevUploadHooks, EmbedActivity, EmbedActivityAbandoned, EmbedActivityCompleted, EmbedActivityFailed, EmbedLaunchOptions, EmbedResumeEnvelope, EmbedResumeStore, EmbedSession, EmbedSessionTiming, EmbedTimebackRecording, EventListeners, ExternalGame, FetchedGame, Game, GameContextPayload, GameCustomHostname, GameInitUser, GameRow as GameRecord, GameTokenResponse, GetHighestGradeMasteredOptions, GetMasteryOptions, GetXpOptions, HighestGradeMasteredResponse, HostedGame, InitErrorPayload, InitPayload, KVKeyEntry, KVKeyMetadata, KVSeedEntry, KVStatsResponse, KeyEventPayload, LaunchIntent, LoginResponse, MasteryResponse, ParentGameContext, ParentGameHandle, PlatformTimebackUser, PlatformTimebackUserContext, PlaycademyMode, PlaycademyServerClientConfig, PlaycademyServerClientState, ScoreSubmission, StartActivityOptions, StartActivityResult, TelemetryPayload, TimebackActivityEndRelay, TimebackActivityStartRelay, TimebackEnrollment, TimebackHeartbeatRelayRequest, TimebackInitContext, TimebackOrganization, TimebackUser, TimebackUserContext, TimebackUserHighestGradeMastered, TimebackUserMastery, TimebackUserRefreshField, TimebackUserRefreshOptions, TimebackUserXp, TokenRefreshPayload, TokenType, UpsertGameMetadataInput, UserRow as User, XpResponse };
2697
+ export type { AuthCallbackPayload, AuthOptions, AuthProviderType, AuthResult, AuthServerMessage, AuthStateChangePayload, AuthStateUpdate, BetterAuthApiKey, BetterAuthApiKeyResponse, BetterAuthSignInResponse, BucketFile, BucketFilePage, BucketListPageOptions, ChildCheckpointRelay, ClientConfig, ClientEvents, CourseMastery, CourseXp, DemoEndOptions, DemoEndPayload, DevUploadEvent, DevUploadHooks, EmbedActivity, EmbedActivityAbandoned, EmbedActivityCompleted, EmbedActivityFailed, EmbedLaunchOptions, EmbedResumeEnvelope, EmbedResumeStore, EmbedSession, EmbedSessionTiming, EmbedTimebackRecording, EventListeners, ExternalGame, FetchedGame, Game, GameContextPayload, GameCustomHostname, GameInitUser, GameRow as GameRecord, GameTokenResponse, GetHighestGradeMasteredOptions, GetMasteryOptions, GetXpOptions, HighestGradeMasteredResponse, HostedGame, InitErrorPayload, InitPayload, KVKeyEntry, KVKeyMetadata, KVSeedEntry, KVStatsResponse, KeyEventPayload, LaunchIntent, LoginResponse, MasteryResponse, ParentGameContext, ParentGameHandle, PlatformTimebackUser, PlatformTimebackUserContext, PlaycademyMode, PlaycademyServerClientConfig, PlaycademyServerClientState, ScoreSubmission, StartActivityOptions, StartActivityResult, TelemetryPayload, TimebackActivityEndRelay, TimebackActivityStartRelay, TimebackEnrollment, TimebackHeartbeatRelayRequest, TimebackInitContext, TimebackOrganization, TimebackUser, TimebackUserContext, TimebackUserHighestGradeMastered, TimebackUserMastery, TimebackUserRefreshField, TimebackUserRefreshOptions, TimebackUserXp, TokenRefreshPayload, TokenType, UpsertGameMetadataInput, UserRow as User, XpResponse };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcademy/sdk",
3
- "version": "0.16.1-beta.5",
3
+ "version": "0.16.1-beta.7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {