@indiegems/gem-web-sdk 7.0.0 → 7.1.0
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/brand/ticket-hero-128.png +0 -0
- package/brand/ticket-hero-256.png +0 -0
- package/brand/ticket-hero-384.png +0 -0
- package/brand/ticket-hero-512.png +0 -0
- package/brand/ticket-hero-768.png +0 -0
- package/brand/ticket-icon-20-1.5x.png +0 -0
- package/brand/ticket-icon-20-1x.png +0 -0
- package/brand/ticket-icon-20-2x.png +0 -0
- package/brand/ticket-icon-20-3x.png +0 -0
- package/brand/ticket-icon-32-1.5x.png +0 -0
- package/brand/ticket-icon-32-1x.png +0 -0
- package/brand/ticket-icon-32-2x.png +0 -0
- package/brand/ticket-icon-32-3x.png +0 -0
- package/dist/game.d.ts +26 -1
- package/dist/gem-web-sdk.bridge.js +1 -1
- package/dist/gem-web-sdk.esm.js +2 -2
- package/dist/gem-web-sdk.game.js +2 -2
- package/dist/gem-web-sdk.min.js +2 -2
- package/dist/gem-web-sdk.sdk.js +2 -2
- package/dist/gem-web-sdk.server-api.js +1 -1
- package/dist/gem-web-sdk.server.js +2 -2
- package/dist/index.d.ts +27 -0
- package/dist/sdk.d.ts +141 -30
- package/dist/server-api.d.ts +93 -23
- package/dist/server.d.ts +109 -23
- package/package.json +1 -1
- package/schema/bridge.v1.json +87 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function i(r){let e=String(r);if(!/^[A-Za-z0-9_.-]{1,128}$/.test(e)||e==="."||e==="..")throw new TypeError(`${JSON.stringify(e)} is not a usable path segment \u2014 it is interpolated into a URL`);return encodeURIComponent(e)}async function u(r,e,t){let n=`/v1/inventory/transfers/${i(e)}/accept`;return r.client.post(n,void 0,t?.signal)}async function g(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}/add`;return r.client.post(a,s,o?.signal)}async function p(r,e,t,n){let s=`/v1/voice/sessions/${i(e)}/admin`;return r.client.post(s,t,n?.signal)}async function c(r,e,t){let n=`/v1/inventory/transfers/${i(e)}/cancel`;return r.client.post(n,void 0,t?.signal)}async function m(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}/claim`;return r.client.post(a,s,o?.signal)}async function d(r,e,t){let n=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}`;return r.client.delete(n,t?.signal)}async function _(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders/batch`;return r.client.post(o,n,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function y(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders`;return r.client.post(o,n,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function b(r,e,t){return r.client.post("/v1/voice/sessions",e,t?.signal)}async function f(r,e,t,n,s){let o=`/v1/settings/${i(e)}/${i(t)}/${i(n)}`;return r.client.delete(o,s?.signal)}async function R(r,e,t,n,s){let o=`/v1/saves/${i(e)}/${i(t)}/${i(n)}`;return r.client.delete(o,s?.signal)}async function v(r,e,t){let n=`/v1/voice/sessions/${i(e)}`;return r.client.delete(n,t?.signal)}async function S(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/recipes/execute`;return r.client.post(o,n,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function h(r,e,t,n,s,o){let a=`/v1/saves/${i(e)}/${i(t)}/${i(n)}/finalize`;return r.client.post(a,s,o?.signal)}async function x(r,e,t){let n=`/v1/inventory/loot-tables/${i(e)}/drop-rates`;return r.client.get(n,t?.signal)}async function P(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/currencies/${i(n)}`;return r.client.get(o,s?.signal)}async function A(r,e,t,n,s){let o=`/v1/settings/${i(e)}/${i(t)}/${i(n)}`;return r.client.getWithEtag(o,{...s?.signal===void 0?{}:{signal:s.signal},...s?.ifNoneMatch===void 0?{}:{ifNoneMatch:s.ifNoneMatch}})}async function w(r,e,t,n){let s=new URLSearchParams;n?.include_buckets!==void 0&&s.set("include_buckets",String(n?.include_buckets)),n?.include_custom_data!==void 0&&s.set("include_custom_data",String(n?.include_custom_data)),n?.currency_limit!==void 0&&s.set("currency_limit",String(n?.currency_limit)),n?.currency_cursor!==void 0&&s.set("currency_cursor",String(n?.currency_cursor)),n?.item_limit!==void 0&&s.set("item_limit",String(n?.item_limit)),n?.item_cursor!==void 0&&s.set("item_cursor",String(n?.item_cursor)),n?.progression_limit!==void 0&&s.set("progression_limit",String(n?.progression_limit)),n?.progression_cursor!==void 0&&s.set("progression_cursor",String(n?.progression_cursor));let o=s.toString(),a=`/v1/inventory/${i(e)}/${i(t)}`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function $(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/items/${i(n)}`;return r.client.get(o,s?.signal)}async function k(r,e,t,n,s){let o=new URLSearchParams;s?.bucket_1!==void 0&&o.set("bucket_1",String(s?.bucket_1)),s?.bucket_2!==void 0&&o.set("bucket_2",String(s?.bucket_2)),s?.limit!==void 0&&o.set("limit",String(s?.limit));let a=o.toString(),l=`/v1/leaderboards/${i(e)}/${i(t)}/${i(n)}`+(a?`?${a}`:"");return r.client.get(l,s?.signal)}async function G(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders/${i(n)}`;return r.client.get(o,s?.signal)}async function O(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}`;return r.client.get(o,s?.signal)}async function I(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/catalogs/${i(n)}/recipes/${i(s)}/availability`;return r.client.get(a,o?.signal)}async function q(r,e,t,n){let s=new URLSearchParams;n?.limit!==void 0&&s.set("limit",String(n?.limit));let o=s.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/recipe-usage`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function E(r,e,t,n,s){let o=`/v1/saves/${i(e)}/${i(t)}/${i(n)}`;return r.client.getWithEtag(o,{...s?.signal===void 0?{}:{signal:s.signal},...s?.ifNoneMatch===void 0?{}:{ifNoneMatch:s.ifNoneMatch}})}async function C(r,e,t){let n=`/v1/events/${i(e)}`;return r.client.get(n,t?.signal)}async function T(r,e,t){let n=`/v2/games/${i(r.gameId())}/game-rooms/${i(e)}`;return r.client.getWithEtag(n,{...t?.signal===void 0?{}:{signal:t.signal},...t?.ifNoneMatch===void 0?{}:{ifNoneMatch:t.ifNoneMatch}})}async function L(r,e,t){let n=new URLSearchParams;t?.bucket_1!==void 0&&n.set("bucket_1",String(t?.bucket_1)),t?.bucket_2!==void 0&&n.set("bucket_2",String(t?.bucket_2));let s=n.toString(),o=`/v1/leaderboards/${i(e)}`+(s?`?${s}`:"");return r.client.get(o,t?.signal)}async function U(r,e){let t=new URLSearchParams;e?.config_version!==void 0&&t.set("config_version",String(e?.config_version));let n=t.toString(),s="/v1/inventory/platform-funded-game-inventory-purchase-catalog"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function B(r,e,t){let n=`/v1/game-room-templates/${i(e)}`;return r.client.get(n,t?.signal)}async function M(r,e,t){let n=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}/room-args`;return r.client.get(n,t?.signal)}async function D(r,e,t){let n=`/v1/inventory/transfers/${i(e)}`;return r.client.get(n,t?.signal)}async function V(r,e,t){let n=`/v1/games/${i(r.gameId())}/analytics/events`;return r.client.post(n,e,t?.signal,{replaySafe:true})}async function N(r,e,t){return r.client.post("/v1/inventory/transfers",e,t?.signal)}async function j(r,e,t,n){let s=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}/kick/${i(t)}`;return r.client.post(s,void 0,n?.signal)}async function z(r,e,t,n){let s=`/v1/settings/${i(e)}/${i(t)}`;return r.client.get(s,n?.signal)}async function W(r,e,t,n){let s=new URLSearchParams;n?.limit!==void 0&&s.set("limit",String(n?.limit)),n?.cursor!==void 0&&s.set("cursor",String(n?.cursor));let o=s.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/orders`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function F(r,e,t,n){let s=`/v1/inventory/${i(e)}/${i(t)}/progressions`;return r.client.get(s,n?.signal)}async function H(r,e,t,n){let s=new URLSearchParams;n?.limit!==void 0&&s.set("limit",String(n?.limit)),n?.cursor!==void 0&&s.set("cursor",String(n?.cursor));let o=s.toString(),a=`/v1/saves/${i(e)}/${i(t)}`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function J(r,e){let t=new URLSearchParams;e?.include_inactive!==void 0&&t.set("include_inactive",String(e?.include_inactive)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.offset!==void 0&&t.set("offset",String(e?.offset));let n=t.toString(),s="/v1/events"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function Z(r,e){let t=new URLSearchParams;e?.status!==void 0&&t.set("status",String(e?.status)),e?.game_channel!==void 0&&t.set("game_channel",String(e?.game_channel)),e?.game_room_type!==void 0&&t.set("game_room_type",String(e?.game_room_type)),e?.template_id!==void 0&&t.set("template_id",String(e?.template_id)),e?.template_slug!==void 0&&t.set("template_slug",String(e?.template_slug)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor));let n=t.toString(),s=`/v1/games/${i(r.gameId())}/game-rooms`+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function K(r,e){return r.client.get("/v1/game-room-templates",e?.signal)}async function Q(r,e){let t=new URLSearchParams;e.entity_type!==void 0&&t.set("entity_type",String(e.entity_type)),e.entity_id!==void 0&&t.set("entity_id",String(e.entity_id)),e?.direction!==void 0&&t.set("direction",String(e?.direction)),e?.status!==void 0&&t.set("status",String(e?.status)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor)),e?.limit!==void 0&&t.set("limit",String(e?.limit));let n=t.toString(),s="/v1/inventory/transfers"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function X(r,e,t,n,s,o){let a=`/v1/settings/${i(e)}/${i(t)}/${i(n)}`;return r.client.put(a,s,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function Y(r,e,t,n){let s=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}/room-args`;return r.client.put(s,t,n?.signal)}async function ee(r,e,t){let n=`/v1/inventory/transfers/${i(e)}/reject`;return r.client.post(n,void 0,t?.signal)}async function ne(r,e,t,n,s,o){let a=`/v1/saves/${i(e)}/${i(t)}/${i(n)}/upload-url`;return r.client.post(a,s,o?.signal,{replaySafe:true})}async function te(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}/reset`;return r.client.post(a,s,o?.signal)}async function re(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders/simulate`;return r.client.post(o,n,s?.signal)}async function se(r,e,t,n){let s=`/v2/games/${i(r.gameId())}/game-rooms/${i(e)}/transfer/${i(t)}`;return r.client.post(s,void 0,n?.signal)}async function ie(r,e,t,n){let s=`/v2/games/${i(r.gameId())}/game-rooms/${i(e)}`;return r.client.patch(s,t,n?.signal,{...n?.ifMatch===void 0?{}:{ifMatch:n.ifMatch}})}export{u as acceptTransfer,g as addEntityProgression,p as adminAction,c as cancelInventoryTransfer,m as claimEntityProgressionRewards,d as closeGameRoom,_ as createEntityBatchOrder,y as createEntityOrder,b as createSession,f as deleteEntityGameSetting,R as deleteEntitySave,v as deleteSession,S as executeEntityRecipe,h as finalizeSaveUpload,x as getDropRates,P as getEntityCurrency,A as getEntityGameSetting,w as getEntityInventory,$ as getEntityInventoryItem,k as getEntityLeaderboard,G as getEntityOrder,O as getEntityProgression,I as getEntityRecipeAvailability,q as getEntityRecipeUsage,E as getEntitySave,C as getEvent,T as getGameRoomV2,L as getLeaderboard,U as getPurchaseCatalog,B as getResolvedTemplate,M as getRoomArgs,D as getTransferDetails,V as ingestAnalyticsEvents,N as initiateInventoryTransfer,j as kickPlayer,z as listEntityGameSettings,W as listEntityOrders,F as listEntityProgressions,H as listEntitySaves,J as listEvents,Z as listGameRooms,K as listResolvedTemplates,Q as listTransfers,X as putEntityGameSetting,Y as putRoomArgs,ee as rejectTransfer,ne as requestSaveUploadUrl,te as resetEntityProgression,re as simulateEntityOrder,se as transferHostV2,ie as updateGameRoomV2};//# sourceMappingURL=gem-web-sdk.server-api.js.map
|
|
1
|
+
function i(r){let e=String(r);if(!/^[A-Za-z0-9_.-]{1,128}$/.test(e)||e==="."||e==="..")throw new TypeError(`${JSON.stringify(e)} is not a usable path segment \u2014 it is interpolated into a URL`);return encodeURIComponent(e)}async function u(r,e,t){let n=`/v1/inventory/transfers/${i(e)}/accept`;return r.client.post(n,void 0,t?.signal)}async function g(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}/add`;return r.client.post(a,s,o?.signal)}async function p(r,e,t,n){let s=`/v1/voice/sessions/${i(e)}/admin`;return r.client.post(s,t,n?.signal)}async function c(r,e,t){let n=`/v1/inventory/transfers/${i(e)}/cancel`;return r.client.post(n,void 0,t?.signal)}async function m(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}/claim`;return r.client.post(a,s,o?.signal)}async function d(r,e,t){let n=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}`;return r.client.delete(n,t?.signal)}async function _(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders/batch`;return r.client.post(o,n,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function y(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders`;return r.client.post(o,n,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function b(r,e,t){return r.client.post("/v1/voice/sessions",e,t?.signal)}async function R(r,e,t,n,s){let o=`/v1/settings/${i(e)}/${i(t)}/${i(n)}`;return r.client.delete(o,s?.signal)}async function f(r,e,t,n,s){let o=`/v1/saves/${i(e)}/${i(t)}/${i(n)}`;return r.client.delete(o,s?.signal)}async function v(r,e,t){let n=`/v1/voice/sessions/${i(e)}`;return r.client.delete(n,t?.signal)}async function h(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/recipes/execute`;return r.client.post(o,n,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function S(r,e,t,n,s,o){let a=`/v1/saves/${i(e)}/${i(t)}/${i(n)}/finalize`;return r.client.post(a,s,o?.signal)}async function x(r,e,t){let n=`/v1/inventory/loot-tables/${i(e)}/drop-rates`;return r.client.get(n,t?.signal)}async function P(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/currencies/${i(n)}`;return r.client.get(o,s?.signal)}async function A(r,e,t,n,s){let o=`/v1/settings/${i(e)}/${i(t)}/${i(n)}`;return r.client.getWithEtag(o,{...s?.signal===void 0?{}:{signal:s.signal},...s?.ifNoneMatch===void 0?{}:{ifNoneMatch:s.ifNoneMatch}})}async function w(r,e,t,n){let s=new URLSearchParams;n?.include_buckets!==void 0&&s.set("include_buckets",String(n?.include_buckets)),n?.include_custom_data!==void 0&&s.set("include_custom_data",String(n?.include_custom_data)),n?.currency_limit!==void 0&&s.set("currency_limit",String(n?.currency_limit)),n?.currency_cursor!==void 0&&s.set("currency_cursor",String(n?.currency_cursor)),n?.item_limit!==void 0&&s.set("item_limit",String(n?.item_limit)),n?.item_cursor!==void 0&&s.set("item_cursor",String(n?.item_cursor)),n?.progression_limit!==void 0&&s.set("progression_limit",String(n?.progression_limit)),n?.progression_cursor!==void 0&&s.set("progression_cursor",String(n?.progression_cursor));let o=s.toString(),a=`/v1/inventory/${i(e)}/${i(t)}`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function k(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/items/${i(n)}`;return r.client.get(o,s?.signal)}async function $(r,e,t,n,s){let o=new URLSearchParams;s?.bucket_1!==void 0&&o.set("bucket_1",String(s?.bucket_1)),s?.bucket_2!==void 0&&o.set("bucket_2",String(s?.bucket_2)),s?.limit!==void 0&&o.set("limit",String(s?.limit));let a=o.toString(),l=`/v1/leaderboards/${i(e)}/${i(t)}/${i(n)}`+(a?`?${a}`:"");return r.client.get(l,s?.signal)}async function G(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders/${i(n)}`;return r.client.get(o,s?.signal)}async function O(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}`;return r.client.get(o,s?.signal)}async function I(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/catalogs/${i(n)}/recipes/${i(s)}/availability`;return r.client.get(a,o?.signal)}async function q(r,e,t,n){let s=new URLSearchParams;n?.limit!==void 0&&s.set("limit",String(n?.limit));let o=s.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/recipe-usage`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function C(r,e,t,n,s){let o=`/v1/saves/${i(e)}/${i(t)}/${i(n)}`;return r.client.getWithEtag(o,{...s?.signal===void 0?{}:{signal:s.signal},...s?.ifNoneMatch===void 0?{}:{ifNoneMatch:s.ifNoneMatch}})}async function E(r,e,t){let n=`/v1/events/${i(e)}`;return r.client.get(n,t?.signal)}async function T(r,e,t){let n=`/v2/games/${i(r.gameId())}/game-rooms/${i(e)}`;return r.client.getWithEtag(n,{...t?.signal===void 0?{}:{signal:t.signal},...t?.ifNoneMatch===void 0?{}:{ifNoneMatch:t.ifNoneMatch}})}async function L(r,e,t){let n=new URLSearchParams;t?.bucket_1!==void 0&&n.set("bucket_1",String(t?.bucket_1)),t?.bucket_2!==void 0&&n.set("bucket_2",String(t?.bucket_2));let s=n.toString(),o=`/v1/leaderboards/${i(e)}`+(s?`?${s}`:"");return r.client.get(o,t?.signal)}async function B(r,e){let t=new URLSearchParams;e?.config_version!==void 0&&t.set("config_version",String(e?.config_version));let n=t.toString(),s="/v1/inventory/platform-funded-game-inventory-purchase-catalog"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function U(r,e,t){let n=`/v1/game-room-templates/${i(e)}`;return r.client.get(n,t?.signal)}async function M(r,e,t){let n=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}/room-args`;return r.client.get(n,t?.signal)}async function D(r,e,t){let n=`/v1/inventory/transfers/${i(e)}`;return r.client.get(n,t?.signal)}async function V(r,e,t){let n=`/v1/games/${i(r.gameId())}/analytics/events`;return r.client.post(n,e,t?.signal,{replaySafe:true})}async function N(r,e,t){return r.client.post("/v1/inventory/transfers",e,t?.signal)}async function j(r,e,t){return r.client.postBytes("/v1/functions/invoke",e,t?.signal)}async function F(r,e,t,n){let s=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}/kick/${i(t)}`;return r.client.post(s,void 0,n?.signal)}async function z(r,e){let t=new URLSearchParams;e?.periods_back!==void 0&&t.set("periods_back",String(e?.periods_back));let n=t.toString(),s="/v1/challenges"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function W(r,e,t,n){let s=`/v1/settings/${i(e)}/${i(t)}`;return r.client.get(s,n?.signal)}async function K(r,e,t,n){let s=new URLSearchParams;n?.limit!==void 0&&s.set("limit",String(n?.limit)),n?.cursor!==void 0&&s.set("cursor",String(n?.cursor));let o=s.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/orders`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function H(r,e,t,n){let s=`/v1/inventory/${i(e)}/${i(t)}/progressions`;return r.client.get(s,n?.signal)}async function J(r,e,t,n){let s=new URLSearchParams;n?.limit!==void 0&&s.set("limit",String(n?.limit)),n?.cursor!==void 0&&s.set("cursor",String(n?.cursor));let o=s.toString(),a=`/v1/saves/${i(e)}/${i(t)}`+(o?`?${o}`:"");return r.client.get(a,n?.signal)}async function Z(r,e){let t=new URLSearchParams;e?.include_inactive!==void 0&&t.set("include_inactive",String(e?.include_inactive)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.offset!==void 0&&t.set("offset",String(e?.offset));let n=t.toString(),s="/v1/events"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function Q(r,e){let t=new URLSearchParams;e?.status!==void 0&&t.set("status",String(e?.status)),e?.game_channel!==void 0&&t.set("game_channel",String(e?.game_channel)),e?.game_room_type!==void 0&&t.set("game_room_type",String(e?.game_room_type)),e?.template_id!==void 0&&t.set("template_id",String(e?.template_id)),e?.template_slug!==void 0&&t.set("template_slug",String(e?.template_slug)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor));let n=t.toString(),s=`/v1/games/${i(r.gameId())}/game-rooms`+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function X(r,e){return r.client.get("/v1/game-room-templates",e?.signal)}async function Y(r,e){let t=new URLSearchParams;e.entity_type!==void 0&&t.set("entity_type",String(e.entity_type)),e.entity_id!==void 0&&t.set("entity_id",String(e.entity_id)),e?.direction!==void 0&&t.set("direction",String(e?.direction)),e?.status!==void 0&&t.set("status",String(e?.status)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor)),e?.limit!==void 0&&t.set("limit",String(e?.limit));let n=t.toString(),s="/v1/inventory/transfers"+(n?`?${n}`:"");return r.client.get(s,e?.signal)}async function ee(r,e,t,n,s,o){let a=`/v1/settings/${i(e)}/${i(t)}/${i(n)}`;return r.client.put(a,s,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function ne(r,e,t,n){let s=`/v1/games/${i(r.gameId())}/game-rooms/${i(e)}/room-args`;return r.client.put(s,t,n?.signal)}async function te(r,e,t){let n=`/v1/inventory/transfers/${i(e)}/reject`;return r.client.post(n,void 0,t?.signal)}async function re(r,e,t,n,s,o){let a=`/v1/saves/${i(e)}/${i(t)}/${i(n)}/upload-url`;return r.client.post(a,s,o?.signal,{replaySafe:true})}async function se(r,e,t,n,s,o){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(n)}/reset`;return r.client.post(a,s,o?.signal)}async function ie(r,e,t,n,s){let o=`/v1/inventory/${i(e)}/${i(t)}/orders/simulate`;return r.client.post(o,n,s?.signal)}async function oe(r,e,t,n){let s=`/v2/games/${i(r.gameId())}/game-rooms/${i(e)}/transfer/${i(t)}`;return r.client.post(s,void 0,n?.signal)}async function ae(r,e,t,n){let s=`/v2/games/${i(r.gameId())}/game-rooms/${i(e)}`;return r.client.patch(s,t,n?.signal,{...n?.ifMatch===void 0?{}:{ifMatch:n.ifMatch}})}export{u as acceptTransfer,g as addEntityProgression,p as adminAction,c as cancelInventoryTransfer,m as claimEntityProgressionRewards,d as closeGameRoom,_ as createEntityBatchOrder,y as createEntityOrder,b as createSession,R as deleteEntityGameSetting,f as deleteEntitySave,v as deleteSession,h as executeEntityRecipe,S as finalizeSaveUpload,x as getDropRates,P as getEntityCurrency,A as getEntityGameSetting,w as getEntityInventory,k as getEntityInventoryItem,$ as getEntityLeaderboard,G as getEntityOrder,O as getEntityProgression,I as getEntityRecipeAvailability,q as getEntityRecipeUsage,C as getEntitySave,E as getEvent,T as getGameRoomV2,L as getLeaderboard,B as getPurchaseCatalog,U as getResolvedTemplate,M as getRoomArgs,D as getTransferDetails,V as ingestAnalyticsEvents,N as initiateInventoryTransfer,j as invokeFunction,F as kickPlayer,z as listChallenges,W as listEntityGameSettings,K as listEntityOrders,H as listEntityProgressions,J as listEntitySaves,Z as listEvents,Q as listGameRooms,X as listResolvedTemplates,Y as listTransfers,ee as putEntityGameSetting,ne as putRoomArgs,te as rejectTransfer,re as requestSaveUploadUrl,se as resetEntityProgression,ie as simulateEntityOrder,oe as transferHostV2,ae as updateGameRoomV2};//# sourceMappingURL=gem-web-sdk.server-api.js.map
|
|
2
2
|
//# sourceMappingURL=gem-web-sdk.server-api.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var ye=Object.defineProperty;var fe=(n,e)=>{for(var t in e)ye(n,t,{get:e[t],enumerable:true});};globalThis.__gemWebSdkVersion="[gem-web-sdk:sdkVersion:7.0.0]";function he(n,e){return e!==void 0?!e:n==="chain_exhausted"}var $=class{constructor(e){this.options=e;}options;grant=null;state="pending";failure=null;generation=0;inFlight=null;rejected=false;get currentState(){return this.state}get lastFailure(){return this.failure}async get(){if(this.state==="lost")throw new _(this.failure??"unavailable","the session cannot be renewed");let e=this.seconds();if(this.grant&&e<this.grant.expiresAt-this.renewBefore())return this.grant.token;if(this.grant&&e>=this.grant.chainEndsAt)throw this.enter("lost","chain_exhausted"),new _("chain_exhausted","the token chain reached its ceiling");return this.refresh(this.nextReason())}nextReason(){return this.rejected?"rejected":this.grant?"expiring":"initial"}invalidate(e){e!==void 0&&this.grant!==null&&this.grant.token!==e||this.rejected&&this.grant===null||(this.grant=null,this.generation+=1,this.inFlight=null,this.rejected=true,this.state!=="lost"&&this.enter("pending"));}accept(e){this.state!=="lost"&&(this.grant=e,this.rejected=false,this.enter("ready"));}close(e="unavailable"){this.grant=null,this.generation+=1,this.inFlight=null,this.enter("lost",e);}refresh(e){if(this.inFlight)return this.inFlight;let t=this.generation;this.enter("pending");let r=this.options.request(e).then(o=>{if(t!==this.generation)throw new _("internal","token arrived for a superseded generation");return this.grant=o,this.rejected=false,this.enter("ready"),o.token}).catch(o=>{let s=_e(o),a=o?.retryable;throw t===this.generation&&this.enter(he(s,typeof a=="boolean"?a:void 0)?"lost":"degraded",s),o instanceof _?o:new _(s,String(o))}).finally(()=>{this.inFlight===r&&(this.inFlight=null);});return this.inFlight=r,r}enter(e,t){this.failure=t??(e==="ready"?null:this.failure),this.state!==e&&(this.state=e,this.options.onStateChange?.(e,t));}renewBefore(){return this.options.renewBeforeSeconds??60}seconds(){return Math.floor(this.options.clock.now()/1e3)}},_=class n extends Error{constructor(t,r){super(`auth ${t}: ${r}`);this.reason=t;this.name="AuthError";}reason;static isAuthError(t){if(t instanceof n)return true;let r=t;return r?.name==="AuthError"&&typeof r.reason=="string"}};function _e(n){if(n instanceof _)return n.reason;let e=n?.reason;return typeof e=="string"&&["chain_exhausted","unavailable","timeout","internal"].includes(e)?e:"internal"}var p=class n extends Error{retryable=false;constructor(e){super(e),this.name="TransportRefusal";}static isRefusal(e){if(e instanceof n)return true;let t=e;return t?.name==="TransportRefusal"&&t.retryable===false}},L=["if-match","if-none-match"],V=4096;function ve(n){if(!n)return;let e={};for(let[t,r]of Object.entries(n)){let o=t.toLowerCase();if(!L.includes(o)||r===void 0)continue;let s=typeof r=="string"?be(r):r;if(typeof s!="string"||s.length>V||!Re(s))throw new p(`the ${o} header value cannot be sent \u2014 it is not a string, is longer than ${V} characters, or contains a character outside the range an HTTP header value may carry. This is a malformed request, not a server failure; the value is withheld here rather than written to logs.`);s!==""&&(e[o]=s);}return Object.freeze(e)}function be(n){let e=o=>o===32||o===9||o===10||o===13,t=0,r=n.length;for(;t<r&&e(n.charCodeAt(t));)t++;for(;r>t&&e(n.charCodeAt(r-1));)r--;return n.slice(t,r)}function Re(n){for(let e=0;e<n.length;e++){let t=n.charCodeAt(e);if(t!==9&&(t<32||t===127||t>255))return false}return true}function xe(n){let{bytes:e}=n;if(e!==void 0){if(Object.prototype.toString.call(e)!=="[object Uint8Array]")throw new p("the raw body is not a Uint8Array, so it cannot be sent as bytes. This is a malformed request, not a server failure.");if(n.body!==void 0)throw new p("the request carries both a JSON body and a raw body, and only one can be sent. This is a malformed request, not a server failure.");return new Uint8Array(e)}}function z(n,e){let t=e.replayUnauthorizedOnce??true;return {async request(r){let o={...r},s=ve(o.headers),a=xe(o),l=Object.freeze({...o,headers:s,...a===void 0?{}:{bytes:a}}),d=await e.tokenSource.get(),c=await n(l,d);if(c.status!==401||!t)return c;e.tokenSource.invalidate(d);let m=await e.tokenSource.get(),v=await n(l,m);if(v.status===401)throw e.tokenSource.close("unavailable"),new _("unavailable","the server refused a freshly minted token");return v}}}function W(n){let e=typeof n=="string"?new TextEncoder().encode(n):n;return btoa(Se(e))}function Se(n){let t="";for(let r=0;r<n.length;r+=32768)t+=String.fromCharCode(...n.subarray(r,r+32768));return t}var g=class extends Error{constructor(t,r,o,s,a){super(`${t} (${r}): ${o}`);this.reason=t;this.status=r;this.detail=o;this.retryAfterSeconds=s;this.code=a;this.name="GemApiError";}reason;status;detail;retryAfterSeconds;code;get retryable(){return this.reason==="unavailable"||this.reason==="rate_limited"}},K=new WeakMap;function Y(n){return K.get(n)??{}}var ke=new Set([408,429,500,502,503,504]),we=6e4;function Ae(n){if(n===void 0)return 2;if(!Number.isInteger(n)||n<0||n>10)throw new p(`maxRetries must be a whole number between 0 and 10; received ${JSON.stringify(n)}. This is a configuration fault, not a server failure.`);return n}var T=class{constructor(e){this.options=e;}options;async get(e,t){return this.send({method:"GET",path:e,signal:t},true)}async getWithEtag(e,t={}){let r=await this.sendRaw({method:"GET",path:e,...t.signal===void 0?{}:{signal:t.signal},...t.ifNoneMatch===void 0?{}:{headers:{"if-none-match":t.ifNoneMatch}}},true),o=r.etag===void 0?{}:{etag:r.etag};return r.status===304?{modified:false,...o}:{modified:true,body:r.body,...o}}async put(e,t,r,o={}){return this.send({method:"PUT",path:e,body:t,signal:r,...E(o)},o.replaySafe===true)}async post(e,t,r,o={}){return this.send({method:"POST",path:e,body:t,signal:r,...E(o)},o.replaySafe===true)}async postBytes(e,t,r,o={}){let s=await this.sendRaw({method:"POST",path:e,bytes:t,responseType:"bytes",signal:r,...E(o)},o.replaySafe===true);return {bytes:Te(s.body),...s.invocationId===void 0?{}:{invocationId:s.invocationId}}}async patch(e,t,r,o={}){return this.send({method:"PATCH",path:e,body:t,signal:r,...E(o)},o.replaySafe===true)}async delete(e,t,r={}){return this.send({method:"DELETE",path:e,signal:t,...E(r)},r.replaySafe===true)}async send(e,t){return (await this.sendRaw(e,t)).body}async sendRaw(e,t){let r=t?Ae(this.options.maxRetries)+1:1,o=null;if(e.signal?.aborted)throw J(e.signal);for(let s=0;s<r;s++){if(s>0&&await this.backoff(s,o,e.signal),e.signal?.aborted)throw J(e.signal);let a;try{a=await this.options.transport.request(e);}catch(d){if(_.isAuthError(d)||p.isRefusal(d)||e.signal?.aborted||Oe(d))throw d;o=new g("unavailable",0,String(d));continue}if(a.status>=200&&a.status<300||a.status===304)return a;let l=Ge(a);if(!ke.has(a.status))throw l;o=l;}throw o??new g("unavailable",0,"no attempt was made")}backoff(e,t,r){if(r?.aborted)return Promise.resolve();let o=t?.retryAfterSeconds,s=o!==void 0?o*1e3:2**(e-1)*250,a=2**(e-1)*250,l=Math.min(Math.max(s,a),we);return new Promise(d=>{let c=this.options.clock,m=false,v=false,R,y=()=>{m||(m=true,v&&c.clearTimeout(R),r?.removeEventListener("abort",y),d());};r?.addEventListener("abort",y,{once:true}),R=c.setTimeout(y,l),v=true,m&&c.clearTimeout(R);})}};function Te(n){if(n instanceof Uint8Array)return n;if(n==null)return new Uint8Array(0);let e=typeof n=="string"?n:JSON.stringify(n);return new TextEncoder().encode(e)}function E(n){return {...n.keepalive===void 0?{}:{keepalive:n.keepalive},...n.ifMatch===void 0?{}:{headers:{"if-match":n.ifMatch}}}}function J(n){return n.reason!==void 0?n.reason:new DOMException("The operation was aborted.","AbortError")}function Oe(n){let e=n?.name;return e==="AbortError"||e==="TimeoutError"}function Ge(n){let e=Pe(n),t=Ie(n.body),r={...t===void 0?{}:{details:t},...n.invocationId===void 0?{}:{invocationId:n.invocationId}};return Object.keys(r).length>0&&K.set(e,r),e}function Pe(n){let{status:e,body:t}=n,r=Ee(t),o=n.retryAfterSeconds??qe(t),s=Ce(t);switch(e){case 304:return new g("not_modified",e,r);case 400:case 422:return new g("invalid",e,r,void 0,s);case 403:return new g("forbidden",e,r,void 0,s);case 404:return new g("not_found",e,r,void 0,s);case 402:return new g("insufficient_funds",e,r,void 0,s);case 409:return new g("conflict",e,r,void 0,s);case 412:return new g("precondition_failed",e,r,void 0,s);case 413:return new g("too_large",e,r,void 0,s);case 429:return new g("rate_limited",e,r,o,s);default:return new g("unavailable",e,r,o,s)}}function Ee(n){if(typeof n=="string")return n;let e=n?.message;if(typeof e=="string")return e;let t=n?.error;if(typeof t=="string")return t;let r=t?.message;return typeof r=="string"?r:"no detail"}function Ie(n){let t=n?.error?.details;return t===null?void 0:t}function Ce(n){let t=n?.error?.code;return typeof t=="string"&&t.length>0?t:void 0}function qe(n){let e=n?.retryAfterSeconds;return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function $e(n){let e=n.lastIndexOf("@");return (e===-1?n:`***@${n.slice(e+1)}`).slice(0,200)}var Le=new Set(L);function je(n){if(!n)return {};let e={};for(let[t,r]of Object.entries(n))Le.has(t.toLowerCase())&&(e[t.toLowerCase()]=r);return e}function X(n){let e=n.fetch??globalThis.fetch.bind(globalThis);return z(async(t,r)=>{let o;try{o=new URL(n.baseUrl.replace(/\/+$/,""));}catch{throw new p("the configured baseUrl is not a valid URL. Its value is withheld here rather than written to logs. This is a configuration fault, not a server failure.")}let s;try{s=new URL(o.href.replace(/\/+$/,"")+t.path);}catch{throw new p(`${JSON.stringify(typeof t.path=="string"?$e(t.path):"(a non-string path)")} does not form a valid URL against ${o.protocol}//${o.host}. This is a malformed request, not a server failure.`)}if(s.protocol!==o.protocol||s.host!==o.host)throw new p(`${JSON.stringify(s.pathname)} resolves to ${s.protocol}//${s.host}, not ${o.protocol}//${o.host}. A request path may not change the request's origin \u2014 it carries the play token.`);if(s.username!==""||s.password!==""){let y=o.username!==""||o.password!=="",h=s.username!==o.username||s.password!==o.password,f=y?h?"baseUrl (and possibly the request path)":"baseUrl":"request path";throw new p(`the ${f} puts credentials in the URL, which cannot be fetched (${t.method} ${s.pathname}). The value is withheld here rather than written to logs. This is a malformed request, not a server failure.`)}for(let[y,h]of Object.entries(n.defaultQuery??{}))s.searchParams.has(y)||s.searchParams.set(y,h);let a=t.bytes,l=t.bytes===void 0?void 0:"application/octet-stream";try{t.body!==void 0&&(a=JSON.stringify(t.body),l="application/json");}catch(y){throw new p(`the body of ${t.method} ${JSON.stringify(s.pathname)} could not be serialised to JSON: ${String(y)}. This is a bug in the request, not a server failure \u2014 retrying sends the same unserialisable value.`)}let d=await e(s.toString(),{method:t.method,headers:{authorization:`Bearer ${r}`,...l===void 0?{}:{"content-type":l},...je(t.headers)},body:a,signal:t.signal,...t.keepalive===void 0?{}:{keepalive:t.keepalive},credentials:"omit",mode:"cors",redirect:"error",cache:"no-store",referrerPolicy:"no-referrer"}),c=null;if(t.responseType==="bytes"&&d.status>=200&&d.status<300)c=new Uint8Array(await d.arrayBuffer());else {let y=await d.text();if(y.length>0)try{c=JSON.parse(y);}catch{c=y;}}let m=d.headers.get("etag"),v=Me(d.headers.get("retry-after")),R=d.headers.get("x-gem-invocation-id");return {status:d.status,body:c,...m===null?{}:{etag:m},...v===void 0?{}:{retryAfterSeconds:v},...R===null||R===""?{}:{invocationId:R}}},n)}function Me(n){if(n===null)return;let e=n.trim();if(!/^\d+$/.test(e))return;let t=Number(e);return Number.isFinite(t)?t:void 0}var Fe="gem-web-bridge";var O=65536,Q=8,j=5e3,Z=1024;function U(n){return Object.freeze(Object.assign(Object.create(null),n))}U({"gem.handshake":30,"gem.handshake.accept":5,"gem.token":30,"gem.token.denied":30,"gem.player":12,"gem.pause":120,"gem.prefs":60,"gem.cohorts":12,"gem.viewport":60,"gem.deviceSettings":12,"gem.willTerminate":10,"gem.roomEvent":120,"gem.socketState":12,"gem.seatedEvent":60,"gem.autoStartFailedEvent":30,"gem.signalEvent":1800,"gem.dedicatedEvent":120,"gem.partyResult":30,"gem.clusterTarget":12,"gem.devtools":30,"gem.screenshot":6,"gem.screenshot.denied":12,"gem.requestContext":12,"gem.gameContext":12,"gem.signal":1200,"gem.dedicatedOffer":60,"gem.partyRequest":12,"gem.ready":5,"gem.progress":600,"gem.requestToken":12,"gem.requestLocalServer":6,"gem.localServer":30,"gem.localServer.denied":30,"gem.exit":5,"gem.openExternal":6,"gem.requestFullscreen":30,"gem.audioState":120,"gem.rewardCue":60,"gem.frameStats":120,"gem.error":60,"gem.requestPurchase":12,"gem.purchaseResult":30,"gem.deviceSettings.put":30,"gem.deviceSettings.result":30,"gem.requestAd":6,"gem.adResult":12,"gem.requestSignIn":6,"gem.signInResult":12,__malformed:60});U({"gem.requestAd":"ads","gem.adResult":"ads","gem.requestSignIn":"signIn","gem.signInResult":"signIn","gem.requestPurchase":"purchases","gem.purchaseResult":"purchases","gem.devtools":"devtools","gem.screenshot":"screenshot","gem.screenshot.denied":"screenshot","gem.requestContext":"feedbackContext","gem.gameContext":"feedbackContext","gem.roomEvent":"rooms","gem.signal":"p2p","gem.signalEvent":"p2p","gem.dedicatedOffer":"dedicated","gem.dedicatedEvent":"dedicated","gem.clusterTarget":"clusterTarget","gem.partyRequest":"parties","gem.partyResult":"parties","gem.autoStartFailedEvent":"autoStartFailure","gem.seatedEvent":"partySeating","gem.socketState":"socketState","gem.audioState":"audioState","gem.rewardCue":"rewardCue","gem.frameStats":"frameStats","gem.viewport":"viewport","gem.requestLocalServer":"localHost","gem.localServer":"localHost","gem.localServer.denied":"localHost","gem.cohorts":"cohorts","gem.deviceSettings":"deviceSettings","gem.deviceSettings.put":"deviceSettings","gem.deviceSettings.result":"deviceSettings"});function Be(n){let e=/^([a-z][a-z0-9+.-]*):\/\/([a-z0-9.-]+|\[[0-9a-f:.]+\])(:([0-9]{1,5}))?$/i.exec(n);return e===null?false:e[4]===void 0||Number(e[4])<=65535}function He(n){let e;try{e=new URL(n);}catch{return false}return e.username!==""||e.password!==""?false:e.protocol==="https:"?true:e.protocol==="http:"&&(e.hostname==="localhost"||e.hostname==="127.0.0.1")}function Ne(n){return /^[a-z]{2,8}(-[a-z0-9]{1,8})*$/i.test(n)}function F(n,e,t){if(e>Q)return `nesting deeper than ${Q}`;if(++t.nodes>j)return `more than ${j} values`;if(t.bytes>O)return `over the ${O} byte limit`;if(n==null)return t.bytes+=4,null;let r=typeof n;if(r==="boolean")return t.bytes+=5,null;if(r==="number")return t.bytes+=8,null;if(r==="string")return t.bytes+=n.length*3+2,null;if(r!=="object")return `${r} is not plain data`;let o=n;if(t.seen.has(o))return "a repeated or cyclic object reference";if(t.seen.add(o),Array.isArray(n)){if(n.length>Z)return `an array of ${n.length} entries, over the ${Z} limit`;t.bytes+=2;for(let l of n){let d=F(l,e+1,t);if(d)return d}return null}let s=Object.getPrototypeOf(n);if(s!==Object.prototype&&s!==null)return "a value that is not a plain object";t.bytes+=2;let a=n;for(let l in a){if(!Object.prototype.hasOwnProperty.call(a,l))continue;if(++t.nodes>j)return `more than ${j} values`;if(t.bytes+=l.length*3+4,t.bytes>O)return `over the ${O} byte limit`;let d=F(a[l],e+1,t);if(d)return d}return null}function De(n){let e={nodes:0,bytes:0,seen:new Set},t=F(n,0,e);return t?`message contains ${t}`:e.bytes>O?`message is over the ${O} byte limit`:null}var Ve={origin:[Be,"not a well-formed origin"],url:[He,"not a safe absolute http(s) URL"],bcp47:[Ne,"not a well-formed BCP 47 tag"]};function ee(n,e,t){for(let r of e){let o=t===""?r.n:`${t}.${r.n}`,s=n[r.n];if(s==null){if(r.o)continue;return `${o}: required`}let a=ne(s,r,o);if(a)return a}return null}function ne(n,e,t){switch(e.k){case "string":{if(typeof n!="string")return `${t}: expected string`;if(n.length>e.max)return `${t}: exceeds ${e.max} characters`;if(e.f){let[r,o]=Ve[e.f];if(!r(n))return `${t}: ${o}`}return null}case "int":return typeof n!="number"||!Number.isInteger(n)?`${t}: expected integer`:n<e.lo||n>e.hi?`${t}: out of range ${e.lo}..${e.hi}`:null;case "boolean":return typeof n=="boolean"?null:`${t}: expected boolean`;case "enum":{let r=e.v;return r.includes(n)?null:`${t}: not one of ${r.join("|")}`}case "object":return typeof n!="object"||n===null||Array.isArray(n)?`${t}: expected object`:ee(n,e.fs,t);case "json":return typeof n!="object"||n===null||Array.isArray(n)?`${t}: expected a plain object`:null;case "array":{if(!Array.isArray(n))return `${t}: expected array`;if(n.length>e.max)return `${t}: exceeds ${e.max} items`;let r=e.it,o=`${t}[]`;for(let s of n){if(s==null){if(r.o)continue;return `${o}: required`}let a=ne(s,r,o);if(a)return a}return null}default:{let r=e.k;return `${t}: unknown kind ${String(r)}`}}}function u(n,e){return t=>{let r=De(t);if(r)return r;if(typeof t!="object"||t===null||Array.isArray(t))return "message: expected object";let o=t;return o.gem!==Fe?"gem: wrong protocol marker":o.type!==n?`type: expected ${n}`:ee(o,e,"")}}var ze=u("gem.handshake",[{n:"versions",k:"object",fs:[{n:"min",k:"int",lo:1,hi:1e3},{n:"max",k:"int",lo:1,hi:1e3}]},{n:"capabilities",k:"array",o:1,max:64,it:{n:"",k:"string",max:64}},{n:"embedder",k:"string",max:2048,f:"origin"}]),We=u("gem.handshake.accept",[{n:"v",k:"int",lo:1,hi:1e3},{n:"capabilities",k:"array",o:1,max:64,it:{n:"",k:"string",max:64}}]),Je=u("gem.token",[{n:"token",k:"string",max:4096},{n:"requestId",k:"string",o:1,max:64},{n:"generation",k:"int",lo:0,hi:2147483647},{n:"apiBaseUrl",k:"string",o:1,max:512,f:"url"},{n:"playerId",k:"string",max:64},{n:"gameId",k:"string",max:64},{n:"channel",k:"enum",v:["dev","test","release"]},{n:"gameVersion",k:"string",o:1,max:64},{n:"expiresAt",k:"int",lo:0,hi:4102444800},{n:"chainEndsAt",k:"int",lo:0,hi:4102444800},{n:"allowDevTools",k:"boolean",o:1}]),Ke=u("gem.token.denied",[{n:"requestId",k:"string",max:64},{n:"retryable",k:"boolean"},{n:"retryAfterMs",k:"int",o:1,lo:0,hi:36e5},{n:"reason",k:"enum",v:["chain_exhausted","unavailable"]},{n:"correlationId",k:"string",max:64}]),Ye=u("gem.player",[{n:"untrusted",k:"object",fs:[{n:"displayName",k:"string",max:64},{n:"displayTag",k:"string",o:1,max:80},{n:"displayHandle",k:"string",max:80}]},{n:"playerId",k:"string",o:1,max:64},{n:"discriminator",k:"string",o:1,max:8},{n:"avatarIconUrl",k:"string",o:1,max:2048,f:"url"},{n:"badges",k:"array",o:1,max:2,it:{n:"",k:"object",fs:[{n:"itemId",k:"string",max:64},{n:"iconUrl",k:"string",max:2048,f:"url"}]}},{n:"displayTag",k:"string",max:8},{n:"avatarUrl",k:"string",o:1,max:2048,f:"url"}]),Xe=u("gem.pause",[{n:"paused",k:"boolean"}]),Qe=u("gem.prefs",[{n:"reducedMotion",k:"boolean"},{n:"muted",k:"boolean"},{n:"showFrameStats",k:"boolean",o:1},{n:"locale",k:"string",max:35,f:"bcp47"}]),Ze=u("gem.cohorts",[{n:"cohorts",k:"array",max:8,it:{n:"",k:"object",fs:[{n:"experimentId",k:"string",max:36},{n:"variantKey",k:"string",max:32}]}}]),en=u("gem.viewport",[{n:"insets",k:"object",fs:[{n:"top",k:"int",lo:0,hi:4096},{n:"right",k:"int",lo:0,hi:4096},{n:"bottom",k:"int",lo:0,hi:4096},{n:"left",k:"int",lo:0,hi:4096}]}]),nn=u("gem.deviceSettings",[{n:"settings",k:"json",o:1}]),tn=u("gem.willTerminate",[{n:"reason",k:"enum",v:["grant_expiring","session_ended","navigating","kill_switch"]},{n:"graceMs",k:"int",lo:0,hi:6e4}]),rn=u("gem.roomEvent",[{n:"event",k:"enum",v:["updated","match_started","match_ready","match_failed","version_stale"]},{n:"roomId",k:"string",max:64},{n:"matchId",k:"string",o:1,max:64},{n:"version",k:"int",o:1,lo:0,hi:2147483647},{n:"reason",k:"string",o:1,max:64},{n:"platform",k:"enum",o:1,v:["universal","mobile"]}]),on=u("gem.socketState",[{n:"connected",k:"boolean"},{n:"reason",k:"enum",o:1,v:["connecting","dropped","watchdog","terminal"]}]),sn=u("gem.seatedEvent",[{n:"roomId",k:"string",max:64}]),an=u("gem.autoStartFailedEvent",[{n:"roomId",k:"string",max:64},{n:"code",k:"string",max:64}]),ln=u("gem.signalEvent",[{n:"event",k:"enum",v:["hello","offer","answer","ice","peerJoined","peerLeft","migration","matchEnded","error"]},{n:"matchId",k:"string",max:64},{n:"data",k:"json"}]),dn=u("gem.dedicatedEvent",[{n:"event",k:"enum",v:["answer","error","matchEnded"]},{n:"matchId",k:"string",max:64},{n:"sdp",k:"string",o:1,max:10240},{n:"sessionId",k:"string",o:1,max:64},{n:"code",k:"string",o:1,max:64},{n:"message",k:"string",o:1,max:256},{n:"reason",k:"string",o:1,max:64}]),un=u("gem.partyResult",[{n:"requestId",k:"string",max:64},{n:"partyId",k:"string",o:1,max:64}]),cn=u("gem.clusterTarget",[{n:"clusterTargetId",k:"string",max:64},{n:"clusterTargetIds",k:"array",o:1,max:3,it:{n:"",k:"string",max:64}}]),mn=u("gem.devtools",[{n:"action",k:"enum",v:["open","close","toggle"]}]),gn=u("gem.screenshot",[{n:"maxWidth",k:"int",lo:1,hi:7680},{n:"maxHeight",k:"int",lo:1,hi:4320}]),pn=u("gem.screenshot.denied",[{n:"reason",k:"enum",v:["not_wired","no_source","unsupported","unreadable","tainted","too_large","busy","declined","failed"]},{n:"retryable",k:"boolean"}]),yn=u("gem.requestContext",[]),fn=u("gem.gameContext",[{n:"context",k:"json"}]),hn=u("gem.signal",[{n:"signal",k:"enum",v:["join","offer","answer","ice","migrationAck","hostUnreachable"]},{n:"matchId",k:"string",max:64},{n:"data",k:"json"}]),_n=u("gem.dedicatedOffer",[{n:"matchId",k:"string",max:64},{n:"sdp",k:"string",max:10240},{n:"intent",k:"enum",v:["initial","ice_restart","full_reconnect"]}]),vn=u("gem.partyRequest",[{n:"requestId",k:"string",max:64}]),bn=u("gem.ready",[]),Rn=u("gem.progress",[{n:"loaded",k:"int",lo:0,hi:1099511627776},{n:"total",k:"int",lo:0,hi:1099511627776}]),xn=u("gem.requestToken",[{n:"requestId",k:"string",max:64},{n:"reason",k:"enum",v:["initial","expiring","rejected"]}]),Sn=u("gem.requestLocalServer",[{n:"requestId",k:"string",max:64},{n:"gameRoomId",k:"string",max:64}]),kn=u("gem.localServer",[{n:"requestId",k:"string",max:64},{n:"serverId",k:"string",o:1,max:128}]),wn=u("gem.localServer.denied",[{n:"requestId",k:"string",max:64},{n:"retryable",k:"boolean"},{n:"reason",k:"enum",v:["refused","unavailable"]}]),An=u("gem.exit",[{n:"reason",k:"string",o:1,max:64}]),Tn=u("gem.openExternal",[{n:"url",k:"string",max:2048,f:"url"}]),On=u("gem.requestFullscreen",[{n:"enabled",k:"boolean"}]),Gn=u("gem.audioState",[{n:"muted",k:"boolean"}]),Pn=u("gem.rewardCue",[{n:"currencySlug",k:"string",max:32},{n:"expected",k:"int",o:1,lo:1,hi:1e9},{n:"origin",k:"object",o:1,fs:[{n:"x",k:"int",lo:0,hi:16384},{n:"y",k:"int",lo:0,hi:16384}]}]),En=u("gem.frameStats",[{n:"fps",k:"int",lo:0,hi:1e3},{n:"frameTimeP95Ms",k:"int",lo:0,hi:1e5}]),In=u("gem.error",[{n:"code",k:"enum",v:["version_mismatch","handshake_timeout","handshake_duplicate","invalid_message","rate_limited","token_unavailable","unsupported","unsupported_capability","internal"]},{n:"message",k:"string",o:1,max:256}]),Cn=u("gem.requestPurchase",[{n:"requestId",k:"string",max:64},{n:"purchaseKind",k:"enum",v:["item","recipe"]},{n:"targetId",k:"string",max:64},{n:"currencySlug",k:"string",max:32},{n:"quantity",k:"int",o:1,lo:1,hi:10},{n:"catalogId",k:"string",o:1,max:64}]),qn=u("gem.purchaseResult",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["ok","declined","unavailable"]},{n:"purchaseId",k:"string",o:1,max:64}]),$n=u("gem.deviceSettings.put",[{n:"requestId",k:"string",max:64},{n:"settings",k:"json"}]),Ln=u("gem.deviceSettings.result",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["stored","too_large","unavailable"]}]),jn=u("gem.requestAd",[{n:"requestId",k:"string",max:64},{n:"placement",k:"string",max:32},{n:"format",k:"enum",v:["interstitial","rewarded"]}]),Mn=u("gem.adResult",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["shown","no_ad","unavailable"]}]),Fn=u("gem.requestSignIn",[{n:"requestId",k:"string",max:64}]),Un=u("gem.signInResult",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["signed_in","declined","unavailable"]}]);U({"gem.handshake":ze,"gem.handshake.accept":We,"gem.token":Je,"gem.token.denied":Ke,"gem.player":Ye,"gem.pause":Xe,"gem.prefs":Qe,"gem.cohorts":Ze,"gem.viewport":en,"gem.deviceSettings":nn,"gem.willTerminate":tn,"gem.roomEvent":rn,"gem.socketState":on,"gem.seatedEvent":sn,"gem.autoStartFailedEvent":an,"gem.signalEvent":ln,"gem.dedicatedEvent":dn,"gem.partyResult":un,"gem.clusterTarget":cn,"gem.devtools":mn,"gem.screenshot":gn,"gem.screenshot.denied":pn,"gem.requestContext":yn,"gem.gameContext":fn,"gem.signal":hn,"gem.dedicatedOffer":_n,"gem.partyRequest":vn,"gem.ready":bn,"gem.progress":Rn,"gem.requestToken":xn,"gem.requestLocalServer":Sn,"gem.localServer":kn,"gem.localServer.denied":wn,"gem.exit":An,"gem.openExternal":Tn,"gem.requestFullscreen":On,"gem.audioState":Gn,"gem.rewardCue":Pn,"gem.frameStats":En,"gem.error":In,"gem.requestPurchase":Cn,"gem.purchaseResult":qn,"gem.deviceSettings.put":$n,"gem.deviceSettings.result":Ln,"gem.requestAd":jn,"gem.adResult":Mn,"gem.requestSignIn":Fn,"gem.signInResult":Un});var G={now:()=>Date.now(),setTimeout:(n,e)=>setTimeout(n,e),clearTimeout:n=>clearTimeout(n)};var Bn=1e4;function te(n,e){return B(n,e)}function B(n,e){if(typeof n.serverToken!="function"||typeof n.onServerToken!="function")throw new Error("this runtime delivers no game-server token: host.serverToken/onServerToken are missing. The server image running this bundle predates token delivery \u2014 the bundle cannot call gem-api on it.");let t=a=>({token:a.token,expiresAt:a.expiresAt,chainEndsAt:Number.POSITIVE_INFINITY}),r=null,o=new $({clock:e.clock,...e.onStateChange===void 0?{}:{onStateChange:e.onStateChange},request:()=>new Promise((a,l)=>{let d=e.clock.setTimeout(()=>{r=null,l({reason:"unavailable",retryable:true});},e.timeoutMs??Bn);r={resolve:c=>{e.clock.clearTimeout(d),a(c);},reject:l,timer:d};})}),s=n.onServerToken(a=>{let l=t(a),d=r;if(d){r=null,d.resolve(l);return}o.accept(l);});return {source:o,dispose(){s(),r&&(e.clock.clearTimeout(r.timer),r.reject({reason:"unavailable",retryable:false}),r=null);}}}var N={};fe(N,{acceptTransfer:()=>Hn,addEntityProgression:()=>Nn,adminAction:()=>Dn,cancelInventoryTransfer:()=>Vn,claimEntityProgressionRewards:()=>zn,closeGameRoom:()=>Wn,createEntityBatchOrder:()=>Jn,createEntityOrder:()=>Kn,createSession:()=>Yn,deleteEntityGameSetting:()=>Xn,deleteEntitySave:()=>Qn,deleteSession:()=>Zn,executeEntityRecipe:()=>et,finalizeSaveUpload:()=>nt,getDropRates:()=>tt,getEntityCurrency:()=>rt,getEntityGameSetting:()=>ot,getEntityInventory:()=>st,getEntityInventoryItem:()=>it,getEntityLeaderboard:()=>at,getEntityOrder:()=>lt,getEntityProgression:()=>dt,getEntityRecipeAvailability:()=>ut,getEntityRecipeUsage:()=>ct,getEntitySave:()=>mt,getEvent:()=>gt,getGameRoomV2:()=>pt,getLeaderboard:()=>yt,getPurchaseCatalog:()=>ft,getResolvedTemplate:()=>ht,getRoomArgs:()=>_t,getTransferDetails:()=>vt,ingestAnalyticsEvents:()=>H,initiateInventoryTransfer:()=>bt,kickPlayer:()=>Rt,listEntityGameSettings:()=>xt,listEntityOrders:()=>St,listEntityProgressions:()=>kt,listEntitySaves:()=>wt,listEvents:()=>At,listGameRooms:()=>Tt,listResolvedTemplates:()=>Ot,listTransfers:()=>Gt,putEntityGameSetting:()=>Pt,putRoomArgs:()=>Et,rejectTransfer:()=>It,requestSaveUploadUrl:()=>Ct,resetEntityProgression:()=>qt,simulateEntityOrder:()=>$t,transferHostV2:()=>Lt,updateGameRoomV2:()=>jt});function i(n){let e=String(n);if(!/^[A-Za-z0-9_.-]{1,128}$/.test(e)||e==="."||e==="..")throw new TypeError(`${JSON.stringify(e)} is not a usable path segment \u2014 it is interpolated into a URL`);return encodeURIComponent(e)}async function Hn(n,e,t){let r=`/v1/inventory/transfers/${i(e)}/accept`;return n.client.post(r,void 0,t?.signal)}async function Nn(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}/add`;return n.client.post(a,o,s?.signal)}async function Dn(n,e,t,r){let o=`/v1/voice/sessions/${i(e)}/admin`;return n.client.post(o,t,r?.signal)}async function Vn(n,e,t){let r=`/v1/inventory/transfers/${i(e)}/cancel`;return n.client.post(r,void 0,t?.signal)}async function zn(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}/claim`;return n.client.post(a,o,s?.signal)}async function Wn(n,e,t){let r=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}`;return n.client.delete(r,t?.signal)}async function Jn(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders/batch`;return n.client.post(s,r,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function Kn(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders`;return n.client.post(s,r,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function Yn(n,e,t){return n.client.post("/v1/voice/sessions",e,t?.signal)}async function Xn(n,e,t,r,o){let s=`/v1/settings/${i(e)}/${i(t)}/${i(r)}`;return n.client.delete(s,o?.signal)}async function Qn(n,e,t,r,o){let s=`/v1/saves/${i(e)}/${i(t)}/${i(r)}`;return n.client.delete(s,o?.signal)}async function Zn(n,e,t){let r=`/v1/voice/sessions/${i(e)}`;return n.client.delete(r,t?.signal)}async function et(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/recipes/execute`;return n.client.post(s,r,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function nt(n,e,t,r,o,s){let a=`/v1/saves/${i(e)}/${i(t)}/${i(r)}/finalize`;return n.client.post(a,o,s?.signal)}async function tt(n,e,t){let r=`/v1/inventory/loot-tables/${i(e)}/drop-rates`;return n.client.get(r,t?.signal)}async function rt(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/currencies/${i(r)}`;return n.client.get(s,o?.signal)}async function ot(n,e,t,r,o){let s=`/v1/settings/${i(e)}/${i(t)}/${i(r)}`;return n.client.getWithEtag(s,{...o?.signal===void 0?{}:{signal:o.signal},...o?.ifNoneMatch===void 0?{}:{ifNoneMatch:o.ifNoneMatch}})}async function st(n,e,t,r){let o=new URLSearchParams;r?.include_buckets!==void 0&&o.set("include_buckets",String(r?.include_buckets)),r?.include_custom_data!==void 0&&o.set("include_custom_data",String(r?.include_custom_data)),r?.currency_limit!==void 0&&o.set("currency_limit",String(r?.currency_limit)),r?.currency_cursor!==void 0&&o.set("currency_cursor",String(r?.currency_cursor)),r?.item_limit!==void 0&&o.set("item_limit",String(r?.item_limit)),r?.item_cursor!==void 0&&o.set("item_cursor",String(r?.item_cursor)),r?.progression_limit!==void 0&&o.set("progression_limit",String(r?.progression_limit)),r?.progression_cursor!==void 0&&o.set("progression_cursor",String(r?.progression_cursor));let s=o.toString(),a=`/v1/inventory/${i(e)}/${i(t)}`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function it(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/items/${i(r)}`;return n.client.get(s,o?.signal)}async function at(n,e,t,r,o){let s=new URLSearchParams;o?.bucket_1!==void 0&&s.set("bucket_1",String(o?.bucket_1)),o?.bucket_2!==void 0&&s.set("bucket_2",String(o?.bucket_2)),o?.limit!==void 0&&s.set("limit",String(o?.limit));let a=s.toString(),l=`/v1/leaderboards/${i(e)}/${i(t)}/${i(r)}`+(a?`?${a}`:"");return n.client.get(l,o?.signal)}async function lt(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders/${i(r)}`;return n.client.get(s,o?.signal)}async function dt(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}`;return n.client.get(s,o?.signal)}async function ut(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/catalogs/${i(r)}/recipes/${i(o)}/availability`;return n.client.get(a,s?.signal)}async function ct(n,e,t,r){let o=new URLSearchParams;r?.limit!==void 0&&o.set("limit",String(r?.limit));let s=o.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/recipe-usage`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function mt(n,e,t,r,o){let s=`/v1/saves/${i(e)}/${i(t)}/${i(r)}`;return n.client.getWithEtag(s,{...o?.signal===void 0?{}:{signal:o.signal},...o?.ifNoneMatch===void 0?{}:{ifNoneMatch:o.ifNoneMatch}})}async function gt(n,e,t){let r=`/v1/events/${i(e)}`;return n.client.get(r,t?.signal)}async function pt(n,e,t){let r=`/v2/games/${i(n.gameId())}/game-rooms/${i(e)}`;return n.client.getWithEtag(r,{...t?.signal===void 0?{}:{signal:t.signal},...t?.ifNoneMatch===void 0?{}:{ifNoneMatch:t.ifNoneMatch}})}async function yt(n,e,t){let r=new URLSearchParams;t?.bucket_1!==void 0&&r.set("bucket_1",String(t?.bucket_1)),t?.bucket_2!==void 0&&r.set("bucket_2",String(t?.bucket_2));let o=r.toString(),s=`/v1/leaderboards/${i(e)}`+(o?`?${o}`:"");return n.client.get(s,t?.signal)}async function ft(n,e){let t=new URLSearchParams;e?.config_version!==void 0&&t.set("config_version",String(e?.config_version));let r=t.toString(),o="/v1/inventory/platform-funded-game-inventory-purchase-catalog"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function ht(n,e,t){let r=`/v1/game-room-templates/${i(e)}`;return n.client.get(r,t?.signal)}async function _t(n,e,t){let r=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}/room-args`;return n.client.get(r,t?.signal)}async function vt(n,e,t){let r=`/v1/inventory/transfers/${i(e)}`;return n.client.get(r,t?.signal)}async function H(n,e,t){let r=`/v1/games/${i(n.gameId())}/analytics/events`;return n.client.post(r,e,t?.signal,{replaySafe:true})}async function bt(n,e,t){return n.client.post("/v1/inventory/transfers",e,t?.signal)}async function Rt(n,e,t,r){let o=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}/kick/${i(t)}`;return n.client.post(o,void 0,r?.signal)}async function xt(n,e,t,r){let o=`/v1/settings/${i(e)}/${i(t)}`;return n.client.get(o,r?.signal)}async function St(n,e,t,r){let o=new URLSearchParams;r?.limit!==void 0&&o.set("limit",String(r?.limit)),r?.cursor!==void 0&&o.set("cursor",String(r?.cursor));let s=o.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/orders`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function kt(n,e,t,r){let o=`/v1/inventory/${i(e)}/${i(t)}/progressions`;return n.client.get(o,r?.signal)}async function wt(n,e,t,r){let o=new URLSearchParams;r?.limit!==void 0&&o.set("limit",String(r?.limit)),r?.cursor!==void 0&&o.set("cursor",String(r?.cursor));let s=o.toString(),a=`/v1/saves/${i(e)}/${i(t)}`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function At(n,e){let t=new URLSearchParams;e?.include_inactive!==void 0&&t.set("include_inactive",String(e?.include_inactive)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.offset!==void 0&&t.set("offset",String(e?.offset));let r=t.toString(),o="/v1/events"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function Tt(n,e){let t=new URLSearchParams;e?.status!==void 0&&t.set("status",String(e?.status)),e?.game_channel!==void 0&&t.set("game_channel",String(e?.game_channel)),e?.game_room_type!==void 0&&t.set("game_room_type",String(e?.game_room_type)),e?.template_id!==void 0&&t.set("template_id",String(e?.template_id)),e?.template_slug!==void 0&&t.set("template_slug",String(e?.template_slug)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor));let r=t.toString(),o=`/v1/games/${i(n.gameId())}/game-rooms`+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function Ot(n,e){return n.client.get("/v1/game-room-templates",e?.signal)}async function Gt(n,e){let t=new URLSearchParams;e.entity_type!==void 0&&t.set("entity_type",String(e.entity_type)),e.entity_id!==void 0&&t.set("entity_id",String(e.entity_id)),e?.direction!==void 0&&t.set("direction",String(e?.direction)),e?.status!==void 0&&t.set("status",String(e?.status)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor)),e?.limit!==void 0&&t.set("limit",String(e?.limit));let r=t.toString(),o="/v1/inventory/transfers"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function Pt(n,e,t,r,o,s){let a=`/v1/settings/${i(e)}/${i(t)}/${i(r)}`;return n.client.put(a,o,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function Et(n,e,t,r){let o=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}/room-args`;return n.client.put(o,t,r?.signal)}async function It(n,e,t){let r=`/v1/inventory/transfers/${i(e)}/reject`;return n.client.post(r,void 0,t?.signal)}async function Ct(n,e,t,r,o,s){let a=`/v1/saves/${i(e)}/${i(t)}/${i(r)}/upload-url`;return n.client.post(a,o,s?.signal,{replaySafe:true})}async function qt(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}/reset`;return n.client.post(a,o,s?.signal)}async function $t(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders/simulate`;return n.client.post(s,r,o?.signal)}async function Lt(n,e,t,r){let o=`/v2/games/${i(n.gameId())}/game-rooms/${i(e)}/transfer/${i(t)}`;return n.client.post(o,void 0,r?.signal)}async function jt(n,e,t,r){let o=`/v2/games/${i(n.gameId())}/game-rooms/${i(e)}`;return n.client.patch(o,t,r?.signal,{...r?.ifMatch===void 0?{}:{ifMatch:r.ifMatch}})}var re="gem_";var Ut=1e4,Bt=50,Ht=1e3,Nt=65536-4*1024,oe=n=>typeof n=="number"?n:0,Dt=n=>typeof n=="string"?n:"";function se(){let n=globalThis.crypto;return typeof n?.randomUUID=="function"?n.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.floor(Math.random()*16);return (e==="x"?t:t&3|8).toString(16)})}function Vt(n){return n?.retryable===true}function zt(n,e){let t=n??{},r=Array.isArray(t.rejected)?t.rejected.map(o=>{let s=o??{};return {index:oe(s.index),code:Dt(s.code)}}):[];return {accepted:oe(t.accepted),rejected:r,dropped:e,duplicate:t.duplicate===true}}function ie(n,e){return {event_uid:n.uid,name:n.name,offset_ms:Math.round(n.atMs)-e,player_id:n.playerId,dimensions:n.dimensions,measures:n.measures}}function ae(n){let e=Math.max(1,Math.floor(n.maxQueue??Ht)),t={client:n.client,gameId:()=>n.gameId},r=[],o=0,s=null,a=false,l=false,d=false,c=false,m=f=>{n.log?.(f);},v=()=>{s!==null&&(n.clock.clearTimeout(s),s=null);},R=()=>{s!==null||a||l||(s=n.clock.setTimeout(()=>{s=null,h().catch(()=>{});},Ut));},y=()=>{let f=Math.min(r.length,100),x=128;for(let k=0;k<f;k+=1){let w=r[k];if(w===void 0)break;if(x+=JSON.stringify(ie(w,0)).length+1,x>Nt)return Math.max(1,k)}return f};async function h(f){if(r.length===0)return {accepted:0,rejected:[],dropped:0,duplicate:false};v();let x=r.splice(0,y()),k=o;o=0;let w=Math.round(n.clock.now()),q={batch_id:se(),sent_at_ms:w,events:x.map(S=>ie(S,w))};l=true;try{let S=await H(t,q,f===void 0?void 0:{signal:f}),A=zt(S,k);for(let pe of A.rejected)m(`[gem] analytics: an event was refused (${pe.code}). See the analytics_events section of your game config.`);return A}catch(S){if(Vt(S))for(r=[...x,...r],o+=k;r.length>e;)r.shift(),o+=1;else m(`[gem] analytics: ${x.length} event(s) were discarded \u2014 the platform refused the batch and will refuse it again: ${String(S)}`);throw S}finally{l=false,r.length>0&&R();}}return {track(f,x,k={}){if(a)return;if(typeof f!="string"||f===""){c||(c=true,m(`[gem] analytics: '${x}' was not recorded \u2014 an event from a server has to name the player it is about. A game-server token names no player, so the platform cannot infer one; pass the id from join() or host.players().`));return}if(x.startsWith(re)){d||(d=true,m(`[gem] analytics: '${x}' was not recorded \u2014 the gem_ prefix is reserved, and the platform's own events are client-sourced, so a server may not emit one at all. Name your event something else.`));return}let w={},q={};for(let[S,A]of Object.entries(k))typeof A=="string"?w[S]=A:typeof A=="number"&&Number.isFinite(A)&&(q[S]=A);for(;r.length>=e;)r.shift(),o+=1;r.push({uid:se(),playerId:f,name:x,atMs:n.clock.now(),dimensions:w,measures:q}),r.length>=Bt?h().catch(()=>{}):R();},flush:f=>h(f),get pending(){return r.length},dispose(){a=true,v(),r=[],o=0;}}}var Wt=new Map([["function_error",false],["function_failed",false],["function_timeout",false],["function_not_published",false],["function_input_too_large",false],["functions_not_configured",false],["forbidden",false],["function_capacity_unavailable",true],["function_host_unreachable",true],["function_host_error",true],["rate_limited",true],["service_unavailable",true]]),I=class extends g{constructor(e,t){super(e.reason,e.status,e.detail,e.retryAfterSeconds,e.code),this.name="GemFunctionError",Object.assign(this,t);}get retryable(){return (this.code===void 0?void 0:Wt.get(this.code))??super.retryable}},P=class{#e;constructor(e){this.#e=e;}async invoke(e,t={}){let r=Jt(e),o;try{o=await this.#e(r,t.signal===void 0?{}:{signal:t.signal});}catch(s){throw s instanceof g?Yt(s):s}return Kt(o)}};function Jt(n){if(n instanceof ArrayBuffer)return new Uint8Array(n);if(ArrayBuffer.isView(n))return new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let e;try{e=JSON.stringify(n);}catch(t){throw new p(`the function input could not be serialised to JSON: ${String(t)}. Pass bytes, or a value JSON can carry. This is a bug in the call, not a server failure.`)}if(e===void 0)throw new p(`the function input is ${typeof n}, which JSON cannot carry. Pass bytes \u2014 an empty Uint8Array for no input \u2014 or a JSON value. This is a bug in the call, not a server failure.`);return new TextEncoder().encode(e)}function Kt(n){let{bytes:e}=n,t=()=>new TextDecoder("utf-8",{fatal:true}).decode(e);return {bytes:e,...n.invocationId===void 0?{}:{invocationId:n.invocationId},text:t,json:()=>JSON.parse(t())}}function Yt(n){let{details:e,invocationId:t}=Y(n),o=e?.untrusted?.message,s=e?.reason;return new I(n,{...t===void 0?{}:{invocationId:t},...n.code==="function_error"&&typeof o=="string"?{functionMessage:o}:{},...n.code==="function_failed"&&typeof s=="string"?{failure:s}:{}})}var Xt="/v1/functions/invoke";function Qt(n){let e={};for(let[t,r]of Object.entries(N))if(typeof r=="function"){let o=r;e[t]=(...s)=>o(n,...s);}return e}function M(n,e={}){let t=e.clock??G,r=e.baseUrl??n.apiBaseUrl;if(!r)throw new Error("this runtime names no gem-api host (host.apiBaseUrl is missing). The server image running this bundle predates token delivery \u2014 the bundle cannot call gem-api on it.");let o=B(n,{clock:t,...e.onAuthStateChange===void 0?{}:{onStateChange:e.onAuthStateChange}}),s=X({baseUrl:r,tokenSource:o.source,defaultQuery:{game_id:n.gameId,channel:n.channel},...e.fetch===void 0?{}:{fetch:e.fetch}}),a=new T({transport:s,clock:t}),l={gameId:n.gameId,channel:n.channel,matchId:n.matchId,...n.gameRoomId===void 0?{}:{gameRoomId:n.gameRoomId}},d=Qt({client:a,gameId:()=>l.gameId}),c=l.gameRoomId,m=n.endMatch,v=n.log,R=ae({client:a,clock:t,gameId:l.gameId,...typeof v=="function"?{log:h=>v.call(n,h)}:{}});return {identity:l,client:a,api:d,match:{end:async()=>{if(m===void 0)throw new Error("this runtime cannot end the match: the server image running this bundle predates host.endMatch, and only the platform half holds the allocation proof an end needs.");await m.call(n);}},analytics:R,functions:new P((h,f)=>a.postBytes(Xt,h,f?.signal)),...c===void 0?{}:{room:{get:h=>d.getGameRoomV2(c,h),args:h=>d.getRoomArgs(c,h)}},dispose:()=>{R.dispose(),o.dispose();}}}var Zt=["explicit","stale_cleanup","game_room_closed","replaced","migration_failed","host_left","insufficient_players","all_left","expired","migration_rate_exceeded","game_room_gone","failed","idle","reclaimed"],er=new Set(Zt);function le(n){return typeof n=="string"&&er.has(n)?n:"unknown"}var b=class{#e;constructor(e){this.#e=e,Object.freeze(this);}toString(){return "[gem: use gem.text.toPlain()]"}toJSON(){return this.toString()}get[Symbol.toStringTag](){return "PlayerText"}static unwrap(e){return e.#e}};function C(n){return new b(n)}var de={toPlain(n){return b.unwrap(n)},compare(n,e,t){let r=n instanceof b?b.unwrap(n):n,o=e instanceof b?b.unwrap(e):e,s;try{s=new Intl.Collator(t);}catch{s=new Intl.Collator;}return s.compare(r,o)},equals(n,e){let t=n instanceof b?b.unwrap(n):n,r=e instanceof b?b.unwrap(e):e;return t.normalize("NFC")===r.normalize("NFC")}};var ue="the match has not started yet: the runtime hands over the host at `init`, and this was read before that. Read it from `init` or later \u2014 a bundle that needs a value at module scope is reading it one call too early.";function D(n,e={}){let t=e.clock??G,r=()=>{let l=n();if(l===null)throw new Error(ue);return l},o=null,s=()=>{if(o===null)throw new Error(ue);return o};return {server:{get identity(){return s().identity},get client(){return s().client},get api(){return s().api},get match(){return s().match},get analytics(){return s().analytics},get functions(){return s().functions},get room(){return s().room},dispose(){o?.dispose();},get sizeClass(){return r().sizeClass},get roomArgs(){return r().roomArgs},get roster(){return r().roster},players(){return r().players()},profile(l){let c=r().profile?.(l);if(!c)return null;let m=c.displayName;return typeof m!="string"||m===""?null:{displayName:C(m),...typeof c.displayTag=="string"&&c.displayTag!==""?{displayTag:C(c.displayTag)}:{},...typeof c.discriminator=="string"?{discriminator:c.discriminator}:{}}},playerNumber(l){return r().playerNumber?.(l)},send(l,d,c){c===void 0?r().send(l,d):r().send(l,d,c);},broadcast(l,d){d===void 0?r().broadcast(l):r().broadcast(l,d);},kick(l,d){d===void 0?r().kick(l):r().kick(l,d);},log(l){r().log(l);},warn(l){r().warn(l);}},attach:()=>{o=M(r(),{...e,clock:t});}}}function ce(n,e={}){let{server:t,attach:r}=D(()=>n,e);return r(),t}function nr(n){if(n===void 0||typeof n.reason!="string"||n.reason==="")return;let e=n.platform_reason??n.endedReason;return {reason:n.reason,...e===void 0?{}:{endedReason:le(e)}}}function me(n,e={}){return ()=>{let t=null,{server:r,attach:o}=D(()=>t,e),s=n(r),a={async init(l){t=l,o(),await s.init?.();},async shutdown(l){let d=nr(l);try{await s.shutdown?.(d);}finally{r.dispose();}}};return s.join&&(a.join=(l,d)=>s.join?.(l,d)),s.leave&&(a.leave=(l,d)=>s.leave?.(l,d)),s.message&&(a.message=(l,d,c,m)=>s.message?.(l,d,c,m)),a}}var tr=new Set(["unlocked","already_unlocked","suppressed"]);function ge(n){let e=n?.changes;if(!Array.isArray(e))return [];let t=[];for(let r of e){let o=r??{};if(o.type!=="achievement_unlocked"||typeof o.outcome!="string"||!tr.has(o.outcome)||typeof o.achievement_id!="string"||o.achievement_id==="")continue;let s=o.outcome;t.push({achievementId:o.achievement_id,progressionDefinitionId:typeof o.progression_definition_id=="string"?o.progression_definition_id:"",points:s==="unlocked"&&typeof o.points=="number"&&Number.isFinite(o.points)?o.points:0,outcome:s,...typeof o.reason=="string"?{reason:o.reason}:{}});}return t}
|
|
2
|
-
export{
|
|
1
|
+
var ye=Object.defineProperty;var fe=(n,e)=>{for(var t in e)ye(n,t,{get:e[t],enumerable:true});};globalThis.__gemWebSdkVersion="[gem-web-sdk:sdkVersion:7.1.0]";function he(n,e){return e!==void 0?!e:n==="chain_exhausted"}var L=class{constructor(e){this.options=e;}options;grant=null;state="pending";failure=null;generation=0;inFlight=null;rejected=false;get currentState(){return this.state}get lastFailure(){return this.failure}async get(){if(this.state==="lost")throw new h(this.failure??"unavailable","the session cannot be renewed");let e=this.seconds();if(this.grant&&e<this.grant.expiresAt-this.renewBefore())return this.grant.token;if(this.grant&&e>=this.grant.chainEndsAt)throw this.enter("lost","chain_exhausted"),new h("chain_exhausted","the token chain reached its ceiling");return this.refresh(this.nextReason())}nextReason(){return this.rejected?"rejected":this.grant?"expiring":"initial"}invalidate(e){e!==void 0&&this.grant!==null&&this.grant.token!==e||this.rejected&&this.grant===null||(this.grant=null,this.generation+=1,this.inFlight=null,this.rejected=true,this.state!=="lost"&&this.enter("pending"));}accept(e){this.state!=="lost"&&(this.grant=e,this.rejected=false,this.enter("ready"));}close(e="unavailable"){this.grant=null,this.generation+=1,this.inFlight=null,this.enter("lost",e);}refresh(e){if(this.inFlight)return this.inFlight;let t=this.generation;this.enter("pending");let r=this.options.request(e).then(o=>{if(t!==this.generation)throw new h("internal","token arrived for a superseded generation");return this.grant=o,this.rejected=false,this.enter("ready"),o.token}).catch(o=>{let s=_e(o),a=o?.retryable;throw t===this.generation&&this.enter(he(s,typeof a=="boolean"?a:void 0)?"lost":"degraded",s),o instanceof h?o:new h(s,String(o))}).finally(()=>{this.inFlight===r&&(this.inFlight=null);});return this.inFlight=r,r}enter(e,t){this.failure=t??(e==="ready"?null:this.failure),this.state!==e&&(this.state=e,this.options.onStateChange?.(e,t));}renewBefore(){return this.options.renewBeforeSeconds??60}seconds(){return Math.floor(this.options.clock.now()/1e3)}},h=class n extends Error{constructor(t,r){super(`auth ${t}: ${r}`);this.reason=t;this.name="AuthError";}reason;static isAuthError(t){if(t instanceof n)return true;let r=t;return r?.name==="AuthError"&&typeof r.reason=="string"}};function _e(n){if(n instanceof h)return n.reason;let e=n?.reason;return typeof e=="string"&&["chain_exhausted","unavailable","timeout","internal"].includes(e)?e:"internal"}var p=class n extends Error{retryable=false;constructor(e){super(e),this.name="TransportRefusal";}static isRefusal(e){if(e instanceof n)return true;let t=e;return t?.name==="TransportRefusal"&&t.retryable===false}},$=["if-match","if-none-match"],V=4096;function ve(n){if(!n)return;let e={};for(let[t,r]of Object.entries(n)){let o=t.toLowerCase();if(!$.includes(o)||r===void 0)continue;let s=typeof r=="string"?be(r):r;if(typeof s!="string"||s.length>V||!Re(s))throw new p(`the ${o} header value cannot be sent \u2014 it is not a string, is longer than ${V} characters, or contains a character outside the range an HTTP header value may carry. This is a malformed request, not a server failure; the value is withheld here rather than written to logs.`);s!==""&&(e[o]=s);}return Object.freeze(e)}function be(n){let e=o=>o===32||o===9||o===10||o===13,t=0,r=n.length;for(;t<r&&e(n.charCodeAt(t));)t++;for(;r>t&&e(n.charCodeAt(r-1));)r--;return n.slice(t,r)}function Re(n){for(let e=0;e<n.length;e++){let t=n.charCodeAt(e);if(t!==9&&(t<32||t===127||t>255))return false}return true}function xe(n){let{bytes:e}=n;if(e!==void 0){if(Object.prototype.toString.call(e)!=="[object Uint8Array]")throw new p("the raw body is not a Uint8Array, so it cannot be sent as bytes. This is a malformed request, not a server failure.");if(n.body!==void 0)throw new p("the request carries both a JSON body and a raw body, and only one can be sent. This is a malformed request, not a server failure.");return new Uint8Array(e)}}function z(n,e){let t=e.replayUnauthorizedOnce??true;return {async request(r){let o={...r},s=ve(o.headers),a=xe(o),l=Object.freeze({...o,headers:s,...a===void 0?{}:{bytes:a}}),u=await e.tokenSource.get(),c=await n(l,u);if(c.status!==401||!t)return c;e.tokenSource.invalidate(u);let m=await e.tokenSource.get(),_=await n(l,m);if(_.status===401)throw e.tokenSource.close("unavailable"),new h("unavailable","the server refused a freshly minted token");return _}}}function W(n){let e=typeof n=="string"?new TextEncoder().encode(n):n;return btoa(Se(e))}function Se(n){let t="";for(let r=0;r<n.length;r+=32768)t+=String.fromCharCode(...n.subarray(r,r+32768));return t}var g=class extends Error{constructor(t,r,o,s,a){super(`${t} (${r}): ${o}`);this.reason=t;this.status=r;this.detail=o;this.retryAfterSeconds=s;this.code=a;this.name="GemApiError";}reason;status;detail;retryAfterSeconds;code;get retryable(){return this.reason==="unavailable"||this.reason==="rate_limited"}},J=new WeakMap;function Y(n){return J.get(n)??{}}var ke=new Set([408,429,500,502,503,504]),we=6e4;function Ae(n){if(n===void 0)return 2;if(!Number.isInteger(n)||n<0||n>10)throw new p(`maxRetries must be a whole number between 0 and 10; received ${JSON.stringify(n)}. This is a configuration fault, not a server failure.`);return n}var T=class{constructor(e){this.options=e;}options;async get(e,t){return this.send({method:"GET",path:e,signal:t},true)}async getWithEtag(e,t={}){let r=await this.sendRaw({method:"GET",path:e,...t.signal===void 0?{}:{signal:t.signal},...t.ifNoneMatch===void 0?{}:{headers:{"if-none-match":t.ifNoneMatch}}},true),o=r.etag===void 0?{}:{etag:r.etag};return r.status===304?{modified:false,...o}:{modified:true,body:r.body,...o}}async put(e,t,r,o={}){return this.send({method:"PUT",path:e,body:t,signal:r,...I(o)},o.replaySafe===true)}async post(e,t,r,o={}){return this.send({method:"POST",path:e,body:t,signal:r,...I(o)},o.replaySafe===true)}async postBytes(e,t,r,o={}){let s=await this.sendRaw({method:"POST",path:e,bytes:t,responseType:"bytes",signal:r,...I(o)},o.replaySafe===true);return {bytes:Te(s.body),...s.invocationId===void 0?{}:{invocationId:s.invocationId}}}async patch(e,t,r,o={}){return this.send({method:"PATCH",path:e,body:t,signal:r,...I(o)},o.replaySafe===true)}async delete(e,t,r={}){return this.send({method:"DELETE",path:e,signal:t,...I(r)},r.replaySafe===true)}async send(e,t){return (await this.sendRaw(e,t)).body}async sendRaw(e,t){let r=t?Ae(this.options.maxRetries)+1:1,o=null;if(e.signal?.aborted)throw K(e.signal);for(let s=0;s<r;s++){if(s>0&&await this.backoff(s,o,e.signal),e.signal?.aborted)throw K(e.signal);let a;try{a=await this.options.transport.request(e);}catch(u){if(h.isAuthError(u)||p.isRefusal(u)||e.signal?.aborted||Oe(u))throw u;o=new g("unavailable",0,String(u));continue}if(a.status>=200&&a.status<300||a.status===304)return a;let l=Pe(a);if(!ke.has(a.status))throw l;o=l;}throw o??new g("unavailable",0,"no attempt was made")}backoff(e,t,r){if(r?.aborted)return Promise.resolve();let o=t?.retryAfterSeconds,s=o!==void 0?o*1e3:2**(e-1)*250,a=2**(e-1)*250,l=Math.min(Math.max(s,a),we);return new Promise(u=>{let c=this.options.clock,m=false,_=false,b,y=()=>{m||(m=true,_&&c.clearTimeout(b),r?.removeEventListener("abort",y),u());};r?.addEventListener("abort",y,{once:true}),b=c.setTimeout(y,l),_=true,m&&c.clearTimeout(b);})}};function Te(n){if(n instanceof Uint8Array)return n;if(n==null)return new Uint8Array(0);let e=typeof n=="string"?n:JSON.stringify(n);return new TextEncoder().encode(e)}function I(n){return {...n.keepalive===void 0?{}:{keepalive:n.keepalive},...n.ifMatch===void 0?{}:{headers:{"if-match":n.ifMatch}}}}function K(n){return n.reason!==void 0?n.reason:new DOMException("The operation was aborted.","AbortError")}function Oe(n){let e=n?.name;return e==="AbortError"||e==="TimeoutError"}function Pe(n){let e=Ge(n),t=Ee(n.body),r={...t===void 0?{}:{details:t},...n.invocationId===void 0?{}:{invocationId:n.invocationId}};return Object.keys(r).length>0&&J.set(e,r),e}function Ge(n){let{status:e,body:t}=n,r=Ie(t),o=n.retryAfterSeconds??qe(t),s=Ce(t);switch(e){case 304:return new g("not_modified",e,r);case 400:case 422:return new g("invalid",e,r,void 0,s);case 403:return new g("forbidden",e,r,void 0,s);case 404:return new g("not_found",e,r,void 0,s);case 402:return new g("insufficient_funds",e,r,void 0,s);case 409:return new g("conflict",e,r,void 0,s);case 412:return new g("precondition_failed",e,r,void 0,s);case 413:return new g("too_large",e,r,void 0,s);case 429:return new g("rate_limited",e,r,o,s);default:return new g("unavailable",e,r,o,s)}}function Ie(n){if(typeof n=="string")return n;let e=n?.message;if(typeof e=="string")return e;let t=n?.error;if(typeof t=="string")return t;let r=t?.message;return typeof r=="string"?r:"no detail"}function Ee(n){let t=n?.error?.details;return t===null?void 0:t}function Ce(n){let t=n?.error?.code;return typeof t=="string"&&t.length>0?t:void 0}function qe(n){let e=n?.retryAfterSeconds;return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Le(n){let e=n.lastIndexOf("@");return (e===-1?n:`***@${n.slice(e+1)}`).slice(0,200)}var $e=new Set($);function je(n){if(!n)return {};let e={};for(let[t,r]of Object.entries(n))$e.has(t.toLowerCase())&&(e[t.toLowerCase()]=r);return e}function X(n){let e=n.fetch??globalThis.fetch.bind(globalThis);return z(async(t,r)=>{let o;try{o=new URL(n.baseUrl.replace(/\/+$/,""));}catch{throw new p("the configured baseUrl is not a valid URL. Its value is withheld here rather than written to logs. This is a configuration fault, not a server failure.")}let s;try{s=new URL(o.href.replace(/\/+$/,"")+t.path);}catch{throw new p(`${JSON.stringify(typeof t.path=="string"?Le(t.path):"(a non-string path)")} does not form a valid URL against ${o.protocol}//${o.host}. This is a malformed request, not a server failure.`)}if(s.protocol!==o.protocol||s.host!==o.host)throw new p(`${JSON.stringify(s.pathname)} resolves to ${s.protocol}//${s.host}, not ${o.protocol}//${o.host}. A request path may not change the request's origin \u2014 it carries the play token.`);if(s.username!==""||s.password!==""){let y=o.username!==""||o.password!=="",R=s.username!==o.username||s.password!==o.password,f=y?R?"baseUrl (and possibly the request path)":"baseUrl":"request path";throw new p(`the ${f} puts credentials in the URL, which cannot be fetched (${t.method} ${s.pathname}). The value is withheld here rather than written to logs. This is a malformed request, not a server failure.`)}for(let[y,R]of Object.entries(n.defaultQuery??{}))s.searchParams.has(y)||s.searchParams.set(y,R);let a=t.bytes,l=t.bytes===void 0?void 0:"application/octet-stream";try{t.body!==void 0&&(a=JSON.stringify(t.body),l="application/json");}catch(y){throw new p(`the body of ${t.method} ${JSON.stringify(s.pathname)} could not be serialised to JSON: ${String(y)}. This is a bug in the request, not a server failure \u2014 retrying sends the same unserialisable value.`)}let u=await e(s.toString(),{method:t.method,headers:{authorization:`Bearer ${r}`,...l===void 0?{}:{"content-type":l},...je(t.headers)},body:a,signal:t.signal,...t.keepalive===void 0?{}:{keepalive:t.keepalive},credentials:"omit",mode:"cors",redirect:"error",cache:"no-store",referrerPolicy:"no-referrer"}),c=null;if(t.responseType==="bytes"&&u.status>=200&&u.status<300)c=new Uint8Array(await u.arrayBuffer());else {let y=await u.text();if(y.length>0)try{c=JSON.parse(y);}catch{c=y;}}let m=u.headers.get("etag"),_=Me(u.headers.get("retry-after")),b=u.headers.get("x-gem-invocation-id");return {status:u.status,body:c,...m===null?{}:{etag:m},..._===void 0?{}:{retryAfterSeconds:_},...b===null||b===""?{}:{invocationId:b}}},n)}function Me(n){if(n===null)return;let e=n.trim();if(!/^\d+$/.test(e))return;let t=Number(e);return Number.isFinite(t)?t:void 0}var Fe="gem-web-bridge";var O=65536,Q=8,j=5e3,Z=1024;function U(n){return Object.freeze(Object.assign(Object.create(null),n))}U({"gem.handshake":30,"gem.handshake.accept":5,"gem.token":30,"gem.token.denied":30,"gem.player":12,"gem.pause":120,"gem.prefs":60,"gem.cohorts":12,"gem.viewport":60,"gem.deviceSettings":12,"gem.willTerminate":10,"gem.roomEvent":120,"gem.socketState":12,"gem.seatedEvent":60,"gem.autoStartFailedEvent":30,"gem.signalEvent":1800,"gem.dedicatedEvent":120,"gem.partyResult":30,"gem.clusterTarget":12,"gem.devtools":30,"gem.screenshot":6,"gem.screenshot.denied":12,"gem.requestContext":12,"gem.gameContext":12,"gem.signal":1200,"gem.dedicatedOffer":60,"gem.partyRequest":12,"gem.ready":5,"gem.progress":600,"gem.requestToken":12,"gem.requestLocalServer":6,"gem.localServer":30,"gem.localServer.denied":30,"gem.exit":5,"gem.openExternal":6,"gem.requestFullscreen":30,"gem.audioState":120,"gem.rewardCue":60,"gem.frameStats":120,"gem.error":60,"gem.requestPurchase":12,"gem.purchaseResult":30,"gem.deviceSettings.put":30,"gem.deviceSettings.result":30,"gem.requestAd":6,"gem.adResult":12,"gem.requestSignIn":6,"gem.signInResult":12,__malformed:60});U({"gem.requestAd":"ads","gem.adResult":"ads","gem.requestSignIn":"signIn","gem.signInResult":"signIn","gem.requestPurchase":"purchases","gem.purchaseResult":"purchases","gem.devtools":"devtools","gem.screenshot":"screenshot","gem.screenshot.denied":"screenshot","gem.requestContext":"feedbackContext","gem.gameContext":"feedbackContext","gem.roomEvent":"rooms","gem.signal":"p2p","gem.signalEvent":"p2p","gem.dedicatedOffer":"dedicated","gem.dedicatedEvent":"dedicated","gem.clusterTarget":"clusterTarget","gem.partyRequest":"parties","gem.partyResult":"parties","gem.autoStartFailedEvent":"autoStartFailure","gem.seatedEvent":"partySeating","gem.socketState":"socketState","gem.audioState":"audioState","gem.rewardCue":"rewardCue","gem.frameStats":"frameStats","gem.viewport":"viewport","gem.requestLocalServer":"localHost","gem.localServer":"localHost","gem.localServer.denied":"localHost","gem.cohorts":"cohorts","gem.deviceSettings":"deviceSettings","gem.deviceSettings.put":"deviceSettings","gem.deviceSettings.result":"deviceSettings"});function Be(n){let e=/^([a-z][a-z0-9+.-]*):\/\/([a-z0-9.-]+|\[[0-9a-f:.]+\])(:([0-9]{1,5}))?$/i.exec(n);return e===null?false:e[4]===void 0||Number(e[4])<=65535}function He(n){let e;try{e=new URL(n);}catch{return false}return e.username!==""||e.password!==""?false:e.protocol==="https:"?true:e.protocol==="http:"&&(e.hostname==="localhost"||e.hostname==="127.0.0.1")}function Ne(n){return /^[a-z]{2,8}(-[a-z0-9]{1,8})*$/i.test(n)}function F(n,e,t){if(e>Q)return `nesting deeper than ${Q}`;if(++t.nodes>j)return `more than ${j} values`;if(t.bytes>O)return `over the ${O} byte limit`;if(n==null)return t.bytes+=4,null;let r=typeof n;if(r==="boolean")return t.bytes+=5,null;if(r==="number")return t.bytes+=8,null;if(r==="string")return t.bytes+=n.length*3+2,null;if(r!=="object")return `${r} is not plain data`;let o=n;if(t.seen.has(o))return "a repeated or cyclic object reference";if(t.seen.add(o),Array.isArray(n)){if(n.length>Z)return `an array of ${n.length} entries, over the ${Z} limit`;t.bytes+=2;for(let l of n){let u=F(l,e+1,t);if(u)return u}return null}let s=Object.getPrototypeOf(n);if(s!==Object.prototype&&s!==null)return "a value that is not a plain object";t.bytes+=2;let a=n;for(let l in a){if(!Object.prototype.hasOwnProperty.call(a,l))continue;if(++t.nodes>j)return `more than ${j} values`;if(t.bytes+=l.length*3+4,t.bytes>O)return `over the ${O} byte limit`;let u=F(a[l],e+1,t);if(u)return u}return null}function De(n){let e={nodes:0,bytes:0,seen:new Set},t=F(n,0,e);return t?`message contains ${t}`:e.bytes>O?`message is over the ${O} byte limit`:null}var Ve={origin:[Be,"not a well-formed origin"],url:[He,"not a safe absolute http(s) URL"],bcp47:[Ne,"not a well-formed BCP 47 tag"]};function ee(n,e,t){for(let r of e){let o=t===""?r.n:`${t}.${r.n}`,s=n[r.n];if(s==null){if(r.o)continue;return `${o}: required`}let a=ne(s,r,o);if(a)return a}return null}function ne(n,e,t){switch(e.k){case "string":{if(typeof n!="string")return `${t}: expected string`;if(n.length>e.max)return `${t}: exceeds ${e.max} characters`;if(e.f){let[r,o]=Ve[e.f];if(!r(n))return `${t}: ${o}`}return null}case "int":return typeof n!="number"||!Number.isInteger(n)?`${t}: expected integer`:n<e.lo||n>e.hi?`${t}: out of range ${e.lo}..${e.hi}`:null;case "boolean":return typeof n=="boolean"?null:`${t}: expected boolean`;case "enum":{let r=e.v;return r.includes(n)?null:`${t}: not one of ${r.join("|")}`}case "object":return typeof n!="object"||n===null||Array.isArray(n)?`${t}: expected object`:ee(n,e.fs,t);case "json":return typeof n!="object"||n===null||Array.isArray(n)?`${t}: expected a plain object`:null;case "array":{if(!Array.isArray(n))return `${t}: expected array`;if(n.length>e.max)return `${t}: exceeds ${e.max} items`;let r=e.it,o=`${t}[]`;for(let s of n){if(s==null){if(r.o)continue;return `${o}: required`}let a=ne(s,r,o);if(a)return a}return null}default:{let r=e.k;return `${t}: unknown kind ${String(r)}`}}}function d(n,e){return t=>{let r=De(t);if(r)return r;if(typeof t!="object"||t===null||Array.isArray(t))return "message: expected object";let o=t;return o.gem!==Fe?"gem: wrong protocol marker":o.type!==n?`type: expected ${n}`:ee(o,e,"")}}var ze=d("gem.handshake",[{n:"versions",k:"object",fs:[{n:"min",k:"int",lo:1,hi:1e3},{n:"max",k:"int",lo:1,hi:1e3}]},{n:"capabilities",k:"array",o:1,max:64,it:{n:"",k:"string",max:64}},{n:"embedder",k:"string",max:2048,f:"origin"}]),We=d("gem.handshake.accept",[{n:"v",k:"int",lo:1,hi:1e3},{n:"capabilities",k:"array",o:1,max:64,it:{n:"",k:"string",max:64}}]),Ke=d("gem.token",[{n:"token",k:"string",max:4096},{n:"requestId",k:"string",o:1,max:64},{n:"generation",k:"int",lo:0,hi:2147483647},{n:"apiBaseUrl",k:"string",o:1,max:512,f:"url"},{n:"playerId",k:"string",max:64},{n:"gameId",k:"string",max:64},{n:"channel",k:"enum",v:["dev","test","release"]},{n:"gameVersion",k:"string",o:1,max:64},{n:"expiresAt",k:"int",lo:0,hi:4102444800},{n:"chainEndsAt",k:"int",lo:0,hi:4102444800},{n:"allowDevTools",k:"boolean",o:1}]),Je=d("gem.token.denied",[{n:"requestId",k:"string",max:64},{n:"retryable",k:"boolean"},{n:"retryAfterMs",k:"int",o:1,lo:0,hi:36e5},{n:"reason",k:"enum",v:["chain_exhausted","unavailable"]},{n:"correlationId",k:"string",max:64}]),Ye=d("gem.player",[{n:"untrusted",k:"object",fs:[{n:"displayName",k:"string",max:64},{n:"displayTag",k:"string",o:1,max:80},{n:"displayHandle",k:"string",max:80}]},{n:"playerId",k:"string",o:1,max:64},{n:"discriminator",k:"string",o:1,max:8},{n:"avatarIconUrl",k:"string",o:1,max:2048,f:"url"},{n:"badges",k:"array",o:1,max:2,it:{n:"",k:"object",fs:[{n:"itemId",k:"string",max:64},{n:"iconUrl",k:"string",max:2048,f:"url"}]}},{n:"displayTag",k:"string",max:8},{n:"avatarUrl",k:"string",o:1,max:2048,f:"url"},{n:"boost",k:"object",o:1,fs:[{n:"multipliers",k:"array",max:8,it:{n:"",k:"object",fs:[{n:"currencyId",k:"string",max:64},{n:"currencySlug",k:"string",max:32},{n:"multiplierBp",k:"int",lo:1e4,hi:1e6}]}},{n:"expiresInDays",k:"int",o:1,lo:1,hi:7}]}]),Xe=d("gem.pause",[{n:"paused",k:"boolean"}]),Qe=d("gem.prefs",[{n:"reducedMotion",k:"boolean"},{n:"muted",k:"boolean"},{n:"showFrameStats",k:"boolean",o:1},{n:"locale",k:"string",max:35,f:"bcp47"}]),Ze=d("gem.cohorts",[{n:"cohorts",k:"array",max:8,it:{n:"",k:"object",fs:[{n:"experimentId",k:"string",max:36},{n:"variantKey",k:"string",max:32}]}}]),en=d("gem.viewport",[{n:"insets",k:"object",fs:[{n:"top",k:"int",lo:0,hi:4096},{n:"right",k:"int",lo:0,hi:4096},{n:"bottom",k:"int",lo:0,hi:4096},{n:"left",k:"int",lo:0,hi:4096}]}]),nn=d("gem.deviceSettings",[{n:"settings",k:"json",o:1}]),tn=d("gem.willTerminate",[{n:"reason",k:"enum",v:["grant_expiring","session_ended","navigating","kill_switch"]},{n:"graceMs",k:"int",lo:0,hi:6e4}]),rn=d("gem.roomEvent",[{n:"event",k:"enum",v:["updated","match_started","match_ready","match_failed","version_stale"]},{n:"roomId",k:"string",max:64},{n:"matchId",k:"string",o:1,max:64},{n:"version",k:"int",o:1,lo:0,hi:2147483647},{n:"reason",k:"string",o:1,max:64},{n:"platform",k:"enum",o:1,v:["universal","mobile"]}]),on=d("gem.socketState",[{n:"connected",k:"boolean"},{n:"reason",k:"enum",o:1,v:["connecting","dropped","watchdog","terminal"]}]),sn=d("gem.seatedEvent",[{n:"roomId",k:"string",max:64}]),an=d("gem.autoStartFailedEvent",[{n:"roomId",k:"string",max:64},{n:"code",k:"string",max:64}]),ln=d("gem.signalEvent",[{n:"event",k:"enum",v:["hello","offer","answer","ice","peerJoined","peerLeft","migration","matchEnded","error"]},{n:"matchId",k:"string",max:64},{n:"data",k:"json"}]),un=d("gem.dedicatedEvent",[{n:"event",k:"enum",v:["answer","error","matchEnded"]},{n:"matchId",k:"string",max:64},{n:"sdp",k:"string",o:1,max:10240},{n:"sessionId",k:"string",o:1,max:64},{n:"code",k:"string",o:1,max:64},{n:"message",k:"string",o:1,max:256},{n:"reason",k:"string",o:1,max:64}]),dn=d("gem.partyResult",[{n:"requestId",k:"string",max:64},{n:"partyId",k:"string",o:1,max:64}]),cn=d("gem.clusterTarget",[{n:"clusterTargetId",k:"string",max:64},{n:"clusterTargetIds",k:"array",o:1,max:3,it:{n:"",k:"string",max:64}}]),mn=d("gem.devtools",[{n:"action",k:"enum",v:["open","close","toggle"]}]),gn=d("gem.screenshot",[{n:"maxWidth",k:"int",lo:1,hi:7680},{n:"maxHeight",k:"int",lo:1,hi:4320}]),pn=d("gem.screenshot.denied",[{n:"reason",k:"enum",v:["not_wired","no_source","unsupported","unreadable","tainted","too_large","busy","declined","failed"]},{n:"retryable",k:"boolean"}]),yn=d("gem.requestContext",[]),fn=d("gem.gameContext",[{n:"context",k:"json"}]),hn=d("gem.signal",[{n:"signal",k:"enum",v:["join","offer","answer","ice","migrationAck","hostUnreachable"]},{n:"matchId",k:"string",max:64},{n:"data",k:"json"}]),_n=d("gem.dedicatedOffer",[{n:"matchId",k:"string",max:64},{n:"sdp",k:"string",max:10240},{n:"intent",k:"enum",v:["initial","ice_restart","full_reconnect"]}]),vn=d("gem.partyRequest",[{n:"requestId",k:"string",max:64}]),bn=d("gem.ready",[]),Rn=d("gem.progress",[{n:"loaded",k:"int",lo:0,hi:1099511627776},{n:"total",k:"int",lo:0,hi:1099511627776}]),xn=d("gem.requestToken",[{n:"requestId",k:"string",max:64},{n:"reason",k:"enum",v:["initial","expiring","rejected"]}]),Sn=d("gem.requestLocalServer",[{n:"requestId",k:"string",max:64},{n:"gameRoomId",k:"string",max:64}]),kn=d("gem.localServer",[{n:"requestId",k:"string",max:64},{n:"serverId",k:"string",o:1,max:128}]),wn=d("gem.localServer.denied",[{n:"requestId",k:"string",max:64},{n:"retryable",k:"boolean"},{n:"reason",k:"enum",v:["refused","unavailable"]}]),An=d("gem.exit",[{n:"reason",k:"string",o:1,max:64}]),Tn=d("gem.openExternal",[{n:"url",k:"string",max:2048,f:"url"}]),On=d("gem.requestFullscreen",[{n:"enabled",k:"boolean"}]),Pn=d("gem.audioState",[{n:"muted",k:"boolean"}]),Gn=d("gem.rewardCue",[{n:"currencySlug",k:"string",max:32},{n:"expected",k:"int",o:1,lo:1,hi:1e9},{n:"origin",k:"object",o:1,fs:[{n:"x",k:"int",lo:0,hi:16384},{n:"y",k:"int",lo:0,hi:16384}]}]),In=d("gem.frameStats",[{n:"fps",k:"int",lo:0,hi:1e3},{n:"frameTimeP95Ms",k:"int",lo:0,hi:1e5}]),En=d("gem.error",[{n:"code",k:"enum",v:["version_mismatch","handshake_timeout","handshake_duplicate","invalid_message","rate_limited","token_unavailable","unsupported","unsupported_capability","internal"]},{n:"message",k:"string",o:1,max:256}]),Cn=d("gem.requestPurchase",[{n:"requestId",k:"string",max:64},{n:"purchaseKind",k:"enum",v:["item","recipe"]},{n:"targetId",k:"string",max:64},{n:"currencySlug",k:"string",max:32},{n:"quantity",k:"int",o:1,lo:1,hi:10},{n:"catalogId",k:"string",o:1,max:64}]),qn=d("gem.purchaseResult",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["ok","declined","unavailable"]},{n:"purchaseId",k:"string",o:1,max:64}]),Ln=d("gem.deviceSettings.put",[{n:"requestId",k:"string",max:64},{n:"settings",k:"json"}]),$n=d("gem.deviceSettings.result",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["stored","too_large","unavailable"]}]),jn=d("gem.requestAd",[{n:"requestId",k:"string",max:64},{n:"placement",k:"string",max:32},{n:"format",k:"enum",v:["interstitial","rewarded"]}]),Mn=d("gem.adResult",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["shown","no_ad","unavailable"]}]),Fn=d("gem.requestSignIn",[{n:"requestId",k:"string",max:64}]),Un=d("gem.signInResult",[{n:"requestId",k:"string",max:64},{n:"outcome",k:"enum",v:["signed_in","declined","unavailable"]}]);U({"gem.handshake":ze,"gem.handshake.accept":We,"gem.token":Ke,"gem.token.denied":Je,"gem.player":Ye,"gem.pause":Xe,"gem.prefs":Qe,"gem.cohorts":Ze,"gem.viewport":en,"gem.deviceSettings":nn,"gem.willTerminate":tn,"gem.roomEvent":rn,"gem.socketState":on,"gem.seatedEvent":sn,"gem.autoStartFailedEvent":an,"gem.signalEvent":ln,"gem.dedicatedEvent":un,"gem.partyResult":dn,"gem.clusterTarget":cn,"gem.devtools":mn,"gem.screenshot":gn,"gem.screenshot.denied":pn,"gem.requestContext":yn,"gem.gameContext":fn,"gem.signal":hn,"gem.dedicatedOffer":_n,"gem.partyRequest":vn,"gem.ready":bn,"gem.progress":Rn,"gem.requestToken":xn,"gem.requestLocalServer":Sn,"gem.localServer":kn,"gem.localServer.denied":wn,"gem.exit":An,"gem.openExternal":Tn,"gem.requestFullscreen":On,"gem.audioState":Pn,"gem.rewardCue":Gn,"gem.frameStats":In,"gem.error":En,"gem.requestPurchase":Cn,"gem.purchaseResult":qn,"gem.deviceSettings.put":Ln,"gem.deviceSettings.result":$n,"gem.requestAd":jn,"gem.adResult":Mn,"gem.requestSignIn":Fn,"gem.signInResult":Un});var P={now:()=>Date.now(),setTimeout:(n,e)=>setTimeout(n,e),clearTimeout:n=>clearTimeout(n)};var Bn=1e4;function te(n,e){return B(n,e)}function B(n,e){if(typeof n.serverToken!="function"||typeof n.onServerToken!="function")throw new Error("this runtime delivers no game-server token: host.serverToken/onServerToken are missing. The server image running this bundle predates token delivery \u2014 the bundle cannot call gem-api on it.");let t=a=>({token:a.token,expiresAt:a.expiresAt,chainEndsAt:Number.POSITIVE_INFINITY}),r=null,o=new L({clock:e.clock,...e.onStateChange===void 0?{}:{onStateChange:e.onStateChange},request:()=>new Promise((a,l)=>{let u=e.clock.setTimeout(()=>{r=null,l({reason:"unavailable",retryable:true});},e.timeoutMs??Bn);r={resolve:c=>{e.clock.clearTimeout(u),a(c);},reject:l,timer:u};})}),s=n.onServerToken(a=>{let l=t(a),u=r;if(u){r=null,u.resolve(l);return}o.accept(l);});return {source:o,dispose(){s(),r&&(e.clock.clearTimeout(r.timer),r.reject({reason:"unavailable",retryable:false}),r=null);}}}var N={};fe(N,{acceptTransfer:()=>Hn,addEntityProgression:()=>Nn,adminAction:()=>Dn,cancelInventoryTransfer:()=>Vn,claimEntityProgressionRewards:()=>zn,closeGameRoom:()=>Wn,createEntityBatchOrder:()=>Kn,createEntityOrder:()=>Jn,createSession:()=>Yn,deleteEntityGameSetting:()=>Xn,deleteEntitySave:()=>Qn,deleteSession:()=>Zn,executeEntityRecipe:()=>et,finalizeSaveUpload:()=>nt,getDropRates:()=>tt,getEntityCurrency:()=>rt,getEntityGameSetting:()=>ot,getEntityInventory:()=>st,getEntityInventoryItem:()=>it,getEntityLeaderboard:()=>at,getEntityOrder:()=>lt,getEntityProgression:()=>ut,getEntityRecipeAvailability:()=>dt,getEntityRecipeUsage:()=>ct,getEntitySave:()=>mt,getEvent:()=>gt,getGameRoomV2:()=>pt,getLeaderboard:()=>yt,getPurchaseCatalog:()=>ft,getResolvedTemplate:()=>ht,getRoomArgs:()=>_t,getTransferDetails:()=>vt,ingestAnalyticsEvents:()=>H,initiateInventoryTransfer:()=>bt,invokeFunction:()=>Rt,kickPlayer:()=>xt,listChallenges:()=>St,listEntityGameSettings:()=>kt,listEntityOrders:()=>wt,listEntityProgressions:()=>At,listEntitySaves:()=>Tt,listEvents:()=>Ot,listGameRooms:()=>Pt,listResolvedTemplates:()=>Gt,listTransfers:()=>It,putEntityGameSetting:()=>Et,putRoomArgs:()=>Ct,rejectTransfer:()=>qt,requestSaveUploadUrl:()=>Lt,resetEntityProgression:()=>$t,simulateEntityOrder:()=>jt,transferHostV2:()=>Mt,updateGameRoomV2:()=>Ft});function i(n){let e=String(n);if(!/^[A-Za-z0-9_.-]{1,128}$/.test(e)||e==="."||e==="..")throw new TypeError(`${JSON.stringify(e)} is not a usable path segment \u2014 it is interpolated into a URL`);return encodeURIComponent(e)}async function Hn(n,e,t){let r=`/v1/inventory/transfers/${i(e)}/accept`;return n.client.post(r,void 0,t?.signal)}async function Nn(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}/add`;return n.client.post(a,o,s?.signal)}async function Dn(n,e,t,r){let o=`/v1/voice/sessions/${i(e)}/admin`;return n.client.post(o,t,r?.signal)}async function Vn(n,e,t){let r=`/v1/inventory/transfers/${i(e)}/cancel`;return n.client.post(r,void 0,t?.signal)}async function zn(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}/claim`;return n.client.post(a,o,s?.signal)}async function Wn(n,e,t){let r=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}`;return n.client.delete(r,t?.signal)}async function Kn(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders/batch`;return n.client.post(s,r,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function Jn(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders`;return n.client.post(s,r,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function Yn(n,e,t){return n.client.post("/v1/voice/sessions",e,t?.signal)}async function Xn(n,e,t,r,o){let s=`/v1/settings/${i(e)}/${i(t)}/${i(r)}`;return n.client.delete(s,o?.signal)}async function Qn(n,e,t,r,o){let s=`/v1/saves/${i(e)}/${i(t)}/${i(r)}`;return n.client.delete(s,o?.signal)}async function Zn(n,e,t){let r=`/v1/voice/sessions/${i(e)}`;return n.client.delete(r,t?.signal)}async function et(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/recipes/execute`;return n.client.post(s,r,o?.signal,{...o?.ifMatch===void 0?{}:{ifMatch:o.ifMatch}})}async function nt(n,e,t,r,o,s){let a=`/v1/saves/${i(e)}/${i(t)}/${i(r)}/finalize`;return n.client.post(a,o,s?.signal)}async function tt(n,e,t){let r=`/v1/inventory/loot-tables/${i(e)}/drop-rates`;return n.client.get(r,t?.signal)}async function rt(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/currencies/${i(r)}`;return n.client.get(s,o?.signal)}async function ot(n,e,t,r,o){let s=`/v1/settings/${i(e)}/${i(t)}/${i(r)}`;return n.client.getWithEtag(s,{...o?.signal===void 0?{}:{signal:o.signal},...o?.ifNoneMatch===void 0?{}:{ifNoneMatch:o.ifNoneMatch}})}async function st(n,e,t,r){let o=new URLSearchParams;r?.include_buckets!==void 0&&o.set("include_buckets",String(r?.include_buckets)),r?.include_custom_data!==void 0&&o.set("include_custom_data",String(r?.include_custom_data)),r?.currency_limit!==void 0&&o.set("currency_limit",String(r?.currency_limit)),r?.currency_cursor!==void 0&&o.set("currency_cursor",String(r?.currency_cursor)),r?.item_limit!==void 0&&o.set("item_limit",String(r?.item_limit)),r?.item_cursor!==void 0&&o.set("item_cursor",String(r?.item_cursor)),r?.progression_limit!==void 0&&o.set("progression_limit",String(r?.progression_limit)),r?.progression_cursor!==void 0&&o.set("progression_cursor",String(r?.progression_cursor));let s=o.toString(),a=`/v1/inventory/${i(e)}/${i(t)}`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function it(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/items/${i(r)}`;return n.client.get(s,o?.signal)}async function at(n,e,t,r,o){let s=new URLSearchParams;o?.bucket_1!==void 0&&s.set("bucket_1",String(o?.bucket_1)),o?.bucket_2!==void 0&&s.set("bucket_2",String(o?.bucket_2)),o?.limit!==void 0&&s.set("limit",String(o?.limit));let a=s.toString(),l=`/v1/leaderboards/${i(e)}/${i(t)}/${i(r)}`+(a?`?${a}`:"");return n.client.get(l,o?.signal)}async function lt(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders/${i(r)}`;return n.client.get(s,o?.signal)}async function ut(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}`;return n.client.get(s,o?.signal)}async function dt(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/catalogs/${i(r)}/recipes/${i(o)}/availability`;return n.client.get(a,s?.signal)}async function ct(n,e,t,r){let o=new URLSearchParams;r?.limit!==void 0&&o.set("limit",String(r?.limit));let s=o.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/recipe-usage`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function mt(n,e,t,r,o){let s=`/v1/saves/${i(e)}/${i(t)}/${i(r)}`;return n.client.getWithEtag(s,{...o?.signal===void 0?{}:{signal:o.signal},...o?.ifNoneMatch===void 0?{}:{ifNoneMatch:o.ifNoneMatch}})}async function gt(n,e,t){let r=`/v1/events/${i(e)}`;return n.client.get(r,t?.signal)}async function pt(n,e,t){let r=`/v2/games/${i(n.gameId())}/game-rooms/${i(e)}`;return n.client.getWithEtag(r,{...t?.signal===void 0?{}:{signal:t.signal},...t?.ifNoneMatch===void 0?{}:{ifNoneMatch:t.ifNoneMatch}})}async function yt(n,e,t){let r=new URLSearchParams;t?.bucket_1!==void 0&&r.set("bucket_1",String(t?.bucket_1)),t?.bucket_2!==void 0&&r.set("bucket_2",String(t?.bucket_2));let o=r.toString(),s=`/v1/leaderboards/${i(e)}`+(o?`?${o}`:"");return n.client.get(s,t?.signal)}async function ft(n,e){let t=new URLSearchParams;e?.config_version!==void 0&&t.set("config_version",String(e?.config_version));let r=t.toString(),o="/v1/inventory/platform-funded-game-inventory-purchase-catalog"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function ht(n,e,t){let r=`/v1/game-room-templates/${i(e)}`;return n.client.get(r,t?.signal)}async function _t(n,e,t){let r=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}/room-args`;return n.client.get(r,t?.signal)}async function vt(n,e,t){let r=`/v1/inventory/transfers/${i(e)}`;return n.client.get(r,t?.signal)}async function H(n,e,t){let r=`/v1/games/${i(n.gameId())}/analytics/events`;return n.client.post(r,e,t?.signal,{replaySafe:true})}async function bt(n,e,t){return n.client.post("/v1/inventory/transfers",e,t?.signal)}async function Rt(n,e,t){return n.client.postBytes("/v1/functions/invoke",e,t?.signal)}async function xt(n,e,t,r){let o=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}/kick/${i(t)}`;return n.client.post(o,void 0,r?.signal)}async function St(n,e){let t=new URLSearchParams;e?.periods_back!==void 0&&t.set("periods_back",String(e?.periods_back));let r=t.toString(),o="/v1/challenges"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function kt(n,e,t,r){let o=`/v1/settings/${i(e)}/${i(t)}`;return n.client.get(o,r?.signal)}async function wt(n,e,t,r){let o=new URLSearchParams;r?.limit!==void 0&&o.set("limit",String(r?.limit)),r?.cursor!==void 0&&o.set("cursor",String(r?.cursor));let s=o.toString(),a=`/v1/inventory/${i(e)}/${i(t)}/orders`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function At(n,e,t,r){let o=`/v1/inventory/${i(e)}/${i(t)}/progressions`;return n.client.get(o,r?.signal)}async function Tt(n,e,t,r){let o=new URLSearchParams;r?.limit!==void 0&&o.set("limit",String(r?.limit)),r?.cursor!==void 0&&o.set("cursor",String(r?.cursor));let s=o.toString(),a=`/v1/saves/${i(e)}/${i(t)}`+(s?`?${s}`:"");return n.client.get(a,r?.signal)}async function Ot(n,e){let t=new URLSearchParams;e?.include_inactive!==void 0&&t.set("include_inactive",String(e?.include_inactive)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.offset!==void 0&&t.set("offset",String(e?.offset));let r=t.toString(),o="/v1/events"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function Pt(n,e){let t=new URLSearchParams;e?.status!==void 0&&t.set("status",String(e?.status)),e?.game_channel!==void 0&&t.set("game_channel",String(e?.game_channel)),e?.game_room_type!==void 0&&t.set("game_room_type",String(e?.game_room_type)),e?.template_id!==void 0&&t.set("template_id",String(e?.template_id)),e?.template_slug!==void 0&&t.set("template_slug",String(e?.template_slug)),e?.limit!==void 0&&t.set("limit",String(e?.limit)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor));let r=t.toString(),o=`/v1/games/${i(n.gameId())}/game-rooms`+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function Gt(n,e){return n.client.get("/v1/game-room-templates",e?.signal)}async function It(n,e){let t=new URLSearchParams;e.entity_type!==void 0&&t.set("entity_type",String(e.entity_type)),e.entity_id!==void 0&&t.set("entity_id",String(e.entity_id)),e?.direction!==void 0&&t.set("direction",String(e?.direction)),e?.status!==void 0&&t.set("status",String(e?.status)),e?.cursor!==void 0&&t.set("cursor",String(e?.cursor)),e?.limit!==void 0&&t.set("limit",String(e?.limit));let r=t.toString(),o="/v1/inventory/transfers"+(r?`?${r}`:"");return n.client.get(o,e?.signal)}async function Et(n,e,t,r,o,s){let a=`/v1/settings/${i(e)}/${i(t)}/${i(r)}`;return n.client.put(a,o,s?.signal,{...s?.ifMatch===void 0?{}:{ifMatch:s.ifMatch}})}async function Ct(n,e,t,r){let o=`/v1/games/${i(n.gameId())}/game-rooms/${i(e)}/room-args`;return n.client.put(o,t,r?.signal)}async function qt(n,e,t){let r=`/v1/inventory/transfers/${i(e)}/reject`;return n.client.post(r,void 0,t?.signal)}async function Lt(n,e,t,r,o,s){let a=`/v1/saves/${i(e)}/${i(t)}/${i(r)}/upload-url`;return n.client.post(a,o,s?.signal,{replaySafe:true})}async function $t(n,e,t,r,o,s){let a=`/v1/inventory/${i(e)}/${i(t)}/progressions/${i(r)}/reset`;return n.client.post(a,o,s?.signal)}async function jt(n,e,t,r,o){let s=`/v1/inventory/${i(e)}/${i(t)}/orders/simulate`;return n.client.post(s,r,o?.signal)}async function Mt(n,e,t,r){let o=`/v2/games/${i(n.gameId())}/game-rooms/${i(e)}/transfer/${i(t)}`;return n.client.post(o,void 0,r?.signal)}async function Ft(n,e,t,r){let o=`/v2/games/${i(n.gameId())}/game-rooms/${i(e)}`;return n.client.patch(o,t,r?.signal,{...r?.ifMatch===void 0?{}:{ifMatch:r.ifMatch}})}var re="gem_";var Ht=1e4,Nt=50,Dt=1e3,Vt=65536-4*1024,oe=n=>typeof n=="number"?n:0,zt=n=>typeof n=="string"?n:"";function se(){let n=globalThis.crypto;return typeof n?.randomUUID=="function"?n.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.floor(Math.random()*16);return (e==="x"?t:t&3|8).toString(16)})}function Wt(n){return n?.retryable===true}function Kt(n,e){let t=n??{},r=Array.isArray(t.rejected)?t.rejected.map(o=>{let s=o??{};return {index:oe(s.index),code:zt(s.code)}}):[];return {accepted:oe(t.accepted),rejected:r,dropped:e,duplicate:t.duplicate===true}}function ie(n,e){return {event_uid:n.uid,name:n.name,offset_ms:Math.round(n.atMs)-e,player_id:n.playerId,dimensions:n.dimensions,measures:n.measures}}function ae(n){let e=Math.max(1,Math.floor(n.maxQueue??Dt)),t={client:n.client,gameId:()=>n.gameId},r=[],o=0,s=null,a=false,l=false,u=false,c=false,m=f=>{n.log?.(f);},_=()=>{s!==null&&(n.clock.clearTimeout(s),s=null);},b=()=>{s!==null||a||l||(s=n.clock.setTimeout(()=>{s=null,R().catch(()=>{});},Ht));},y=()=>{let f=Math.min(r.length,100),x=128;for(let k=0;k<f;k+=1){let w=r[k];if(w===void 0)break;if(x+=JSON.stringify(ie(w,0)).length+1,x>Vt)return Math.max(1,k)}return f};async function R(f){if(r.length===0)return {accepted:0,rejected:[],dropped:0,duplicate:false};_();let x=r.splice(0,y()),k=o;o=0;let w=Math.round(n.clock.now()),q={batch_id:se(),sent_at_ms:w,events:x.map(S=>ie(S,w))};l=true;try{let S=await H(t,q,f===void 0?void 0:{signal:f}),A=Kt(S,k);for(let pe of A.rejected)m(`[gem] analytics: an event was refused (${pe.code}). See the analytics_events section of your game config.`);return A}catch(S){if(Wt(S))for(r=[...x,...r],o+=k;r.length>e;)r.shift(),o+=1;else m(`[gem] analytics: ${x.length} event(s) were discarded \u2014 the platform refused the batch and will refuse it again: ${String(S)}`);throw S}finally{l=false,r.length>0&&b();}}return {track(f,x,k={}){if(a)return;if(typeof f!="string"||f===""){c||(c=true,m(`[gem] analytics: '${x}' was not recorded \u2014 an event from a server has to name the player it is about. A game-server token names no player, so the platform cannot infer one; pass the id from join() or host.players().`));return}if(x.startsWith(re)){u||(u=true,m(`[gem] analytics: '${x}' was not recorded \u2014 the gem_ prefix is reserved, and the platform's own events are client-sourced, so a server may not emit one at all. Name your event something else.`));return}let w={},q={};for(let[S,A]of Object.entries(k))typeof A=="string"?w[S]=A:typeof A=="number"&&Number.isFinite(A)&&(q[S]=A);for(;r.length>=e;)r.shift(),o+=1;r.push({uid:se(),playerId:f,name:x,atMs:n.clock.now(),dimensions:w,measures:q}),r.length>=Nt?R().catch(()=>{}):b();},flush:f=>R(f),get pending(){return r.length},dispose(){a=true,_(),r=[],o=0;}}}var Jt=new Map([["function_error",false],["function_failed",false],["function_timeout",false],["function_not_published",false],["function_input_too_large",false],["functions_not_configured",false],["forbidden",false],["function_capacity_unavailable",true],["function_host_unreachable",true],["function_host_error",true],["rate_limited",true],["service_unavailable",true]]),E=class extends g{constructor(e,t){super(e.reason,e.status,e.detail,e.retryAfterSeconds,e.code),this.name="GemFunctionError",Object.assign(this,t);}get retryable(){return (this.code===void 0?void 0:Jt.get(this.code))??super.retryable}},G=class{#e;constructor(e){this.#e=e;}async invoke(e,t={}){let r=Yt(e),o;try{o=await this.#e(r,t.signal===void 0?{}:{signal:t.signal});}catch(s){throw s instanceof g?Qt(s):s}return Xt(o)}};function Yt(n){if(n instanceof ArrayBuffer)return new Uint8Array(n);if(ArrayBuffer.isView(n))return new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let e;try{e=JSON.stringify(n);}catch(t){throw new p(`the function input could not be serialised to JSON: ${String(t)}. Pass bytes, or a value JSON can carry. This is a bug in the call, not a server failure.`)}if(e===void 0)throw new p(`the function input is ${typeof n}, which JSON cannot carry. Pass bytes \u2014 an empty Uint8Array for no input \u2014 or a JSON value. This is a bug in the call, not a server failure.`);return new TextEncoder().encode(e)}function Xt(n){let{bytes:e}=n,t=()=>new TextDecoder("utf-8",{fatal:true}).decode(e);return {bytes:e,...n.invocationId===void 0?{}:{invocationId:n.invocationId},text:t,json:()=>JSON.parse(t())}}function Qt(n){let{details:e,invocationId:t}=Y(n),o=e?.untrusted?.message,s=e?.reason;return new E(n,{...t===void 0?{}:{invocationId:t},...n.code==="function_error"&&typeof o=="string"?{functionMessage:o}:{},...n.code==="function_failed"&&typeof s=="string"?{failure:s}:{}})}function Zt(n){let e={};for(let[t,r]of Object.entries(N))if(typeof r=="function"){let o=r;e[t]=(...s)=>o(n,...s);}return e}function M(n,e={}){let t=e.clock??P,r=e.baseUrl??n.apiBaseUrl;if(!r)throw new Error("this runtime names no gem-api host (host.apiBaseUrl is missing). The server image running this bundle predates token delivery \u2014 the bundle cannot call gem-api on it.");let o=B(n,{clock:t,...e.onAuthStateChange===void 0?{}:{onStateChange:e.onAuthStateChange}}),s=X({baseUrl:r,tokenSource:o.source,defaultQuery:{game_id:n.gameId,channel:n.channel},...e.fetch===void 0?{}:{fetch:e.fetch}}),a=new T({transport:s,clock:t}),l={gameId:n.gameId,channel:n.channel,matchId:n.matchId,...n.gameRoomId===void 0?{}:{gameRoomId:n.gameRoomId}},u=Zt({client:a,gameId:()=>l.gameId}),c=l.gameRoomId,m=n.endMatch,_=n.log,b=ae({client:a,clock:t,gameId:l.gameId,...typeof _=="function"?{log:R=>_.call(n,R)}:{}});return {identity:l,client:a,api:u,match:{end:async()=>{if(m===void 0)throw new Error("this runtime cannot end the match: the server image running this bundle predates host.endMatch, and only the platform half holds the allocation proof an end needs.");await m.call(n);}},analytics:b,functions:new G(u.invokeFunction),...c===void 0?{}:{room:{get:R=>u.getGameRoomV2(c,R),args:R=>u.getRoomArgs(c,R)}},dispose:()=>{b.dispose(),o.dispose();}}}var er=["explicit","stale_cleanup","game_room_closed","replaced","migration_failed","host_left","insufficient_players","all_left","expired","migration_rate_exceeded","game_room_gone","failed","idle","reclaimed"],nr=new Set(er);function le(n){return typeof n=="string"&&nr.has(n)?n:"unknown"}var v=class{#e;constructor(e){this.#e=e,Object.freeze(this);}toString(){return "[gem: use gem.text.toPlain()]"}toJSON(){return this.toString()}get[Symbol.toStringTag](){return "PlayerText"}static unwrap(e){return e.#e}};function C(n){return new v(n)}var ue={toPlain(n){return v.unwrap(n)},compare(n,e,t){let r=n instanceof v?v.unwrap(n):n,o=e instanceof v?v.unwrap(e):e,s;try{s=new Intl.Collator(t);}catch{s=new Intl.Collator;}return s.compare(r,o)},equals(n,e){let t=n instanceof v?v.unwrap(n):n,r=e instanceof v?v.unwrap(e):e;return t.normalize("NFC")===r.normalize("NFC")}};var de="the match has not started yet: the runtime hands over the host at `init`, and this was read before that. Read it from `init` or later \u2014 a bundle that needs a value at module scope is reading it one call too early.";function D(n,e={}){let t=e.clock??P,r=()=>{let l=n();if(l===null)throw new Error(de);return l},o=null,s=()=>{if(o===null)throw new Error(de);return o};return {server:{get identity(){return s().identity},get client(){return s().client},get api(){return s().api},get match(){return s().match},get analytics(){return s().analytics},get functions(){return s().functions},get room(){return s().room},dispose(){o?.dispose();},get sizeClass(){return r().sizeClass},get roomArgs(){return r().roomArgs},get roster(){return r().roster},players(){return r().players()},profile(l){let c=r().profile?.(l);if(!c)return null;let m=c.displayName;return typeof m!="string"||m===""?null:{displayName:C(m),...typeof c.displayTag=="string"&&c.displayTag!==""?{displayTag:C(c.displayTag)}:{},...typeof c.discriminator=="string"?{discriminator:c.discriminator}:{}}},playerNumber(l){return r().playerNumber?.(l)},send(l,u,c){c===void 0?r().send(l,u):r().send(l,u,c);},broadcast(l,u){u===void 0?r().broadcast(l):r().broadcast(l,u);},kick(l,u){u===void 0?r().kick(l):r().kick(l,u);},log(l){r().log(l);},warn(l){r().warn(l);}},attach:()=>{o=M(r(),{...e,clock:t});}}}function ce(n,e={}){let{server:t,attach:r}=D(()=>n,e);return r(),t}function tr(n){if(n===void 0||typeof n.reason!="string"||n.reason==="")return;let e=n.platform_reason??n.endedReason;return {reason:n.reason,...e===void 0?{}:{endedReason:le(e)}}}function me(n,e={}){return ()=>{let t=null,{server:r,attach:o}=D(()=>t,e),s=n(r),a={async init(l){t=l,o(),await s.init?.();},async shutdown(l){let u=tr(l);try{await s.shutdown?.(u);}finally{r.dispose();}}};return s.join&&(a.join=(l,u)=>s.join?.(l,u)),s.leave&&(a.leave=(l,u)=>s.leave?.(l,u)),s.message&&(a.message=(l,u,c,m)=>s.message?.(l,u,c,m)),a}}var rr=new Set(["unlocked","already_unlocked","suppressed"]);function ge(n){let e=n?.changes;if(!Array.isArray(e))return [];let t=[];for(let r of e){let o=r??{};if(o.type!=="achievement_unlocked"||typeof o.outcome!="string"||!rr.has(o.outcome)||typeof o.achievement_id!="string"||o.achievement_id==="")continue;let s=o.outcome;t.push({achievementId:o.achievement_id,progressionDefinitionId:typeof o.progression_definition_id=="string"?o.progression_definition_id:"",points:s==="unlocked"&&typeof o.points=="number"&&Number.isFinite(o.points)?o.points:0,outcome:s,...typeof o.reason=="string"?{reason:o.reason}:{}});}return t}
|
|
2
|
+
export{h as AuthError,$ as CONDITIONAL_HEADERS,G as FunctionsApi,g as GemApiError,T as GemClient,E as GemFunctionError,v as PlayerText,p as TransportRefusal,ge as achievementReceipts,C as asPlayerText,M as createGemServer,te as createHostTokenSource,ce as createMatchServer,me as defineServer,P as systemClock,ue as text,W as toBase64};//# sourceMappingURL=gem-web-sdk.server.js.map
|
|
3
3
|
//# sourceMappingURL=gem-web-sdk.server.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -128,6 +128,14 @@ interface GemPlayer {
|
|
|
128
128
|
}[];
|
|
129
129
|
readonly displayTag: string;
|
|
130
130
|
readonly avatarUrl?: string;
|
|
131
|
+
readonly boost?: {
|
|
132
|
+
multipliers: {
|
|
133
|
+
currencyId: string;
|
|
134
|
+
currencySlug: string;
|
|
135
|
+
multiplierBp: number;
|
|
136
|
+
}[];
|
|
137
|
+
expiresInDays?: number;
|
|
138
|
+
};
|
|
131
139
|
}
|
|
132
140
|
interface GemPause {
|
|
133
141
|
readonly gem: typeof PROTOCOL;
|
|
@@ -584,6 +592,14 @@ interface SendPlayerInput {
|
|
|
584
592
|
readonly itemId: string;
|
|
585
593
|
readonly iconUrl: string;
|
|
586
594
|
}[];
|
|
595
|
+
readonly boost?: {
|
|
596
|
+
readonly multipliers: readonly {
|
|
597
|
+
readonly currencyId: string;
|
|
598
|
+
readonly currencySlug: string;
|
|
599
|
+
readonly multiplierBp: number;
|
|
600
|
+
}[];
|
|
601
|
+
readonly expiresInDays?: number;
|
|
602
|
+
};
|
|
587
603
|
}
|
|
588
604
|
interface RoomEventRelay {
|
|
589
605
|
readonly event: "updated" | "match_started" | "match_ready" | "match_failed" | "version_stale";
|
|
@@ -775,6 +791,16 @@ interface ClusterTargetSource {
|
|
|
775
791
|
accept(clusterTargetId: ClusterTargetLike, clusterTargetIds?: unknown): void;
|
|
776
792
|
}
|
|
777
793
|
declare function createClusterTargetSource(options: ClusterTargetSourceOptions): ClusterTargetSource;
|
|
794
|
+
interface PlayerBoostMultiplier {
|
|
795
|
+
readonly currencyId: string;
|
|
796
|
+
readonly currencySlug: string;
|
|
797
|
+
readonly multiplier: number;
|
|
798
|
+
}
|
|
799
|
+
interface PlayerBoost {
|
|
800
|
+
readonly active: boolean;
|
|
801
|
+
readonly multipliers: readonly PlayerBoostMultiplier[];
|
|
802
|
+
readonly expiresInDays?: number;
|
|
803
|
+
}
|
|
778
804
|
interface PlayerBadge {
|
|
779
805
|
readonly itemId: string;
|
|
780
806
|
readonly iconUrl: string;
|
|
@@ -801,6 +827,7 @@ interface FramePlayer extends PlayerIdentity {
|
|
|
801
827
|
readonly displayName: PlayerText;
|
|
802
828
|
readonly displayHandle: PlayerText;
|
|
803
829
|
readonly avatarUrl?: string;
|
|
830
|
+
readonly boost: PlayerBoost;
|
|
804
831
|
}
|
|
805
832
|
interface FrameCallbacks {
|
|
806
833
|
onToken?(msg: GemToken): void;
|