@dcl/playground-assets 7.29.1-35861881691.commit-e4e55e9 → 7.29.1-35862852104.commit-1f44e80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/alpha.d.ts CHANGED
@@ -245,6 +245,42 @@ export declare interface AudioStreamComponentDefinitionExtended extends LastWrit
245
245
  getAudioState(entity: Entity): PBAudioEvent | undefined;
246
246
  }
247
247
 
248
+ /**
249
+ * @public
250
+ */
251
+ export declare type AuthoritativePutComponentMessage = CrdtMessageHeader & AuthoritativePutComponentMessageBody;
252
+
253
+ /**
254
+ * Server authoritative message - identical to PutComponentMessageBody but with forced processing
255
+ * Min. length = header (8 bytes) + 16 bytes = 24 bytes
256
+ *
257
+ * @param entity - Uint32 number of the entity
258
+ * @param componentId - Uint32 number of id
259
+ * @param timestamp - Uint32 Lamport timestamp (server's authoritative timestamp)
260
+ * @param data - Uint8[] data of component => length(4 bytes) + block of bytes[0..length-1]
261
+ * @public
262
+ */
263
+ export declare type AuthoritativePutComponentMessageBody = {
264
+ type: CrdtMessageType.AUTHORITATIVE_PUT_COMPONENT;
265
+ entityId: Entity;
266
+ componentId: number;
267
+ timestamp: number;
268
+ data: Uint8Array;
269
+ };
270
+
271
+ /**
272
+ * @public
273
+ */
274
+ export declare namespace AuthoritativePutComponentOperation {
275
+ const MESSAGE_HEADER_LENGTH = 16;
276
+ /**
277
+ * Call this function for an optimal writing data passing the ByteBuffer
278
+ * already allocated
279
+ */
280
+ export function write(entity: Entity, timestamp: number, componentId: number, data: Uint8Array, buf: ByteBuffer): void;
281
+ export function read(buf: ByteBuffer): AuthoritativePutComponentMessage | null;
282
+ }
283
+
248
284
  /** AvatarAnchorPointType determines the part of the avatar's body that anchors the Entity. */
249
285
  /**
250
286
  * @public
@@ -420,6 +456,22 @@ export declare interface BaseComponent<T> {
420
456
  * If the value is undefined, the component was deleted.
421
457
  */
422
458
  onChange(entity: Entity, cb: (value: T | undefined) => void): void;
459
+ /**
460
+ * @public
461
+ *
462
+ */
463
+ validateBeforeChange(entity: Entity, cb: ValidateCallback<T>): void;
464
+ validateBeforeChange(cb: ValidateCallback<T>): void;
465
+ /**
466
+ * Get the CRDT state for an entity (serialized data and timestamp)
467
+ * @param entity - Entity to get the CRDT state for
468
+ * @returns Object with serialized data and timestamp, or null if entity doesn't have the component
469
+ * @public
470
+ */
471
+ getCrdtState(entity: Entity): {
472
+ data: Uint8Array;
473
+ timestamp: number;
474
+ } | null;
423
475
  }
424
476
 
425
477
  /** @public */
@@ -1662,12 +1714,12 @@ export declare const CRDT_MESSAGE_HEADER_LENGTH = 8;
1662
1714
  /**
1663
1715
  * @public
1664
1716
  */
1665
- export declare type CrdtMessage = PutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
1717
+ export declare type CrdtMessage = PutComponentMessage | AuthoritativePutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
1666
1718
 
1667
1719
  /**
1668
1720
  * @public
1669
1721
  */
1670
- export declare type CrdtMessageBody = PutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
1722
+ export declare type CrdtMessageBody = PutComponentMessageBody | AuthoritativePutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
1671
1723
 
1672
1724
  /**
1673
1725
  * Min length = 8 bytes
@@ -1722,7 +1774,8 @@ export declare enum CrdtMessageType {
1722
1774
  PUT_COMPONENT_NETWORK = 5,
1723
1775
  DELETE_COMPONENT_NETWORK = 6,
1724
1776
  DELETE_ENTITY_NETWORK = 7,
1725
- MAX_MESSAGE_TYPE = 8
1777
+ AUTHORITATIVE_PUT_COMPONENT = 8,
1778
+ MAX_MESSAGE_TYPE = 9
1726
1779
  }
1727
1780
 
1728
1781
  /**
@@ -1730,6 +1783,8 @@ export declare enum CrdtMessageType {
1730
1783
  */
