@rtsdk/topia 0.15.8 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,7 +31,6 @@ Topia offers a robust SDK and API that allows anyone to build custom apps or int
31
31
  - [NPM Package](https://www.npmjs.com/package/@rtsdk/topia)
32
32
  - [Demo World](https://topia.io/sdk-demos)
33
33
  - [Typescript Boilerplate](https://github.com/metaversecloud-com/sdk-ts-boilerplate)
34
- - [Javascript Boilerplate](https://github.com/metaversecloud-com/sdk-ts-boilerplate)
35
34
 
36
35
  #### Need inspiration?! Check out the following applications which utilizes the SDK to create new and enhanced features inside [topia.io](https://topia.io/):
37
36
 
@@ -105,6 +104,25 @@ A Topia provided API Key can be included with every object initialization as a p
105
104
 
106
105
  <br>
107
106
 
107
+ # New for June 2025: Multiplayer Experience Engine
108
+
109
+ Topia has developed a powerful new Experience Engine that enables extremely low-latency, interactive in-canvas multiplayer experiences. This engine is purpose-built for real-time interaction and supports a wide range of dynamic behaviors, making it ideal for collaborative activities, games, and social experiences within Topia worlds.
110
+
111
+ ## Key Features
112
+ - Ultra Low Latency: Real-time feedback for seamless multi-user interaction and state synchronization.
113
+ - Physics & Collision: Includes a robust physics and collision system to support realistic and responsive behaviors.
114
+ - Real-Time Interactivity: Supports dynamic responses to user input and environmental changes inside the canvas.
115
+ - Optimized for the Web: Engineered to perform smoothly across browser-based environments with minimal resource impact.
116
+
117
+ ## SDK Integration: Leverage the SDK inside the Experience Engine to:
118
+ - Trigger visual/audio effects based on real-time interactions
119
+ - Save and persist spatial data, such as object positions or interaction states
120
+
121
+ This engine unlocks a whole new layer of interactivity, paving the way for creative, immersive experiences including educational tools, multiplayer games, or collaborative activities.
122
+
123
+ ## Get In Touch
124
+ To sign up for the experience engine private beta, visit https://topia.io/p/game-engine.
125
+
108
126
  # Developers
109
127
 
110
128
  <hr/>
@@ -117,7 +135,6 @@ A Topia provided API Key can be included with every object initialization as a p
117
135
 
118
136
  We have two boilerplates available to help you get started. Pick the one that best suits your needs, clone it, and let the coding begin!
119
137
 
120
- - [Javascript](https://github.com/metaversecloud-com/sdk-boilerplate)
121
138
  - [Typescript](https://github.com/metaversecloud-com/sdk-ts-boilerplate)
122
139
 
123
140
  Run `yarn add @rtsdk/topia` or `npm install @rtsdk/topia`
package/dist/index.cjs CHANGED
@@ -39988,10 +39988,13 @@ class DroppedAsset extends Asset {
39988
39988
  * const dataObject = await droppedAsset.fetchDataObject();
39989
39989
  * ```
39990
39990
  */
39991
- fetchDataObject() {
39991
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
39992
39992
  return __awaiter(this, void 0, void 0, function* () {
39993
39993
  try {
39994
- const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/assets/${this.id}/data-object`, this.requestOptions);
39994
+ let query = "";
39995
+ if (appPublicKey)
39996
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
39997
+ const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/assets/${this.id}/data-object${query}`, this.requestOptions);
39995
39998
  this.dataObject = response.data;
39996
39999
  return response.data;
39997
40000
  }
@@ -40474,6 +40477,126 @@ class DroppedAsset extends Asset {
40474
40477
  }
40475
40478
  _DroppedAsset_updateDroppedAsset = new WeakMap();
40476
40479
 
40480
+ /**
40481
+ * @summary
40482
+ * Create an instance of Ecosystem class with optional session credentials
40483
+ *
40484
+ * @usage
40485
+ * ```ts
40486
+ * await new Ecosystem(topia, {
40487
+ * credentials: { interactiveNonce: "exampleNonce", assetId: "droppedAssetId", visitorId: 1, urlSlug: "exampleWorld" }
40488
+ * });
40489
+ * ```
40490
+ */
40491
+ class Ecosystem extends SDKController {
40492
+ constructor(topia, options = { credentials: {} }) {
40493
+ super(topia, options.credentials);
40494
+ this.dataObject = {};
40495
+ }
40496
+ /**
40497
+ * @summary
40498
+ * Retrieves the data object for a Topia ecosystem. Requires canUpdateEcosystemDataObjects permission to be set to true for the public key.
40499
+ *
40500
+ * @usage
40501
+ * ```ts
40502
+ * const dataObject = await ecosystem.fetchDataObject("exampleAppPublicKey", "exampleAppPublicKeyJWT");
40503
+ * ```
40504
+ */
40505
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
40506
+ return __awaiter(this, void 0, void 0, function* () {
40507
+ try {
40508
+ let query = "";
40509
+ if (appPublicKey)
40510
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
40511
+ const response = yield this.topiaPublicApi().get(`/ecosystem/data-object${query}`, this.requestOptions);
40512
+ this.dataObject = response.data;
40513
+ return response.data;
40514
+ }
40515
+ catch (error) {
40516
+ throw this.errorHandler({ error, sdkMethod: "Ecosystem.fetchDataObject" });
40517
+ }
40518
+ });
40519
+ }
40520
+ /**
40521
+ * @summary
40522
+ * Sets the data object for a Topia ecosystem.
40523
+ *
40524
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
40525
+ *
40526
+ * @usage
40527
+ * ```ts
40528
+ * await ecosystem.setDataObject({ "exampleKey": "exampleValue" }, {
40529
+ * appPublicKey: "exampleAppPublicKey",
40530
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
40531
+ * });
40532
+ * ```
40533
+ */
40534
+ setDataObject(dataObject, options = {}) {
40535
+ return __awaiter(this, void 0, void 0, function* () {
40536
+ try {
40537
+ yield this.topiaPublicApi().post(`/ecosystem/data-object`, Object.assign(Object.assign({}, options), { dataObject: dataObject || this.dataObject }), this.requestOptions);
40538
+ this.dataObject = dataObject || this.dataObject;
40539
+ }
40540
+ catch (error) {
40541
+ throw this.errorHandler({ error, params: { dataObject, options }, sdkMethod: "Ecosystem.setDataObject" });
40542
+ }
40543
+ });
40544
+ }
40545
+ /**
40546
+ * @summary
40547
+ * Updates the data object for a Topia ecosystem.
40548
+ *
40549
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
40550
+ *
40551
+ * @usage
40552
+ * ```ts
40553
+ * await ecosystem.updateDataObject({ "exampleKey": "exampleValue" }, {
40554
+ * appPublicKey: "exampleAppPublicKey",
40555
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
40556
+ * });
40557
+ * ```
40558
+ */
40559
+ updateDataObject(dataObject, options = {}) {
40560
+ return __awaiter(this, void 0, void 0, function* () {
40561
+ try {
40562
+ yield this.topiaPublicApi().put(`/ecosystem/data-object`, Object.assign(Object.assign({}, options), { dataObject: dataObject || this.dataObject }), this.requestOptions);
40563
+ this.dataObject = Object.assign(Object.assign({}, (this.dataObject || {})), (dataObject || {}));
40564
+ }
40565
+ catch (error) {
40566
+ throw this.errorHandler({ error, params: { dataObject, options }, sdkMethod: "Ecosystem.updateDataObject" });
40567
+ }
40568
+ });
40569
+ }
40570
+ /**
40571
+ * @summary
40572
+ * Increments a specific value in the data object for a Topia ecosystem by the amount specified. Must have valid interactive credentials from a visitor in the world.
40573
+ *
40574
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
40575
+ *
40576
+ * @usage
40577
+ * ```ts
40578
+ * await ecosystem.incrementDataObjectValue("key", 1, {
40579
+ * appPublicKey: "exampleAppPublicKey",
40580
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
40581
+ * });
40582
+ * ```
40583
+ */
40584
+ incrementDataObjectValue(path, amount, options = {}) {
40585
+ return __awaiter(this, void 0, void 0, function* () {
40586
+ try {
40587
+ yield this.topiaPublicApi().put(`/ecosystem/increment-data-object-value`, Object.assign({ path, amount }, options), this.requestOptions);
40588
+ }
40589
+ catch (error) {
40590
+ throw this.errorHandler({
40591
+ error,
40592
+ params: { path, amount, options },
40593
+ sdkMethod: "Ecosystem.incrementDataObjectValue",
40594
+ });
40595
+ }
40596
+ });
40597
+ }
40598
+ }
40599
+
40477
40600
  /**
40478
40601
  * @summary
40479
40602
  * Create an instance of Scene class with a given scene id and optional attributes and session credentials.
@@ -40582,9 +40705,12 @@ class World extends SDKController {
40582
40705
  * const { dataObject } = world;
40583
40706
  * ```
40584
40707
  */
40585
- this.fetchDataObject = () => __awaiter(this, void 0, void 0, function* () {
40708
+ this.fetchDataObject = (appPublicKey, appPublicKeyJWT) => __awaiter(this, void 0, void 0, function* () {
40586
40709
  try {
40587
- const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/get-data-object`, this.requestOptions);
40710
+ let query = "";
40711
+ if (appPublicKey)
40712
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
40713
+ const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/get-data-object${query}`, this.requestOptions);
40588
40714
  this.dataObject = response.data;
40589
40715
  return response.data;
40590
40716
  }
@@ -41112,6 +41238,7 @@ class World extends SDKController {
41112
41238
  return result.data;
41113
41239
  }
41114
41240
  catch (error) {
41241
+ // TODO: don't throw error if status 409
41115
41242
  throw this.errorHandler({ error, params: { type }, sdkMethod: "World.triggerActivity" });
41116
41243
  }
41117
41244
  });
@@ -41718,12 +41845,15 @@ class User extends SDKController {
41718
41845
  * const dataObject = await user.fetchDataObject();
41719
41846
  * ```
41720
41847
  */
41721
- fetchDataObject() {
41848
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
41722
41849
  return __awaiter(this, void 0, void 0, function* () {
41723
41850
  try {
41724
41851
  if (!this.profileId)
41725
41852
  throw "This method requires the use of a profileId";
41726
- const response = yield this.topiaPublicApi().get(`/user/dataObjects/${this.profileId}/get-data-object`, this.requestOptions);
41853
+ let query = "";
41854
+ if (appPublicKey)
41855
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
41856
+ const response = yield this.topiaPublicApi().get(`/user/dataObjects/${this.profileId}/get-data-object${query}`, this.requestOptions);
41727
41857
  this.dataObject = response.data;
41728
41858
  return response.data;
41729
41859
  }
@@ -42115,10 +42245,13 @@ class Visitor extends User {
42115
42245
  * const dataObject = await visitor.fetchDataObject();
42116
42246
  * ```
42117
42247
  */
42118
- fetchDataObject() {
42248
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
42119
42249
  return __awaiter(this, void 0, void 0, function* () {
42120
42250
  try {
42121
- const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/visitors/${this.id}/get-data-object`, this.requestOptions);
42251
+ let query = "";
42252
+ if (appPublicKey)
42253
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
42254
+ const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/visitors/${this.id}/get-data-object${query}`, this.requestOptions);
42122
42255
  this.dataObject = response.data;
42123
42256
  return response.data;
42124
42257
  }
@@ -42659,6 +42792,30 @@ class DroppedAssetFactory extends SDKController {
42659
42792
  }
42660
42793
  }
42661
42794
 
42795
+ /**
42796
+ * @usage
42797
+ * ```ts
42798
+ * const Ecosystem = new EcosystemFactory(myTopiaInstance);
42799
+ * ```
42800
+ */
42801
+ class EcosystemFactory {
42802
+ constructor(topia) {
42803
+ this.topia = topia;
42804
+ }
42805
+ /**
42806
+ * @summary
42807
+ * Instantiate a new instance of Ecosystem class.
42808
+ *
42809
+ * @usage
42810
+ * ```
42811
+ * const ecosystemInstance = await Ecosystem.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }});
42812
+ * ```
42813
+ */
42814
+ create(options) {
42815
+ return new Ecosystem(this.topia, options);
42816
+ }
42817
+ }
42818
+
42662
42819
  /**
42663
42820
  * @usage
42664
42821
  * ```ts
@@ -42780,7 +42937,7 @@ class WebRTCConnectorFactory {
42780
42937
  *
42781
42938
  * @usage
42782
42939
  * ```
42783
- * const userInstance = await WebRTCConnector.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }, twilioConfig: {} });
42940
+ * const webRTCInstance = await WebRTCConnector.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }, twilioConfig: {} });
42784
42941
  * ```
42785
42942
  */
42786
42943
  create(urlSlug, options) {
@@ -42902,6 +43059,8 @@ exports.Asset = Asset;
42902
43059
  exports.AssetFactory = AssetFactory;
42903
43060
  exports.DroppedAsset = DroppedAsset;
42904
43061
  exports.DroppedAssetFactory = DroppedAssetFactory;
43062
+ exports.Ecosystem = Ecosystem;
43063
+ exports.EcosystemFactory = EcosystemFactory;
42905
43064
  exports.SDKController = SDKController;
42906
43065
  exports.Scene = Scene;
42907
43066
  exports.SceneFactory = SceneFactory;
package/dist/index.d.ts CHANGED
@@ -213,7 +213,7 @@ declare class DroppedAsset extends Asset implements DroppedAssetInterface {
213
213
  * const dataObject = await droppedAsset.fetchDataObject();
214
214
  * ```
215
215
  */
216
- fetchDataObject(): Promise<void | ResponseType$1>;
216
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
217
217
  /**
218
218
  * @summary
219
219
  * Sets the data object for a dropped asset.
@@ -228,6 +228,8 @@ declare class DroppedAsset extends Asset implements DroppedAssetInterface {
228
228
  * ```
229
229
  */
230
230
  setDataObject(dataObject: object, options?: {
231
+ appPublicKey?: string;
232
+ appPublicKeyJWT?: string;
231
233
  analytics?: AnalyticType[];
232
234
  lock?: {
233
235
  lockId: string;
@@ -248,6 +250,8 @@ declare class DroppedAsset extends Asset implements DroppedAssetInterface {
248
250
  * ```
249
251
  */
250
252
  updateDataObject(dataObject: object, options?: {
253
+ appPublicKey?: string;
254
+ appPublicKeyJWT?: string;
251
255
  analytics?: AnalyticType[];
252
256
  lock?: {
253
257
  lockId: string;
@@ -266,6 +270,8 @@ declare class DroppedAsset extends Asset implements DroppedAssetInterface {
266
270
  * ```
267
271
  */
268
272
  incrementDataObjectValue(path: string, amount: number, options?: {
273
+ appPublicKey?: string;
274
+ appPublicKeyJWT?: string;
269
275
  analytics?: AnalyticType[];
270
276
  lock?: {
271
277
  lockId: string;
@@ -821,7 +827,7 @@ declare class World extends SDKController implements WorldInterface {
821
827
  * const { dataObject } = world;
822
828
  * ```
823
829
  */
824
- fetchDataObject: () => Promise<void | ResponseType$1>;
830
+ fetchDataObject: (appPublicKey?: string, appPublicKeyJWT?: string) => Promise<void | ResponseType$1>;
825
831
  /**
826
832
  * @summary
827
833
  * Sets the data object for a user. Must have valid interactive credentials from a visitor in the world.
@@ -837,6 +843,8 @@ declare class World extends SDKController implements WorldInterface {
837
843
  * ```
838
844
  */
839
845
  setDataObject: (dataObject: object | null | undefined, options?: {
846
+ appPublicKey?: string;
847
+ appPublicKeyJWT?: string;
840
848
  analytics?: AnalyticType[];
841
849
  lock?: {
842
850
  lockId: string;
@@ -858,6 +866,8 @@ declare class World extends SDKController implements WorldInterface {
858
866
  * ```
859
867
  */
860
868
  updateDataObject: (dataObject: object, options?: {
869
+ appPublicKey?: string;
870
+ appPublicKeyJWT?: string;
861
871
  analytics?: AnalyticType[];
862
872
  lock?: {
863
873
  lockId: string;
@@ -876,6 +886,8 @@ declare class World extends SDKController implements WorldInterface {
876
886
  * ```
877
887
  */
878
888
  incrementDataObjectValue(path: string, amount: number, options?: {
889
+ appPublicKey?: string;
890
+ appPublicKeyJWT?: string;
879
891
  analytics?: AnalyticType[];
880
892
  lock?: {
881
893
  lockId: string;
@@ -1226,7 +1238,7 @@ declare class User extends SDKController implements UserInterface {
1226
1238
  * const dataObject = await user.fetchDataObject();
1227
1239
  * ```
1228
1240
  */
1229
- fetchDataObject(): Promise<void | ResponseType$1>;
1241
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1230
1242
  /**
1231
1243
  * @summary
1232
1244
  * Sets the data object for a user.
@@ -1241,6 +1253,8 @@ declare class User extends SDKController implements UserInterface {
1241
1253
  * ```
1242
1254
  */
1243
1255
  setDataObject(dataObject: object | null | undefined, options?: {
1256
+ appPublicKey?: string;
1257
+ appPublicKeyJWT?: string;
1244
1258
  analytics?: AnalyticType[];
1245
1259
  lock?: {
1246
1260
  lockId: string;
@@ -1261,6 +1275,8 @@ declare class User extends SDKController implements UserInterface {
1261
1275
  * ```
1262
1276
  */
1263
1277
  updateDataObject(dataObject: object, options?: {
1278
+ appPublicKey?: string;
1279
+ appPublicKeyJWT?: string;
1264
1280
  analytics?: AnalyticType[];
1265
1281
  lock?: {
1266
1282
  lockId: string;
@@ -1279,6 +1295,8 @@ declare class User extends SDKController implements UserInterface {
1279
1295
  * ```
1280
1296
  */
1281
1297
  incrementDataObjectValue(path: string, amount: number, options?: {
1298
+ appPublicKey?: string;
1299
+ appPublicKeyJWT?: string;
1282
1300
  analytics?: AnalyticType[];
1283
1301
  lock?: {
1284
1302
  lockId: string;
@@ -1450,7 +1468,7 @@ declare class Visitor extends User implements VisitorInterface {
1450
1468
  * const dataObject = await visitor.fetchDataObject();
1451
1469
  * ```
1452
1470
  */
1453
- fetchDataObject(): Promise<void | ResponseType$1>;
1471
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1454
1472
  /**
1455
1473
  * @summary
1456
1474
  * Sets the data object for a visitor.
@@ -1465,6 +1483,8 @@ declare class Visitor extends User implements VisitorInterface {
1465
1483
  * ```
1466
1484
  */
1467
1485
  setDataObject(dataObject: object | null | undefined, options?: {
1486
+ appPublicKey?: string;
1487
+ appPublicKeyJWT?: string;
1468
1488
  analytics?: AnalyticType[];
1469
1489
  lock?: {
1470
1490
  lockId: string;
@@ -1485,6 +1505,8 @@ declare class Visitor extends User implements VisitorInterface {
1485
1505
  * ```
1486
1506
  */
1487
1507
  updateDataObject(dataObject: object, options?: {
1508
+ appPublicKey?: string;
1509
+ appPublicKeyJWT?: string;
1488
1510
  analytics?: AnalyticType[];
1489
1511
  lock?: {
1490
1512
  lockId: string;
@@ -1503,6 +1525,8 @@ declare class Visitor extends User implements VisitorInterface {
1503
1525
  * ```
1504
1526
  */
1505
1527
  incrementDataObjectValue(path: string, amount: number, options?: {
1528
+ appPublicKey?: string;
1529
+ appPublicKeyJWT?: string;
1506
1530
  analytics?: AnalyticType[];
1507
1531
  lock?: {
1508
1532
  lockId: string;
@@ -1607,7 +1631,7 @@ type AssetOptionalInterface = {
1607
1631
  interface DroppedAssetInterface extends AssetInterface {
1608
1632
  fetchDroppedAssetById(): Promise<void | ResponseType$1>;
1609
1633
  deleteDroppedAsset(): Promise<void | ResponseType$1>;
1610
- fetchDataObject(): Promise<void | ResponseType$1>;
1634
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1611
1635
  setDataObject(dataObject: object, options: object): Promise<void | ResponseType$1>;
1612
1636
  updateDataObject(dataObject: object, options: object): Promise<void | ResponseType$1>;
1613
1637
  incrementDataObjectValue(path: string, amount: number, options: object): Promise<void | ResponseType$1>;
@@ -1769,6 +1793,16 @@ interface UpdatePrivateZoneInterface {
1769
1793
  privateZoneUserCap: number;
1770
1794
  }
1771
1795
 
1796
+ interface EcosystemInterface {
1797
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1798
+ setDataObject(dataObject: object | null | undefined, options: object): Promise<void | ResponseType$1>;
1799
+ updateDataObject(dataObject: object, options: object): Promise<void | ResponseType$1>;
1800
+ incrementDataObjectValue(path: string, amount: number, options: object): Promise<void | ResponseType$1>;
1801
+ }
1802
+ interface EcosystemOptionalInterface {
1803
+ credentials?: InteractiveCredentials;
1804
+ }
1805
+
1772
1806
  interface SceneInterface {
1773
1807
  fetchSceneById(): Promise<void | ResponseType$1>;
1774
1808
  id: string;
@@ -1817,7 +1851,7 @@ interface UserInterface {
1817
1851
  fetchPlatformAssets(): Promise<object | ResponseType$1>;
1818
1852
  fetchScenes(): Promise<void | ResponseType$1>;
1819
1853
  fetchWorldsByKey(): Promise<void | ResponseType$1>;
1820
- fetchDataObject(): Promise<void | ResponseType$1>;
1854
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1821
1855
  setDataObject(dataObject: object | null | undefined, options: object): Promise<void | ResponseType$1>;
1822
1856
  incrementDataObjectValue(path: string, amount: number, options: object): Promise<void | ResponseType$1>;
1823
1857
  dataObject?: object | null;
@@ -1834,7 +1868,7 @@ interface VisitorInterface extends SDKInterface {
1834
1868
  moveVisitor({ shouldTeleportVisitor, x, y }: MoveVisitorInterface): Promise<void | ResponseType$1>;
1835
1869
  fireToast({ groupId, title, text }: FireToastInterface): Promise<void | ResponseType$1>;
1836
1870
  openIframe({ link, shouldOpenInDrawer, title }: OpenIframeInterface): Promise<void | ResponseType$1>;
1837
- fetchDataObject(): Promise<void | ResponseType$1>;
1871
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1838
1872
  setDataObject(dataObject: object | null | undefined, options: object): Promise<void | ResponseType$1>;
1839
1873
  updateDataObject(dataObject: object, options: object): Promise<void | ResponseType$1>;
1840
1874
  incrementDataObjectValue(path: string, amount: number, options: object): Promise<void | ResponseType$1>;
@@ -1960,8 +1994,8 @@ interface WorldInterface extends SDKInterface, WorldDetailsInterface {
1960
1994
  sceneId: string;
1961
1995
  }): Promise<object | ResponseType$1>;
1962
1996
  replaceScene(sceneId: string): Promise<void | ResponseType$1>;
1963
- fetchDataObject(): Promise<void | ResponseType$1>;
1964
1997
  fireToast({ groupId, title, text }: FireToastInterface): Promise<void | ResponseType$1>;
1998
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
1965
1999
  setDataObject(dataObject: object | null | undefined, options: object): Promise<void | ResponseType$1>;
1966
2000
  updateDataObject(dataObject: object, options: object): Promise<void | ResponseType$1>;
1967
2001
  incrementDataObjectValue(path: string, amount: number, options: object): Promise<void | ResponseType$1>;
@@ -2110,6 +2144,101 @@ declare class Asset extends SDKController implements AssetInterface {
2110
2144
  }): Promise<void | ResponseType$1>;
2111
2145
  }
2112
2146
 
2147
+ /**
2148
+ * @summary
2149
+ * Create an instance of Ecosystem class with optional session credentials
2150
+ *
2151
+ * @usage
2152
+ * ```ts
2153
+ * await new Ecosystem(topia, {
2154
+ * credentials: { interactiveNonce: "exampleNonce", assetId: "droppedAssetId", visitorId: 1, urlSlug: "exampleWorld" }
2155
+ * });
2156
+ * ```
2157
+ */
2158
+ declare class Ecosystem extends SDKController {
2159
+ dataObject?: object | null | undefined;
2160
+ constructor(topia: Topia, options?: EcosystemOptionalInterface);
2161
+ /**
2162
+ * @summary
2163
+ * Retrieves the data object for a Topia ecosystem. Requires canUpdateEcosystemDataObjects permission to be set to true for the public key.
2164
+ *
2165
+ * @usage
2166
+ * ```ts
2167
+ * const dataObject = await ecosystem.fetchDataObject("exampleAppPublicKey", "exampleAppPublicKeyJWT");
2168
+ * ```
2169
+ */
2170
+ fetchDataObject(appPublicKey?: string, appPublicKeyJWT?: string): Promise<void | ResponseType$1>;
2171
+ /**
2172
+ * @summary
2173
+ * Sets the data object for a Topia ecosystem.
2174
+ *
2175
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
2176
+ *
2177
+ * @usage
2178
+ * ```ts
2179
+ * await ecosystem.setDataObject({ "exampleKey": "exampleValue" }, {
2180
+ * appPublicKey: "exampleAppPublicKey",
2181
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
2182
+ * });
2183
+ * ```
2184
+ */
2185
+ setDataObject(dataObject: object | null | undefined, options?: {
2186
+ appPublicKey?: string;
2187
+ appPublicKeyJWT?: string;
2188
+ analytics?: AnalyticType[];
2189
+ lock?: {
2190
+ lockId: string;
2191
+ releaseLock?: boolean;
2192
+ };
2193
+ }): Promise<void | ResponseType$1>;
2194
+ /**
2195
+ * @summary
2196
+ * Updates the data object for a Topia ecosystem.
2197
+ *
2198
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
2199
+ *
2200
+ * @usage
2201
+ * ```ts
2202
+ * await ecosystem.updateDataObject({ "exampleKey": "exampleValue" }, {
2203
+ * appPublicKey: "exampleAppPublicKey",
2204
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
2205
+ * });
2206
+ * ```
2207
+ */
2208
+ updateDataObject(dataObject: object, options?: {
2209
+ appPublicKey?: string;
2210
+ appPublicKeyJWT?: string;
2211
+ analytics?: AnalyticType[];
2212
+ lock?: {
2213
+ lockId: string;
2214
+ releaseLock?: boolean;
2215
+ };
2216
+ }): Promise<void | ResponseType$1>;
2217
+ /**
2218
+ * @summary
2219
+ * Increments a specific value in the data object for a Topia ecosystem by the amount specified. Must have valid interactive credentials from a visitor in the world.
2220
+ *
2221
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
2222
+ *
2223
+ * @usage
2224
+ * ```ts
2225
+ * await ecosystem.incrementDataObjectValue("key", 1, {
2226
+ * appPublicKey: "exampleAppPublicKey",
2227
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
2228
+ * });
2229
+ * ```
2230
+ */
2231
+ incrementDataObjectValue(path: string, amount: number, options?: {
2232
+ appPublicKey?: string;
2233
+ appPublicKeyJWT?: string;
2234
+ analytics?: AnalyticType[];
2235
+ lock?: {
2236
+ lockId: string;
2237
+ releaseLock?: boolean;
2238
+ };
2239
+ }): Promise<void | ResponseType$1>;
2240
+ }
2241
+
2113
2242
  /**
2114
2243
  * @summary
2115
2244
  * Create an instance of WebRTCConnector class with optional session credentials.
@@ -2363,6 +2492,27 @@ declare class DroppedAssetFactory extends SDKController {
2363
2492
  }): Promise<DroppedAsset>;
2364
2493
  }
2365
2494
 
2495
+ /**
2496
+ * @usage
2497
+ * ```ts
2498
+ * const Ecosystem = new EcosystemFactory(myTopiaInstance);
2499
+ * ```
2500
+ */
2501
+ declare class EcosystemFactory {
2502
+ topia: Topia;
2503
+ constructor(topia: Topia);
2504
+ /**
2505
+ * @summary
2506
+ * Instantiate a new instance of Ecosystem class.
2507
+ *
2508
+ * @usage
2509
+ * ```
2510
+ * const ecosystemInstance = await Ecosystem.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }});
2511
+ * ```
2512
+ */
2513
+ create(options?: EcosystemOptionalInterface): Ecosystem;
2514
+ }
2515
+
2366
2516
  /**
2367
2517
  * @usage
2368
2518
  * ```ts
@@ -2461,7 +2611,7 @@ declare class WebRTCConnectorFactory {
2461
2611
  *
2462
2612
  * @usage
2463
2613
  * ```
2464
- * const userInstance = await WebRTCConnector.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }, twilioConfig: {} });
2614
+ * const webRTCInstance = await WebRTCConnector.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }, twilioConfig: {} });
2465
2615
  * ```
2466
2616
  */
2467
2617
  create(urlSlug: string, options?: WebRTCConnectorOptionalInterface): WebRTCConnector;
@@ -2525,4 +2675,4 @@ declare class WorldFactory extends SDKController {
2525
2675
  }>;
2526
2676
  }
2527
2677
 
2528
- export { AnalyticType, AnimationMetaType, Asset, AssetFactory, AssetInterface, AssetOptionalInterface, AssetOptions, AssetType, DroppedAsset, DroppedAssetClickType, DroppedAssetFactory, DroppedAssetInterface, DroppedAssetMediaType, DroppedAssetOptionalInterface, DroppedAssetOptions, FireToastInterface, FrameType, InteractiveCredentials, MoveAllVisitorsInterface, MoveVisitorInterface, OpenIframeInterface, ResponseType$1 as ResponseType, SDKController, SDKInterface, Scene, SceneFactory, SceneInterface, SceneOptionalInterface, Topia, TopiaInterface, UpdateBroadcastInterface, UpdateClickTypeInterface, UpdateDroppedAssetInterface, UpdateMediaTypeInterface, UpdatePrivateZoneInterface, User, UserFactory, UserInterface, UserOptionalInterface, UserOptions, Visitor, VisitorFactory, VisitorInterface, VisitorOptionalInterface, VisitorOptions, VisitorType, VisitorsToMoveArrayType, VisitorsToMoveType, WebRTCConnector, WebRTCConnectorFactory, WebRTCConnectorInterface, WebRTCConnectorOptionalInterface, WebhookInterface, World, WorldActivity, WorldActivityFactory, WorldActivityOptionalInterface, WorldActivityType, WorldDetailsInterface, WorldFactory, WorldInterface, WorldOptionalInterface, WorldOptions, WorldWebhooksInterface };
2678
+ export { AnalyticType, AnimationMetaType, Asset, AssetFactory, AssetInterface, AssetOptionalInterface, AssetOptions, AssetType, DroppedAsset, DroppedAssetClickType, DroppedAssetFactory, DroppedAssetInterface, DroppedAssetMediaType, DroppedAssetOptionalInterface, DroppedAssetOptions, Ecosystem, EcosystemFactory, EcosystemInterface, EcosystemOptionalInterface, FireToastInterface, FrameType, InteractiveCredentials, MoveAllVisitorsInterface, MoveVisitorInterface, OpenIframeInterface, ResponseType$1 as ResponseType, SDKController, SDKInterface, Scene, SceneFactory, SceneInterface, SceneOptionalInterface, Topia, TopiaInterface, UpdateBroadcastInterface, UpdateClickTypeInterface, UpdateDroppedAssetInterface, UpdateMediaTypeInterface, UpdatePrivateZoneInterface, User, UserFactory, UserInterface, UserOptionalInterface, UserOptions, Visitor, VisitorFactory, VisitorInterface, VisitorOptionalInterface, VisitorOptions, VisitorType, VisitorsToMoveArrayType, VisitorsToMoveType, WebRTCConnector, WebRTCConnectorFactory, WebRTCConnectorInterface, WebRTCConnectorOptionalInterface, WebhookInterface, World, WorldActivity, WorldActivityFactory, WorldActivityOptionalInterface, WorldActivityType, WorldDetailsInterface, WorldFactory, WorldInterface, WorldOptionalInterface, WorldOptions, WorldWebhooksInterface };
package/dist/index.js CHANGED
@@ -39986,10 +39986,13 @@ class DroppedAsset extends Asset {
39986
39986
  * const dataObject = await droppedAsset.fetchDataObject();
39987
39987
  * ```
39988
39988
  */
39989
- fetchDataObject() {
39989
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
39990
39990
  return __awaiter(this, void 0, void 0, function* () {
39991
39991
  try {
39992
- const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/assets/${this.id}/data-object`, this.requestOptions);
39992
+ let query = "";
39993
+ if (appPublicKey)
39994
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
39995
+ const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/assets/${this.id}/data-object${query}`, this.requestOptions);
39993
39996
  this.dataObject = response.data;
39994
39997
  return response.data;
39995
39998
  }
@@ -40472,6 +40475,126 @@ class DroppedAsset extends Asset {
40472
40475
  }
40473
40476
  _DroppedAsset_updateDroppedAsset = new WeakMap();
40474
40477
 
40478
+ /**
40479
+ * @summary
40480
+ * Create an instance of Ecosystem class with optional session credentials
40481
+ *
40482
+ * @usage
40483
+ * ```ts
40484
+ * await new Ecosystem(topia, {
40485
+ * credentials: { interactiveNonce: "exampleNonce", assetId: "droppedAssetId", visitorId: 1, urlSlug: "exampleWorld" }
40486
+ * });
40487
+ * ```
40488
+ */
40489
+ class Ecosystem extends SDKController {
40490
+ constructor(topia, options = { credentials: {} }) {
40491
+ super(topia, options.credentials);
40492
+ this.dataObject = {};
40493
+ }
40494
+ /**
40495
+ * @summary
40496
+ * Retrieves the data object for a Topia ecosystem. Requires canUpdateEcosystemDataObjects permission to be set to true for the public key.
40497
+ *
40498
+ * @usage
40499
+ * ```ts
40500
+ * const dataObject = await ecosystem.fetchDataObject("exampleAppPublicKey", "exampleAppPublicKeyJWT");
40501
+ * ```
40502
+ */
40503
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
40504
+ return __awaiter(this, void 0, void 0, function* () {
40505
+ try {
40506
+ let query = "";
40507
+ if (appPublicKey)
40508
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
40509
+ const response = yield this.topiaPublicApi().get(`/ecosystem/data-object${query}`, this.requestOptions);
40510
+ this.dataObject = response.data;
40511
+ return response.data;
40512
+ }
40513
+ catch (error) {
40514
+ throw this.errorHandler({ error, sdkMethod: "Ecosystem.fetchDataObject" });
40515
+ }
40516
+ });
40517
+ }
40518
+ /**
40519
+ * @summary
40520
+ * Sets the data object for a Topia ecosystem.
40521
+ *
40522
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
40523
+ *
40524
+ * @usage
40525
+ * ```ts
40526
+ * await ecosystem.setDataObject({ "exampleKey": "exampleValue" }, {
40527
+ * appPublicKey: "exampleAppPublicKey",
40528
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
40529
+ * });
40530
+ * ```
40531
+ */
40532
+ setDataObject(dataObject, options = {}) {
40533
+ return __awaiter(this, void 0, void 0, function* () {
40534
+ try {
40535
+ yield this.topiaPublicApi().post(`/ecosystem/data-object`, Object.assign(Object.assign({}, options), { dataObject: dataObject || this.dataObject }), this.requestOptions);
40536
+ this.dataObject = dataObject || this.dataObject;
40537
+ }
40538
+ catch (error) {
40539
+ throw this.errorHandler({ error, params: { dataObject, options }, sdkMethod: "Ecosystem.setDataObject" });
40540
+ }
40541
+ });
40542
+ }
40543
+ /**
40544
+ * @summary
40545
+ * Updates the data object for a Topia ecosystem.
40546
+ *
40547
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
40548
+ *
40549
+ * @usage
40550
+ * ```ts
40551
+ * await ecosystem.updateDataObject({ "exampleKey": "exampleValue" }, {
40552
+ * appPublicKey: "exampleAppPublicKey",
40553
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
40554
+ * });
40555
+ * ```
40556
+ */
40557
+ updateDataObject(dataObject, options = {}) {
40558
+ return __awaiter(this, void 0, void 0, function* () {
40559
+ try {
40560
+ yield this.topiaPublicApi().put(`/ecosystem/data-object`, Object.assign(Object.assign({}, options), { dataObject: dataObject || this.dataObject }), this.requestOptions);
40561
+ this.dataObject = Object.assign(Object.assign({}, (this.dataObject || {})), (dataObject || {}));
40562
+ }
40563
+ catch (error) {
40564
+ throw this.errorHandler({ error, params: { dataObject, options }, sdkMethod: "Ecosystem.updateDataObject" });
40565
+ }
40566
+ });
40567
+ }
40568
+ /**
40569
+ * @summary
40570
+ * Increments a specific value in the data object for a Topia ecosystem by the amount specified. Must have valid interactive credentials from a visitor in the world.
40571
+ *
40572
+ * Optionally, a lock can be provided with this request to ensure only one update happens at a time between all updates that share the same lock id
40573
+ *
40574
+ * @usage
40575
+ * ```ts
40576
+ * await ecosystem.incrementDataObjectValue("key", 1, {
40577
+ * appPublicKey: "exampleAppPublicKey",
40578
+ * appPublicKeyJWT: "exampleAppPublicKeyJWT",}
40579
+ * });
40580
+ * ```
40581
+ */
40582
+ incrementDataObjectValue(path, amount, options = {}) {
40583
+ return __awaiter(this, void 0, void 0, function* () {
40584
+ try {
40585
+ yield this.topiaPublicApi().put(`/ecosystem/increment-data-object-value`, Object.assign({ path, amount }, options), this.requestOptions);
40586
+ }
40587
+ catch (error) {
40588
+ throw this.errorHandler({
40589
+ error,
40590
+ params: { path, amount, options },
40591
+ sdkMethod: "Ecosystem.incrementDataObjectValue",
40592
+ });
40593
+ }
40594
+ });
40595
+ }
40596
+ }
40597
+
40475
40598
  /**
40476
40599
  * @summary
40477
40600
  * Create an instance of Scene class with a given scene id and optional attributes and session credentials.
@@ -40580,9 +40703,12 @@ class World extends SDKController {
40580
40703
  * const { dataObject } = world;
40581
40704
  * ```
40582
40705
  */
40583
- this.fetchDataObject = () => __awaiter(this, void 0, void 0, function* () {
40706
+ this.fetchDataObject = (appPublicKey, appPublicKeyJWT) => __awaiter(this, void 0, void 0, function* () {
40584
40707
  try {
40585
- const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/get-data-object`, this.requestOptions);
40708
+ let query = "";
40709
+ if (appPublicKey)
40710
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
40711
+ const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/get-data-object${query}`, this.requestOptions);
40586
40712
  this.dataObject = response.data;
40587
40713
  return response.data;
40588
40714
  }
@@ -41110,6 +41236,7 @@ class World extends SDKController {
41110
41236
  return result.data;
41111
41237
  }
41112
41238
  catch (error) {
41239
+ // TODO: don't throw error if status 409
41113
41240
  throw this.errorHandler({ error, params: { type }, sdkMethod: "World.triggerActivity" });
41114
41241
  }
41115
41242
  });
@@ -41716,12 +41843,15 @@ class User extends SDKController {
41716
41843
  * const dataObject = await user.fetchDataObject();
41717
41844
  * ```
41718
41845
  */
41719
- fetchDataObject() {
41846
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
41720
41847
  return __awaiter(this, void 0, void 0, function* () {
41721
41848
  try {
41722
41849
  if (!this.profileId)
41723
41850
  throw "This method requires the use of a profileId";
41724
- const response = yield this.topiaPublicApi().get(`/user/dataObjects/${this.profileId}/get-data-object`, this.requestOptions);
41851
+ let query = "";
41852
+ if (appPublicKey)
41853
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
41854
+ const response = yield this.topiaPublicApi().get(`/user/dataObjects/${this.profileId}/get-data-object${query}`, this.requestOptions);
41725
41855
  this.dataObject = response.data;
41726
41856
  return response.data;
41727
41857
  }
@@ -42113,10 +42243,13 @@ class Visitor extends User {
42113
42243
  * const dataObject = await visitor.fetchDataObject();
42114
42244
  * ```
42115
42245
  */
42116
- fetchDataObject() {
42246
+ fetchDataObject(appPublicKey, appPublicKeyJWT) {
42117
42247
  return __awaiter(this, void 0, void 0, function* () {
42118
42248
  try {
42119
- const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/visitors/${this.id}/get-data-object`, this.requestOptions);
42249
+ let query = "";
42250
+ if (appPublicKey)
42251
+ query = `?appPublicKey=${appPublicKey}&appPublicKeyJWT=${appPublicKeyJWT}`;
42252
+ const response = yield this.topiaPublicApi().get(`/world/${this.urlSlug}/visitors/${this.id}/get-data-object${query}`, this.requestOptions);
42120
42253
  this.dataObject = response.data;
42121
42254
  return response.data;
42122
42255
  }
@@ -42657,6 +42790,30 @@ class DroppedAssetFactory extends SDKController {
42657
42790
  }
42658
42791
  }
42659
42792
 
42793
+ /**
42794
+ * @usage
42795
+ * ```ts
42796
+ * const Ecosystem = new EcosystemFactory(myTopiaInstance);
42797
+ * ```
42798
+ */
42799
+ class EcosystemFactory {
42800
+ constructor(topia) {
42801
+ this.topia = topia;
42802
+ }
42803
+ /**
42804
+ * @summary
42805
+ * Instantiate a new instance of Ecosystem class.
42806
+ *
42807
+ * @usage
42808
+ * ```
42809
+ * const ecosystemInstance = await Ecosystem.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }});
42810
+ * ```
42811
+ */
42812
+ create(options) {
42813
+ return new Ecosystem(this.topia, options);
42814
+ }
42815
+ }
42816
+
42660
42817
  /**
42661
42818
  * @usage
42662
42819
  * ```ts
@@ -42778,7 +42935,7 @@ class WebRTCConnectorFactory {
42778
42935
  *
42779
42936
  * @usage
42780
42937
  * ```
42781
- * const userInstance = await WebRTCConnector.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }, twilioConfig: {} });
42938
+ * const webRTCInstance = await WebRTCConnector.create({ credentials: { interactiveNonce, interactivePublicKey, assetId, urlSlug, visitorId }, twilioConfig: {} });
42782
42939
  * ```
42783
42940
  */
42784
42941
  create(urlSlug, options) {
@@ -42896,4 +43053,4 @@ process.on("uncaughtException", function (err) {
42896
43053
  process.exit(1);
42897
43054
  });
42898
43055
 
42899
- export { Asset, AssetFactory, DroppedAsset, DroppedAssetClickType, DroppedAssetFactory, DroppedAssetMediaType, SDKController, Scene, SceneFactory, Topia, User, UserFactory, Visitor, VisitorFactory, WebRTCConnector, WebRTCConnectorFactory, World, WorldActivity, WorldActivityFactory, WorldActivityType, WorldFactory };
43056
+ export { Asset, AssetFactory, DroppedAsset, DroppedAssetClickType, DroppedAssetFactory, DroppedAssetMediaType, Ecosystem, EcosystemFactory, SDKController, Scene, SceneFactory, Topia, User, UserFactory, Visitor, VisitorFactory, WebRTCConnector, WebRTCConnectorFactory, World, WorldActivity, WorldActivityFactory, WorldActivityType, WorldFactory };
package/package.json CHANGED
@@ -60,5 +60,5 @@
60
60
  "yalc-push": "yarn build && yalc publish --push --dev --no-scripts"
61
61
  },
62
62
  "type": "module",
63
- "version": "0.15.08"
63
+ "version": "0.16.00"
64
64
  }