@phantomclient/plugin 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2475,15 +2475,37 @@ declare class Side {
2475
2475
  private read;
2476
2476
  private checked;
2477
2477
  }
2478
+ type LicensePlan = "monthly" | "lifetime";
2479
+ type PhantomPerks = {
2480
+ mark: boolean;
2481
+ planMark: boolean;
2482
+ title: string[];
2483
+ accent: string;
2484
+ phantomLook: boolean;
2485
+ tint: number;
2486
+ pet: PerkPet | null;
2487
+ };
2488
+ type PerkPet = {
2489
+ name: string[];
2490
+ animal: number | null;
2491
+ tint: number;
2492
+ };
2478
2493
  type HiddenPlayer = {
2479
2494
  screenName: string;
2480
2495
  };
2496
+ type NearbyPhantomUser = {
2497
+ screenName: string;
2498
+ perks: PhantomPerks;
2499
+ plan: LicensePlan | null;
2500
+ };
2481
2501
  type CommunityChannel = {
2482
2502
  hidden(): Promise<readonly HiddenPlayer[]>;
2483
2503
  onHidden(listener: (hidden: readonly HiddenPlayer[]) => void): Unsubscribe;
2484
2504
  hide(screenName: string): Promise<void>;
2485
2505
  unhide(screenName: string): Promise<void>;
2486
2506
  report(screenName: string, reason: string): Promise<void>;
2507
+ nearby(): readonly NearbyPhantomUser[];
2508
+ onNearby(listener: (nearby: readonly NearbyPhantomUser[]) => void): Unsubscribe;
2487
2509
  };