1731
1784
  export declare type CrdtNetworkMessageBody = PutNetworkComponentMessageBody | DeleteComponentNetworkMessageBody | DeleteEntityNetworkMessageBody;
1732
1785
 
1786
+ export declare const CreatedBy: ICreatedBy;
1787
+
1733
1788
  /**
1734
1789
  * @public
1735
1790
  */
@@ -2501,6 +2556,12 @@ export declare interface GrowOnlyValueSetComponentDefinition<T> extends BaseComp
2501
2556
 
2502
2557
  export declare type GSetComponentGetter<T extends GrowOnlyValueSetComponentDefinition<any>> = (engine: Pick<IEngine, 'defineValueSetComponentFromSchema'>) => T;
2503
2558
 
2559
+ export declare type ICreatedBy = LastWriteWinElementSetComponentDefinition<ICreatedByType>;
2560
+
2561
+ export declare interface ICreatedByType {
2562
+ address: string;
2563
+ }
2564
+
2504
2565
  /**
2505
2566
  * @public
2506
2567
  */
@@ -2987,6 +3048,35 @@ export declare const enum InteractionType {
2987
3048
  PROXIMITY = 1
2988
3049
  }
2989
3050
 
3051
+ /**
3052
+ * Internal component interface that exposes all internal methods for SDK use
3053
+ * This is not exposed to users, only for internal SDK operations
3054
+ */
3055
+ export declare interface InternalBaseComponent<T> extends BaseComponent<T> {
3056
+ /**
3057
+ * @public
3058
+ * Dry run update to check if a CRDT message would be accepted without actually applying it
3059
+ */
3060
+ __dry_run_updateFromCrdt(body: CrdtMessageBody): ProcessMessageResultType;
3061
+ /**
3062
+ * @public
3063
+ * Get the iterator to every entity has the component
3064
+ */
3065
+ iterator(): Iterable<[Entity, any]>;
3066
+ /**
3067
+ * @public
3068
+ */
3069
+ dirtyIterator(): Iterable<Entity>;
3070
+ /**
3071
+ * @public
3072
+ */
3073
+ __onChangeCallbacks(entity: Entity, value: T): void;
3074
+ /**
3075
+ * @public
3076
+ */
3077
+ __run_validateBeforeChange(entity: Entity, newValue: T | undefined, senderAddress: string, createdBy: string): boolean;
3078
+ }
3079
+
2990
3080
  /**
2991
3081
  * @public
2992
3082
  */
@@ -9447,6 +9537,16 @@ export declare type Transport = {
9447
9537
  onmessage?(message: Uint8Array): void;
9448
9538
  filter(message: Omit<TransportMessage, 'messageBuffer'>): boolean;
9449
9539
  type?: string;
9540
+ /**
9541
+ * Whether this transport is allowed to mutate reserved-range entities
9542
+ * (root/player/camera + avatars, entity number below `RESERVED_STATIC_ENTITIES`).
9543
+ * Only the trusted host/renderer transport sets this. An inbound DELETE_ENTITY
9544
+ * or component operation (PUT_COMPONENT, DELETE_COMPONENT, APPEND_VALUE,
9545
+ * AUTHORITATIVE_PUT_COMPONENT) on a reserved entity from a transport without
9546
+ * this flag (a comms peer, or any scene-added transport) is rejected — see
9547
+ * `receiveMessages`.
9548
+ */
9549
+ allowReservedEntities?: boolean;
9450
9550
  };
9451
9551
 
9452
9552
  /**
@@ -10026,6 +10126,14 @@ export declare interface UiTransformProps {
10026
10126
  */
10027
10127
  export declare type Unpacked<T> = T extends (infer U)[] ? U : T;
10028
10128
 
10129
+ export declare type ValidateCallback<T> = (value: {
10130
+ entity: Entity;
10131
+ currentValue: T | undefined;
10132
+ newValue: T | undefined;
10133
+ senderAddress: string;
10134
+ createdBy: string;
10135
+ }) => boolean;
10136
+
10029
10137
  /**
10030
10138
  * @public
10031
10139
  */
