@series-inc/rundot-game-sdk 5.23.0-beta.7 → 5.23.0-beta.8

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.
@@ -1,5 +1,15 @@
1
1
  import { RateLimitedError, RundotApiError } from './chunk-HVVCNDSV.js';
2
2
 
3
+ // src/http/backendHttpDeps.ts
4
+ async function resolveGameSessionToken(getGameSessionToken) {
5
+ if (!getGameSessionToken) return null;
6
+ try {
7
+ return await getGameSessionToken();
8
+ } catch {
9
+ return null;
10
+ }
11
+ }
12
+
3
13
  // src/imageGen/HttpImageGenApi.ts
4
14
  var HttpImageGenApi = class {
5
15
  appId;
@@ -12,13 +22,16 @@ var HttpImageGenApi = class {
12
22
  const idToken = await this.deps.getIdToken();
13
23
  const baseUrl = this.deps.getCloudRunUrl();
14
24
  const url = `${baseUrl}/v1/imagegen/${this.appId}/${path}`;
25
+ const headers = {
26
+ "Content-Type": "application/json",
27
+ "Authorization": `Bearer ${idToken}`,
28
+ "x-consumer": "sdk"
29
+ };
30
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
31
+ if (gst) headers["x-h5-game-session"] = gst;
15
32
  const response = await fetch(url, {
16
33
  method: "POST",
17
- headers: {
18
- "Content-Type": "application/json",
19
- "Authorization": `Bearer ${idToken}`,
20
- "x-consumer": "sdk"
21
- },
34
+ headers,
22
35
  body: JSON.stringify(body)
23
36
  });
24
37
  if (!response.ok) {
@@ -63,12 +76,15 @@ var HttpAudioGenApi = class {
63
76
  const idToken = await this.deps.getIdToken();
64
77
  const baseUrl = this.deps.getCloudRunUrl();
65
78
  const url = `${baseUrl}/v1/audiogen/${this.appId}/${path}`;
79
+ const headers = {
80
+ "Content-Type": "application/json",
81
+ "Authorization": `Bearer ${idToken}`
82
+ };
83
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
84
+ if (gst) headers["x-h5-game-session"] = gst;
66
85
  const response = await fetch(url, {
67
86
  method,
68
- headers: {
69
- "Content-Type": "application/json",
70
- "Authorization": `Bearer ${idToken}`
71
- },
87
+ headers,
72
88
  ...body !== void 0 ? { body: JSON.stringify(body) } : {}
73
89
  });
74
90
  if (!response.ok) {
@@ -123,12 +139,15 @@ var HttpVideoGenApi = class {
123
139
  const idToken = await this.deps.getIdToken();
124
140
  const baseUrl = this.deps.getCloudRunUrl();
125
141
  const url = `${baseUrl}/v1/videogen/${this.appId}/sync-generate`;
142
+ const headers = {
143
+ "Content-Type": "application/json",
144
+ "Authorization": `Bearer ${idToken}`
145
+ };
146
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
147
+ if (gst) headers["x-h5-game-session"] = gst;
126
148
  const response = await fetch(url, {
127
149
  method: "POST",
128
- headers: {
129
- "Content-Type": "application/json",
130
- "Authorization": `Bearer ${idToken}`
131
- },
150
+ headers,
132
151
  body: JSON.stringify(params)
133
152
  });
134
153
  if (!response.ok) {
@@ -151,12 +170,15 @@ var HttpVideoGenApi = class {
151
170
  const idToken = await this.deps.getIdToken();
152
171
  const baseUrl = this.deps.getCloudRunUrl();
153
172
  const url = `${baseUrl}/v1/jobs/${this.appId}/${jobId}/cancel`;
173
+ const headers = {
174
+ "Content-Type": "application/json",
175
+ "Authorization": `Bearer ${idToken}`
176
+ };
177
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
178
+ if (gst) headers["x-h5-game-session"] = gst;
154
179
  const response = await fetch(url, {
155
180
  method: "POST",
156
- headers: {
157
- "Content-Type": "application/json",
158
- "Authorization": `Bearer ${idToken}`
159
- }
181
+ headers
160
182
  });
161
183
  if (!response.ok) {
162
184
  const errorText = await response.text();
@@ -217,9 +239,12 @@ var HttpSpriteGenApi = class {
217
239
  async get(path, errorFallback) {
218
240
  const idToken = await this.deps.getIdToken();
219
241
  const baseUrl = this.deps.getCloudRunUrl();
242
+ const headers = { "Authorization": `Bearer ${idToken}` };
243
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
244
+ if (gst) headers["x-h5-game-session"] = gst;
220
245
  const response = await fetch(`${baseUrl}${path}`, {
221
246
  method: "GET",
222
- headers: { "Authorization": `Bearer ${idToken}` }
247
+ headers
223
248
  });
224
249
  if (!response.ok) {
225
250
  throw new Error(await this.extractError(response, errorFallback));
@@ -230,12 +255,15 @@ var HttpSpriteGenApi = class {
230
255
  const idToken = await this.deps.getIdToken();
231
256
  const baseUrl = this.deps.getCloudRunUrl();
232
257
  const url = `${baseUrl}/v1/spritegen/${this.appId}/${endpoint}`;
258
+ const headers = {
259
+ "Content-Type": "application/json",
260
+ "Authorization": `Bearer ${idToken}`
261
+ };
262
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
263
+ if (gst) headers["x-h5-game-session"] = gst;
233
264
  const response = await fetch(url, {
234
265
  method: "POST",
235
- headers: {
236
- "Content-Type": "application/json",
237
- "Authorization": `Bearer ${idToken}`
238
- },
266
+ headers,
239
267
  body: JSON.stringify(body)
240
268
  });
241
269
  if (!response.ok) {
@@ -283,12 +311,15 @@ var HttpThreeDGenApi = class {
283
311
  const idToken = await this.deps.getIdToken();
284
312
  const baseUrl = this.deps.getCloudRunUrl();
285
313
  const url = `${baseUrl}/v1/threedgen/${this.appId}/${endpoint}`;
314
+ const headers = {
315
+ "Content-Type": "application/json",
316
+ "Authorization": `Bearer ${idToken}`
317
+ };
318
+ const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);
319
+ if (gst) headers["x-h5-game-session"] = gst;
286
320
  const response = await fetch(url, {
287
321
  method: "POST",
288
- headers: {
289
- "Content-Type": "application/json",
290
- "Authorization": `Bearer ${idToken}`
291
- },
322
+ headers,
292
323
  body: JSON.stringify(body)
293
324
  });
294
325
  if (!response.ok) {
@@ -420,5 +451,5 @@ var HttpLeaderboardApi = class {
420
451
  };
421
452
 
422
453
  export { HttpAudioGenApi, HttpImageGenApi, HttpLeaderboardApi, HttpSpriteGenApi, HttpThreeDGenApi, HttpVideoGenApi };
423
- //# sourceMappingURL=chunk-L2CCQONI.js.map
424
- //# sourceMappingURL=chunk-L2CCQONI.js.map
454
+ //# sourceMappingURL=chunk-EREDCD6A.js.map
455
+ //# sourceMappingURL=chunk-EREDCD6A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/http/backendHttpDeps.ts","../src/imageGen/HttpImageGenApi.ts","../src/audioGen/HttpAudioGenApi.ts","../src/videoGen/HttpVideoGenApi.ts","../src/spriteGen/HttpSpriteGenApi.ts","../src/threeDGen/HttpThreeDGenApi.ts","../src/leaderboard/normalizeScores.ts","../src/leaderboard/HttpLeaderboardApi.ts"],"names":[],"mappings":"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","file":"chunk-EREDCD6A.js","sourcesContent":["/**\n * Backend HTTP dependencies injected into the Http*Api classes so they are\n * decoupled from the SDK playground globals (getFirebaseClient/getCloudRunUrl).\n * Each host (PlaygroundHost, Telegram shell, future Steam shell) supplies its own.\n */\nexport interface BackendHttpDeps {\n getIdToken(): Promise<string>\n getCloudRunUrl(): string\n /**\n * Returns the host's game-session token (`x-h5-game-session`) for the current\n * game+user, or `null` when unavailable. Optional so non-playground shells\n * that don't mint a GST omit the header and stay fail-safe.\n */\n getGameSessionToken?(): Promise<string | null>\n}\n\n/**\n * Fail-safe resolver for an optional, possibly-rejecting `getGameSessionToken`.\n * Missing accessor → `null`; a rejection → `null`. Every Family-A client routes\n * its GST fetch through this so a GST hiccup never throws out of a backend call\n * (Req 7), regardless of which host supplied the dep.\n */\nexport async function resolveGameSessionToken(\n getGameSessionToken?: () => Promise<string | null>,\n): Promise<string | null> {\n if (!getGameSessionToken) return null\n try {\n return await getGameSessionToken()\n } catch {\n return null\n }\n}\n","// Host-facing HTTP implementation of ImageGenApi. Firebase-free: auth + base URL\n// come from the injected BackendHttpDeps, so any host (PlaygroundHost, Telegram/Steam\n// shells) can construct it. Do NOT import from barrel exports (imageGen/index.ts).\n\nimport { ImageGenApi, ImageGenParams, ImageGenResult, ImageGenJobEvent, DepthEstimationParams, DepthEstimationResult, RemoveBackgroundParams, RemoveBackgroundResult, UpscaleImageParams, UpscaleImageResult } from './ImageGenApi';\nimport { resolveGameSessionToken } from '../http/backendHttpDeps';\nimport type { BackendHttpDeps } from '../http/backendHttpDeps';\n\nexport class HttpImageGenApi implements ImageGenApi {\n private readonly appId: string;\n private readonly deps: BackendHttpDeps;\n\n constructor(appId: string, deps: BackendHttpDeps) {\n this.appId = appId;\n this.deps = deps;\n }\n\n private async authedPost<T>(path: string, body: Record<string, unknown>): Promise<T> {\n const idToken = await this.deps.getIdToken();\n const baseUrl = this.deps.getCloudRunUrl();\n const url = `${baseUrl}/v1/imagegen/${this.appId}/${path}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${idToken}`,\n 'x-consumer': 'sdk',\n };\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n let errorMessage = `Request failed (${response.status})`;\n try {\n const errorJson = JSON.parse(errorText);\n errorMessage = errorJson.error || errorJson.message || errorMessage;\n } catch {\n if (errorText) errorMessage = errorText;\n }\n throw new Error(errorMessage);\n }\n\n return response.json();\n }\n\n async generate(params: ImageGenParams): Promise<ImageGenResult> {\n return this.authedPost<ImageGenResult>('generate', params as unknown as Record<string, unknown>);\n }\n\n async estimateDepth(params: DepthEstimationParams): Promise<DepthEstimationResult> {\n return this.authedPost<DepthEstimationResult>('estimate-depth', params as unknown as Record<string, unknown>);\n }\n\n async removeBackground(params: RemoveBackgroundParams): Promise<RemoveBackgroundResult> {\n return this.authedPost<RemoveBackgroundResult>('remove-background', params as unknown as Record<string, unknown>);\n }\n\n async upscaleImage(params: UpscaleImageParams): Promise<UpscaleImageResult> {\n return this.authedPost<UpscaleImageResult>('upscale-image', params as unknown as Record<string, unknown>);\n }\n\n async getCompletedJobs(): Promise<ImageGenJobEvent[]> {\n return [];\n }\n}\n","// Host-facing HTTP implementation of AudioGenApi. Firebase-free: auth + base URL\n// come from the injected BackendHttpDeps. Do NOT import from barrel exports\n// (audioGen/index.ts).\n\nimport {\n AudioGenApi,\n AudioGenParams,\n AudioGenResult,\n AudioGenJobEvent,\n ListVoicesResult,\n DesignVoicesParams,\n DesignVoicesResult,\n SaveDesignedVoiceParams,\n SaveDesignedVoiceResult,\n} from './AudioGenApi';\nimport { RundotApiError, RateLimitedError } from '../errors';\nimport { resolveGameSessionToken } from '../http/backendHttpDeps';\nimport type { BackendHttpDeps } from '../http/backendHttpDeps';\n\nexport class HttpAudioGenApi implements AudioGenApi {\n private readonly appId: string;\n private readonly deps: BackendHttpDeps;\n\n constructor(appId: string, deps: BackendHttpDeps) {\n this.appId = appId;\n this.deps = deps;\n }\n\n private async authedFetch(path: string, method: string, body?: unknown): Promise<Response> {\n const idToken = await this.deps.getIdToken();\n const baseUrl = this.deps.getCloudRunUrl();\n const url = `${baseUrl}/v1/audiogen/${this.appId}/${path}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${idToken}`,\n };\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(url, {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n\n if (!response.ok) {\n if (response.status === 429) {\n const retryAfterSec = parseInt(response.headers.get('Retry-After') ?? '60', 10);\n throw new RateLimitedError(retryAfterSec * 1000);\n }\n const errorText = await response.text();\n let errorMessage = `Audio generation failed (${response.status})`;\n let errorCode = 'UNKNOWN';\n try {\n const errorJson = JSON.parse(errorText) as Record<string, unknown>;\n errorMessage = (errorJson.error ?? errorJson.message ?? errorMessage) as string;\n if (typeof errorJson.code === 'string') errorCode = errorJson.code;\n } catch {\n if (errorText) errorMessage = errorText;\n }\n throw new RundotApiError(errorCode, errorMessage, response.status);\n }\n\n return response;\n }\n\n async generate(params: AudioGenParams): Promise<AudioGenResult> {\n const response = await this.authedFetch('generate', 'POST', params);\n return response.json();\n }\n\n async getCompletedJobs(): Promise<AudioGenJobEvent[]> {\n return [];\n }\n\n async listVoices(): Promise<ListVoicesResult> {\n const response = await this.authedFetch('voices', 'GET');\n return response.json();\n }\n\n async designVoices(params: DesignVoicesParams): Promise<DesignVoicesResult> {\n const response = await this.authedFetch('voices/design', 'POST', params);\n return response.json();\n }\n\n async saveDesignedVoice(params: SaveDesignedVoiceParams): Promise<SaveDesignedVoiceResult> {\n const response = await this.authedFetch('voices/save', 'POST', params);\n return response.json();\n }\n}\n","// Host-facing HTTP implementation of VideoGenApi. Firebase-free: auth + base URL\n// come from the injected BackendHttpDeps. Do NOT import from barrel exports\n// (videoGen/index.ts).\n\nimport { VideoGenApi, VideoGenParams, VideoGenResult, VideoGenJobEvent, VideoGenJobStartedEvent } from './VideoGenApi'\nimport { resolveGameSessionToken } from '../http/backendHttpDeps'\nimport type { BackendHttpDeps } from '../http/backendHttpDeps'\n\nexport class HttpVideoGenApi implements VideoGenApi {\n private readonly appId: string\n private readonly deps: BackendHttpDeps\n\n constructor(appId: string, deps: BackendHttpDeps) {\n this.appId = appId\n this.deps = deps\n }\n\n async generate(params: VideoGenParams): Promise<VideoGenResult> {\n const idToken = await this.deps.getIdToken()\n const baseUrl = this.deps.getCloudRunUrl()\n const url = `${baseUrl}/v1/videogen/${this.appId}/sync-generate`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${idToken}`,\n }\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(params),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = `Video generation failed (${response.status})`\n try {\n const errorJson = JSON.parse(errorText)\n errorMessage = errorJson.error || errorJson.message || errorMessage\n } catch {\n if (errorText) errorMessage = errorText\n }\n throw new Error(errorMessage)\n }\n\n return response.json()\n }\n\n async getCompletedJobs(): Promise<VideoGenJobEvent[]> {\n return []\n }\n\n async cancel(jobId: string): Promise<void> {\n const idToken = await this.deps.getIdToken()\n const baseUrl = this.deps.getCloudRunUrl()\n const url = `${baseUrl}/v1/jobs/${this.appId}/${jobId}/cancel`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${idToken}`,\n }\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = `Job cancellation failed (${response.status})`\n try {\n const errorJson = JSON.parse(errorText)\n errorMessage = errorJson.error || errorJson.message || errorMessage\n } catch {\n if (errorText) errorMessage = errorText\n }\n throw new Error(errorMessage)\n }\n }\n\n onJobStarted(_callback: (event: VideoGenJobStartedEvent) => void): { unsubscribe: () => void } {\n return { unsubscribe: () => {} }\n }\n}\n","import {\n SpriteGenApi,\n SpriteGenParams,\n SpriteGenResult,\n AnimateSpriteParams,\n AnimateSpriteResult,\n CharacterAnimateParams,\n CharacterWorkflow,\n SpriteGenCosts,\n SpriteGenJobEvent,\n} from './SpriteGenApi';\nimport { resolveGameSessionToken } from '../http/backendHttpDeps';\nimport type { BackendHttpDeps } from '../http/backendHttpDeps';\n\nexport class HttpSpriteGenApi implements SpriteGenApi {\n private readonly appId: string;\n private readonly deps: BackendHttpDeps;\n\n constructor(appId: string, deps: BackendHttpDeps) {\n this.appId = appId;\n this.deps = deps;\n }\n\n async generate(params: SpriteGenParams): Promise<SpriteGenResult> {\n return this.post<SpriteGenResult>('generate', params);\n }\n\n async animate(params: AnimateSpriteParams): Promise<AnimateSpriteResult> {\n return this.post<AnimateSpriteResult>('animate', params);\n }\n\n async characterAnimate(params: CharacterAnimateParams): Promise<{ jobId: string }> {\n return this.post<{ jobId: string }>('character-animate', params);\n }\n\n async listCharacterWorkflows(): Promise<CharacterWorkflow[]> {\n const data = await this.get<{ workflows: CharacterWorkflow[] }>(\n `/v1/spritegen/${this.appId}/character-workflows`,\n 'List character workflows failed',\n );\n return data.workflows;\n }\n\n async listModels(): Promise<unknown> {\n const data = await this.get<{ models: unknown }>('/v1/spritegen/models', 'List sprite models failed');\n return data.models;\n }\n\n async getCosts(): Promise<SpriteGenCosts> {\n return this.get<SpriteGenCosts>('/v1/spritegen/costs', 'Get sprite costs failed');\n }\n\n async getCompletedJobs(): Promise<SpriteGenJobEvent[]> {\n const data = await this.get<{ jobs: SpriteGenJobEvent[] }>(\n `/v1/jobs/${this.appId}/spritegen/completed`,\n 'Get completed sprite jobs failed',\n );\n return data.jobs;\n }\n\n private async get<T>(path: string, errorFallback: string): Promise<T> {\n const idToken = await this.deps.getIdToken();\n const baseUrl = this.deps.getCloudRunUrl();\n const headers: Record<string, string> = { 'Authorization': `Bearer ${idToken}` };\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(`${baseUrl}${path}`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(await this.extractError(response, errorFallback));\n }\n\n return response.json() as Promise<T>;\n }\n\n private async post<T>(endpoint: string, body: unknown): Promise<T> {\n const idToken = await this.deps.getIdToken();\n const baseUrl = this.deps.getCloudRunUrl();\n const url = `${baseUrl}/v1/spritegen/${this.appId}/${endpoint}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${idToken}`,\n };\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new Error(await this.extractError(response, `Sprite ${endpoint} failed`));\n }\n\n return response.json() as Promise<T>;\n }\n\n private async extractError(response: Response, fallback: string): Promise<string> {\n const errorText = await response.text();\n let errorMessage = `${fallback} (${response.status})`;\n try {\n const errorJson = JSON.parse(errorText);\n errorMessage = errorJson.error || errorJson.message || errorMessage;\n } catch {\n if (errorText) errorMessage = errorText;\n }\n return errorMessage;\n }\n}\n","// Host-facing HTTP implementation of ThreeDGenApi. Firebase-free: auth + base URL\n// come from the injected BackendHttpDeps. Do NOT import from barrel exports\n// (threeDGen/index.ts).\n\nimport {\n ThreeDGenApi,\n ThreeDGenParams,\n ThreeDGenResult,\n RemeshParams,\n RemeshResult,\n RigParams,\n RigResult,\n AnimateParams,\n AnimateResult,\n ThreeDGenJobEvent,\n} from './ThreeDGenApi'\nimport { RundotApiError } from '../errors'\nimport { resolveGameSessionToken } from '../http/backendHttpDeps'\nimport type { BackendHttpDeps } from '../http/backendHttpDeps'\n\nexport class HttpThreeDGenApi implements ThreeDGenApi {\n private readonly appId: string\n private readonly deps: BackendHttpDeps\n\n constructor(appId: string, deps: BackendHttpDeps) {\n this.appId = appId\n this.deps = deps\n }\n\n async generate(params: ThreeDGenParams): Promise<ThreeDGenResult> {\n return this.post<ThreeDGenResult>('sync-generate', params)\n }\n\n async remesh(params: RemeshParams): Promise<RemeshResult> {\n return this.post<RemeshResult>('sync-remesh', params)\n }\n\n async rig(params: RigParams): Promise<RigResult> {\n return this.post<RigResult>('sync-rig', params)\n }\n\n async animate(params: AnimateParams): Promise<AnimateResult> {\n return this.post<AnimateResult>('sync-animate', params)\n }\n\n async getCompletedJobs(): Promise<ThreeDGenJobEvent[]> {\n return []\n }\n\n private async post<T>(endpoint: string, body: unknown): Promise<T> {\n const idToken = await this.deps.getIdToken()\n const baseUrl = this.deps.getCloudRunUrl()\n const url = `${baseUrl}/v1/threedgen/${this.appId}/${endpoint}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${idToken}`,\n }\n\n const gst = await resolveGameSessionToken(this.deps.getGameSessionToken);\n if (gst) headers['x-h5-game-session'] = gst;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = `3D generation failed (${response.status})`\n let errorCode = 'UNKNOWN'\n let detail: string | undefined\n try {\n const errorJson = JSON.parse(errorText) as Record<string, unknown>\n errorMessage = (errorJson.error ?? errorJson.message ?? errorMessage) as string\n if (typeof errorJson.code === 'string') errorCode = errorJson.code\n if (typeof errorJson.detail === 'string') detail = errorJson.detail\n } catch {\n if (errorText) errorMessage = errorText\n }\n throw new RundotApiError(errorCode, errorMessage, response.status, detail)\n }\n\n return response.json()\n }\n}\n","/**\n * Idempotently convert Firestore-serialized timestamps to epoch millis on\n * leaderboard score responses. Leaderboard endpoints serialize Firestore\n * Timestamps as `{ seconds, nanoseconds }` (or `{ _seconds, _nanoseconds }`),\n * but `LeaderboardEntry` declares `submittedAt`/`expiresAt` as epoch millis.\n * Already-millis values pass through unchanged.\n */\nfunction toMillis(value: unknown): unknown {\n if (value && typeof value === 'object') {\n const v = value as Record<string, unknown>\n // Firestore Timestamp instance (defensive — survives only in-process, not\n // over HTTP/JSON, but keeps parity with the RN host's normalizer so this can\n // be the single source of truth when that migrates).\n if (typeof v.toMillis === 'function') {\n try {\n return (v.toMillis as () => number)()\n } catch {\n return value\n }\n }\n const seconds = (v.seconds ?? v._seconds) as number | undefined\n const nanos = (v.nanoseconds ?? v._nanoseconds) as number | undefined\n if (typeof seconds === 'number' && typeof nanos === 'number') {\n return seconds * 1000 + Math.floor(nanos / 1_000_000)\n }\n }\n return value\n}\n\nfunction normalizeEntry(entry: unknown): unknown {\n if (!entry || typeof entry !== 'object') return entry\n const e = entry as Record<string, unknown>\n return { ...e, submittedAt: toMillis(e.submittedAt), expiresAt: toMillis(e.expiresAt) }\n}\n\nexport function normalizeScoresResponse<T>(payload: T): T {\n if (!payload || typeof payload !== 'object') return payload\n const p = payload as Record<string, unknown>\n const result: Record<string, unknown> = { ...p }\n if (Array.isArray(p.entries)) result.entries = p.entries.map(normalizeEntry)\n if (p.context && typeof p.context === 'object') {\n const c = p.context as Record<string, unknown>\n result.context = {\n ...c,\n topEntries: Array.isArray(c.topEntries) ? c.topEntries.map(normalizeEntry) : c.topEntries,\n beforePlayer: Array.isArray(c.beforePlayer) ? c.beforePlayer.map(normalizeEntry) : c.beforePlayer,\n playerEntry: c.playerEntry ? normalizeEntry(c.playerEntry) : c.playerEntry,\n afterPlayer: Array.isArray(c.afterPlayer) ? c.afterPlayer.map(normalizeEntry) : c.afterPlayer,\n }\n }\n return result as T\n}\n","/**\n * HTTP-backed {@link LeaderboardApi} implementation usable by any host.\n *\n * Firebase-free: the caller injects `callRemote` (PlaygroundHost passes\n * `callRemoteFunction`; platform shells pass their own authenticated invoker),\n * so importing this file does NOT pull firebase into a host bundle. Do NOT\n * import from barrel exports (leaderboard/index.ts).\n */\nimport {\n LeaderboardApi,\n ScoreToken,\n SubmitScoreParams,\n SubmitScoreResult,\n GetPagedScoresOptions,\n PagedScoresResponse,\n PlayerRankOptions,\n PlayerRankResult,\n GetPodiumScoresOptions,\n PodiumScoresResponse,\n} from './LeaderboardApi'\nimport type { RemoteFunctionInvoker } from '../http/callRemoteFunction'\nimport { normalizeScoresResponse } from './normalizeScores'\n\n/**\n * HTTP-based implementation of LeaderboardApi.\n */\nexport class HttpLeaderboardApi implements LeaderboardApi {\n private readonly appId: string\n private readonly callRemote: RemoteFunctionInvoker\n\n constructor(\n appId: string,\n options: {\n callRemote: RemoteFunctionInvoker\n },\n ) {\n this.appId = appId\n this.callRemote = options.callRemote\n }\n\n async createScoreToken(mode?: string): Promise<ScoreToken> {\n return this.callRemote<ScoreToken>('apiCreateScoreToken', {\n appId: this.appId,\n mode: mode || 'default',\n })\n }\n\n async submitScore(params: SubmitScoreParams): Promise<SubmitScoreResult> {\n return this.callRemote<SubmitScoreResult>('apiSubmitScore', {\n appId: this.appId,\n token: params.token,\n score: params.score,\n duration: params.duration,\n mode: params.mode || 'default',\n period: params.period,\n telemetry: params.telemetry,\n metadata: params.metadata,\n // Score-sealing hash auto-computed by RpcLeaderboardApi; without it sealed\n // leaderboards reject the score.\n hash: params.hash,\n })\n }\n\n async getPagedScores(options?: GetPagedScoresOptions): Promise<PagedScoresResponse> {\n const res = await this.callRemote<PagedScoresResponse>('apiGetPagedScores', {\n appId: this.appId,\n mode: options?.mode || 'default',\n period: options?.period || 'alltime',\n periodDate: options?.periodDate,\n cursor: options?.cursor,\n limit: options?.limit,\n variant: options?.variant || 'standard',\n topCount: options?.topCount,\n contextAhead: options?.contextAhead,\n contextBehind: options?.contextBehind,\n })\n return normalizeScoresResponse(res)\n }\n\n async getMyRank(options?: PlayerRankOptions): Promise<PlayerRankResult> {\n const res = await this.callRemote<PlayerRankResult>('apiGetMyRank', {\n appId: this.appId,\n mode: options?.mode || 'default',\n period: options?.period || 'alltime',\n periodDate: options?.periodDate,\n })\n return normalizeScoresResponse(res)\n }\n\n async getPodiumScores(options?: GetPodiumScoresOptions): Promise<PodiumScoresResponse> {\n const res = await this.callRemote<PodiumScoresResponse>('apiGetPodiumScores', {\n appId: this.appId,\n mode: options?.mode || 'default',\n period: options?.period || 'alltime',\n periodDate: options?.periodDate,\n topCount: options?.topCount,\n contextAhead: options?.contextAhead,\n contextBehind: options?.contextBehind,\n })\n return normalizeScoresResponse(res)\n }\n}\n"]}
@@ -1068,7 +1068,7 @@ function initializeSimulation(rundotGameApi, host) {
1068
1068
  }
1069
1069
 
1070
1070
  // src/version.ts
1071
- var SDK_VERSION = "5.23.0-beta.7";
1071
+ var SDK_VERSION = "5.23.0-beta.8";
1072
1072
 
1073
1073
  // src/leaderboard/utils.ts
1074
1074
  var HASH_ALGORITHM_WEB_CRYPTO = "SHA-256";
@@ -4114,5 +4114,5 @@ function initializeClips(rundotGameApi, host) {
4114
4114
  }
4115
4115
 
4116
4116
  export { HASH_ALGORITHM_NODE, HASH_ALGORITHM_WEB_CRYPTO, MockAdminImageGenApi, MockAdminSpriteGenApi, MockAdminThreeDGenApi, MockAiApi, MockCaptureConsent, MockClipsApi, MockImageGenApi, MockLeaderboardApi, MockSocialApi, MockSpriteGenApi, RemoteHost, RpcAdminImageGenApi, RpcAdminSpriteGenApi, RpcAdminThreeDGenApi, RpcAdminUgcApi, RpcAiApi, RpcAppApi, RpcCaptureConsent, RpcClient, RpcIapApi, RpcImageGenApi, RpcLeaderboardApi, RpcSimulationApi, RpcSocialApi, RpcSpriteGenApi, SDK_VERSION, SandboxAppApi, buildInitializationContext, computeScoreHash, createHost, initializeAi, initializeApp, initializeAudioGen, initializeClips, initializeFiles, initializeIap, initializeImageGen, initializeLeaderboard, initializeSimulation, initializeSocial, initializeSpriteGen, initializeTextGen, initializeThreeDGen, initializeUgc, initializeVideoGen };
4117
- //# sourceMappingURL=chunk-RXJPLBXQ.js.map
4118
- //# sourceMappingURL=chunk-RXJPLBXQ.js.map
4117
+ //# sourceMappingURL=chunk-ULE3BIYV.js.map
4118
+ //# sourceMappingURL=chunk-ULE3BIYV.js.map