2488
2510
  declare class CommunityApi {
2489
2511
  private readonly channel;
@@ -2491,9 +2513,12 @@ declare class CommunityApi {
2491
2513
  get available(): boolean;
2492
2514
  hidden(): Promise<readonly HiddenPlayer[]>;
2493
2515
  onHidden(listener: (hidden: readonly HiddenPlayer[]) => void): Unsubscribe;
2516
+ watchHidden(listener: (hidden: readonly HiddenPlayer[]) => void): Unsubscribe;
2494
2517
  hide(screenName: string): Promise<void>;
2495
2518
  unhide(screenName: string): Promise<void>;
2496
2519
  report(screenName: string, reason?: string): Promise<void>;
2520
+ nearby(): readonly NearbyPhantomUser[];
2521
+ onNearby(listener: (nearby: readonly NearbyPhantomUser[]) => void): Unsubscribe;
2497
2522
  private reach;
2498
2523
  }
2499
2524
  type ContentMatch = {
@@ -2597,6 +2622,25 @@ declare class ContentApi {
2597
2622
  private whenLoaded;
2598
2623
  private reach;
2599
2624
  }
2625
+ type PhantomRoomObjectRefusal = "held" | "not-held" | "too-many" | "bad";
2626
+ type RealtimeChannelSpec = {
2627
+ scope: "room";
2628
+ } | {
2629
+ scope: "plugin";
2630
+ } | {
2631
+ scope: "named";
2632
+ name: string;
2633
+ split?: boolean;
2634
+ };
2635
+ type RealtimeScope = RealtimeChannelSpec["scope"];
2636
+ type RealtimeObject = Record<string, unknown>;
2637
+ type RealtimeMember<Presence = RealtimeObject> = {
2638
+ id: string;
2639
+ screenName: string;
2640
+ presence?: Presence;
2641
+ };
2642
+ type RealtimeCloseReason = "left" | "banned" | "killed" | "rate-limited" | "offline";
2643
+ type RealtimeAskFailure = "no-handler" | "failed";
2600
2644
  type CustomRoomPicture = string | Uint8Array;
2601
2645
  type CustomRoomMotion = {
2602
2646
  pulse?: {
@@ -2641,7 +2685,10 @@ type CustomRoomProp = {
2641
2685
  y: number;
2642
2686
  width?: number;
2643
2687
  height?: number;
2644
- layer?: "floor" | "standing" | "front";
2688
+ layer?: "floor" | "standing" | "front" | "top";
2689
+ sortHeight?: number;
2690
+ scaleX?: number;
2691
+ scaleY?: number;
2645
2692
  motion?: CustomRoomMotion;
2646
2693
  frames?: CustomRoomFrames;
2647
2694
  solid?: boolean;
@@ -2649,6 +2696,8 @@ type CustomRoomProp = {
2649
2696
  clickable?: boolean;
2650
2697
  nearDistance?: number;
2651
2698
  bounce?: boolean;
2699
+ changeable?: boolean;
2700
+ shared?: boolean;
2652
2701
  };
2653
2702
  type CustomRoomExit = {
2654
2703
  id: string;
@@ -2656,6 +2705,73 @@ type CustomRoomExit = {
2656
2705
  y: number;
2657
2706
  radius: number;
2658
2707
  };
2708
+ type CustomRoomDestination = {
2709
+ room: string;
2710
+ } | {
2711
+ jamaa: string;
2712
+ };
2713
+ type CustomRoomDoorway = {
2714
+ id: string;
2715
+ x: number;
2716
+ y: number;
2717
+ radius: number;
2718
+ to: CustomRoomDestination;
2719
+ spawn?: string;
2720
+ };
2721
+ type CustomRoomSpawn = {
2722
+ name: string;
2723
+ x: number;
2724
+ y: number;
2725
+ radius?: number;
2726
+ walkTo?: string;
2727
+ };
2728
+ type CustomRoomVolume = {
2729
+ name: string;
2730
+ area: CustomRoomArea;
2731
+ kind?: number;
2732
+ message?: string;
2733
+ walkTo?: boolean;
2734
+ };
2735
+ type CustomRoomScroll = {
2736
+ xmin: number;
2737
+ xmax: number;
2738
+ ymin: number;
2739
+ ymax: number;
2740
+ };
2741
+ type CustomRoomCharacterLook = {
2742
+ animal?: number;
2743
+ customAnimal?: number;
2744
+ colors?: [
2745
+ number,
2746
+ number,
2747
+ number
2748
+ ];
2749
+ eyes?: number;
2750
+ pattern?: number;
2751
+ wearing?: Array<{
2752
+ defId: number;
2753
+ color?: number;
2754
+ }>;
2755
+ member?: boolean;
2756
+ phantom?: boolean;
2757
+ tint?: number;
2758
+ };
2759
+ type CustomRoomCharacter = {
2760
+ id: string;
2761
+ name: string;
2762
+ x: number;
2763
+ y: number;
2764
+ flipped?: boolean;
2765
+ look?: CustomRoomCharacterLook;
2766
+ greeting?: string;
2767
+ says?: string[];
2768
+ path?: Array<{
2769
+ x: number;
2770
+ y: number;
2771
+ }>;
2772
+ pace?: number;
2773
+ clickable?: boolean;
2774
+ };
2659
2775
  type CustomRoomSpec = {
2660
2776
  name: string;
2661
2777
  width: number;
@@ -2663,16 +2779,144 @@ type CustomRoomSpec = {
2663
2779
  background: CustomRoomPicture;
2664
2780
  walkable?: CustomRoomArea[];
2665
2781
  blocked?: CustomRoomArea[];
2782
+ landWalls?: CustomRoomArea[];
2783
+ airWalls?: CustomRoomArea[];
2666
2784
  spawn: {
2667
2785
  x: number;
2668
2786
  y: number;
2669
2787
  };
2670
2788
  props?: CustomRoomProp[];
2671
2789
  exits?: CustomRoomExit[];
2790
+ characters?: CustomRoomCharacter[];
2672
2791
  music?: {
2673
2792
  track: string;
2674
2793
  volume?: number;
2675
2794
  };
2795
+ spawns?: CustomRoomSpawn[];
2796
+ doorways?: CustomRoomDoorway[];
2797
+ volumes?: CustomRoomVolume[];
2798
+ scroll?: CustomRoomScroll;
2799
+ };
2800
+ type CustomRoomPropState = {
2801
+ id: string;
2802
+ room: string;
2803
+ x: number;
2804
+ y: number;
2805
+ shown: boolean;
2806
+ changed: boolean;
2807
+ };
2808
+ type CustomRoomPropChange = {
2809
+ x?: number;
2810
+ y?: number;
2811
+ shown?: boolean;
2812
+ art?: CustomRoomPicture | null;
2813
+ reset?: boolean;
2814
+ };
2815
+ type CustomRoomPropHandle = {
2816
+ readonly id: string;
2817
+ move(x: number, y: number): Promise<CustomRoomPropState | null>;
2818
+ hide(): Promise<CustomRoomPropState | null>;
2819
+ show(): Promise<CustomRoomPropState | null>;
2820
+ art(picture: CustomRoomPicture | null): Promise<CustomRoomPropState | null>;
2821
+ change(change: CustomRoomPropChange): Promise<CustomRoomPropState | null>;
2822
+ reset(): Promise<CustomRoomPropState | null>;
2823
+ now(): Promise<CustomRoomPropState | null>;
2824
+ };
2825
+ type CustomRoomPropCalls = {
2826
+ changeProp(propId: string, change: CustomRoomPropChange, roomId?: string): Promise<CustomRoomPropState | null>;
2827
+ propState(propId: string, roomId?: string): Promise<CustomRoomPropState | null>;
2828
+ };
2829
+ type CustomRoomCharacterState = {
2830
+ id: string;
2831
+ room: string;
2832
+ name: string;
2833
+ x: number;
2834
+ y: number;
2835
+ shown: boolean;
2836
+ said: number;
2837
+ };
2838
+ type CustomRoomCharacterChange = {
2839
+ say?: string;
2840
+ x?: number;
2841
+ y?: number;
2842
+ walk?: boolean;
2843
+ shown?: boolean;
2844
+ };
2845
+ type CustomRoomCharacterHandle = {
2846
+ readonly id: string;
2847
+ say(text: string): Promise<CustomRoomCharacterState | null>;
2848
+ walk(x: number, y: number): Promise<CustomRoomCharacterState | null>;
2849
+ put(x: number, y: number): Promise<CustomRoomCharacterState | null>;
2850
+ hide(): Promise<CustomRoomCharacterState | null>;
2851
+ show(): Promise<CustomRoomCharacterState | null>;
2852
+ change(change: CustomRoomCharacterChange): Promise<CustomRoomCharacterState | null>;
2853
+ now(): Promise<CustomRoomCharacterState | null>;
2854
+ };
2855
+ type CustomRoomCharacterCalls = {
2856
+ changeCharacter(characterId: string, change: CustomRoomCharacterChange, roomId?: string): Promise<CustomRoomCharacterState | null>;
2857
+ characterState(characterId: string, roomId?: string): Promise<CustomRoomCharacterState | null>;
2858
+ };
2859
+ type CustomRoomLimits = {
2860
+ objects: number;
2861
+ objectTag: number;
2862
+ };
2863
+ type CustomRoomObjectState = {
2864
+ id: string;
2865
+ room: string;
2866
+ holder: string | null;
2867
+ mine: boolean;
2868
+ x: number;
2869
+ y: number;
2870
+ shown: boolean;
2871
+ tag: string | null;
2872
+ changed: boolean;
2873
+ };
2874
+ type CustomRoomObjectChange = {
2875
+ take?: boolean;
2876
+ drop?: boolean;
2877
+ reset?: boolean;
2878
+ x?: number;
2879
+ y?: number;
2880
+ shown?: boolean;
2881
+ tag?: string | null;
2882
+ };
2883
+ type CustomRoomObjectEvent = {
2884
+ room: CustomRoomInfo;
2885
+ objects: CustomRoomObjectState[];
2886
+ by: string | null;
2887
+ yours: boolean;
2888
+ took: boolean;
2889
+ dropped: boolean;
2890
+ };
2891
+ type CustomRoomObjectReason = PhantomRoomObjectRefusal | "gone";
2892
+ declare class CustomRoomObjectError extends Error {
2893
+ readonly reason: CustomRoomObjectReason;
2894
+ readonly object: string;
2895
+ readonly code: string;
2896
+ constructor(reason: CustomRoomObjectReason, object: string, message?: string);
2897
+ }
2898
+ declare function asCustomRoomObjectError(error: unknown): CustomRoomObjectError;
2899
+ type CustomRoomObjectHandle = {
2900
+ readonly id: string;
2901
+ take(change?: CustomRoomObjectChange): Promise<CustomRoomObjectState>;
2902
+ drop(change?: CustomRoomObjectChange): Promise<CustomRoomObjectState>;
2903
+ move(x: number, y: number): Promise<CustomRoomObjectState>;
2904
+ hide(): Promise<CustomRoomObjectState>;
2905
+ show(): Promise<CustomRoomObjectState>;
2906
+ mark(word: string | null): Promise<CustomRoomObjectState>;
2907
+ reset(): Promise<CustomRoomObjectState>;
2908
+ change(change: CustomRoomObjectChange): Promise<CustomRoomObjectState>;
2909
+ now(): Promise<CustomRoomObjectState | null>;
2910
+ onTaken(listener: (event: CustomRoomObjectTurn) => void): Unsubscribe;
2911
+ onDropped(listener: (event: CustomRoomObjectTurn) => void): Unsubscribe;
2912
+ onChanged(listener: (event: CustomRoomObjectTurn) => void): Unsubscribe;
2913
+ };
2914
+ type CustomRoomObjectTurn = {
2915
+ object: CustomRoomObjectState;
2916
+ by: string | null;
2917
+ yours: boolean;
2918
+ took: boolean;
2919
+ dropped: boolean;
2676
2920
  };
2677
2921
  type CustomRoomEnterOptions = {
2678
2922
  shared?: boolean;
@@ -2704,13 +2948,24 @@ type CustomRoomEvent = {
2704
2948
  kind: "propEnter" | "propLeave" | "propNear" | "propClick";
2705
2949
  room: CustomRoomInfo;
2706
2950
  prop: string;
2707
- };
2951
+ } | {
2952
+ kind: "characterClick";
2953
+ room: CustomRoomInfo;
2954
+ character: string;
2955
+ said: string | null;
2956
+ } | ({
2957
+ kind: "objects";
2958
+ } & CustomRoomObjectEvent);
2708
2959
  type SharedRoomListing = {
2709
2960
  name: string;
2710
2961
  title: string;
2711
2962
  people: number;
2712
2963
  };
2713
- type CustomRoomsChannel = {
2964
+ type CustomRoomsChannel = CustomRoomPropCalls & CustomRoomCharacterCalls & {
2965
+ characters(roomId?: string): Promise<CustomRoomCharacterState[]>;
2966
+ changeObject(objectId: string, change: CustomRoomObjectChange, roomId?: string): Promise<CustomRoomObjectState>;
2967
+ objectState(objectId: string, roomId?: string): Promise<CustomRoomObjectState | null>;
2968
+ objects(roomId?: string): Promise<CustomRoomObjectState[]>;
2714
2969
  define(spec: CustomRoomSpec): Promise<string>;
2715
2970
  shared(): Promise<SharedRoomListing[]>;
2716
2971
  remove(roomId: string): Promise<boolean>;
@@ -2727,7 +2982,27 @@ declare class CustomRoomsApi {
2727
2982
  remove(roomId: string): Promise<boolean>;
2728
2983
  enter(roomId: string, options?: CustomRoomEnterOptions): Promise<void>;
2729
2984
  shared(): Promise<SharedRoomListing[]>;
2985
+ prop(id: string, roomId?: string): CustomRoomPropHandle;
2986
+ changeProp(propId: string, change: CustomRoomPropChange, roomId?: string): Promise<CustomRoomPropState | null>;
2987
+ propState(propId: string, roomId?: string): Promise<CustomRoomPropState | null>;
2988
+ character(id: string, roomId?: string): CustomRoomCharacterHandle;
2989
+ changeCharacter(characterId: string, change: CustomRoomCharacterChange, roomId?: string): Promise<CustomRoomCharacterState | null>;
2990
+ characterState(characterId: string, roomId?: string): Promise<CustomRoomCharacterState | null>;
2991
+ characters(roomId?: string): Promise<CustomRoomCharacterState[]>;
2992
+ onCharacterClick(listener: (event: {
2993
+ room: CustomRoomInfo;
2994
+ character: string;
2995
+ said: string | null;
2996
+ }) => void): Unsubscribe;
2997
+ get limits(): CustomRoomLimits;
2998
+ object(id: string, roomId?: string): CustomRoomObjectHandle;
2999
+ changeObject(objectId: string, change: CustomRoomObjectChange, roomId?: string): Promise<CustomRoomObjectState>;
3000
+ objectState(objectId: string, roomId?: string): Promise<CustomRoomObjectState | null>;
3001
+ objects(roomId?: string): Promise<CustomRoomObjectState[]>;
3002
+ onObject(listener: (event: CustomRoomObjectEvent) => void): Unsubscribe;
2730
3003
  leave(): Promise<boolean>;
3004
+ private readonly opened;
3005
+ open(spec: CustomRoomSpec, options?: CustomRoomEnterOptions): Promise<string>;
2731
3006
  get current(): CustomRoomInfo | null;
2732
3007
  onEnter(listener: (room: CustomRoomInfo) => void): Unsubscribe;
2733
3008
  onLeave(listener: (event: {
@@ -2764,24 +3039,16 @@ declare class CustomRoomsApi {
2764
3039
  private on;
2765
3040
  private reach;
2766
3041
  }
2767
- type RealtimeChannelSpec = {
2768
- scope: "room";
2769
- } | {
2770
- scope: "plugin";
2771
- } | {
2772
- scope: "named";
2773
- name: string;
2774
- split?: boolean;
2775
- };
2776
- type RealtimeScope = RealtimeChannelSpec["scope"];
2777
- type RealtimeObject = Record<string, unknown>;
2778
- type RealtimeMember<Presence = RealtimeObject> = {
2779
- id: string;
2780
- screenName: string;
2781
- presence?: Presence;
3042
+ type RealtimeLimits = {
3043
+ messageBytes: number;
3044
+ stateBytes: number;
3045
+ presenceBytes: number;
3046
+ messagesPerSecond: number;
3047
+ updatesPerSecond: number;
3048
+ members: number;
3049
+ channels: number;
3050
+ nameLength: number;
2782
3051
  };
2783
- type RealtimeCloseReason = "left" | "banned" | "killed" | "rate-limited" | "offline";
2784
- type RealtimeAskFailure = "no-handler" | "failed";
2785
3052
  type RealtimeState = "off" | "connecting" | "online" | "offline" | "refused";
2786
3053
  type RealtimeStatus = {
2787
3054
  state: RealtimeState;
@@ -2828,6 +3095,12 @@ type RealtimeHostEvent<Presence extends RealtimeObject = RealtimeObject> = {
2828
3095
  you: boolean;
2829
3096
  hosted: boolean;
2830
3097
  };
3098
+ type RealtimeHosting<Presence extends RealtimeObject = RealtimeObject> = {
3099
+ host: RealtimeMember<Presence> | null;
3100
+ you: boolean;
3101
+ hosted: boolean;
3102
+ hidden: boolean;
3103
+ };
2831
3104
  type RealtimeAsk<Question = unknown> = {
2832
3105
  channel: string;
2833
3106
  id: string;
@@ -2930,8 +3203,19 @@ declare class RealtimeChannel<Data = unknown, State extends RealtimeObject = Rea
2930
3203
  private hostAt;
2931
3204
  private hostIsHidden;
2932
3205
  private closedWith;
3206
+ private queued;
3207
+ private waiting;
3208
+ private publishing;
3209
+ private publishTimer;
3210
+ private publishedAt;
2933
3211
  private answers;
2934
3212
  private readonly heard;
3213
+ private queuedPresence;
3214
+ private presenceWaiting;
3215
+ private publishingPresence;
3216
+ private presenceTimer;
3217
+ private presencePublishedAt;
3218
+ private watchingClose;
2935
3219
  private stop;
2936
3220
  constructor(info: RealtimeChannelInfo, calls: RealtimeCalls);
2937
3221
  get you(): RealtimeMember<Presence>;
@@ -2940,11 +3224,17 @@ declare class RealtimeChannel<Data = unknown, State extends RealtimeObject = Rea
2940
3224
  host(): RealtimeMember<Presence> | null;
2941
3225
  get isHost(): boolean;
2942
3226
  get hosted(): boolean;
3227
+ get hostHidden(): boolean;
3228
+ hosting(): RealtimeHosting<Presence>;
2943
3229
  giveHost(memberId: string): Promise<void>;
2944
3230
  state(): State | null;
2945
3231
  setState(state: State | null): Promise<void>;
3232
+ publish(state: State | null): Promise<void>;
3233
+ private pump;
2946
3234
  presence(): Presence | null;
2947
3235
  setPresence(presence: Presence | null): Promise<void>;
3236
+ publishPresence(presence: Presence | null): Promise<void>;
3237
+ private pumpPresence;
2948
3238
  send(data: Data): Promise<void>;
2949
3239
  sendTo(memberId: string, data: Data): Promise<void>;
2950
3240
  ask<Answer = unknown>(memberId: string, question: unknown, options?: RealtimeAskOptions): Promise<Answer>;
@@ -2955,6 +3245,7 @@ declare class RealtimeChannel<Data = unknown, State extends RealtimeObject = Rea
2955
3245
  onLeave(listener: (member: RealtimeMember<Presence>) => void): Unsubscribe;
2956
3246
  onState(listener: (event: RealtimeStateEvent<State>) => void): Unsubscribe;
2957
3247
  onPresence(listener: (member: RealtimeMember<Presence>) => void): Unsubscribe;
3248
+ onMembers(listener: (members: readonly RealtimeMember<Presence>[]) => void): Unsubscribe;
2958
3249
  onHost(listener: (event: RealtimeHostEvent<Presence>) => void): Unsubscribe;
2959
3250
  onClose(listener: (close: RealtimeClose) => void): Unsubscribe;
2960
3251
  hear(event: Heard): void;
@@ -2965,13 +3256,18 @@ declare class RealtimeChannel<Data = unknown, State extends RealtimeObject = Rea
2965
3256
  private tell;
2966
3257
  private refuse;
2967
3258
  }
3259
+ type RealtimeStayOptions<Presence extends RealtimeObject = RealtimeObject> = RealtimeJoinOptions<Presence> & {
3260
+ onProblem?: (error: unknown) => void;
3261
+ };
2968
3262
  declare class RealtimeApi {
2969
3263
  private readonly link;
2970
3264
  constructor(game: GameContext);
2971
3265
  get available(): boolean;
3266
+ get limits(): RealtimeLimits;
2972
3267
  get status(): RealtimeStatus;
2973
3268
  onStatus(listener: (status: RealtimeStatus) => void): Unsubscribe;
2974
3269
  join<Data = unknown, State extends RealtimeObject = RealtimeObject, Presence extends RealtimeObject = RealtimeObject>(spec: RealtimeChannelSpec, options?: RealtimeJoinOptions<Presence>): Promise<RealtimeChannel<Data, State, Presence>>;
3270
+ stayIn<Data = unknown, State extends RealtimeObject = RealtimeObject, Presence extends RealtimeObject = RealtimeObject>(spec: RealtimeChannelSpec, ready: (channel: RealtimeChannel<Data, State, Presence>) => void, options?: RealtimeStayOptions<Presence>): Promise<Unsubscribe>;
2975
3271
  open(spec: RealtimeChannelSpec, options?: RealtimeJoinOptions): Promise<RealtimeChannelInfo>;
2976
3272
  leave(channelId: string): Promise<boolean>;
2977
3273
  send(channelId: string, data: unknown): Promise<void>;
@@ -3042,6 +3338,45 @@ type CachedStat = {
3042
3338
  value: number;
3043
3339
  type: number;
3044
3340
  };
3341
+ type AchievementBookEntry = {
3342
+ defId: number;
3343
+ name: string;
3344
+ description: string;
3345
+ type: number;
3346
+ typeName: string;
3347
+ userVarId: number;
3348
+ target: number;
3349
+ value: number;
3350
+ earned: boolean;
3351
+ fraction: number;
3352
+ iconMediaId: number;
3353
+ baseMediaId: number;
3354
+ };
3355
+ type AchievementBookGroup = {
3356
+ type: number;
3357
+ name: string;
3358
+ total: number;
3359
+ earned: number;
3360
+ left: number;
3361
+ entries: AchievementBookEntry[];
3362
+ };
3363
+ type AchievementBook = {
3364
+ total: number;
3365
+ earned: number;
3366
+ left: number;
3367
+ fraction: number;
3368
+ entries: AchievementBookEntry[];
3369
+ groups: AchievementBookGroup[];
3370
+ };
3371
+ type AchievementProgress = {
3372
+ defId: number;
3373
+ name: string;
3374
+ userVarId: number;
3375
+ target: number;
3376
+ value: number;
3377
+ earned: boolean;
3378
+ fraction: number;
3379
+ };
3045
3380
  type EarnAnswer = {
3046
3381
  defId: number;
3047
3382
  userVarId: number;
@@ -3089,6 +3424,8 @@ declare class AchievementsApi {
3089
3424
  readStats(): Promise<CachedStat[]>;
3090
3425
  statBit(userVarId: number, bit: number): Promise<boolean>;
3091
3426
  statType(userVarId: number): Promise<number>;
3427
+ progress(): Promise<AchievementProgress[]>;
3428
+ book(): Promise<AchievementBook>;
3092
3429
  private translate;
3093
3430
  private typeName;
3094
3431
  private achievementsOf;
@@ -3111,6 +3448,17 @@ type AvatarColorGridOptions = {
3111
3448
  width?: number;
3112
3449
  height?: number;
3113
3450
  };
3451
+ type NameBar = {
3452
+ data: number;
3453
+ color: number;
3454
+ badge: number;
3455
+ showLevel: boolean;
3456
+ };
3457
+ type NameBarLook = {
3458
+ color?: number;
3459
+ badge?: number;
3460
+ showLevel?: boolean;
3461
+ };
3114
3462
  type Point = {
3115
3463
  x: number;
3116
3464
  y: number;
@@ -3161,6 +3509,11 @@ type AvatarSummary = {
3161
3509
  userId: number;
3162
3510
  enviroTypeFlag: number;
3163
3511
  };
3512
+ type RoomPlayerProfile = AvatarSummary & {
3513
+ self: boolean;
3514
+ standing: AvatarStanding | null;
3515
+ nameBar: NameBar | null;
3516
+ };
3164
3517
  type NewAvatar = {
3165
3518
  avTypeId: number;
3166
3519
  nameIds: AvatarNameIds;
@@ -3212,6 +3565,12 @@ declare class AvatarApi {
3212
3565
  teleport(x: number, y: number): Promise<void>;
3213
3566
  userId(): Promise<number>;
3214
3567
  view(): Promise<FlashHandle>;
3568
+ viewOf(userId: number): Promise<FlashHandle | null>;
3569
+ tintOf(userId: number, color: number | null, options?: {
3570
+ amount?: number;
3571
+ keep?: boolean;
3572
+ }): Promise<boolean>;
3573
+ asPhantom(userId: number, on?: boolean): Promise<boolean>;
3215
3574
  standing(): Promise<AvatarStanding | null>;
3216
3575
  private standingOfView;
3217
3576
  placeAt(position: Point, options?: {
@@ -3279,6 +3638,7 @@ declare class AvatarApi {
3279
3638
  private summarise;
3280
3639
  private summaryOf;
3281
3640
  inRoom(userId: number): Promise<AvatarSummary | null>;
3641
+ whoIs(userId: number): Promise<RoomPlayerProfile | null>;
3282
3642
  findInRoom(query: {
3283
3643
  userName: string;
3284
3644
  perUserAvId?: number;
@@ -3295,6 +3655,8 @@ declare class AvatarApi {
3295
3655
  isHostingAdventure(): Promise<boolean>;
3296
3656
  suitsEnvironment(enviroType: number): Promise<boolean>;
3297
3657
  roomState(): Promise<AvatarRoomState>;
3658
+ nameBar(): Promise<NameBar>;
3659
+ setNameBar(look?: NameBarLook): Promise<boolean>;
3298
3660
  lastNameBar(userId: number): number | null;
3299
3661
  onList(listener: (list: PacketOf<typeof AvatarList>) => void): () => void;
3300
3662
  onRemoved(listener: (result: PacketOf<typeof AvatarKilled>) => void): () => void;
@@ -3336,6 +3698,7 @@ type AdventureActorChange = {
3336
3698
  kind: AdventureActorChangeKind;
3337
3699
  actor: AdventureActor;
3338
3700
  };
3701
+ type AdventureActorKind = "attacker" | "bouncer" | "camera" | "circleClocker" | "circleTrigger" | "destructible" | "droppedTreasure" | "factory" | "groupItem" | "gui" | "item" | "lightBeam" | "npc" | "placedTreasure" | "plant" | "platform" | "spawn" | "speaker" | "tile" | "timer" | "variable" | "volumeBlocker" | "volumeFallingPhantom" | "volumeHealth" | "volumeInteraction" | "volumePlacement" | "volumeTrigger";
3339
3702
  type RewardPreference = "item" | "gems" | "none" | readonly AdventurePrizeKind[];
3340
3703
  type AdventureDefinition = {
3341
3704
  defId: number;
@@ -3470,6 +3833,26 @@ type AdventureEnd = {
3470
3833
  scriptDefId: number;
3471
3834
  reason: AdventureEndReason;
3472
3835
  };
3836
+ type AdventurePhase = "idle" | "lobby" | "playing" | "rewards" | "ended";
3837
+ type AdventurePhaseChange = {
3838
+ phase: AdventurePhase;
3839
+ was: AdventurePhase;
3840
+ scriptDefId: number | null;
3841
+ reason: AdventureEndReason | null;
3842
+ offer: AdventureRewardOffer | null;
3843
+ at: number;
3844
+ };
3845
+ type AdventureContents = {
3846
+ scriptDefId: number | null;
3847
+ treasure: AdventureActor[];
3848
+ items: AdventureActor[];
3849
+ crystals: CrystalActor[];
3850
+ fighters: AdventureActor[];
3851
+ npcs: AdventureActor[];
3852
+ plants: AdventureActor[];
3853
+ byKind: Partial<Record<AdventureActorKind, AdventureActor[]>>;
3854
+ goals: CrystalGoal[];
3855
+ };
3473
3856
  type AdventureStepAction = "trigger" | "pickUp" | "treasureChoice";
3474
3857
  type AdventureStep = {
3475
3858
  action: AdventureStepAction;
@@ -3637,6 +4020,16 @@ type AdventureClientStatus = {
3637
4020
  crystalCount: number;
3638
4021
  maxGoals: number;
3639
4022
  };
4023
+ type AdventureRunning = {
4024
+ scriptDefId: number;
4025
+ difficulty: number;
4026
+ startingPlayerCount: number;
4027
+ timeStamp: string;
4028
+ };
4029
+ type AdventureObjective = {
4030
+ stringId: number;
4031
+ text: string;
4032
+ };
3640
4033
  declare class AdventuresApi {
3641
4034
  readonly [STATE_FIELDS]: readonly [
3642
4035
  "lobbyState",
@@ -3709,6 +4102,7 @@ declare class AdventuresApi {
3709
4102
  private readonly defeatedUserIds;
3710
4103
  private readonly awardList;
3711
4104
  private readonly givenItemIds;
4105
+ private actorKindsRead;
3712
4106
  private exitAnswered;
3713
4107
  private lastBundleMessages;
3714
4108
  private readonly iconByActor;
@@ -3835,6 +4229,10 @@ declare class AdventuresApi {
3835
4229
  onRewardChoice(listener: (offer: AdventureRewardOffer) => void): () => void;
3836
4230
  onComplete(listener: (offer: AdventureRewardOffer) => void): () => void;
3837
4231
  onEnd(listener: (end: AdventureEnd) => void): () => void;
4232
+ get phase(): AdventurePhase;
4233
+ onPhase(listener: (change: AdventurePhaseChange) => void): () => void;
4234
+ contents(): Promise<AdventureContents>;
4235
+ private actorKinds;
3838
4236
  onStep(listener: (step: AdventureStep) => void): () => void;
3839
4237
  private comm;
3840
4238
  private questActor;
@@ -3976,12 +4374,24 @@ declare class AdventuresApi {
3976
4374
  }): Promise<void>;
3977
4375
  finishRoomMinigame(roomName: string, result: number): Promise<void>;
3978
4376
  reportSideScroll(at: Point, flags?: number): Promise<void>;
4377
+ running(): Promise<AdventureRunning | null>;
4378
+ objective(): Promise<string>;
4379
+ onObjective(listener: (objective: AdventureObjective) => void): () => void;
4380
+ openList(): Promise<void>;
4381
+ actorTypeNames(): Promise<Record<number, AdventureActorKind>>;
4382
+ private translate;
3979
4383
  private forgetRun;
3980
4384
  private plantOf;
3981
4385
  private respawnPoint;
3982
4386
  private targetOf;
3983
4387
  private manager;
3984
4388
  }
4389
+ type MediaPictureOptions = {
4390
+ scale?: number;
4391
+ background?: number | null;
4392
+ maxSize?: number;
4393
+ timeoutMs?: number;
4394
+ };
3985
4395
  declare const DEF_PACK_IDS: {
3986
4396
  readonly item: 1000;
3987
4397
  readonly avatar: 1003;
@@ -4017,8 +4427,16 @@ declare class AssetsApi {
4017
4427
  constructor(game: GameContext, flash: PhantomFlash);
4018
4428
  deployVersion(): Promise<string>;
4019
4429
  buildVersion(): Promise<string>;
4430
+ url(assetPath: string, options?: {
4431
+ cdnRoot?: string;
4432
+ deployVersion?: boolean;
4433
+ }): Promise<string>;
4020
4434
  requestDefPack(packId: DefPackId, timeoutMs?: number): Promise<unknown>;
4021
4435
  loadMedia(mediaId: number, timeoutMs?: number): Promise<LoadedMediaInfo>;
4436
+ picture(mediaId: number, options?: MediaPictureOptions): Promise<string>;
4437
+ whenLoaded(id: string | number, options?: {
4438
+ timeoutMs?: number;
4439
+ }): Promise<LoadedAsset>;
4022
4440
  onLoaded(listener: (asset: LoadedAsset) => void): Unsubscribe;
4023
4441
  }
4024
4442
  type BuddySighting = {
@@ -4078,6 +4496,31 @@ type BuddyCardTradeItem = {
4078
4496
  itemType: number;
4079
4497
  name: string;
4080
4498
  };
4499
+ type OpenBuddyCard = {
4500
+ userName: string;
4501
+ moderatedUserName: string;
4502
+ accountType: number;
4503
+ isBuddy: boolean;
4504
+ isBlocked: boolean;
4505
+ isOnline: boolean;
4506
+ isArchived: boolean;
4507
+ roomName: string;
4508
+ roomDisplayName: string;
4509
+ node: string;
4510
+ };
4511
+ type BuddiesOnline = {
4512
+ online: Buddy[];
4513
+ cameOnline: Buddy[];
4514
+ wentOffline: Buddy[];
4515
+ };
4516
+ type PersonSeen = {
4517
+ userName: string;
4518
+ how: "room" | "online" | "located";
4519
+ userId: number | null;
4520
+ avatarName: string | null;
4521
+ where: BuddySighting | null;
4522
+ at: number;
4523
+ };
4081
4524
  type BuddyWhereabouts = {
4082
4525
  roomName: string;
4083
4526
  displayName: string;
@@ -4138,8 +4581,18 @@ declare class BuddiesApi {
4138
4581
  cardTradeList(): Promise<BuddyCardTradeItem[] | null>;
4139
4582
  showCard(userName: string, online?: boolean): Promise<void>;
4140
4583
  closeCard(): Promise<void>;
4584
+ openCard(): Promise<OpenBuddyCard | null>;
4585
+ isListOpen(): Promise<boolean>;
4586
+ closeList(): Promise<void>;
4141
4587
  joinBuddyQuest(): Promise<boolean>;
4142
4588
  pendingSent(): Promise<SentBuddyRequest[]>;
4589
+ watchOnline(listener: (change: BuddiesOnline) => void, options?: {
4590
+ refresh?: boolean;
4591
+ timeoutMs?: number;
4592
+ }): Unsubscribe;
4593
+ watchFor(userName: string, listener: (seen: PersonSeen) => void, options?: {
4594
+ quietMs?: number;
4595
+ }): Unsubscribe;
4143
4596
  private emit;
4144
4597
  }
4145
4598
  declare const PHRASE_TREES: {
@@ -4170,6 +4623,25 @@ type ModerationEvent = {
4170
4623
  action: string;
4171
4624
  extra: string[];
4172
4625
  };
4626
+ type Said = {
4627
+ room: number;
4628
+ userId: number;
4629
+ userName: string;
4630
+ avatarName: string;
4631
+ text: string;
4632
+ raw: string;
4633
+ kind: number;
4634
+ level: number | null;
4635
+ at: {
4636
+ x: number;
4637
+ y: number;
4638
+ } | null;
4639
+ };
4640
+ type BalloonOptions = {
4641
+ colour?: number;
4642
+ seconds?: number;
4643
+ most?: number;
4644
+ };
4173
4645
  declare class ChatApi {
4174
4646
  readonly [STATE_FIELDS]: readonly [
4175
4647
  "history",
@@ -4177,12 +4649,14 @@ declare class ChatApi {
4177
4649
  "moderationNotice"
4178
4650
  ];
4179
4651
  private readonly flash;
4652
+ private readonly client;
4653
+ private readonly balloons;
4180
4654
  private readonly server;
4181
4655
  private readonly history;
4182
4656
  private readonly listeners;
4183
4657
  private adminNotice;
4184
4658
  private moderationNotice;
4185
- constructor(game: GameContext);
4659
+ constructor(game: GameContext, typed?: PhantomFlash);
4186
4660
  get recent(): readonly ChatMessage[];
4187
4661
  say(text: string): Promise<void>;
4188
4662
  emote(id: number): Promise<void>;
@@ -4203,12 +4677,26 @@ declare class ChatApi {
4203
4677
  petAction(action: number, value?: number): Promise<void>;
4204
4678
  attachmentEmote(id: number, extra?: string): Promise<void>;
4205
4679
  isEmote(text: string): Promise<boolean>;
4680
+ balloon(userId: number, text: string, options?: BalloonOptions): Promise<Unsubscribe>;
4681
+ private hushBalloon;
4206
4682
  showBalloon(userId: number, text: string, level?: number): Promise<void>;
4207
4683
  log(text: string, from?: string): Promise<void>;
4208
4684
  clearLog(): Promise<void>;
4209
4685
  onJamAGram(listener: (card: JamAGram) => void): Unsubscribe;
4210
4686
  get lastAdminMessage(): AdminNotice | null;
4211
4687
  get lastModeration(): ModerationEvent | null;
4688
+ typed(): Promise<string>;
4689
+ setTyped(text: string): Promise<void>;
4690
+ isTyping(): Promise<boolean>;
4691
+ clearTyped(): Promise<void>;
4692
+ onTyped(listener: (text: string) => void): Unsubscribe;
4693
+ onSaid(listener: (said: Said) => void): Unsubscribe;
4694
+ transcript(options?: {
4695
+ room?: number;
4696
+ }): Promise<Said[]>;
4697
+ private wordsOf;
4698
+ private roomSpeakers;
4699
+ private chatBar;
4212
4700
  private phraseNodes;
4213
4701
  }
4214
4702
  declare const DIAMOND_TYPE: {
@@ -4232,9 +4720,17 @@ type CurrencyRef = {
4232
4720
  currency: number;
4233
4721
  name: CurrencyKind | null;
4234
4722
  };
4723
+ type CurrencyAmountSet = CurrencyRef & {
4724
+ amount: number;
4725
+ };
4235
4726
  type CurrencyAmount = CurrencyRef & {
4236
4727
  amount: number | null;
4237
4728
  };
4729
+ type Purse = Record<CurrencyKind, number | null>;
4730
+ type PurseChange = {
4731
+ currency: number;
4732
+ name: CurrencyKind;
4733
+ };
4238
4734
  type PricePart = CurrencyRef & {
4239
4735
  amount: number;
4240
4736
  };
@@ -4259,10 +4755,13 @@ declare class CurrencyApi {
4259
4755
  "balances"
4260
4756
  ];
4261
4757
  private readonly flash;
4758
+ private readonly typedFlash;
4262
4759
  private readonly server;
4263
4760
  private readonly balances;
4264
4761
  private readonly listeners;
4265
- constructor(game: GameContext);
4762
+ private readonly clientListeners;
4763
+ private clientHook;
4764
+ constructor(game: GameContext, flash: PhantomFlash);
4266
4765
  get gems(): number | null;
4267
4766
  get tickets(): number | null;
4268
4767
  get diamonds(): number | null;
@@ -4277,12 +4776,15 @@ declare class CurrencyApi {
4277
4776
  diamondsLoaded(): Promise<boolean>;
4278
4777
  diamondDefinitionId(refDefId: number, type: DiamondType | number): Promise<number | null>;
4279
4778
  onChange(listener: (change: CurrencyChange) => void): () => void;
4779
+ watch(listener: (purse: Purse, moved: PurseChange | null) => void): Unsubscribe;
4280
4780
  onExchange(listener: (result: ExchangeResult) => void): () => void;
4281
4781
  onDonate(listener: (success: boolean) => void): () => void;
4282
4782
  donateGems(amount: number, timeoutMs?: number): Promise<boolean>;
4283
4783
  redeemCode(code: string, timeoutMs?: number): Promise<RedeemCodeAnswer>;
4284
4784
  onRedeemResult(listener: (answer: RedeemCodeAnswer) => void): () => void;
4285
4785
  onMembershipRedeemed(listener: (membership: PacketOf<typeof MembershipRedeemed>) => void): () => void;
4786
+ onClientBalance(listener: (balance: CurrencyAmountSet) => void): Unsubscribe;
4787
+ private tellClientListeners;
4286
4788
  private update;
4287
4789
  }
4288
4790
  type OpenDailyGift = {
@@ -4290,6 +4792,17 @@ type OpenDailyGift = {
4290
4792
  gems: number;
4291
4793
  diamonds: number;
4292
4794
  };
4795
+ type DailyGiftStatus = {
4796
+ ready: boolean;
4797
+ gift: OpenDailyGift | null;
4798
+ wheel: boolean;
4799
+ taken: number;
4800
+ daysInCycle: number;
4801
+ nextDay: number | null;
4802
+ };
4803
+ type DailyGiftReady = {
4804
+ kind: "gift" | "wheel";
4805
+ };
4293
4806
  declare class DailyGiftApi {
4294
4807
  private readonly flash;
4295
4808
  private readonly client;
@@ -4312,6 +4825,8 @@ declare class DailyGiftApi {
4312
4825
  wheelOpen(): Promise<boolean>;
4313
4826
  spinWheel(): Promise<boolean>;
4314
4827
  onWheelOpen(listener: () => void): Unsubscribe;
4828
+ status(): Promise<DailyGiftStatus>;
4829
+ onReady(listener: (ready: DailyGiftReady) => void): Unsubscribe;
4315
4830
  private hookExit;
4316
4831
  private press;
4317
4832
  private popup;
@@ -4319,6 +4834,15 @@ declare class DailyGiftApi {
4319
4834
  type AvatarEditorColorTab = "colors" | "patterns" | "eyes";
4320
4835
  type PetCreatorTab = "colors" | "traits" | "eyes";
4321
4836
  type PetCreatorColorWheel = "color1" | "color2";
4837
+ type PetCreatorPet = {
4838
+ defId: number;
4839
+ index: number;
4840
+ eye: number;
4841
+ };
4842
+ type PetCreatorLook = PetCreatorPet & {
4843
+ color1: number;
4844
+ color2: number;
4845
+ };
4322
4846
  type PetCreatorColorState = {
4323
4847
  current: number;
4324
4848
  indexes: readonly number[];
@@ -4342,9 +4866,13 @@ declare class EditorApi {
4342
4866
  isPetCreatorOpen(): Promise<boolean>;
4343
4867
  petCreatorTab(): Promise<PetCreatorTab | null>;
4344
4868
  openPetCreatorTab(tab: PetCreatorTab): Promise<boolean>;
4869
+ petCreatorPet(): Promise<PetCreatorPet | null>;
4345
4870
  petCreatorColor(wheel: PetCreatorColorWheel): Promise<PetCreatorColorState | null>;
4346
4871
  pickPetCreatorColor(wheel: PetCreatorColorWheel, index: number): Promise<boolean>;
4347
4872
  onPetCreatorColorChange(listener: (tableId: number, index: number) => void): () => void;
4873
+ onPetCreatorPet(listener: (pet: PetCreatorPet) => void): () => void;
4874
+ petCreatorLook(): Promise<PetCreatorLook | null>;
4875
+ onPetCreatorLook(listener: (look: PetCreatorLook) => void): () => void;
4348
4876
  onPetCreatorOpen(listener: () => void): () => void;
4349
4877
  onPetCreatorClose(listener: (created: boolean) => void): () => void;
4350
4878
  private avatarEditor;
@@ -4373,6 +4901,20 @@ type PopupClosed = {
4373
4901
  message: string | null;
4374
4902
  modal: boolean;
4375
4903
  };
4904
+ type AutoAnswerRule = {
4905
+ choice: PopupAnswer;
4906
+ match: string | null;
4907
+ times: number | null;
4908
+ };
4909
+ type AutoAnswer = {
4910
+ match?: string;
4911
+ when?: (popup: Popup) => boolean;
4912
+ times?: number;
4913
+ };
4914
+ type PopupWait = {
4915
+ timeoutMs?: number;
4916
+ everyMs?: number;
4917
+ };
4376
4918
  declare const OWN_POPUPS: {
4377
4919
  readonly barrier: "_barrierPopup";
4378
4920
  readonly daysRemaining: "_expiringDaysPopup";
@@ -4382,6 +4924,8 @@ declare const OWN_POPUPS: {
4382
4924
  type OwnPopupName = keyof typeof OWN_POPUPS;
4383
4925
  type LoginPopup = "newspaper" | "holidayBanner" | "adoptAPetIntro";
4384
4926
  declare class PopupsApi {
4927
+ private readonly answering;
4928
+ private nextRule;
4385
4929
  private readonly flash;
4386
4930
  private readonly client;
4387
4931
  private readonly loginSkips;
@@ -4392,8 +4936,14 @@ declare class PopupsApi {
4392
4936
  answer(choice: PopupAnswer, match?: string): Promise<boolean>;
4393
4937
  onOpen(listener: (popup: Popup) => void): () => void;
4394
4938
  onClose(listener: (popup: PopupClosed) => void): () => void;
4939
+ waitFor(match?: string, options?: PopupWait): Promise<Popup | null>;
4940
+ autoAnswer(choice: PopupAnswer, options?: AutoAnswer): Promise<void>;
4941
+ stopAutoAnswering(choice?: PopupAnswer): Promise<number>;
4942
+ get autoAnswering(): AutoAnswerRule[];
4943
+ private endRule;
4395
4944
  isOpen(popup: OwnPopupName): Promise<boolean>;
4396
4945
  close(popup: OwnPopupName): Promise<boolean>;
4946
+ onOwn(popup: OwnPopupName, listener: (open: boolean) => void): () => void;
4397
4947
  skipAtLogin(popups?: readonly LoginPopup[]): Promise<LoginPopup[]>;
4398
4948
  stopSkippingAtLogin(): Promise<void>;
4399
4949
  get skippingAtLogin(): LoginPopup[];
@@ -4433,10 +4983,14 @@ declare class ScreensApi {
4433
4983
  private readonly flash;
4434
4984
  private readonly client;
4435
4985
  constructor(game: GameContext, flash: PhantomFlash);
4986
+ list(): ScreenName[];
4436
4987
  isOpen(screen: ScreenName): Promise<boolean>;
4437
4988
  close(screen: ScreenName): Promise<boolean>;
4438
4989
  onOpen(screen: ScreenName, listener: () => void): () => void;
4439
4990
  onClose(screen: ScreenName, listener: () => void): () => void;
4991
+ waitFor(screen: ScreenName, options?: {
4992
+ timeoutMs?: number;
4993
+ }): Promise<boolean>;
4440
4994
  denSwitcherIndex(): Promise<number | null>;
4441
4995
  serverName(shardId: number): Promise<string>;
4442
4996
  private hookVoid;
@@ -4493,6 +5047,11 @@ type DenShopStand = {
4493
5047
  storeInvId: number;
4494
5048
  defId: number;
4495
5049
  };
5050
+ type DenShopLine = DenShopListing & {
5051
+ ownerUserName: string;
5052
+ storeInvId: number;
5053
+ state: string;
5054
+ };
4496
5055
  type DenShopUpdate = {
4497
5056
  list?: Array<{
4498
5057
  item: DenShopItem;
@@ -4519,6 +5078,7 @@ declare class DenShopApi {
4519
5078
  onBuy(listener: (purchase: DenShopPurchaseEvent) => void): Unsubscribe;
4520
5079
  onSale(listener: (sale: DenShopSale) => void): Unsubscribe;
4521
5080
  inDen(): Promise<DenShopStand[]>;
5081
+ forSale(timeoutMs?: number): Promise<DenShopLine[]>;
4522
5082
  update(storeInvId: number, state: string, { list, unlist }: DenShopUpdate, timeoutMs?: number): Promise<DenShopChange>;
4523
5083
  private isMe;
4524
5084
  private send;
@@ -4776,6 +5336,10 @@ declare class DensApi {
4776
5336
  ecoScore: number;
4777
5337
  }>;
4778
5338
  items(): Promise<DenPlacedItem[]>;
5339
+ itemAt(point: {
5340
+ x: number;
5341
+ y: number;
5342
+ }): Promise<DenPlacedItem | null>;
4779
5343
  placement(): Promise<DenPlacement | null>;
4780
5344
  moveItem(item: Pick<DenPlacedItem, "refId" | "invIdx">, placement: DenItemPlacement): Promise<boolean>;
4781
5345
  inventory(timeoutMs?: number): Promise<DenInventoryItem[]>;
@@ -4821,6 +5385,7 @@ declare class DensApi {
4821
5385
  heldDenShop(storeInvId: number): Promise<HeldDenShop | null>;
4822
5386
  private placedItems;
4823
5387
  private placedItem;
5388
+ private denItemFrom;
4824
5389
  private ownedItems;
4825
5390
  private findOwnedItem;
4826
5391
  private readOwnedItem;
@@ -4870,6 +5435,16 @@ type ClientJamAGram = {
4870
5435
  stampMediaId: number;
4871
5436
  specialType: number;
4872
5437
  };
5438
+ type JamAGramComposing = {
5439
+ toUserName: string;
5440
+ toModeratedUserName: string;
5441
+ message: string;
5442
+ messageType: number;
5443
+ cardMediaId: number;
5444
+ stampMediaId: number;
5445
+ type: number;
5446
+ giftInvId: number;
5447
+ };
4873
5448
  declare class ECardsApi {
4874
5449
  readonly [STATE_FIELDS]: readonly [
4875
5450
  "cards",
@@ -4915,6 +5490,8 @@ declare class ECardsApi {
4915
5490
  clientInbox(): Promise<ClientJamAGram[]>;
4916
5491
  clientInboxLoaded(): Promise<boolean>;
4917
5492
  openComposer(userName: string, moderatedUserName?: string): Promise<void>;
5493
+ draft(): Promise<JamAGramComposing | null>;
5494
+ reading(): Promise<JamAGram | null>;
4918
5495
  closeInbox(): Promise<void>;
4919
5496
  isComposerOpen(): Promise<boolean>;
4920
5497
  onReceived(listener: (card: JamAGram) => void): Unsubscribe;
@@ -4952,11 +5529,27 @@ declare const TYPES: {
4952
5529
  readonly work: "TYPE_WORK";
4953
5530
  };
4954
5531
  type FeedbackType = keyof typeof TYPES;
5532
+ type FeedbackTopic = {
5533
+ id: number;
5534
+ type: FeedbackType | null;
5535
+ title: string;
5536
+ prompt: string;
5537
+ thanks: string;
5538
+ allowsImage: boolean;
5539
+ seen: boolean;
5540
+ };
4955
5541
  declare class FeedbackApi {
4956
5542
  private readonly flash;
4957
- constructor(game: GameContext);
5543
+ private readonly typed;
5544
+ constructor(game: GameContext, typed?: PhantomFlash);
4958
5545
  types(): Promise<Record<FeedbackType, number>>;
4959
5546
  maxLength(type: FeedbackType | number): Promise<number>;
5547
+ topics(): Promise<FeedbackTopic[]>;
5548
+ open(type: FeedbackType | number): Promise<void>;
5549
+ onOpen(listener: (opened: {
5550
+ id: number;
5551
+ type: FeedbackType | null;
5552
+ }) => void): () => void;
4960
5553
  isOpen(): Promise<boolean>;
4961
5554
  close(): Promise<void>;
4962
5555
  }
@@ -5011,6 +5604,16 @@ type GuiClick = {
5011
5604
  dispatched: readonly string[];
5012
5605
  handled: boolean;
5013
5606
  };
5607
+ type GuiWait = {
5608
+ timeoutMs?: number;
5609
+ everyMs?: number;
5610
+ };
5611
+ type GuiEvent = {
5612
+ type: string;
5613
+ stageX: number;
5614
+ stageY: number;
5615
+ raw: Record<string, FlashValue>;
5616
+ };
5014
5617
  declare const SCREENS: {
5015
5618
  readonly avatarEditor: {
5016
5619
  readonly method: "openAvatarEditor";
@@ -5170,6 +5773,9 @@ declare class GuiApi {
5170
5773
  clickHud(part: HudPart | string): Promise<GuiClick>;
5171
5774
  chatBox(): Promise<string>;
5172
5775
  setChatBox(text: string): Promise<void>;
5776
+ onChatBox(listener: (text: string) => void, options?: {
5777
+ everyFrames?: number;
5778
+ }): () => void;
5173
5779
  chatHistory(): Promise<string[]>;
5174
5780
  closeChatPanel(): Promise<void>;
5175
5781
  freeChatEnabled(): Promise<boolean>;
@@ -5191,6 +5797,9 @@ declare class GuiApi {
5191
5797
  pinCurrency(): Promise<void>;
5192
5798
  unpinCurrency(): Promise<void>;
5193
5799
  get currencyPinned(): boolean;
5800
+ waitFor(query: GuiQuery, options?: GuiWait): Promise<GuiElement | null>;
5801
+ on(target: GuiTarget, event: string, listener: (event: GuiEvent) => void): () => void;
5802
+ hover(target: GuiTarget, over?: boolean): Promise<boolean>;
5194
5803
  private rollCurrency;
5195
5804
  private chatField;
5196
5805
  private setFieldText;
@@ -5205,18 +5814,254 @@ declare class GuiApi {
5205
5814
  private onElement;
5206
5815
  private rootPlace;
5207
5816
  }
5208
- type InventoryItem = {
5209
- invId: number;
5817
+ type ItemDefinition = {
5210
5818
  defId: number;
5211
- color: number;
5212
- wornOn: number[];
5213
- denStoreInvId: number;
5214
- };
5215
- type ItemPlace = "worn" | "den-shop" | "inventory";
5216
- type OwnedItem = InventoryItem & {
5217
- where: ItemPlace;
5218
- };
5219
- type OwnedFilter = {
5819
+ name: string;
5820
+ titleStrId: number;
5821
+ cost: number;
5822
+ currencyType: number;
5823
+ combinedCost: string;
5824
+ membersOnly: boolean;
5825
+ recycleValue: number;
5826
+ type: number;
5827
+ enviroType: number;
5828
+ colors: number[];
5829
+ layerId: number;
5830
+ accId: number;
5831
+ avatarUseFlag: number;
5832
+ itemStatus: number;
5833
+ isNew: boolean;
5834
+ isOnSale: boolean;
5835
+ isGiftable: boolean;
5836
+ availabilityStartTime: number;
5837
+ availabilityEndTime: number;
5838
+ combat: ItemCombat;
5839
+ };
5840
+ type ItemCombat = {
5841
+ attack: number;
5842
+ defense: number;
5843
+ attackMediaRefId: number;
5844
+ combatType: number;
5845
+ modifierType: number;
5846
+ modifierValue: number;
5847
+ criticalHit: number;
5848
+ };
5849
+ type ShopOffering = {
5850
+ shopId: number;
5851
+ listType: number;
5852
+ titleStrId: number | null;
5853
+ diamondBundle: boolean;
5854
+ diamondCost: number;
5855
+ items: ItemDefinition[];
5856
+ unknownDefIds: number[];
5857
+ };
5858
+ type ShopListing = {
5859
+ shopId: number;
5860
+ listType: number;
5861
+ defIds: number[];
5862
+ };
5863
+ type OpenShop = {
5864
+ shopId: number;
5865
+ listType: number;
5866
+ windowClass: string;
5867
+ itemCount: number;
5868
+ selectedIndex: number | null;
5869
+ selectedDefId: number | null;
5870
+ selectedDiamond: boolean | null;
5871
+ selectedColorIndex: number;
5872
+ };
5873
+ type ShopLimits = {
5874
+ items: number;
5875
+ denItems: number;
5876
+ audioItems: number;
5877
+ warnItems: number;
5878
+ warnDenItems: number;
5879
+ warnAudioItems: number;
5880
+ warnDenRooms: number;
5881
+ denShopItems: number;
5882
+ };
5883
+ type ItemPictureKind = "clothing" | "den-item";
5884
+ type ItemPictureItem = number | {
5885
+ defId: number;
5886
+ kind?: ItemPictureKind;
5887
+ color?: number;
5888
+ };
5889
+ type ItemPictureOptions = {
5890
+ scale?: number;
5891
+ background?: number | null;
5892
+ maxSize?: number;
5893
+ large?: boolean;
5894
+ version?: number;
5895
+ timeoutMs?: number;
5896
+ cache?: boolean;
5897
+ };
5898
+ type ItemRarity = "normal" | "new" | "sale" | "clearance" | "rare";
5899
+ type ItemSummary = {
5900
+ defId: number;
5901
+ kind: ItemPictureKind;
5902
+ name: string;
5903
+ rarity: ItemRarity;
5904
+ cost: number;
5905
+ currencyType: number;
5906
+ membersOnly: boolean;
5907
+ forSale: boolean;
5908
+ picture: string | null;
5909
+ };
5910
+ type ItemSummaryOptions = {
5911
+ kind?: ItemPictureKind;
5912
+ picture?: boolean | ItemPictureOptions;
5913
+ };
5914
+ type ItemSummariesOptions = ItemSummaryOptions & {
5915
+ atOnce?: number;
5916
+ };
5917
+ type DenShopOffering = {
5918
+ shopId: number;
5919
+ listType: number;
5920
+ items: DenItemDefinition[];
5921
+ unknownDefIds: number[];
5922
+ };
5923
+ type DiamondItem = {
5924
+ defId: number;
5925
+ value: number;
5926
+ type: number;
5927
+ refDefId: number;
5928
+ status: number;
5929
+ isNew: boolean;
5930
+ isOnSale: boolean;
5931
+ isOnClearance: boolean;
5932
+ isRare: boolean;
5933
+ isAvailable: boolean;
5934
+ availabilityEndTime: number;
5935
+ startTime: number;
5936
+ };
5937
+ type DiamondDefinition = {
5938
+ defId: number;
5939
+ value: number;
5940
+ refDefId: number;
5941
+ type: number;
5942
+ status: number;
5943
+ availabilityStartTime: number;
5944
+ availabilityEndTime: number;
5945
+ };
5946
+ type DiamondShopItem = {
5947
+ diamondDefId: number;
5948
+ defId: number | null;
5949
+ itemClass: string | null;
5950
+ };
5951
+ type DiamondShopList = {
5952
+ items: DiamondShopItem[];
5953
+ unknownDefIds: number[];
5954
+ };
5955
+ type Purchase = {
5956
+ defId: number;
5957
+ shopId: number;
5958
+ status: number;
5959
+ balance: number | null;
5960
+ currencyType: number;
5961
+ };
5962
+ type Sale = {
5963
+ invIds: number[];
5964
+ gems: number | null;
5965
+ };
5966
+ declare class ShopsApi {
5967
+ readonly [STATE_FIELDS]: readonly [
5968
+ "lists"
5969
+ ];
5970
+ private readonly flash;
5971
+ private readonly client;
5972
+ private readonly server;
5973
+ private readonly lists;
5974
+ private readonly pictures;
5975
+ constructor(game: GameContext, flash: PhantomFlash);
5976
+ offering(shopId: number, { refresh, timeoutMs, }?: {
5977
+ refresh?: boolean;
5978
+ timeoutMs?: number;
5979
+ }): Promise<ShopOffering>;
5980
+ denOffering(shopId: number, { refresh, timeoutMs, }?: {
5981
+ refresh?: boolean;
5982
+ timeoutMs?: number;
5983
+ }): Promise<DenShopOffering>;
5984
+ definition(defId: number): Promise<ItemDefinition | null>;
5985
+ definitionsReady(): Promise<boolean>;
5986
+ picture(item: ItemPictureItem, options?: ItemPictureOptions): Promise<string>;
5987
+ isAvailable(window: {
5988
+ availabilityStartTime: number;
5989
+ availabilityEndTime: number;
5990
+ }): Promise<boolean>;
5991
+ item(defId: number, options?: ItemSummaryOptions): Promise<ItemSummary | null>;
5992
+ items(defIds: readonly number[], options?: ItemSummariesOptions): Promise<Array<ItemSummary | null>>;
5993
+ forSale(shopId: number, options?: {
5994
+ refresh?: boolean;
5995
+ timeoutMs?: number;
5996
+ }): Promise<ItemDefinition[]>;
5997
+ whenDefinitionsReady(options?: {
5998
+ timeoutMs?: number;
5999
+ }): Promise<void>;
6000
+ diamondItem(defId: number): Promise<DiamondItem | null>;
6001
+ diamondDefinition(entry: number | {
6002
+ refDefId: number;
6003
+ type: number;
6004
+ }): Promise<DiamondDefinition | null>;
6005
+ diamondList(defIds: number[]): Promise<DiamondShopList>;
6006
+ listType(shopId: number): Promise<number | null>;
6007
+ knownShops(): Promise<Array<{
6008
+ shopId: number;
6009
+ listType: number;
6010
+ }>>;
6011
+ open(shopId: number): Promise<void>;
6012
+ close(): Promise<void>;
6013
+ isOpen(): Promise<boolean>;
6014
+ openShop(): Promise<OpenShop | null>;
6015
+ limits(): Promise<ShopLimits>;
6016
+ onOpen(listener: (opened: {
6017
+ shopId: number;
6018
+ listType: number;
6019
+ }) => void): () => void;
6020
+ onClose(listener: (closed: {
6021
+ bought: boolean;
6022
+ }) => void): () => void;
6023
+ buyDiamondBundle(timeoutMs?: number): Promise<{
6024
+ bought: boolean;
6025
+ balance: number | null;
6026
+ }>;
6027
+ buy(defId: number, { shopId, colorIndex, diamond, forDenItem, timeoutMs, }: {
6028
+ shopId: number;
6029
+ colorIndex?: number;
6030
+ diamond?: boolean;
6031
+ forDenItem?: {
6032
+ invId: number;
6033
+ userName: string;
6034
+ };
6035
+ timeoutMs?: number;
6036
+ }): Promise<Purchase>;
6037
+ sell(...invIds: number[]): Promise<Sale>;
6038
+ onBuy(listener: (purchase: Purchase) => void): Unsubscribe;
6039
+ onSell(listener: (sale: Sale) => void): Unsubscribe;
6040
+ onList(listener: (listing: ShopListing) => void): Unsubscribe;
6041
+ onDiamondBundleBuy(listener: (result: {
6042
+ bought: boolean;
6043
+ balance: number | null;
6044
+ }) => void): Unsubscribe;
6045
+ private definitionsLoaded;
6046
+ private drawClothing;
6047
+ private drawDenItem;
6048
+ private listFor;
6049
+ }
6050
+ type InventoryItem = {
6051
+ invId: number;
6052
+ defId: number;
6053
+ color: number;
6054
+ wornOn: number[];
6055
+ denStoreInvId: number;
6056
+ };
6057
+ type ItemPlace = "worn" | "den-shop" | "inventory";
6058
+ type OwnedItem = InventoryItem & {
6059
+ where: ItemPlace;
6060
+ };
6061
+ type DescribedItem = OwnedItem & {
6062
+ definition: ItemDefinition | null;
6063
+ };
6064
+ type OwnedFilter = {
5220
6065
  defId?: number | number[];
5221
6066
  color?: number;
5222
6067
  where?: ItemPlace | ItemPlace[];
@@ -5242,11 +6087,19 @@ type ItemPrizeOffer = {
5242
6087
  nameStrId: number;
5243
6088
  descStrId: number;
5244
6089
  };
6090
+ type ItemHolding = {
6091
+ owned: boolean;
6092
+ count: number;
6093
+ worn: number;
6094
+ spare: number;
6095
+ items: OwnedItem[];
6096
+ };
5245
6097
  type RecycleResult = {
5246
6098
  recycled: number[];
5247
6099
  gems: number | null;
5248
6100
  };
5249
6101
  declare class InventoryApi {
6102
+ private readonly areas;
5250
6103
  readonly [STATE_FIELDS]: readonly [
5251
6104
  "inventory",
5252
6105
  "slots",
@@ -5260,14 +6113,22 @@ declare class InventoryApi {
5260
6113
  private readonly slotListeners;
5261
6114
  private readonly prizeListeners;
5262
6115
  private prize;
5263
- constructor(game: GameContext);
6116
+ constructor(game: GameContext, areas: () => {
6117
+ shops: ShopsApi;
6118
+ });
5264
6119
  items({ refresh }?: {
5265
6120
  refresh?: boolean;
5266
6121
  }): Promise<InventoryItem[]>;
5267
6122
  owned({ defId, color, where, refresh }?: OwnedFilter): Promise<OwnedItem[]>;
6123
+ describe(filter?: OwnedFilter): Promise<DescribedItem[]>;
6124
+ private shops;
5268
6125
  worn({ refresh }?: {
5269
6126
  refresh?: boolean;
5270
6127
  }): Promise<OwnedItem[]>;
6128
+ have(defId: number, { color, refresh }?: {
6129
+ color?: number;
6130
+ refresh?: boolean;
6131
+ }): Promise<ItemHolding>;
5271
6132
  canWear(defId: number, { custom }?: {
5272
6133
  custom?: boolean;
5273
6134
  }): Promise<boolean>;
@@ -5299,6 +6160,19 @@ declare class InventoryApi {
5299
6160
  private apply;
5300
6161
  }
5301
6162
  type Language = "english" | "spanish" | "portuguese" | "french" | "german" | "none";
6163
+ declare const WORDS: {
6164
+ readonly gems: "GEMS_CAPITALIZED";
6165
+ readonly gem: "GEM_CAPITALIZED";
6166
+ readonly diamonds: "DIAMONDS_CAPITALIZED";
6167
+ readonly diamond: "DIAMOND_CAPITALIZED";
6168
+ readonly crystals: "CRYSTALS_CAPITALIZED";
6169
+ readonly crystal: "CRYSTAL_CAPITALIZED";
6170
+ readonly tickets: "TICKETS_CAPITALIZED";
6171
+ readonly ticket: "TICKET_CAPITALIZED";
6172
+ readonly members: "MEMBERS";
6173
+ readonly newJammerName: "NEW_JAMMER_USERNAME";
6174
+ };
6175
+ type GameWord = keyof typeof WORDS;
5302
6176
  type LocalizedText = {
5303
6177
  text: string;
5304
6178
  isHtmlNormal: boolean;
@@ -5309,6 +6183,7 @@ declare class LocalizationApi {
5309
6183
  private readonly bridge;
5310
6184
  private readonly flash;
5311
6185
  private codes;
6186
+ private wordCodes;
5312
6187
  constructor(game: GameContext, flash: PhantomFlash);
5313
6188
  currentLanguage(): Promise<Language>;
5314
6189
  accountLanguage(): Promise<Language>;
@@ -5318,6 +6193,9 @@ declare class LocalizationApi {
5318
6193
  countryCode(): Promise<string>;
5319
6194
  hasLocalizations(): Promise<boolean>;
5320
6195
  translate(id: number): Promise<string>;
6196
+ translateAll(ids: readonly number[]): Promise<string[]>;
6197
+ word(name: GameWord): Promise<string>;
6198
+ words(): GameWord[];
5321
6199
  translatePreferred(id: number): Promise<string>;
5322
6200
  translateWithValues(id: number, ...values: string[]): Promise<string>;
5323
6201
  translateAvatarName(name: string): Promise<string>;
@@ -5328,8 +6206,16 @@ declare class LocalizationApi {
5328
6206
  languageId(language: Language): Promise<number>;
5329
6207
  onLanguageChange(listener: (language: Language) => void): () => void;
5330
6208
  onReady(listener: () => void): () => void;
6209
+ private wordIds;
5331
6210
  private languageCodes;
5332
6211
  }
6212
+ type MasterpiecePictureOptions = {
6213
+ scale?: number;
6214
+ background?: number | null;
6215
+ maxSize?: number;
6216
+ timeoutMs?: number;
6217
+ cache?: boolean;
6218
+ };
5333
6219
  type Masterpiece = DenMasterpieceItem;
5334
6220
  type MasterpieceList = {
5335
6221
  userName: string | null;
@@ -5360,6 +6246,7 @@ declare class MasterpiecesApi {
5360
6246
  private readonly creatorsAsked;
5361
6247
  private readonly likesAsked;
5362
6248
  private readonly likesGiven;
6249
+ private readonly pictures;
5363
6250
  private readonly itemsListeners;
5364
6251
  private readonly creatorListeners;
5365
6252
  private readonly likesListeners;
@@ -5369,6 +6256,8 @@ declare class MasterpiecesApi {
5369
6256
  creatorOf(denUserName: string, uniqueImageId: string, timeoutMs?: number): Promise<string>;
5370
6257
  likes(uniqueImageId: string, timeoutMs?: number): Promise<MasterpieceLikes>;
5371
6258
  like(masterpiece: LikeableMasterpiece, timeoutMs?: number): Promise<boolean>;
6259
+ picture(uniqueImageId: string, options?: MasterpiecePictureOptions): Promise<string>;
6260
+ private draw;
5372
6261
  onItems(listener: (list: MasterpieceList) => void): Unsubscribe;
5373
6262
  onCreator(listener: (creator: MasterpieceCreator) => void): Unsubscribe;
5374
6263
  onLikes(listener: (likes: MasterpieceLikesEvent) => void): Unsubscribe;
@@ -5633,6 +6522,18 @@ type MinigamePlayerInfo = {
5633
6522
  activePetName: string;
5634
6523
  member: boolean;
5635
6524
  };
6525
+ type MinigameRound = {
6526
+ gameDefId: number | null;
6527
+ name: string;
6528
+ score: number | null;
6529
+ gems: number | null;
6530
+ ended: boolean;
6531
+ data: readonly string[];
6532
+ at: number;
6533
+ };
6534
+ type MinigameRoundOptions = {
6535
+ settleMs?: number;
6536
+ };
5636
6537
  type MinigameJoinOptions = {
5637
6538
  multiplayer?: boolean;
5638
6539
  proModeId?: number;
@@ -5724,6 +6625,7 @@ declare class MinigamesApi {
5724
6625
  onGemAward(listener: (sent: MinigameAwardSent) => void): Unsubscribe;
5725
6626
  onPetMasteryAward(listener: (sent: MinigameAwardSent) => void): Unsubscribe;
5726
6627
  onScore(listener: (sent: MinigameScoreSent) => void): Unsubscribe;
6628
+ onRound(listener: (round: MinigameRound) => void, options?: MinigameRoundOptions): Unsubscribe;
5727
6629
  quit(): Promise<void>;
5728
6630
  playerInfo(): Promise<MinigamePlayerInfo>;
5729
6631
  gameNameId(gameDefId: number): Promise<number | null>;
@@ -5758,6 +6660,12 @@ type ShownMembership = {
5758
6660
  member: boolean;
5759
6661
  daysLeft: number;
5760
6662
  };
6663
+ type MembershipUpsell = {
6664
+ page: string;
6665
+ reason: string;
6666
+ subject: string | null;
6667
+ roomName: string | null;
6668
+ };
5761
6669
  declare class MembershipApi {
5762
6670
  readonly [STATE_FIELDS]: readonly [
5763
6671
  "heard"
@@ -5768,17 +6676,28 @@ declare class MembershipApi {
5768
6676
  private questRoom;
5769
6677
  private readonly changeListeners;
5770
6678
  private readonly lookListeners;
6679
+ private readonly upsellListeners;
6680
+ private upsellHook;
6681
+ private upsellsOff;
5771
6682
  private readonly flash;
6683
+ private readonly typedFlash;
5772
6684
  private readonly server;
5773
6685
  private readonly client;
5774
- constructor(game: GameContext);
6686
+ constructor(game: GameContext, flash: PhantomFlash);
5775
6687
  get real(): Membership | null;
5776
6688
  onChange(listener: (membership: Membership) => void): Unsubscribe;
6689
+ watch(listener: (membership: Membership) => void): Unsubscribe;
5777
6690
  shown(): Promise<ShownMembership>;
5778
6691
  get showing(): MembershipLook | null;
5779
6692
  onShowing(listener: (look: MembershipLook | null) => void): Unsubscribe;
5780
6693
  show(options?: MembershipLookOptions): Promise<MembershipLook>;
5781
6694
  stopShowing(): Promise<void>;
6695
+ onUpsell(listener: (upsell: MembershipUpsell) => void): Unsubscribe;
6696
+ get upsellsHidden(): boolean;
6697
+ hideUpsells(hide?: boolean): Promise<boolean>;
6698
+ private upsellOptions;
6699
+ private syncUpsellHook;
6700
+ private tellUpsellListeners;
5782
6701
  private hear;
5783
6702
  private hook;
5784
6703
  private rewriteLogin;
@@ -5802,12 +6721,20 @@ type NewspaperReadState = {
5802
6721
  defId: number;
5803
6722
  timeSeen: number;
5804
6723
  };
6724
+ type AvailableNewspaperIssue = NewspaperIssue & {
6725
+ available: boolean;
6726
+ viewable: boolean;
6727
+ inCountry: boolean;
6728
+ };
5805
6729
  declare class NewspaperApi {
5806
6730
  private readonly flash;
5807
6731
  private readonly server;
5808
6732
  private readonly seenListeners;
5809
6733
  constructor(game: GameContext);
5810
6734
  definitions(): Promise<NewspaperIssue[]>;
6735
+ available(): Promise<AvailableNewspaperIssue[]>;
6736
+ reading(): Promise<NewspaperIssue | null>;
6737
+ close(): Promise<void>;
5811
6738
  definition(defId: number): Promise<NewspaperIssue | null>;
5812
6739
  dataOf(defId: number): Promise<NewspaperReadState | null>;
5813
6740
  hasUnseenPages(): Promise<boolean>;
@@ -5817,6 +6744,16 @@ declare class NewspaperApi {
5817
6744
  onPageSeen(listener: (seen: PacketOf<typeof NewspaperPageSeen>) => void): () => void;
5818
6745
  private readIssue;
5819
6746
  }
6747
+ type PetInWorld = {
6748
+ name: string;
6749
+ defId: number;
6750
+ createdTs: number;
6751
+ position: Point;
6752
+ visible: boolean;
6753
+ ground: boolean;
6754
+ moving: boolean;
6755
+ unhatchedEgg: boolean;
6756
+ };
5820
6757
  type PlayerPet = {
5821
6758
  invId: number;
5822
6759
  name: string;
@@ -5831,6 +6768,16 @@ type PlayerPet = {
5831
6768
  favoriteFoodDefId: number;
5832
6769
  denStoreInvId: number;
5833
6770
  };
6771
+ type OwnedPet = PlayerPet & {
6772
+ kind: string;
6773
+ out: boolean;
6774
+ };
6775
+ type PetRoster = {
6776
+ pets: OwnedPet[];
6777
+ out: OwnedPet | null;
6778
+ max: number;
6779
+ room: number;
6780
+ };
5834
6781
  type PetDefinition = {
5835
6782
  defId: number;
5836
6783
  title: string;
@@ -5990,6 +6937,7 @@ declare class PetsApi {
5990
6937
  activeName(): Promise<string>;
5991
6938
  get(invId: number): Promise<PlayerPet | null>;
5992
6939
  max(): Promise<number>;
6940
+ mine(): Promise<PetRoster>;
5993
6941
  kindName(defId: number): Promise<string>;
5994
6942
  kindId(name: string): Promise<number>;
5995
6943
  definition(defId: number): Promise<PetDefinition | null>;
@@ -6099,6 +7047,7 @@ declare class PetsApi {
6099
7047
  onAdoptionChecklist(listener: (checklist: AdoptionChecklist) => void): () => void;
6100
7048
  onAdoptionCount(listener: (count: number) => void): () => void;
6101
7049
  onDefinitionsLoaded(listener: () => void): () => void;
7050
+ inWorld(): Promise<PetInWorld | null>;
6102
7051
  }
6103
7052
  type CachedWall = {
6104
7053
  posts: WallPost[];
@@ -6134,6 +7083,10 @@ type WallPost = {
6134
7083
  patternId: number;
6135
7084
  localizationId: number;
6136
7085
  };
7086
+ type WallThreadPost = WallPost & {
7087
+ text: string;
7088
+ replies: WallThreadPost[];
7089
+ };
6137
7090
  type WallContents = {
6138
7091
  owner: string;
6139
7092
  posts: WallPost[];
@@ -6243,11 +7196,19 @@ declare class PlayerWallApi {
6243
7196
  hiddenPostIds(): Promise<string[]>;
6244
7197
  permissions(userName: string): Promise<WallPermissions>;
6245
7198
  showPostAs(msgId: string, text: string): Promise<void>;
7199
+ serviceRequest(command: string, fields?: {
7200
+ [key: string]: WallValue;
7201
+ }, userName?: string): Promise<void>;
7202
+ private tokenFor;
6246
7203
  private readPosts;
6247
7204
  private asList;
6248
7205
  private readPost;
6249
7206
  private buildPost;
6250
7207
  private withOwner;
7208
+ thread(userName?: string, options?: {
7209
+ timeoutMs?: number;
7210
+ }): Promise<WallThreadPost[]>;
7211
+ private wallPhrase;
6251
7212
  private playerName;
6252
7213
  private comm;
6253
7214
  }
@@ -6408,6 +7369,14 @@ type DenRoomDefinition = {
6408
7369
  availabilityStartTime: number;
6409
7370
  availabilityEndTime: number;
6410
7371
  };
7372
+ type BelongingKind = "clothing" | "den" | "pet";
7373
+ type Belonging = {
7374
+ kind: BelongingKind;
7375
+ invIdx: number;
7376
+ defId: number;
7377
+ name: string;
7378
+ itemType: number;
7379
+ };
6411
7380
  type PartyHosting = {
6412
7381
  userName: string;
6413
7382
  secondsLeft: number;
@@ -6465,6 +7434,8 @@ declare class PlayerApi {
6465
7434
  }): Promise<ClothingItem[]>;
6466
7435
  denItemsForRoom(): Promise<DenInventoryItem[]>;
6467
7436
  petsInDen(world: "land" | "ocean"): Promise<DenInventoryItem[]>;
7437
+ belongings(kind?: BelongingKind | readonly BelongingKind[]): Promise<Belonging[]>;
7438
+ private ownPets;
6468
7439
  animalKindCount(): Promise<number>;
6469
7440
  animalDefaults(avTypeId: number): Promise<AnimalDefaults>;
6470
7441
  customAnimal(customAvId: number): Promise<AnimalKind | null>;
@@ -6472,6 +7443,10 @@ declare class PlayerApi {
6472
7443
  animalOf(userName?: string): Promise<AnimalKind | null>;
6473
7444
  denRoomDefinitions(): Promise<DenRoomDefinition[]>;
6474
7445
  denRoomDefinition(defId: number): Promise<DenRoomDefinition | null>;
7446
+ activeDenId(): Promise<number>;
7447
+ onActiveDenChange(listener: (invId: number) => void): Unsubscribe;
7448
+ buddyCount(): Promise<number>;
7449
+ onBuddyCountChange(listener: (count: number) => void): Unsubscribe;
6475
7450
  private hear;
6476
7451
  private stateSources;
6477
7452
  private recordOf;
@@ -6514,6 +7489,7 @@ declare class ReportsApi {
6514
7489
  constructor(game: GameContext);
6515
7490
  report(userName: string, reason: ReportReason, timeoutMs?: number): Promise<boolean>;
6516
7491
  reportContent(userName: string, kind: ReportedContent, reason: ReportReason, data: string, timeoutMs?: number): Promise<boolean>;
7492
+ alreadyReported(userName: string): Promise<boolean>;
6517
7493
  onReportResult(listener: (taken: boolean) => void): Unsubscribe;
6518
7494
  onContentReportResult(listener: (taken: boolean) => void): Unsubscribe;
6519
7495
  onReportSent(listener: (report: SentReport) => void): Unsubscribe;
@@ -6694,9 +7670,14 @@ declare class RoomApi {
6694
7670
  private readonly failureListeners;
6695
7671
  private readonly giftsAsked;
6696
7672
  private readonly giftListeners;
7673
+ private readonly loadedListeners;
7674
+ private builtHook;
7675
+ private builtWanted;
7676
+ private hidingPlayers;
6697
7677
  private readonly server;
6698
7678
  private readonly flash;
6699
- constructor(game: GameContext);
7679
+ private readonly phantomFlash;
7680
+ constructor(game: GameContext, flash?: PhantomFlash);
6700
7681
  get current(): RoomInfo | null;
6701
7682
  get details(): RoomDetails | null;
6702
7683
  get layout(): RoomLayout | null;
@@ -6720,6 +7701,10 @@ declare class RoomApi {
6720
7701
  onWorldItemTaken(listener: (gift: WorldItemTakenEvent) => void): () => void;
6721
7702
  private hasTakenGift;
6722
7703
  onJoin(listener: (room: RoomInfo) => void): () => void;
7704
+ onLoaded(listener: (scene: RoomScene) => void): () => void;
7705
+ whenLoaded(options?: {
7706
+ timeoutMs?: number;
7707
+ }): Promise<boolean>;
6723
7708
  focusCamera(at: {
6724
7709
  x: number;
6725
7710
  y: number;
@@ -6737,12 +7722,14 @@ declare class RoomApi {
6737
7722
  }): Promise<void>;
6738
7723
  respawn(): Promise<void>;
6739
7724
  spawns(): Promise<RoomSpawn[]>;
7725
+ walkToSpawn(name: string): Promise<void>;
6740
7726
  portals(): Promise<RoomPortal[]>;
6741
7727
  volumes(): Promise<RoomVolume[]>;
6742
7728
  volumesAt(point: {
6743
7729
  x: number;
6744
7730
  y: number;
6745
7731
  }): Promise<RoomVolume[]>;
7732
+ enableVolume(name: string, enabled: boolean): Promise<void>;
6746
7733
  bounds(): Promise<RoomBounds>;
6747
7734
  camera(): Promise<RoomCamera>;
6748
7735
  moveCamera(offset: {
@@ -6781,6 +7768,7 @@ declare class RoomApi {
6781
7768
  setPathDepth(cells: number): Promise<void>;
6782
7769
  reload(): Promise<boolean>;
6783
7770
  showAvatars(show: boolean): Promise<void>;
7771
+ showPlayers(show: boolean): Promise<void>;
6784
7772
  joiningInvisibly(): Promise<boolean>;
6785
7773
  darkAreas(): Promise<RoomDarkArea[]>;
6786
7774
  nearestEmptyCell(point: {
@@ -6799,6 +7787,11 @@ declare class RoomApi {
6799
7787
  }): Promise<RoomObjectAt | null>;
6800
7788
  setJamaaTime(milliseconds: number): Promise<void>;
6801
7789
  setDenKickNotice(show: boolean): Promise<void>;
7790
+ private wantBuiltHook;
7791
+ private releaseBuiltHook;
7792
+ private hookBuilt;
7793
+ private tellLoaded;
7794
+ private roomBuilt;
6802
7795
  private darkArea;
6803
7796
  private actors;
6804
7797
  private number;
@@ -6807,6 +7800,8 @@ declare class RoomApi {
6807
7800
  join(name: string, options?: {
6808
7801
  invisible?: boolean;
6809
7802
  }): Promise<void>;
7803
+ onChange(listener: (change: RoomChange) => void): () => void;
7804
+ surfaces(): Promise<RoomSurface[]>;
6810
7805
  }
6811
7806
  type RoomPlayer = {
6812
7807
  userId: number;
@@ -6832,258 +7827,128 @@ type RoomPlayerView = {
6832
7827
  declare class RoomPlayers {
6833
7828
  readonly [STATE_FIELDS]: readonly [
6834
7829
  "byId",
6835
- "selfId",
6836
- "paths"
6837
- ];
6838
- private readonly byId;
6839
- private readonly paths;
6840
- private readonly enterListeners;
6841
- private readonly leaveListeners;
6842
- private readonly moveListeners;
6843
- private selfId;
6844
- private readonly flash;
6845
- constructor(game: GameContext);
6846
- get list(): readonly RoomPlayer[];
6847
- get count(): number;
6848
- get(userId: number): RoomPlayer | null;
6849
- byUserName(userName: string): RoomPlayer | null;
6850
- byAvatarName(avatarName: string): RoomPlayer | null;
6851
- onEnter(listener: (player: RoomPlayer) => void): () => void;
6852
- onLeave(listener: (player: RoomPlayer) => void): () => void;
6853
- onMove(listener: (player: RoomPlayer) => void): () => void;
6854
- pathOf(userId: number): Array<{
6855
- x: number;
6856
- y: number;
6857
- }> | null;
6858
- refresh(): Promise<readonly RoomPlayer[]>;
6859
- viewOf(userId: number): Promise<RoomPlayerView | null>;
6860
- views(): Promise<RoomPlayerView[]>;
6861
- private move;
6862
- }
6863
- type ConnectionMode = "socket" | "http" | "disconnected";
6864
- type ConnectionServer = {
6865
- host: string;
6866
- port: number;
6867
- ips: readonly string[];
6868
- };
6869
- type ConnectionOutcome = {
6870
- connected: boolean;
6871
- };
6872
- declare class SessionApi {
6873
- readonly [STATE_FIELDS]: readonly [
6874
- "validated"
6875
- ];
6876
- private readonly bridge;
6877
- private readonly flash;
6878
- private readonly serverSide;
6879
- private readonly clientSide;
6880
- private validated;
6881
- private keepActiveTimer;
6882
- constructor(game: GameContext, flash: PhantomFlash);
6883
- connected(): Promise<boolean>;
6884
- mode(): Promise<ConnectionMode>;
6885
- server(): Promise<ConnectionServer>;
6886
- onConnectionLost(listener: () => void): Unsubscribe;
6887
- onConnected(listener: (outcome: ConnectionOutcome) => void): Unsubscribe;
6888
- onNodeSwitch(listener: (host: string) => void): Unsubscribe;
6889
- disconnect(options?: {
6890
- dispatchEvent?: boolean;
6891
- }): Promise<void>;
6892
- requestList(listId: number, timeoutMs?: number): Promise<ShopListFields>;
6893
- onList(listener: (list: ShopListFields) => void): Unsubscribe;
6894
- inMinigame(): Promise<boolean>;
6895
- settingsUserName(): Promise<string>;
6896
- sendEmailActivation(email: string, timeoutMs?: number): Promise<boolean>;
6897
- onEmailActivation(listener: (sent: boolean) => void): Unsubscribe;
6898
- onEmailActivationRequest(listener: (email: string) => void): Unsubscribe;
6899
- get emailValidated(): boolean;
6900
- onEmailValidated(listener: () => void): Unsubscribe;
6901
- markActive(): Promise<void>;
6902
- keepActive(): Promise<void>;
6903
- stopKeepingActive(): Promise<void>;
6904
- get keepingActive(): boolean;
6905
- onIdleWarning(listener: () => void): Unsubscribe;
6906
- private hookVoid;
6907
- }
6908
- type ItemDefinition = {
6909
- defId: number;
6910
- name: string;
6911
- titleStrId: number;
6912
- cost: number;
6913
- currencyType: number;
6914
- combinedCost: string;
6915
- membersOnly: boolean;
6916
- recycleValue: number;
6917
- type: number;
6918
- enviroType: number;
6919
- colors: number[];
6920
- layerId: number;
6921
- accId: number;
6922
- avatarUseFlag: number;
6923
- itemStatus: number;
6924
- isNew: boolean;
6925
- isOnSale: boolean;
6926
- isGiftable: boolean;
6927
- availabilityStartTime: number;
6928
- availabilityEndTime: number;
6929
- combat: ItemCombat;
6930
- };
6931
- type ItemCombat = {
6932
- attack: number;
6933
- defense: number;
6934
- attackMediaRefId: number;
6935
- combatType: number;
6936
- modifierType: number;
6937
- modifierValue: number;
6938
- criticalHit: number;
6939
- };
6940
- type ShopOffering = {
6941
- shopId: number;
6942
- listType: number;
6943
- titleStrId: number | null;
6944
- diamondBundle: boolean;
6945
- diamondCost: number;
6946
- items: ItemDefinition[];
6947
- unknownDefIds: number[];
6948
- };
6949
- type ShopListing = {
6950
- shopId: number;
6951
- listType: number;
6952
- defIds: number[];
6953
- };
6954
- type ItemPictureKind = "clothing" | "den-item";
6955
- type ItemPictureItem = number | {
6956
- defId: number;
6957
- kind?: ItemPictureKind;
6958
- color?: number;
6959
- };
6960
- type ItemPictureOptions = {
6961
- scale?: number;
6962
- background?: number | null;
6963
- maxSize?: number;
6964
- large?: boolean;
6965
- version?: number;
6966
- timeoutMs?: number;
6967
- cache?: boolean;
6968
- };
6969
- type DenShopOffering = {
6970
- shopId: number;
6971
- listType: number;
6972
- items: DenItemDefinition[];
6973
- unknownDefIds: number[];
7830
+ "selfId",
7831
+ "paths"
7832
+ ];
7833
+ private readonly byId;
7834
+ private readonly paths;
7835
+ private readonly enterListeners;
7836
+ private readonly leaveListeners;
7837
+ private readonly moveListeners;
7838
+ private selfId;
7839
+ private readonly flash;
7840
+ constructor(game: GameContext);
7841
+ get list(): readonly RoomPlayer[];
7842
+ get count(): number;
7843
+ get(userId: number): RoomPlayer | null;
7844
+ byUserName(userName: string): RoomPlayer | null;
7845
+ byAvatarName(avatarName: string): RoomPlayer | null;
7846
+ onEnter(listener: (player: RoomPlayer) => void): () => void;
7847
+ onLeave(listener: (player: RoomPlayer) => void): () => void;
7848
+ onMove(listener: (player: RoomPlayer) => void): () => void;
7849
+ pathOf(userId: number): Array<{
7850
+ x: number;
7851
+ y: number;
7852
+ }> | null;
7853
+ refresh(): Promise<readonly RoomPlayer[]>;
7854
+ viewOf(userId: number): Promise<RoomPlayerView | null>;
7855
+ views(): Promise<RoomPlayerView[]>;
7856
+ onList(listener: (event: RoomPlayerList) => void, options?: {
7857
+ refresh?: boolean;
7858
+ }): () => void;
7859
+ onPosition(userId: number, listener: (where: RoomPlayerWhere) => void, options?: {
7860
+ everyMs?: number;
7861
+ }): () => void;
7862
+ private move;
7863
+ }
7864
+ declare const ROOM_SURFACES: {
7865
+ readonly behind: "room_bkg_main";
7866
+ readonly players: "room_avatars";
7867
+ readonly front: "room_fg";
7868
+ readonly over: "room_super_fg";
7869
+ readonly chat: "room_chat";
7870
+ readonly interface: "gui";
7871
+ };
7872
+ type RoomSurfaceName = keyof typeof ROOM_SURFACES;
7873
+ type RoomSurface = {
7874
+ name: RoomSurfaceName;
7875
+ layer: (typeof ROOM_LAYER_NAMES)[number];
7876
+ ready: boolean;
7877
+ children: number;
7878
+ visible: boolean;
7879
+ place: FlashReference;
6974
7880
  };
6975
- type DiamondItem = {
6976
- defId: number;
6977
- value: number;
6978
- type: number;
6979
- refDefId: number;
6980
- status: number;
6981
- isNew: boolean;
6982
- isOnSale: boolean;
6983
- isOnClearance: boolean;
6984
- isRare: boolean;
6985
- isAvailable: boolean;
6986
- availabilityEndTime: number;
6987
- startTime: number;
7881
+ type RoomChange = {
7882
+ from: RoomInfo | null;
7883
+ to: RoomInfo;
6988
7884
  };
6989
- type DiamondDefinition = {
6990
- defId: number;
6991
- value: number;
6992
- refDefId: number;
6993
- type: number;
6994
- status: number;
6995
- availabilityStartTime: number;
6996
- availabilityEndTime: number;
7885
+ type RoomPlayerList = {
7886
+ players: readonly RoomPlayer[];
7887
+ arrived: RoomPlayer | null;
7888
+ left: RoomPlayer | null;
6997
7889
  };
6998
- type DiamondShopItem = {
6999
- diamondDefId: number;
7000
- defId: number | null;
7001
- itemClass: string | null;
7890
+ type RoomPlayerWhere = {
7891
+ userId: number;
7892
+ x: number;
7893
+ y: number;
7894
+ here: boolean;
7895
+ moving: boolean | null;
7002
7896
  };
7003
- type DiamondShopList = {
7004
- items: DiamondShopItem[];
7005
- unknownDefIds: number[];
7897
+ type ConnectionMode = "socket" | "http" | "disconnected";
7898
+ type ConnectionServer = {
7899
+ host: string;
7900
+ port: number;
7901
+ ips: readonly string[];
7006
7902
  };
7007
- type Purchase = {
7008
- defId: number;
7009
- shopId: number;
7010
- status: number;
7011
- balance: number | null;
7012
- currencyType: number;
7903
+ type SessionReady = {
7904
+ connected: boolean;
7905
+ loggedIn: boolean;
7906
+ inWorld: boolean;
7907
+ worldReady: boolean;
7013
7908
  };
7014
- type Sale = {
7015
- invIds: number[];
7016
- gems: number | null;
7909
+ type ConnectionOutcome = {
7910
+ connected: boolean;
7017
7911
  };
7018
- declare class ShopsApi {
7912
+ declare class SessionApi {
7019
7913
  readonly [STATE_FIELDS]: readonly [
7020
- "lists"
7914
+ "validated"
7021
7915
  ];
7916
+ private readonly bridge;
7022
7917
  private readonly flash;
7023
- private readonly client;
7024
- private readonly server;
7025
- private readonly lists;
7026
- private readonly pictures;
7918
+ private readonly serverSide;
7919
+ private readonly clientSide;
7920
+ private validated;
7921
+ private keepActiveTimer;
7027
7922
  constructor(game: GameContext, flash: PhantomFlash);
7028
- offering(shopId: number, { refresh, timeoutMs, }?: {
7029
- refresh?: boolean;
7030
- timeoutMs?: number;
7031
- }): Promise<ShopOffering>;
7032
- denOffering(shopId: number, { refresh, timeoutMs, }?: {
7033
- refresh?: boolean;
7034
- timeoutMs?: number;
7035
- }): Promise<DenShopOffering>;
7036
- definition(defId: number): Promise<ItemDefinition | null>;
7037
- definitionsReady(): Promise<boolean>;
7038
- picture(item: ItemPictureItem, options?: ItemPictureOptions): Promise<string>;
7039
- isAvailable(window: {
7040
- availabilityStartTime: number;
7041
- availabilityEndTime: number;
7042
- }): Promise<boolean>;
7043
- diamondItem(defId: number): Promise<DiamondItem | null>;
7044
- diamondDefinition(entry: number | {
7045
- refDefId: number;
7046
- type: number;
7047
- }): Promise<DiamondDefinition | null>;
7048
- diamondList(defIds: number[]): Promise<DiamondShopList>;
7049
- listType(shopId: number): Promise<number | null>;
7050
- knownShops(): Promise<Array<{
7051
- shopId: number;
7052
- listType: number;
7053
- }>>;
7054
- open(shopId: number): Promise<void>;
7055
- close(): Promise<void>;
7056
- isOpen(): Promise<boolean>;
7057
- onOpen(listener: (opened: {
7058
- shopId: number;
7059
- listType: number;
7060
- }) => void): () => void;
7061
- buyDiamondBundle(timeoutMs?: number): Promise<{
7062
- bought: boolean;
7063
- balance: number | null;
7064
- }>;
7065
- buy(defId: number, { shopId, colorIndex, diamond, forDenItem, timeoutMs, }: {
7066
- shopId: number;
7067
- colorIndex?: number;
7068
- diamond?: boolean;
7069
- forDenItem?: {
7070
- invId: number;
7071
- userName: string;
7072
- };
7923
+ connected(): Promise<boolean>;
7924
+ mode(): Promise<ConnectionMode>;
7925
+ ready(): Promise<SessionReady>;
7926
+ whenReady(options?: {
7927
+ step?: keyof SessionReady;
7073
7928
  timeoutMs?: number;
7074
- }): Promise<Purchase>;
7075
- sell(...invIds: number[]): Promise<Sale>;
7076
- onBuy(listener: (purchase: Purchase) => void): Unsubscribe;
7077
- onSell(listener: (sale: Sale) => void): Unsubscribe;
7078
- onList(listener: (listing: ShopListing) => void): Unsubscribe;
7079
- onDiamondBundleBuy(listener: (result: {
7080
- bought: boolean;
7081
- balance: number | null;
7082
- }) => void): Unsubscribe;
7083
- private definitionsLoaded;
7084
- private drawClothing;
7085
- private drawDenItem;
7086
- private listFor;
7929
+ }): Promise<SessionReady>;
7930
+ server(): Promise<ConnectionServer>;
7931
+ onConnectionLost(listener: () => void): Unsubscribe;
7932
+ onConnected(listener: (outcome: ConnectionOutcome) => void): Unsubscribe;
7933
+ onNodeSwitch(listener: (host: string) => void): Unsubscribe;
7934
+ disconnect(options?: {
7935
+ dispatchEvent?: boolean;
7936
+ }): Promise<void>;
7937
+ requestList(listId: number, timeoutMs?: number): Promise<ShopListFields>;
7938
+ onList(listener: (list: ShopListFields) => void): Unsubscribe;
7939
+ inMinigame(): Promise<boolean>;
7940
+ settingsUserName(): Promise<string>;
7941
+ sendEmailActivation(email: string, timeoutMs?: number): Promise<boolean>;
7942
+ onEmailActivation(listener: (sent: boolean) => void): Unsubscribe;
7943
+ onEmailActivationRequest(listener: (email: string) => void): Unsubscribe;
7944
+ get emailValidated(): boolean;
7945
+ onEmailValidated(listener: () => void): Unsubscribe;
7946
+ markActive(): Promise<void>;
7947
+ keepActive(): Promise<void>;
7948
+ stopKeepingActive(): Promise<void>;
7949
+ get keepingActive(): boolean;
7950
+ onIdleWarning(listener: () => void): Unsubscribe;
7951
+ private hookVoid;
7087
7952
  }
7088
7953
  declare const BANKS: {
7089
7954
  readonly gift: "hasLoadedGiftUnwrapSfx";
@@ -7144,6 +8009,9 @@ declare class SoundApi {
7144
8009
  private readonly bridge;
7145
8010
  private readonly flash;
7146
8011
  private readonly changeListeners;
8012
+ private readonly audioListeners;
8013
+ private audioHooks;
8014
+ private audioReading;
7147
8015
  constructor(game: GameContext, flash: PhantomFlash);
7148
8016
  settings(): Promise<SoundSettings>;
7149
8017
  areSoundsMuted(): Promise<boolean>;
@@ -7154,6 +8022,8 @@ declare class SoundApi {
7154
8022
  muteMusic(muted: boolean): Promise<SoundSettings>;
7155
8023
  muteAll(muted: boolean): Promise<SoundSettings>;
7156
8024
  toggleMute(): Promise<SoundSettings>;
8025
+ silence(): Promise<SoundSettings>;
8026
+ restore(settings: SoundSettings): Promise<SoundSettings>;
7157
8027
  setVolume(volume: number): Promise<SoundSettings>;
7158
8028
  setSoundVolume(volume: number): Promise<SoundSettings>;
7159
8029
  setMusicVolume(volume: number): Promise<SoundSettings>;
@@ -7167,6 +8037,10 @@ declare class SoundApi {
7167
8037
  unpauseSounds(): Promise<void>;
7168
8038
  stopAll(): Promise<void>;
7169
8039
  onChange(listener: (settings: SoundSettings) => void): Unsubscribe;
8040
+ onAudioChange(listener: (settings: SoundSettings) => void): Unsubscribe;
8041
+ private watchAudio;
8042
+ private unwatchAudio;
8043
+ private audioChanged;
7170
8044
  onPlay(listener: (className: string, loops: number) => void): () => void;
7171
8045
  onStop(listener: (className: string) => void): () => void;
7172
8046
  private hookAudio;
@@ -7230,6 +8104,21 @@ type TradeListEdit = {
7230
8104
  removed: InventoryRef[];
7231
8105
  };
7232
8106
  type TradeListing = Omit<PacketOf<typeof TradeList>, "room">;
8107
+ type TradeStage = "none" | "asking" | "offered" | "accepted" | "completed" | "ended";
8108
+ type TradeState = {
8109
+ stage: TradeStage;
8110
+ trading: boolean;
8111
+ userName: string | null;
8112
+ theirOffer: TradeOffer | null;
8113
+ theyWant: {
8114
+ kind: number;
8115
+ invIdx: number;
8116
+ } | null;
8117
+ myList: TradeItemRef[];
8118
+ myDraft: TradeDraftItem[];
8119
+ completion: TradeCompletion | null;
8120
+ end: TradeEnd | null;
8121
+ };
7233
8122
  declare class TradesApi {
7234
8123
  readonly [STATE_FIELDS]: readonly [
7235
8124
  "pending"
@@ -7246,6 +8135,9 @@ declare class TradesApi {
7246
8135
  onEnd(listener: (end: TradeEnd) => void): Unsubscribe;
7247
8136
  onChange(listener: (change: TradeChange) => void): Unsubscribe;
7248
8137
  request(userName: string, wanted: TradeItemRef, { clothing, den, audio, pets }?: TradeOfferItems): Promise<void>;
8138
+ openRequest(userName: string, wanted: TradeItemRef, { timeoutMs }?: {
8139
+ timeoutMs?: number;
8140
+ }): Promise<void>;
7249
8141
  add(...items: TradeItemRef[]): Promise<void>;
7250
8142
  remove(...items: TradeItemRef[]): Promise<void>;
7251
8143
  myList(timeoutMs?: number): Promise<TradeListing>;
@@ -7262,6 +8154,9 @@ declare class TradesApi {
7262
8154
  offerDraft(): Promise<TradeDraftItem[]>;
7263
8155
  counts(): Promise<TradeCounts>;
7264
8156
  listEntry(item: TradeItemRef): Promise<TradeItemRef | null>;
8157
+ state(): Promise<TradeState>;
8158
+ onState(listener: (state: TradeState) => void): Unsubscribe;
8159
+ private whenCardReady;
7265
8160
  private ownCollection;
7266
8161
  private comm;
7267
8162
  private changeList;
@@ -7413,13 +8308,17 @@ type UiWindowOptions = UiOptions & {
7413
8308
  closable?: boolean;
7414
8309
  };
7415
8310
  type UiButton = UiWidget & {
8311
+ label(): string;
7416
8312
  setLabel(label: string): Promise<void>;
7417
8313
  setDisabled(disabled: boolean): Promise<void>;
8314
+ setImage(image: string | null): Promise<void>;
7418
8315
  onClick(listener: () => void): UiRemove;
7419
8316
  };
7420
8317
  type UiButtonOptions = UiOptions & {
7421
8318
  disabled?: boolean;
7422
8319
  primary?: boolean;
8320
+ image?: string;
8321
+ imageOnly?: boolean;
7423
8322
  };
7424
8323
  type UiLabel = UiWidget & {
7425
8324
  setText(text: string): Promise<void>;
@@ -7505,6 +8404,16 @@ type UiGridOptions = UiOptions & {
7505
8404
  tileHeight?: number;
7506
8405
  gap?: number;
7507
8406
  };
8407
+ type UiImage = UiWidget & {
8408
+ source(): string;
8409
+ setSource(url: string): Promise<void>;
8410
+ onFailed(listener: (message: string) => void): UiRemove;
8411
+ };
8412
+ type UiImageOptions = UiOptions & {
8413
+ alt?: string;
8414
+ centered?: boolean;
8415
+ alpha?: number;
8416
+ };
7508
8417
  type UiScroll = UiWidget & {
7509
8418
  readonly body: OverlayNode;
7510
8419
  offset(): number;
@@ -7524,6 +8433,66 @@ type UiTooltipOptions = UiOptions & {
7524
8433
  visible?: boolean;
7525
8434
  target?: UiWidget | OverlayNode;
7526
8435
  };
8436
+ type UiPromptOptions = {
8437
+ title?: string;
8438
+ value?: string;
8439
+ placeholder?: string;
8440
+ maxLength?: number;
8441
+ okLabel?: string;
8442
+ cancelLabel?: string;
8443
+ x?: number;
8444
+ y?: number;
8445
+ width?: number;
8446
+ skin?: UiSkin;
8447
+ };
8448
+ type UiChooseOptions = {
8449
+ title?: string;
8450
+ cancelLabel?: string;
8451
+ x?: number;
8452
+ y?: number;
8453
+ width?: number;
8454
+ rows?: number;
8455
+ skin?: UiSkin;
8456
+ };
8457
+ type UiNotice = UiWidget & {
8458
+ setText(text: string): Promise<void>;
8459
+ onClose(listener: () => void): UiRemove;
8460
+ };
8461
+ type UiNoticeOptions = {
8462
+ title?: string;
8463
+ seconds?: number;
8464
+ x?: number;
8465
+ y?: number;
8466
+ width?: number;
8467
+ closable?: boolean;
8468
+ draggable?: boolean;
8469
+ skin?: UiSkin;
8470
+ };
8471
+ type UiTagTarget = number | {
8472
+ readonly place: FlashPlaceLike;
8473
+ } | UiPlace;
8474
+ type UiTag = UiWidget & {
8475
+ setText(text: string): Promise<void>;
8476
+ };
8477
+ type UiTagOptions = {
8478
+ offsetX?: number;
8479
+ offsetY?: number;
8480
+ colour?: number;
8481
+ heading?: boolean;
8482
+ background?: boolean;
8483
+ seconds?: number;
8484
+ key?: string;
8485
+ skin?: UiSkin;
8486
+ };
8487
+ type UiTipOptions = {
8488
+ offsetX?: number;
8489
+ offsetY?: number;
8490
+ skin?: UiSkin;
8491
+ };
8492
+ type UiStageSize = {
8493
+ width: number;
8494
+ height: number;
8495
+ };
7527
8496
  type UiProgress = UiWidget & {
7528
8497
  value(): number;
7529
8498
  setValue(value: number): Promise<void>;
@@ -7588,6 +8557,7 @@ declare class UiApi {
7588
8557
  private readonly flash;
7589
8558
  private readonly drawn;
7590
8559
  private readonly popups;
8560
+ private readonly tags;
7591
8561
  private symbolMaker;
7592
8562
  private gameFont;
7593
8563
  private defaultSkin;
@@ -7615,6 +8585,7 @@ declare class UiApi {
7615
8585
  tabs(options: UiTabsOptions): Promise<UiTabs>;
7616
8586
  list(options?: UiListOptions): Promise<UiList>;
7617
8587
  grid(options: UiGridOptions): Promise<UiGrid>;
8588
+ image(source: string, options?: UiImageOptions): Promise<UiImage>;
7618
8589
  scroll(options?: UiScrollOptions): Promise<UiScroll>;
7619
8590
  tooltip(options?: UiTooltipOptions): Promise<UiTooltip>;
7620
8591
  private bubble;
@@ -7622,6 +8593,13 @@ declare class UiApi {
7622
8593
  progress(options?: UiProgressOptions): Promise<UiProgress>;
7623
8594
  colors(options?: UiColorsOptions): Promise<UiColors>;
7624
8595
  paletteValues(which?: 1 | 2 | "game"): Promise<number[]>;
8596
+ prompt(text: string, options?: UiPromptOptions): UiPopupAnswer<string | null>;
8597
+ choose(text: string, choices: readonly (UiChoice | string)[], options?: UiChooseOptions): UiPopupAnswer<string | null>;
8598
+ notice(text: string, options?: UiNoticeOptions): Promise<UiNotice>;
8599
+ tag(target: UiTagTarget, text: string, options?: UiTagOptions): Promise<UiTag>;
8600
+ tipOn(place: UiPlace, text: string | (() => string | Promise<string>), options?: UiTipOptions): Promise<UiRemove>;
8601
+ stageSize(): Promise<UiStageSize>;
8602
+ onStageResize(listener: (size: UiStageSize) => void): () => void;
7625
8603
  places(): UiSpot[];
7626
8604
  place(spot: UiSpot): FlashPlaceLike;
7627
8605
  attach(place: UiPlace, widget: UiWidget | OverlayNode): Promise<UiRemove>;
@@ -7637,7 +8615,10 @@ declare class UiApi {
7637
8615
  clear(): Promise<void>;
7638
8616
  private pieceOf;
7639
8617
  private widget;
8618
+ private picture;
7640
8619
  private box;
8620
+ private anchorOf;
8621
+ private mouse;
7641
8622
  private placeOf;
7642
8623
  private maker;
7643
8624
  private nodeObject;
@@ -7805,6 +8786,10 @@ type JourneyBookCounts = {
7805
8786
  unseenPages: number;
7806
8787
  unclaimedGifts: number;
7807
8788
  };
8789
+ type JourneyBookPage = {
8790
+ page: number;
8791
+ pages: number;
8792
+ };
7808
8793
  declare class JourneyBookApi {
7809
8794
  private readonly flash;
7810
8795
  private readonly client;
@@ -7814,6 +8799,11 @@ declare class JourneyBookApi {
7814
8799
  unclaimedGifts(): Promise<number>;
7815
8800
  open(factDefId?: number): Promise<void>;
7816
8801
  onChange(listener: (counts: JourneyBookCounts) => void): Unsubscribe;
8802
+ onGiftReady(listener: (gifts: number) => void): Unsubscribe;
8803
+ unseenPageIds(): Promise<number[]>;
8804
+ showing(): Promise<JourneyBookPage | null>;
8805
+ turnTo(page: number): Promise<boolean>;
8806
+ close(): Promise<boolean>;
7817
8807
  }
7818
8808
  type ReferralCodeInfo = {
7819
8809
  code: string;
@@ -7828,6 +8818,10 @@ type ReferralPage = {
7828
8818
  status: number;
7829
8819
  };
7830
8820
  type ReferrerOutcome = "recorded" | "refused" | "failed";
8821
+ type ReferralRewards = {
8822
+ treasures: boolean[];
8823
+ opened: number;
8824
+ };
7831
8825
  declare class ReferralsApi {
7832
8826
  readonly [STATE_FIELDS]: readonly [
7833
8827
  "heardCode"
@@ -7835,6 +8829,8 @@ declare class ReferralsApi {
7835
8829
  private readonly flash;
7836
8830
  private readonly server;
7837
8831
  private heardCode;
8832
+ private firstTreasure;
8833
+ private otherTreasures;
7838
8834
  constructor(game: GameContext);
7839
8835
  get code(): string | null;
7840
8836
  fetchCode(timeoutMs?: number): Promise<ReferralCodeInfo>;
@@ -7846,6 +8842,14 @@ declare class ReferralsApi {
7846
8842
  pageSize?: number;
7847
8843
  timeoutMs?: number;
7848
8844
  }): Promise<ReferralPage>;
8845
+ everyone(options?: {
8846
+ pageSize?: number;
8847
+ pages?: number;
8848
+ timeoutMs?: number;
8849
+ }): Promise<ReferredPlayer[]>;
8850
+ rewards(): Promise<ReferralRewards>;
8851
+ onRewards(listener: (rewards: ReferralRewards) => void): Unsubscribe;
8852
+ private stat;
7849
8853
  onCode(listener: (code: ReferralCodeInfo | null) => void): Unsubscribe;
7850
8854
  onHasReferrer(listener: (hasReferrer: boolean) => void): Unsubscribe;
7851
8855
  onReferrerNamed(listener: (outcome: ReferrerOutcome) => void): Unsubscribe;
@@ -7869,6 +8873,10 @@ type ShortcutPress = {
7869
8873
  alt: boolean;
7870
8874
  consumed: boolean;
7871
8875
  };
8876
+ type ShortcutTyping = "empty" | "always";
8877
+ type BoundShortcut = Shortcut & {
8878
+ whileTyping: ShortcutTyping;
8879
+ };
7872
8880
  declare class InputApi {
7873
8881
  private readonly flash;
7874
8882
  private readonly bindings;
@@ -7876,9 +8884,13 @@ declare class InputApi {
7876
8884
  private readonly held;
7877
8885
  constructor(game: GameContext);
7878
8886
  bind(shortcut: string, options?: ShortcutOptions): Promise<Shortcut>;
8887
+ bindAnywhere(shortcut: string, options?: ShortcutOptions): Promise<Shortcut>;
8888
+ private bindWith;
7879
8889
  unbind(shortcut: string): Promise<boolean>;
7880
8890
  get bound(): Shortcut[];
8891
+ get shortcuts(): BoundShortcut[];
7881
8892
  onShortcut(listener: (press: ShortcutPress) => void): Unsubscribe;
8893
+ onAnyKey(listener: (press: KeyPress) => void): Unsubscribe;
7882
8894
  private listen;
7883
8895
  private tell;
7884
8896
  }
@@ -7911,6 +8923,13 @@ declare class ViewApi {
7911
8923
  showOwnAvatar(show: boolean): Promise<boolean>;
7912
8924
  showOwnNameTag(show: boolean): Promise<boolean>;
7913
8925
  onChange(listener: (state: ViewState) => void): Unsubscribe;
8926
+ private cleaned;
8927
+ clean(options?: {
8928
+ interface?: boolean;
8929
+ ownAvatar?: boolean;
8930
+ ownNameTag?: boolean;
8931
+ }): Promise<ViewState>;
8932
+ restore(): Promise<ViewState>;
7914
8933
  private set;
7915
8934
  private hide;
7916
8935
  private follow;
@@ -7919,6 +8938,14 @@ declare class ViewApi {
7919
8938
  private hookZoom;
7920
8939
  private changed;
7921
8940
  }
8941
+ type BodyMod = {
8942
+ kind: "eyes" | "pattern";
8943
+ defId: number;
8944
+ name: string;
8945
+ titleStrId: number;
8946
+ membersOnly: boolean;
8947
+ inUse: boolean;
8948
+ };
7922
8949
  type LookItem = {
7923
8950
  defId: number;
7924
8951
  color: number;
@@ -7978,6 +9005,10 @@ declare class LooksApi {
7978
9005
  plan(look: Look, options?: LookOptions): Promise<LookPlan>;
7979
9006
  putOn(look: Look, options?: LookOptions): Promise<LookResult>;
7980
9007
  onChange(listener: (change: LookChange) => void): () => void;
9008
+ watch(listener: (look: Look) => void): () => void;
9009
+ bodyMods(): Promise<BodyMod[]>;
9010
+ wearBodyMod(kind: "eyes" | "pattern", defId: number): Promise<boolean>;
9011
+ private bodyModsWorn;
7981
9012
  private player;
7982
9013
  private holding;
7983
9014
  }
@@ -8436,14 +9467,22 @@ type SdkPathOfSdk = {
8436
9467
  }[SdkArea];
8437
9468
  declare const NOT_FOR_PLUGINS: readonly [
8438
9469
  "avatar.view",
9470
+ "avatar.viewOf",
9471
+ "room.surfaces",
8439
9472
  "adventures.record",
8440
9473
  "content.replaceOnScreen",
8441
9474
  "content.load",
8442
- "realtime.join"
9475
+ "realtime.join",
9476
+ "realtime.stayIn",
9477
+ "customRooms.prop",
9478
+ "customRooms.object",
9479
+ "customRooms.character"
8443
9480
  ];
8444
9481
  type SdkPath = Exclude<SdkPathOfSdk, (typeof NOT_FOR_PLUGINS)[number]>;
8445
9482
  declare const FRAME_MEMBERS: {
8446
9483
  readonly "avatar.view": "flash";
9484
+ readonly "avatar.viewOf": "flash";
9485
+ readonly "room.surfaces": "flash";
8447
9486
  readonly "adventures.record": "sdk:adventures:read";
8448
9487
  readonly "content.load": "flash";
8449
9488
  readonly "content.replaceOnScreen": "flash";
@@ -8451,7 +9490,14 @@ declare const FRAME_MEMBERS: {
8451
9490
  readonly "recipes.customChatBox": "flash";
8452
9491
  readonly "recipes.chatHistoryPanel": "flash";
8453
9492
  readonly "realtime.join": "sdk:realtime:act";
9493
+ readonly "realtime.stayIn": "sdk:realtime:act";
9494
+ readonly "customRooms.prop": "sdk:customRooms:act";
9495
+ readonly "customRooms.object": "sdk:customRooms:act";
9496
+ readonly "customRooms.character": "sdk:customRooms:act";
8454
9497
  };
9498
+ declare const FRAME_AREAS: readonly [
9499
+ "ui"
9500
+ ];
8455
9501
  declare const SDK_PERMISSIONS: {
8456
9502
  readonly "avatar.position": "read";
8457
9503
  readonly "avatar.walkTo": "act";
@@ -8484,6 +9530,8 @@ declare const SDK_PERMISSIONS: {
8484
9530
  readonly "avatar.placeAt": "act";
8485
9531
  readonly "avatar.playAnimation": "act";
8486
9532
  readonly "avatar.tint": "act";
9533
+ readonly "avatar.tintOf": "act";
9534
+ readonly "avatar.asPhantom": "act";
8487
9535
  readonly "avatar.setOpacity": "act";
8488
9536
  readonly "avatar.showBubble": "act";
8489
9537
  readonly "avatar.setMode": "act";
@@ -8506,6 +9554,7 @@ declare const SDK_PERMISSIONS: {
8506
9554
  readonly "avatar.loadDefinitions": "read";
8507
9555
  readonly "avatar.data": "read";
8508
9556
  readonly "avatar.inRoom": "read";
9557
+ readonly "avatar.whoIs": "read";
8509
9558
  readonly "avatar.findInRoom": "read";
8510
9559
  readonly "avatar.standingOf": "read";
8511
9560
  readonly "avatar.defaultLook": "read";
@@ -8527,6 +9576,8 @@ declare const SDK_PERMISSIONS: {
8527
9576
  readonly "avatar.onUsableChosen": "read";
8528
9577
  readonly "avatar.onPhotoChecked": "read";
8529
9578
  readonly "avatar.onPhotoTaken": "read";
9579
+ readonly "avatar.nameBar": "read";
9580
+ readonly "avatar.setNameBar": "act";
8530
9581
  readonly "player.login": "read";
8531
9582
  readonly "player.onLogin": "read";
8532
9583
  readonly "player.userName": "read";
@@ -8565,6 +9616,7 @@ declare const SDK_PERMISSIONS: {
8565
9616
  readonly "player.clothing": "read";
8566
9617
  readonly "player.denItemsForRoom": "read";
8567
9618
  readonly "player.petsInDen": "read";
9619
+ readonly "player.belongings": "read";
8568
9620
  readonly "player.animalKindCount": "read";
8569
9621
  readonly "player.animalDefaults": "read";
8570
9622
  readonly "player.customAnimal": "read";
@@ -8572,6 +9624,10 @@ declare const SDK_PERMISSIONS: {
8572
9624
  readonly "player.animalOf": "read";
8573
9625
  readonly "player.denRoomDefinitions": "read";
8574
9626
  readonly "player.denRoomDefinition": "read";
9627
+ readonly "player.activeDenId": "read";
9628
+ readonly "player.onActiveDenChange": "read";
9629
+ readonly "player.buddyCount": "read";
9630
+ readonly "player.onBuddyCountChange": "read";
8575
9631
  readonly "chat.recent": "read";
8576
9632
  readonly "chat.say": "act";
8577
9633
  readonly "chat.emote": "act";
@@ -8594,10 +9650,16 @@ declare const SDK_PERMISSIONS: {
8594
9650
  readonly "chat.petAction": "act";
8595
9651
  readonly "chat.attachmentEmote": "act";
8596
9652
  readonly "chat.showBalloon": "act";
9653
+ readonly "chat.balloon": "act";
8597
9654
  readonly "chat.log": "act";
8598
9655
  readonly "chat.clearLog": "act";
8599
9656
  readonly "chat.lastAdminMessage": "read";
8600
9657
  readonly "chat.lastModeration": "read";
9658
+ readonly "chat.typed": "read";
9659
+ readonly "chat.isTyping": "read";
9660
+ readonly "chat.onTyped": "read";
9661
+ readonly "chat.setTyped": "act";
9662
+ readonly "chat.clearTyped": "act";
8601
9663
  readonly "buddies.list": "read";
8602
9664
  readonly "buddies.online": "read";
8603
9665
  readonly "buddies.blocked": "read";
@@ -8631,6 +9693,9 @@ declare const SDK_PERMISSIONS: {
8631
9693
  readonly "buddies.clientBlocked": "read";
8632
9694
  readonly "buddies.hasBlocked": "read";
8633
9695
  readonly "buddies.cardTradeList": "read";
9696
+ readonly "buddies.openCard": "read";
9697
+ readonly "buddies.isListOpen": "read";
9698
+ readonly "buddies.closeList": "act";
8634
9699
  readonly "ecards.inbox": "read";
8635
9700
  readonly "ecards.unread": "read";
8636
9701
  readonly "ecards.get": "read";
@@ -8663,6 +9728,8 @@ declare const SDK_PERMISSIONS: {
8663
9728
  readonly "ecards.onInbox": "read";
8664
9729
  readonly "ecards.clientInbox": "read";
8665
9730
  readonly "ecards.clientInboxLoaded": "read";
9731
+ readonly "ecards.draft": "read";
9732
+ readonly "ecards.reading": "read";
8666
9733
  readonly "playerWall.posts": "read";
8667
9734
  readonly "playerWall.check": "read";
8668
9735
  readonly "playerWall.privacyOf": "read";
@@ -8700,12 +9767,15 @@ declare const SDK_PERMISSIONS: {
8700
9767
  readonly "playerWall.onServiceRequest": "read";
8701
9768
  readonly "playerWall.requestPermissions": "act";
8702
9769
  readonly "playerWall.like": "act";
9770
+ readonly "playerWall.serviceRequest": "act";
8703
9771
  readonly "dailyGift.daysInCycle": "read";
8704
9772
  readonly "dailyGift.statId": "read";
8705
9773
  readonly "dailyGift.received": "read";
8706
9774
  readonly "dailyGift.isOpen": "read";
8707
9775
  readonly "dailyGift.current": "read";
8708
9776
  readonly "dailyGift.onGift": "read";
9777
+ readonly "dailyGift.status": "read";
9778
+ readonly "dailyGift.onReady": "read";
8709
9779
  readonly "dailyGift.open": "act";
8710
9780
  readonly "dailyGift.keep": "act";
8711
9781
  readonly "dailyGift.keepDiamonds": "act";
@@ -8739,15 +9809,20 @@ declare const SDK_PERMISSIONS: {
8739
9809
  readonly "sound.effects": "read";
8740
9810
  readonly "sound.playSfx": "act";
8741
9811
  readonly "sound.stopSfx": "act";
9812
+ readonly "sound.onAudioChange": "read";
8742
9813
  readonly "feedback.types": "read";
8743
9814
  readonly "feedback.maxLength": "read";
8744
9815
  readonly "feedback.isOpen": "read";
8745
9816
  readonly "feedback.close": "act";
9817
+ readonly "feedback.topics": "read";
9818
+ readonly "feedback.onOpen": "read";
9819
+ readonly "feedback.open": "act";
8746
9820
  readonly "reports.report": "act";
8747
9821
  readonly "reports.reportContent": "act";
8748
9822
  readonly "reports.onReportResult": "read";
8749
9823
  readonly "reports.onContentReportResult": "read";
8750
9824
  readonly "reports.onReportSent": "read";
9825
+ readonly "reports.alreadyReported": "read";
8751
9826
  readonly "newspaper.definitions": "read";
8752
9827
  readonly "newspaper.dataOf": "read";
8753
9828
  readonly "newspaper.hasUnseenPages": "read";
@@ -8756,6 +9831,9 @@ declare const SDK_PERMISSIONS: {
8756
9831
  readonly "newspaper.markSeen": "act";
8757
9832
  readonly "newspaper.open": "act";
8758
9833
  readonly "newspaper.definition": "read";
9834
+ readonly "newspaper.available": "read";
9835
+ readonly "newspaper.reading": "read";
9836
+ readonly "newspaper.close": "act";
8759
9837
  readonly "masterpieces.itemsOf": "read";
8760
9838
  readonly "masterpieces.creatorOf": "read";
8761
9839
  readonly "masterpieces.likes": "read";
@@ -8764,6 +9842,7 @@ declare const SDK_PERMISSIONS: {
8764
9842
  readonly "masterpieces.onLikes": "read";
8765
9843
  readonly "masterpieces.onLiked": "read";
8766
9844
  readonly "masterpieces.like": "act";
9845
+ readonly "masterpieces.picture": "read";
8767
9846
  readonly "trades.offer": "read";
8768
9847
  readonly "trades.onOffer": "read";
8769
9848
  readonly "trades.onConfirmRequest": "read";
@@ -8787,9 +9866,11 @@ declare const SDK_PERMISSIONS: {
8787
9866
  readonly "trades.offerDraft": "read";
8788
9867
  readonly "trades.counts": "read";
8789
9868
  readonly "trades.listEntry": "read";
9869
+ readonly "trades.openRequest": "act";
8790
9870
  readonly "inventory.items": "read";
8791
9871
  readonly "inventory.owned": "read";
8792
9872
  readonly "inventory.worn": "read";
9873
+ readonly "inventory.have": "read";
8793
9874
  readonly "inventory.canWear": "read";
8794
9875
  readonly "inventory.onChange": "read";
8795
9876
  readonly "inventory.onUse": "read";
@@ -8804,7 +9885,12 @@ declare const SDK_PERMISSIONS: {
8804
9885
  readonly "inventory.onAvatarSlot": "read";
8805
9886
  readonly "inventory.latestPrize": "read";
8806
9887
  readonly "inventory.onPrize": "read";
9888
+ readonly "inventory.describe": "read";
8807
9889
  readonly "shops.offering": "read";
9890
+ readonly "shops.item": "read";
9891
+ readonly "shops.items": "read";
9892
+ readonly "shops.forSale": "read";
9893
+ readonly "shops.whenDefinitionsReady": "read";
8808
9894
  readonly "shops.definition": "read";
8809
9895
  readonly "shops.listType": "read";
8810
9896
  readonly "shops.isOpen": "read";
@@ -8830,6 +9916,7 @@ declare const SDK_PERMISSIONS: {
8830
9916
  readonly "pets.activeName": "read";
8831
9917
  readonly "pets.get": "read";
8832
9918
  readonly "pets.max": "read";
9919
+ readonly "pets.mine": "read";
8833
9920
  readonly "pets.kindName": "read";
8834
9921
  readonly "pets.kindId": "read";
8835
9922
  readonly "pets.hasUnnamedEggPet": "read";
@@ -8881,6 +9968,7 @@ declare const SDK_PERMISSIONS: {
8881
9968
  readonly "pets.onAdoptionChecklist": "read";
8882
9969
  readonly "pets.onAdoptionCount": "read";
8883
9970
  readonly "pets.onDefinitionsLoaded": "read";
9971
+ readonly "pets.inWorld": "read";
8884
9972
  readonly "room.players.list": "read";
8885
9973
  readonly "room.players.count": "read";
8886
9974
  readonly "room.players.get": "read";
@@ -8889,6 +9977,8 @@ declare const SDK_PERMISSIONS: {
8889
9977
  readonly "room.players.onEnter": "read";
8890
9978
  readonly "room.players.onLeave": "read";
8891
9979
  readonly "room.players.onMove": "read";
9980
+ readonly "room.players.onList": "read";
9981
+ readonly "room.players.onPosition": "read";
8892
9982
  readonly "room.players.refresh": "read";
8893
9983
  readonly "room.current": "read";
8894
9984
  readonly "room.details": "read";
@@ -8905,6 +9995,7 @@ declare const SDK_PERMISSIONS: {
8905
9995
  readonly "room.worldItem": "read";
8906
9996
  readonly "room.takeWorldItem": "act";
8907
9997
  readonly "room.onJoin": "read";
9998
+ readonly "room.onChange": "read";
8908
9999
  readonly "room.onJoinFailed": "read";
8909
10000
  readonly "room.join": "act";
8910
10001
  readonly "room.teleport": "act";
@@ -8937,6 +10028,11 @@ declare const SDK_PERMISSIONS: {
8937
10028
  readonly "room.objectAt": "read";
8938
10029
  readonly "room.setJamaaTime": "act";
8939
10030
  readonly "room.setDenKickNotice": "act";
10031
+ readonly "room.onLoaded": "read";
10032
+ readonly "room.whenLoaded": "read";
10033
+ readonly "room.enableVolume": "act";
10034
+ readonly "room.walkToSpawn": "act";
10035
+ readonly "room.showPlayers": "act";
8940
10036
  readonly "dens.join": "act";
8941
10037
  readonly "dens.joinOwn": "act";
8942
10038
  readonly "dens.isOwnDen": "read";
@@ -9003,6 +10099,7 @@ declare const SDK_PERMISSIONS: {
9003
10099
  readonly "dens.isChangePending": "read";
9004
10100
  readonly "dens.openDenShopId": "read";
9005
10101
  readonly "dens.heldDenShop": "read";
10102
+ readonly "dens.itemAt": "read";
9006
10103
  readonly "denShop.offering": "read";
9007
10104
  readonly "denShop.onChange": "read";
9008
10105
  readonly "denShop.onBuy": "read";
@@ -9013,8 +10110,12 @@ declare const SDK_PERMISSIONS: {
9013
10110
  readonly "denShop.onOffering": "read";
9014
10111
  readonly "denShop.onSale": "read";
9015
10112
  readonly "denShop.inDen": "read";
10113
+ readonly "denShop.forSale": "read";
9016
10114
  readonly "denShop.update": "act";
9017
10115
  readonly "shops.knownShops": "read";
10116
+ readonly "shops.openShop": "read";
10117
+ readonly "shops.onClose": "read";
10118
+ readonly "shops.limits": "read";
9018
10119
  readonly "world.serverNode": "read";
9019
10120
  readonly "world.shardId": "read";
9020
10121
  readonly "world.shards": "read";
@@ -9080,6 +10181,9 @@ declare const SDK_PERMISSIONS: {
9080
10181
  readonly "assets.loadMedia": "read";
9081
10182
  readonly "assets.requestDefPack": "read";
9082
10183
  readonly "assets.onLoaded": "read";
10184
+ readonly "assets.whenLoaded": "read";
10185
+ readonly "assets.url": "read";
10186
+ readonly "assets.picture": "read";
9083
10187
  readonly "adventures.lobby": "read";
9084
10188
  readonly "adventures.current": "read";
9085
10189
  readonly "adventures.treasures": "read";
@@ -9153,6 +10257,9 @@ declare const SDK_PERMISSIONS: {
9153
10257
  readonly "adventures.onRewardChoice": "read";
9154
10258
  readonly "adventures.onComplete": "read";
9155
10259
  readonly "adventures.onEnd": "read";
10260
+ readonly "adventures.phase": "read";
10261
+ readonly "adventures.onPhase": "read";
10262
+ readonly "adventures.contents": "read";
9156
10263
  readonly "adventures.phantomsNear": "read";
9157
10264
  readonly "adventures.nearestPhantom": "read";
9158
10265
  readonly "adventures.nearestPlant": "read";
@@ -9273,6 +10380,11 @@ declare const SDK_PERMISSIONS: {
9273
10380
  readonly "adventures.finishMinigame": "act";
9274
10381
  readonly "adventures.finishRoomMinigame": "act";
9275
10382
  readonly "adventures.reportSideScroll": "act";
10383
+ readonly "adventures.running": "read";
10384
+ readonly "adventures.objective": "read";
10385
+ readonly "adventures.onObjective": "read";
10386
+ readonly "adventures.actorTypeNames": "read";
10387
+ readonly "adventures.openList": "act";
9276
10388
  readonly "minigames.current": "read";
9277
10389
  readonly "minigames.isPlaying": "read";
9278
10390
  readonly "minigames.play": "act";
@@ -9320,6 +10432,7 @@ declare const SDK_PERMISSIONS: {
9320
10432
  readonly "minigames.onGemAward": "read";
9321
10433
  readonly "minigames.onPetMasteryAward": "read";
9322
10434
  readonly "minigames.onScore": "read";
10435
+ readonly "minigames.onRound": "read";
9323
10436
  readonly "minigames.quit": "act";
9324
10437
  readonly "minigames.playerInfo": "read";
9325
10438
  readonly "minigames.gameNameId": "read";
@@ -9378,19 +10491,26 @@ declare const SDK_PERMISSIONS: {
9378
10491
  readonly "achievements.earn": "act";
9379
10492
  readonly "achievements.onStats": "read";
9380
10493
  readonly "achievements.definitionsByType": "read";
10494
+ readonly "achievements.progress": "read";
10495
+ readonly "achievements.book": "read";
9381
10496
  readonly "membership.real": "read";
9382
10497
  readonly "membership.onChange": "read";
10498
+ readonly "membership.watch": "read";
9383
10499
  readonly "membership.shown": "read";
9384
10500
  readonly "membership.showing": "read";
9385
10501
  readonly "membership.onShowing": "read";
9386
10502
  readonly "membership.show": "act";
9387
10503
  readonly "membership.stopShowing": "act";
10504
+ readonly "membership.onUpsell": "read";
10505
+ readonly "membership.upsellsHidden": "read";
10506
+ readonly "membership.hideUpsells": "act";
9388
10507
  readonly "currency.gems": "read";
9389
10508
  readonly "currency.tickets": "read";
9390
10509
  readonly "currency.diamonds": "read";
9391
10510
  readonly "currency.balance": "read";
9392
10511
  readonly "currency.read": "read";
9393
10512
  readonly "currency.onChange": "read";
10513
+ readonly "currency.watch": "read";
9394
10514
  readonly "currency.donateGems": "act";
9395
10515
  readonly "currency.redeemCode": "act";
9396
10516
  readonly "currency.onRedeemResult": "read";
@@ -9405,6 +10525,7 @@ declare const SDK_PERMISSIONS: {
9405
10525
  readonly "currency.onDonate": "read";
9406
10526
  readonly "currency.diamondsLoaded": "read";
9407
10527
  readonly "currency.diamondDefinitionId": "read";
10528
+ readonly "currency.onClientBalance": "read";
9408
10529
  readonly "gui.tree": "read";
9409
10530
  readonly "gui.find": "read";
9410
10531
  readonly "gui.findAll": "read";
@@ -9464,6 +10585,8 @@ declare const SDK_PERMISSIONS: {
9464
10585
  readonly "editor.onPetCreatorColorChange": "read";
9465
10586
  readonly "editor.onPetCreatorOpen": "read";
9466
10587
  readonly "editor.onPetCreatorClose": "read";
10588
+ readonly "editor.petCreatorPet": "read";
10589
+ readonly "editor.onPetCreatorPet": "read";
9467
10590
  readonly "popups.list": "read";
9468
10591
  readonly "popups.read": "read";
9469
10592
  readonly "popups.answer": "act";
@@ -9494,6 +10617,7 @@ declare const SDK_PERMISSIONS: {
9494
10617
  readonly "ui.tabs": "act";
9495
10618
  readonly "ui.list": "act";
9496
10619
  readonly "ui.grid": "act";
10620
+ readonly "ui.image": "act";
9497
10621
  readonly "ui.scroll": "act";
9498
10622
  readonly "ui.tooltip": "act";
9499
10623
  readonly "ui.progress": "act";
@@ -9534,6 +10658,8 @@ declare const SDK_PERMISSIONS: {
9534
10658
  readonly "localization.sortingLocale": "read";
9535
10659
  readonly "localization.numberLocale": "read";
9536
10660
  readonly "localization.countryCode": "read";
10661
+ readonly "localization.word": "read";
10662
+ readonly "localization.words": "read";
9537
10663
  readonly "content.available": "read";
9538
10664
  readonly "content.replacements": "read";
9539
10665
  readonly "content.onRequest": "read";
@@ -9542,9 +10668,12 @@ declare const SDK_PERMISSIONS: {
9542
10668
  readonly "community.available": "read";
9543
10669
  readonly "community.hidden": "read";
9544
10670
  readonly "community.onHidden": "read";
10671
+ readonly "community.watchHidden": "read";
9545
10672
  readonly "community.hide": "act";
9546
10673
  readonly "community.unhide": "act";
9547
10674
  readonly "community.report": "act";
10675
+ readonly "community.nearby": "read";
10676
+ readonly "community.onNearby": "read";
9548
10677
  readonly "customRooms.available": "read";
9549
10678
  readonly "customRooms.current": "read";
9550
10679
  readonly "customRooms.onEnter": "read";
@@ -9560,6 +10689,18 @@ declare const SDK_PERMISSIONS: {
9560
10689
  readonly "customRooms.remove": "act";
9561
10690
  readonly "customRooms.enter": "act";
9562
10691
  readonly "customRooms.leave": "act";
10692
+ readonly "customRooms.propState": "read";
10693
+ readonly "customRooms.changeProp": "act";
10694
+ readonly "customRooms.limits": "read";
10695
+ readonly "customRooms.objectState": "read";
10696
+ readonly "customRooms.objects": "read";
10697
+ readonly "customRooms.onObject": "read";
10698
+ readonly "customRooms.changeObject": "act";
10699
+ readonly "customRooms.characterState": "read";
10700
+ readonly "customRooms.characters": "read";
10701
+ readonly "customRooms.onCharacterClick": "read";
10702
+ readonly "customRooms.changeCharacter": "act";
10703
+ readonly "customRooms.open": "act";
9563
10704
  readonly "realtime.available": "read";
9564
10705
  readonly "realtime.status": "read";
9565
10706
  readonly "realtime.onStatus": "read";
@@ -9586,20 +10727,29 @@ declare const SDK_PERMISSIONS: {
9586
10727
  readonly "realtime.setState": "act";
9587
10728
  readonly "realtime.setPresence": "act";
9588
10729
  readonly "realtime.giveHost": "act";
10730
+ readonly "realtime.limits": "read";
9589
10731
  readonly "journeyBook.counts": "read";
9590
10732
  readonly "journeyBook.unseenPages": "read";
9591
10733
  readonly "journeyBook.unclaimedGifts": "read";
9592
10734
  readonly "journeyBook.onChange": "read";
10735
+ readonly "journeyBook.onGiftReady": "read";
9593
10736
  readonly "journeyBook.open": "act";
10737
+ readonly "journeyBook.unseenPageIds": "read";
10738
+ readonly "journeyBook.showing": "read";
10739
+ readonly "journeyBook.turnTo": "act";
10740
+ readonly "journeyBook.close": "act";
9594
10741
  readonly "referrals.code": "read";
9595
10742
  readonly "referrals.clientCode": "read";
9596
10743
  readonly "referrals.fetchCode": "read";
9597
10744
  readonly "referrals.hasReferrer": "read";
9598
10745
  readonly "referrals.list": "read";
10746
+ readonly "referrals.everyone": "read";
9599
10747
  readonly "referrals.onCode": "read";
9600
10748
  readonly "referrals.onHasReferrer": "read";
9601
10749
  readonly "referrals.onReferrerNamed": "read";
9602
10750
  readonly "referrals.onList": "read";
10751
+ readonly "referrals.rewards": "read";
10752
+ readonly "referrals.onRewards": "read";
9603
10753
  readonly "referrals.nameReferrer": "act";
9604
10754
  readonly "avatar.noClip": "read";
9605
10755
  readonly "avatar.onNoClip": "read";
@@ -9607,6 +10757,8 @@ declare const SDK_PERMISSIONS: {
9607
10757
  readonly "input.onShortcut": "read";
9608
10758
  readonly "input.bind": "act";
9609
10759
  readonly "input.unbind": "act";
10760
+ readonly "input.bindAnywhere": "act";
10761
+ readonly "input.shortcuts": "read";
9610
10762
  readonly "view.state": "read";
9611
10763
  readonly "view.zoom": "read";
9612
10764
  readonly "view.zoomLimits": "read";
@@ -9616,11 +10768,15 @@ declare const SDK_PERMISSIONS: {
9616
10768
  readonly "view.showInterface": "act";
9617
10769
  readonly "view.showOwnAvatar": "act";
9618
10770
  readonly "view.showOwnNameTag": "act";
10771
+ readonly "view.clean": "act";
10772
+ readonly "view.restore": "act";
9619
10773
  readonly "session.markActive": "act";
9620
10774
  readonly "session.keepActive": "act";
9621
10775
  readonly "session.stopKeepingActive": "act";
9622
10776
  readonly "session.keepingActive": "read";
9623
10777
  readonly "session.onIdleWarning": "read";
10778
+ readonly "session.ready": "read";
10779
+ readonly "session.whenReady": "read";
9624
10780
  readonly "popups.skipAtLogin": "act";
9625
10781
  readonly "popups.stopSkippingAtLogin": "act";
9626
10782
  readonly "popups.skippingAtLogin": "read";
@@ -9642,7 +10798,10 @@ declare const SDK_PERMISSIONS: {
9642
10798
  readonly "looks.of": "read";
9643
10799
  readonly "looks.plan": "read";
9644
10800
  readonly "looks.onChange": "read";
10801
+ readonly "looks.watch": "read";
9645
10802
  readonly "looks.putOn": "act";
10803
+ readonly "looks.bodyMods": "read";
10804
+ readonly "looks.wearBodyMod": "act";
9646
10805
  readonly "artStudio.isOpen": "read";
9647
10806
  readonly "artStudio.current": "read";
9648
10807
  readonly "artStudio.state": "read";
@@ -9683,8 +10842,53 @@ declare const SDK_PERMISSIONS: {
9683
10842
  readonly "artStudio.print": "act";
9684
10843
  readonly "artStudio.browse": "act";
9685
10844
  readonly "artStudio.startColouring": "act";
10845
+ readonly "gui.waitFor": "read";
10846
+ readonly "gui.on": "read";
10847
+ readonly "gui.hover": "act";
10848
+ readonly "popups.waitFor": "read";
10849
+ readonly "popups.onOwn": "read";
10850
+ readonly "screens.list": "read";
10851
+ readonly "screens.waitFor": "read";
10852
+ readonly "ui.prompt": "act";
10853
+ readonly "ui.stageSize": "read";
10854
+ readonly "ui.onStageResize": "read";
10855
+ readonly "chat.onSaid": "read";
10856
+ readonly "chat.transcript": "read";
10857
+ readonly "buddies.watchOnline": "read";
10858
+ readonly "buddies.watchFor": "read";
10859
+ readonly "trades.state": "read";
10860
+ readonly "trades.onState": "read";
10861
+ readonly "playerWall.thread": "read";
10862
+ readonly "ui.choose": "act";
10863
+ readonly "ui.notice": "act";
10864
+ readonly "ui.tag": "act";
10865
+ readonly "ui.tipOn": "act";
10866
+ readonly "gui.onChatBox": "read";
10867
+ readonly "input.onAnyKey": "read";
10868
+ readonly "popups.autoAnswer": "act";
10869
+ readonly "popups.stopAutoAnswering": "act";
10870
+ readonly "popups.autoAnswering": "read";
10871
+ readonly "sound.silence": "act";
10872
+ readonly "sound.restore": "act";
10873
+ readonly "localization.translateAll": "read";
10874
+ readonly "editor.petCreatorLook": "read";
10875
+ readonly "editor.onPetCreatorLook": "read";
10876
+ };
10877
+ type StopKind = "now" | "awaited";
10878
+ declare const STOPPING_PATHS: {
10879
+ readonly "buddies.watchFor": "now";
10880
+ readonly "buddies.watchOnline": "now";
10881
+ readonly "community.watchHidden": "now";
10882
+ readonly "currency.watch": "now";
10883
+ readonly "gui.on": "now";
10884
+ readonly "looks.watch": "now";
10885
+ readonly "membership.watch": "now";
10886
+ readonly "adventures.autoAcceptDialogue": "awaited";
10887
+ readonly "chat.balloon": "awaited";
9686
10888
  };
9687
10889
  declare function isEventPath(path: string): boolean;
10890
+ declare function isNamedEvent(path: string): boolean;
10891
+ declare function stopKindOf(path: string): StopKind;
9688
10892
  declare function isSdkPath(path: string): path is SdkPath;
9689
10893
  declare function scopeOfPath(path: SdkPath): SdkScope;
9690
10894
  type RemoteMember<Member> = Member extends (...args: infer Args) => infer Result ? Result extends Unsubscribe ? (...args: Args) => Unsubscribe : (...args: Args) => Promise<Awaited<Result>> : () => Promise<Member>;
@@ -11634,8 +12838,11 @@ declare const permissionsSchema: ZodDefault<ZodObject<{
11634
12838
  referrals: "referrals";
11635
12839
  input: "input";
11636
12840
  gui: "gui";
11637
- content: "content";
12841
+ community: "community";
12842
+ dens: "dens";
11638
12843
  chat: "chat";
12844
+ realtime: "realtime";
12845
+ content: "content";
11639
12846
  world: "world";
11640
12847
  localization: "localization";
11641
12848
  newspaper: "newspaper";
@@ -11644,14 +12851,11 @@ declare const permissionsSchema: ZodDefault<ZodObject<{
11644
12851
  masterpieces: "masterpieces";
11645
12852
  journeyBook: "journeyBook";
11646
12853
  session: "session";
11647
- community: "community";
11648
12854
  customRooms: "customRooms";
11649
- realtime: "realtime";
11650
12855
  ecards: "ecards";
11651
12856
  playerWall: "playerWall";
11652
12857
  trades: "trades";
11653
12858
  shops: "shops";
11654
- dens: "dens";
11655
12859
  denShop: "denShop";
11656
12860
  assets: "assets";
11657
12861
  adventures: "adventures";
@@ -11744,7 +12948,7 @@ type WireError = {
11744
12948
  message: string;
11745
12949
  stack?: string;
11746
12950
  };
11747
- type PluginErrorCode = "PERMISSION_DENIED" | "GAME_NOT_ALLOWED" | "NO_GAME" | "COMMAND_NOT_ALLOWED" | "HOST_NOT_ALLOWED" | "NOT_SUPPORTED" | "TIMEOUT" | "FAILED";
12951
+ type PluginErrorCode = "PERMISSION_DENIED" | "GAME_NOT_ALLOWED" | "NO_GAME" | "COMMAND_NOT_ALLOWED" | "PANEL_NOT_ALLOWED" | "HOST_NOT_ALLOWED" | "NOT_SUPPORTED" | "TIMEOUT" | "FAILED";
11748
12952
  type PluginGameView = {
11749
12953
  id: string;
11750
12954
  accountId: string;
@@ -11765,6 +12969,9 @@ type FrameRole = {
11765
12969
  kind: "panel";
11766
12970
  contribution: string;
11767
12971
  game: string;
12972
+ } | {
12973
+ kind: "widget";
12974
+ contribution: string;
11768
12975
  } | {
11769
12976
  kind: "command-view";
11770
12977
  contribution: string;
@@ -11778,6 +12985,7 @@ type ReadyMessage = {
11778
12985
  panels: string[];
11779
12986
  commands: string[];
11780
12987
  commandViews: string[];
12988
+ widgets?: string[];
11781
12989
  };
11782
12990
  };
11783
12991
  type CallMessage = {
@@ -11788,7 +12996,7 @@ type CallMessage = {
11788
12996
  game: string | null;
11789
12997
  args: unknown[];
11790
12998
  };
11791
- type HostMethod = `sdk:${string}` | "packets.send" | "flash.request" | "flash.undo" | "content.hold" | "content.release" | "storage.get" | "storage.set" | "storage.remove" | "storage.keys" | "fetch" | "copy" | "notify" | "toast" | "confirm" | "openUrl";
12999
+ type HostMethod = `sdk:${string}` | "packets.send" | "flash.request" | "flash.undo" | "content.hold" | "content.release" | "storage.get" | "storage.set" | "storage.remove" | "storage.keys" | "fetch" | "copy" | "notify" | "toast" | "confirm" | "openUrl" | "panel.open" | "panel.close";
11792
13000
  type SubscribeMessage = {
11793
13001
  phantom: typeof PROTOCOL;
11794
13002
  type: "subscribe";
@@ -11799,6 +13007,8 @@ type SubscribeMessage = {
11799
13007
  direction: Direction;
11800
13008
  commands?: string[];
11801
13009
  };
13010
+ args?: unknown[];
13011
+ listenerAt?: number;
11802
13012
  };
11803
13013
  type UnsubscribeMessage = {
11804
13014
  phantom: typeof PROTOCOL;
@@ -11868,7 +13078,7 @@ type GamesMessage = {
11868
13078
  type MountMessage = {
11869
13079
  phantom: typeof PROTOCOL;
11870
13080
  type: "mount";
11871
- kind: "page" | "panel" | "command-view";
13081
+ kind: "page" | "panel" | "widget" | "command-view";
11872
13082
  contribution: string;
11873
13083
  props: Record<string, unknown>;
11874
13084
  };
@@ -11897,6 +13107,11 @@ type EventMessage = {
11897
13107
  subscription: string;
11898
13108
  args: unknown[];
11899
13109
  };
13110
+ type SubscribedMessage = {
13111
+ phantom: typeof PROTOCOL;
13112
+ type: "subscribed";
13113
+ subscription: string;
13114
+ };
11900
13115
  type SubscriptionEndedMessage = {
11901
13116
  phantom: typeof PROTOCOL;
11902
13117
  type: "subscription-ended";
@@ -11915,7 +13130,7 @@ type StopMessage = {
11915
13130
  phantom: typeof PROTOCOL;
11916
13131
  type: "stop";
11917
13132
  };
11918
- type HostMessage = InitMessage | StopMessage | GamesMessage | MountMessage | InvokeMessage | CallResultMessage | EventMessage | SubscriptionEndedMessage | InterceptedMessage;
13133
+ type HostMessage = InitMessage | StopMessage | GamesMessage | MountMessage | InvokeMessage | CallResultMessage | EventMessage | SubscribedMessage | SubscriptionEndedMessage | InterceptedMessage;
11919
13134
  declare function isFrameMessage(data: unknown): data is FrameMessage;
11920
13135
  declare function isHostMessage(data: unknown): data is HostMessage;
11921
13136
  declare function pluginUrl(pluginId: string, path?: string): string;
@@ -11959,18 +13174,33 @@ type PluginContext = {
11959
13174
  }): Promise<void>;
11960
13175
  confirm(message: string, options?: ConfirmOptions): Promise<boolean | null>;
11961
13176
  openUrl(url: string): Promise<void>;
13177
+ openPanel(panelId: string, options?: {
13178
+ game?: string;
13179
+ }): Promise<void>;
13180
+ closePanel(panelId: string, options?: {
13181
+ game?: string;
13182
+ }): Promise<void>;
11962
13183
  log(...values: unknown[]): void;
11963
13184
  };
11964
- type PluginPhantom = Omit<RemoteSdk, "avatar" | "adventures" | "content" | "ui" | "realtime"> & {
13185
+ type PluginPhantom = Omit<RemoteSdk, "avatar" | "adventures" | "content" | "ui" | "realtime" | "customRooms" | "room"> & {
11965
13186
  readonly avatar: RemoteSdk["avatar"] & {
11966
13187
  view(): Promise<FlashHandle>;
11967
13188
  };
13189
+ readonly room: RemoteSdk["room"] & {
13190
+ surfaces(): Promise<RoomSurface[]>;
13191
+ };
11968
13192
  readonly adventures: RemoteSdk["adventures"] & {
11969
13193
  record(): AdventureRecorder;
11970
13194
  };
11971
13195
  readonly content: RemoteSdk["content"] & Pick<ContentApi, "load" | "replaceOnScreen">;
11972
13196
  readonly realtime: RemoteSdk["realtime"] & {
11973
13197
  join<Data = unknown, State extends RealtimeObject = RealtimeObject, Presence extends RealtimeObject = RealtimeObject>(spec: RealtimeChannelSpec, options?: RealtimeJoinOptions<Presence>): Promise<RealtimeChannel<Data, State, Presence>>;
13198
+ stayIn<Data = unknown, State extends RealtimeObject = RealtimeObject, Presence extends RealtimeObject = RealtimeObject>(spec: RealtimeChannelSpec, ready: (channel: RealtimeChannel<Data, State, Presence>) => void, options?: RealtimeStayOptions<Presence>): Promise<Unsubscribe>;
13199
+ };
13200
+ readonly customRooms: RemoteSdk["customRooms"] & {
13201
+ prop(id: string, roomId?: string): CustomRoomPropHandle;
13202
+ object(id: string, roomId?: string): CustomRoomObjectHandle;
13203
+ character(id: string, roomId?: string): CustomRoomCharacterHandle;
11974
13204
  };
11975
13205
  readonly ui: UiApi;
11976
13206
  readonly recipes: PluginRecipes;
@@ -12011,6 +13241,7 @@ type PluginDefinition<View = unknown> = {
12011
13241
  setup?: (ctx: PluginContext) => void | (() => void) | Promise<void | (() => void)>;
12012
13242
  pages?: Record<string, View>;
12013
13243
  panels?: Record<string, View>;
13244
+ widgets?: Record<string, View>;
12014
13245
  commands?: Record<string, Command>;
12015
13246
  commandViews?: Record<string, View>;
12016
13247
  };
@@ -12025,4 +13256,4 @@ type ActionResult = {
12025
13256
  type CommandView = {
12026
13257
  props: Record<string, unknown>;
12027
13258
  };
12028
- export { DEV_MANIFEST_PATH, DEV_PORT, FRAME_MEMBERS, FRAME_PAGE, NOT_FOR_PLUGINS, PLUGIN_FLASH_IDS_PER_FRAME, PLUGIN_FLASH_IDS_START, PROTOCOL, PluginError, RUNTIME_SCRIPT, RUNTIME_STYLES, RealtimeAskError, SDK_AREAS, SDK_PERMISSIONS, definePlugin, describeScope, isEventPath, isFrameMessage, isHostMessage, isSdkPath, pluginUrl, scopeOfPath, scopeRisk, scopesOf };
13259
+ export { CustomRoomObjectError, DEV_MANIFEST_PATH, DEV_PORT, FRAME_AREAS, FRAME_MEMBERS, FRAME_PAGE, NOT_FOR_PLUGINS, PLUGIN_FLASH_IDS_PER_FRAME, PLUGIN_FLASH_IDS_START, PROTOCOL, PluginError, RUNTIME_SCRIPT, RUNTIME_STYLES, RealtimeAskError, SDK_AREAS, SDK_PERMISSIONS, STOPPING_PATHS, asCustomRoomObjectError, definePlugin, describeScope, isEventPath, isFrameMessage, isHostMessage, isNamedEvent, isSdkPath, pluginUrl, scopeOfPath, scopeRisk, scopesOf, stopKindOf };