package/dist/beta.d.ts CHANGED
@@ -245,6 +245,42 @@ export declare interface AudioStreamComponentDefinitionExtended extends LastWrit
245
245
  getAudioState(entity: Entity): PBAudioEvent | undefined;
246
246
  }
247
247
 
248
+ /**
249
+ * @public
250
+ */
251
+ export declare type AuthoritativePutComponentMessage = CrdtMessageHeader & AuthoritativePutComponentMessageBody;
252
+
253
+ /**
254
+ * Server authoritative message - identical to PutComponentMessageBody but with forced processing
255
+ * Min. length = header (8 bytes) + 16 bytes = 24 bytes
256
+ *
257
+ * @param entity - Uint32 number of the entity
258
+ * @param componentId - Uint32 number of id
259
+ * @param timestamp - Uint32 Lamport timestamp (server's authoritative timestamp)
260
+ * @param data - Uint8[] data of component => length(4 bytes) + block of bytes[0..length-1]
261
+ * @public
262
+ */
263
+ export declare type AuthoritativePutComponentMessageBody = {
264
+ type: CrdtMessageType.AUTHORITATIVE_PUT_COMPONENT;
265
+ entityId: Entity;
266
+ componentId: number;
267
+ timestamp: number;
268
+ data: Uint8Array;
269
+ };
270
+
271
+ /**
272
+ * @public
273
+ */
274
+ export declare namespace AuthoritativePutComponentOperation {
275
+ const MESSAGE_HEADER_LENGTH = 16;
276
+ /**
277
+ * Call this function for an optimal writing data passing the ByteBuffer
278
+ * already allocated
279
+ */
280
+ export function write(entity: Entity, timestamp: number, componentId: number, data: Uint8Array, buf: ByteBuffer): void;
281
+ export function read(buf: ByteBuffer): AuthoritativePutComponentMessage | null;
282
+ }
283
+
248
284
  /** AvatarAnchorPointType determines the part of the avatar's body that anchors the Entity. */
249
285
  /**
250
286
  * @public
@@ -420,6 +456,22 @@ export declare interface BaseComponent<T> {
420
456
  * If the value is undefined, the component was deleted.
421
457
  */
422
458
  onChange(entity: Entity, cb: (value: T | undefined) => void): void;
459
+ /**
460
+ * @public
461
+ *
462
+ */
463
+ validateBeforeChange(entity: Entity, cb: ValidateCallback<T>): void;
464
+ validateBeforeChange(cb: ValidateCallback<T>): void;
465
+ /**
466
+ * Get the CRDT state for an entity (serialized data and timestamp)
467
+ * @param entity - Entity to get the CRDT state for
468
+ * @returns Object with serialized data and timestamp, or null if entity doesn't have the component
469
+ * @public
470
+ */
471
+ getCrdtState(entity: Entity): {
472
+ data: Uint8Array;
473
+ timestamp: number;
474
+ } | null;
423
475
  }
424
476
 
425
477
  /** @public */
@@ -1662,12 +1714,12 @@ export declare const CRDT_MESSAGE_HEADER_LENGTH = 8;
1662
1714
  /**
1663
1715
  * @public
1664
1716
  */
1665
- export declare type CrdtMessage = PutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
1717
+ export declare type CrdtMessage = PutComponentMessage | AuthoritativePutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
1666
1718
 
1667
1719
  /**
1668
1720
  * @public
1669
1721
  */
1670
- export declare type CrdtMessageBody = PutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
1722
+ export declare type CrdtMessageBody = PutComponentMessageBody | AuthoritativePutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
1671
1723
 
1672
1724
  /**
1673
1725
  * Min length = 8 bytes
@@ -1722,7 +1774,8 @@ export declare enum CrdtMessageType {
1722
1774
  PUT_COMPONENT_NETWORK = 5,
1723
1775
  DELETE_COMPONENT_NETWORK = 6,
1724
1776
  DELETE_ENTITY_NETWORK = 7,
1725
- MAX_MESSAGE_TYPE = 8
1777
+ AUTHORITATIVE_PUT_COMPONENT = 8,
1778
+ MAX_MESSAGE_TYPE = 9
1726
1779
  }
1727
1780
 
1728
1781
  /**
@@ -1730,6 +1783,8 @@ export declare enum CrdtMessageType {
1730
1783
  */
1731
1784
  export declare type CrdtNetworkMessageBody = PutNetworkComponentMessageBody | DeleteComponentNetworkMessageBody | DeleteEntityNetworkMessageBody;
1732
1785
 
1786
+ export declare const CreatedBy: ICreatedBy;
1787
+
1733
1788
  /**
1734
1789
  * @public
1735
1790
  */
@@ -2501,6 +2556,12 @@ export declare interface GrowOnlyValueSetComponentDefinition<T> extends BaseComp
2501
2556
 
2502
2557
  export declare type GSetComponentGetter<T extends GrowOnlyValueSetComponentDefinition<any>> = (engine: Pick<IEngine, 'defineValueSetComponentFromSchema'>) => T;
2503
2558
 
2559
+ export declare type ICreatedBy = LastWriteWinElementSetComponentDefinition<ICreatedByType>;
2560
+
2561
+ export declare interface ICreatedByType {
2562
+ address: string;
2563
+ }
2564
+
2504
2565
  /**
2505
2566
  * @public
2506
2567
  */
@@ -2978,6 +3039,35 @@ export declare const enum InteractionType {
2978
3039
  PROXIMITY = 1
2979
3040
  }
2980
3041
 
3042
+ /**
3043
+ * Internal component interface that exposes all internal methods for SDK use
3044
+ * This is not exposed to users, only for internal SDK operations
3045
+ */
3046
+ export declare interface InternalBaseComponent<T> extends BaseComponent<T> {
3047
+ /**
3048
+ * @public
3049
+ * Dry run update to check if a CRDT message would be accepted without actually applying it
3050
+ */
3051
+ __dry_run_updateFromCrdt(body: CrdtMessageBody): ProcessMessageResultType;
3052
+ /**
3053
+ * @public
3054
+ * Get the iterator to every entity has the component
3055
+ */
3056
+ iterator(): Iterable<[Entity, any]>;
3057
+ /**
3058
+ * @public
3059
+ */
3060
+ dirtyIterator(): Iterable<Entity>;
3061
+ /**
3062
+ * @public
3063
+ */
3064
+ __onChangeCallbacks(entity: Entity, value: T): void;
3065
+ /**
3066
+ * @public
3067
+ */
3068
+ __run_validateBeforeChange(entity: Entity, newValue: T | undefined, senderAddress: string, createdBy: string): boolean;
3069
+ }
3070
+
2981
3071
  /**
2982
3072
  * @public
2983
3073
  */
@@ -9414,6 +9504,16 @@ export declare type Transport = {
9414
9504
  onmessage?(message: Uint8Array): void;
9415
9505
  filter(message: Omit<TransportMessage, 'messageBuffer'>): boolean;
9416
9506
  type?: string;
9507
+ /**
9508
+ * Whether this transport is allowed to mutate reserved-range entities
9509
+ * (root/player/camera + avatars, entity number below `RESERVED_STATIC_ENTITIES`).
9510
+ * Only the trusted host/renderer transport sets this. An inbound DELETE_ENTITY
9511
+ * or component operation (PUT_COMPONENT, DELETE_COMPONENT, APPEND_VALUE,
9512
+ * AUTHORITATIVE_PUT_COMPONENT) on a reserved entity from a transport without
9513
+ * this flag (a comms peer, or any scene-added transport) is rejected — see
9514
+ * `receiveMessages`.
9515
+ */
9516
+ allowReservedEntities?: boolean;
9417
9517
  };
9418
9518
 
9419
9519
  /**
@@ -9993,6 +10093,14 @@ export declare interface UiTransformProps {
9993
10093
  */
9994
10094
  export declare type Unpacked<T> = T extends (infer U)[] ? U : T;
9995
10095
 
10096
+ export declare type ValidateCallback<T> = (value: {
10097
+ entity: Entity;
10098
+ currentValue: T | undefined;
10099
+ newValue: T | undefined;
10100
+ senderAddress: string;
10101
+ createdBy: string;
10102
+ }) => boolean;
10103
+
9996
10104
  /**
9997
10105
  * @public
9998
10106
  */
@@ -245,6 +245,42 @@ export declare interface AudioStreamComponentDefinitionExtended extends LastWrit
245
245
  getAudioState(entity: Entity): PBAudioEvent | undefined;
246
246
  }
247
247
 
248
+ /**
249
+ * @public
250
+ */
251
+ export declare type AuthoritativePutComponentMessage = CrdtMessageHeader & AuthoritativePutComponentMessageBody;
252
+
253
+ /**
254
+ * Server authoritative message - identical to PutComponentMessageBody but with forced processing
255
+ * Min. length = header (8 bytes) + 16 bytes = 24 bytes
256
+ *
257
+ * @param entity - Uint32 number of the entity
258
+ * @param componentId - Uint32 number of id
259
+ * @param timestamp - Uint32 Lamport timestamp (server's authoritative timestamp)
260
+ * @param data - Uint8[] data of component => length(4 bytes) + block of bytes[0..length-1]
261
+ * @public
262
+ */
263
+ export declare type AuthoritativePutComponentMessageBody = {
264
+ type: CrdtMessageType.AUTHORITATIVE_PUT_COMPONENT;
265
+ entityId: Entity;
266
+ componentId: number;
267
+ timestamp: number;
268
+ data: Uint8Array;
269
+ };
270
+
271
+ /**
272
+ * @public
273
+ */
274
+ export declare namespace AuthoritativePutComponentOperation {
275
+ const MESSAGE_HEADER_LENGTH = 16;
276
+ /**
277
+ * Call this function for an optimal writing data passing the ByteBuffer
278
+ * already allocated
279
+ */
280
+ export function write(entity: Entity, timestamp: number, componentId: number, data: Uint8Array, buf: ByteBuffer): void;
281
+ export function read(buf: ByteBuffer): AuthoritativePutComponentMessage | null;
282
+ }
283
+
248
284
  /** AvatarAnchorPointType determines the part of the avatar's body that anchors the Entity. */
249
285
  /**
250
286
  * @public
@@ -420,6 +456,22 @@ export declare interface BaseComponent<T> {
420
456
  * If the value is undefined, the component was deleted.
421
457
  */
422
458
  onChange(entity: Entity, cb: (value: T | undefined) => void): void;
459
+ /**
460
+ * @public
461
+ *
462
+ */
463
+ validateBeforeChange(entity: Entity, cb: ValidateCallback<T>): void;
464
+ validateBeforeChange(cb: ValidateCallback<T>): void;
465
+ /**
466
+ * Get the CRDT state for an entity (serialized data and timestamp)
467
+ * @param entity - Entity to get the CRDT state for
468
+ * @returns Object with serialized data and timestamp, or null if entity doesn't have the component
469
+ * @public
470
+ */
471
+ getCrdtState(entity: Entity): {
472
+ data: Uint8Array;
473
+ timestamp: number;
474
+ } | null;
423
475
  }
424
476
 
425
477
  /** @public */
@@ -1662,12 +1714,12 @@ export declare const CRDT_MESSAGE_HEADER_LENGTH = 8;
1662
1714
  /**
1663
1715
  * @public
1664
1716
  */
1665
- export declare type CrdtMessage = PutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
1717
+ export declare type CrdtMessage = PutComponentMessage | AuthoritativePutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
1666
1718
 
1667
1719
  /**
1668
1720
  * @public
1669
1721
  */
1670
- export declare type CrdtMessageBody = PutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
1722
+ export declare type CrdtMessageBody = PutComponentMessageBody | AuthoritativePutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
1671
1723
 
1672
1724
  /**
1673
1725
  * Min length = 8 bytes
@@ -1722,7 +1774,8 @@ export declare enum CrdtMessageType {
1722
1774
  PUT_COMPONENT_NETWORK = 5,
1723
1775
  DELETE_COMPONENT_NETWORK = 6,
1724
1776
  DELETE_ENTITY_NETWORK = 7,
1725
- MAX_MESSAGE_TYPE = 8
1777
+ AUTHORITATIVE_PUT_COMPONENT = 8,
1778
+ MAX_MESSAGE_TYPE = 9
1726
1779
  }
1727
1780
 
1728
1781
  /**
@@ -1730,6 +1783,8 @@ export declare enum CrdtMessageType {
1730
1783
  */
1731
1784
  export declare type CrdtNetworkMessageBody = PutNetworkComponentMessageBody | DeleteComponentNetworkMessageBody | DeleteEntityNetworkMessageBody;
1732
1785
 
1786
+ export declare const CreatedBy: ICreatedBy;
1787
+
1733
1788
  /**
1734
1789
  * @public
1735
1790
  */
@@ -2501,6 +2556,12 @@ export declare interface GrowOnlyValueSetComponentDefinition<T> extends BaseComp
2501
2556
 
2502
2557
  export declare type GSetComponentGetter<T extends GrowOnlyValueSetComponentDefinition<any>> = (engine: Pick<IEngine, 'defineValueSetComponentFromSchema'>) => T;
2503
2558
 
2559
+ export declare type ICreatedBy = LastWriteWinElementSetComponentDefinition<ICreatedByType>;
2560
+
2561
+ export declare interface ICreatedByType {
2562
+ address: string;
2563
+ }
2564
+
2504
2565
  /**
2505
2566
  * @public
2506
2567
  */
@@ -2978,6 +3039,35 @@ export declare const enum InteractionType {
2978
3039
  PROXIMITY = 1
2979
3040
  }
2980
3041
 
3042
+ /**
3043
+ * Internal component interface that exposes all internal methods for SDK use
3044
+ * This is not exposed to users, only for internal SDK operations
3045
+ */
3046
+ export declare interface InternalBaseComponent<T> extends BaseComponent<T> {
3047
+ /**
3048
+ * @public
3049
+ * Dry run update to check if a CRDT message would be accepted without actually applying it
3050
+ */
3051
+ __dry_run_updateFromCrdt(body: CrdtMessageBody): ProcessMessageResultType;
3052
+ /**
3053
+ * @public
3054
+ * Get the iterator to every entity has the component
3055
+ */
3056
+ iterator(): Iterable<[Entity, any]>;
3057
+ /**
3058
+ * @public
3059
+ */
3060
+ dirtyIterator(): Iterable<Entity>;
3061
+ /**
3062
+ * @public
3063
+ */
3064
+ __onChangeCallbacks(entity: Entity, value: T): void;
3065
+ /**
3066
+ * @public
3067
+ */
3068
+ __run_validateBeforeChange(entity: Entity, newValue: T | undefined, senderAddress: string, createdBy: string): boolean;
3069
+ }
3070
+
2981
3071
  /**
2982
3072
  * @public
2983
3073
  */
@@ -9414,6 +9504,16 @@ export declare type Transport = {
9414
9504
  onmessage?(message: Uint8Array): void;
9415
9505
  filter(message: Omit<TransportMessage, 'messageBuffer'>): boolean;
9416
9506
  type?: string;
9507
+ /**
9508
+ * Whether this transport is allowed to mutate reserved-range entities
9509
+ * (root/player/camera + avatars, entity number below `RESERVED_STATIC_ENTITIES`).
9510
+ * Only the trusted host/renderer transport sets this. An inbound DELETE_ENTITY
9511
+ * or component operation (PUT_COMPONENT, DELETE_COMPONENT, APPEND_VALUE,
9512
+ * AUTHORITATIVE_PUT_COMPONENT) on a reserved entity from a transport without
9513
+ * this flag (a comms peer, or any scene-added transport) is rejected — see
9514
+ * `receiveMessages`.
9515
+ */
9516
+ allowReservedEntities?: boolean;
9417
9517
  };
9418
9518
 
9419
9519
  /**
@@ -9993,6 +10093,14 @@ export declare interface UiTransformProps {
9993
10093
  */
9994
10094
  export declare type Unpacked<T> = T extends (infer U)[] ? U : T;
9995
10095
 
10096
+ export declare type ValidateCallback<T> = (value: {
10097
+ entity: Entity;
10098
+ currentValue: T | undefined;
10099
+ newValue: T | undefined;
10100
+ senderAddress: string;
10101
+ createdBy: string;
10102
+ }) => boolean;
10103
+
9996
10104
  /**
9997
10105
  * @public
9998
10106
  */