@dcl/sdk 7.29.1-35901015152.commit-d1b7b96 → 7.29.1-36041177279.commit-502e633

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.
Files changed (91) hide show
  1. package/atom.d.ts +19 -0
  2. package/atom.js +83 -0
  3. package/future.d.ts +8 -0
  4. package/future.js +26 -0
  5. package/internal/language-events.d.ts +1 -0
  6. package/internal/language-events.js +8 -0
  7. package/internal/transports/rendererTransport.js +5 -2
  8. package/network/binary-message-bus.d.ts +6 -3
  9. package/network/binary-message-bus.js +9 -5
  10. package/network/chunking.d.ts +5 -0
  11. package/network/chunking.js +38 -0
  12. package/network/events/implementation.d.ts +93 -0
  13. package/network/events/implementation.js +221 -0
  14. package/network/events/index.d.ts +42 -0
  15. package/network/events/index.js +43 -0
  16. package/network/events/protocol.d.ts +27 -0
  17. package/network/events/protocol.js +66 -0
  18. package/network/events/registry.d.ts +8 -0
  19. package/network/events/registry.js +3 -0
  20. package/network/index.d.ts +8 -2
  21. package/network/index.js +16 -3
  22. package/network/message-bus-sync.d.ts +16 -3
  23. package/network/message-bus-sync.js +161 -103
  24. package/network/server/index.d.ts +14 -0
  25. package/network/server/index.js +219 -0
  26. package/network/server/utils.d.ts +18 -0
  27. package/network/server/utils.js +135 -0
  28. package/network/state.js +3 -5
  29. package/observables.d.ts +4 -0
  30. package/observables.js +6 -1
  31. package/package.json +6 -6
  32. package/platform/index.d.ts +16 -0
  33. package/platform/index.js +42 -1
  34. package/players/index.d.ts +0 -1
  35. package/players/index.js +6 -4
  36. package/server/env-var.d.ts +15 -0
  37. package/server/env-var.js +31 -0
  38. package/server/index.d.ts +2 -0
  39. package/server/index.js +3 -0
  40. package/server/storage/constants.d.ts +80 -0
  41. package/server/storage/constants.js +19 -0
  42. package/server/storage/error-message.d.ts +1 -0
  43. package/server/storage/error-message.js +9 -0
  44. package/server/storage/index.d.ts +54 -0
  45. package/server/storage/index.js +60 -0
  46. package/server/storage/player.d.ts +60 -0
  47. package/server/storage/player.js +244 -0
  48. package/server/storage/scene.d.ts +55 -0
  49. package/server/storage/scene.js +232 -0
  50. package/server/storage/serialize.d.ts +1 -0
  51. package/server/storage/serialize.js +135 -0
  52. package/server/storage/value-cache.d.ts +1 -0
  53. package/server/storage/value-cache.js +67 -0
  54. package/server/storage/write-queue.d.ts +1 -0
  55. package/server/storage/write-queue.js +113 -0
  56. package/server/storage-url.d.ts +13 -0
  57. package/server/storage-url.js +42 -0
  58. package/server/utils.d.ts +35 -0
  59. package/server/utils.js +69 -0
  60. package/src/atom.ts +98 -0
  61. package/src/future.ts +38 -0
  62. package/src/internal/language-events.ts +8 -0
  63. package/src/internal/transports/rendererTransport.ts +4 -1
  64. package/src/network/binary-message-bus.ts +9 -4
  65. package/src/network/chunking.ts +45 -0
  66. package/src/network/events/implementation.ts +271 -0
  67. package/src/network/events/index.ts +48 -0
  68. package/src/network/events/protocol.ts +94 -0
  69. package/src/network/events/registry.ts +18 -0
  70. package/src/network/index.ts +40 -3
  71. package/src/network/message-bus-sync.ts +176 -112
  72. package/src/network/server/index.ts +301 -0
  73. package/src/network/server/utils.ts +189 -0
  74. package/src/network/state.ts +3 -4
  75. package/src/observables.ts +10 -0
  76. package/src/platform/index.ts +47 -0
  77. package/src/players/index.ts +5 -4
  78. package/src/server/env-var.ts +36 -0
  79. package/src/server/index.ts +12 -0
  80. package/src/server/storage/constants.ts +112 -0
  81. package/src/server/storage/error-message.ts +8 -0
  82. package/src/server/storage/index.ts +83 -0
  83. package/src/server/storage/player.ts +345 -0
  84. package/src/server/storage/scene.ts +324 -0
  85. package/src/server/storage/serialize.ts +132 -0
  86. package/src/server/storage/value-cache.ts +119 -0
  87. package/src/server/storage/write-queue.ts +174 -0
  88. package/src/server/storage-url.ts +49 -0
  89. package/src/server/utils.ts +83 -0
  90. package/src/testing/runtime.ts +3 -0
  91. package/testing/runtime.js +4 -1
package/observables.js CHANGED
@@ -2,6 +2,7 @@ import { Observable } from './internal/Observable';
2
2
  import { AvatarBase, AvatarEmoteCommand, AvatarEquippedData, PlayerIdentityData, PointerEventsResult, RealmInfo, engine } from '@dcl/ecs';
3
3
  import { subscribe } from '~system/EngineApi';
4
4
  import players from './players';
5
+ import { localeChangedEvents } from './internal/language-events';
5
6
  /**
6
7
  * @internal
7
8
  * This function generates a callback that is passed to the Observable
@@ -98,6 +99,10 @@ export async function pollEvents(sendBatch) {
98
99
  onCommsMessage.notifyObservers(data);
99
100
  break;
100
101
  }
102
+ case 'localeChanged': {
103
+ localeChangedEvents.notifyObservers(data);
104
+ break;
105
+ }
101
106
  }
102
107
  }
103
108
  }
@@ -245,4 +250,4 @@ function processObservables() {
245
250
  engine.addSystem(observableSystem);
246
251
  return { subscribe };
247
252
  }
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvb2JzZXJ2YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUVsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLFNBQVMsRUFFVCxNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUE7QUFDakIsT0FBTyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRixPQUFPLE9BQU8sTUFBTSxXQUFXLENBQUE7QUEwRi9COzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQXdCO0lBQ2hELE9BQU8sR0FBRyxFQUFFO1FBQ1YsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1lBQ3pCLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDdkQ7YUFBTTtZQUNMLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUMvQztJQUNILENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQTBCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDL0c7OzhNQUU4TTtBQUM5TSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUE7QUFFbEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUEwQixnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBRS9HOzs4TUFFOE07QUFDOU0sTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixD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QUU7WUFDZixVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQ2pCLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUMzQztRQUNELElBQUksY0FBYztZQUFFLE9BQU07UUFDMUIsY0FBYyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFBO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi9pbnRlcm5hbC9PYnNlcnZhYmxlJ1xuaW1wb3J0IHtcbiAgQXZhdGFyQmFzZSxcbiAgQXZhdGFyRW1vdGVDb21tYW5kLFxuICBBdmF0YXJFcXVpcHBlZERhdGEsXG4gIEVudGl0eSxcbiAgUGxheWVySWRlbnRpdHlEYXRhLFxuICBQb2ludGVyRXZlbnRzUmVzdWx0LFxuICBSZWFsbUluZm8sXG4gIFZlY3RvcjNUeXBlLFxuICBlbmdpbmVcbn0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBNYW55RW50aXR5QWN0aW9uLCBTZW5kQmF0Y2hSZXNwb25zZSwgc3Vic2NyaWJlIH0gZnJvbSAnfnN5c3RlbS9FbmdpbmVBcGknXG5pbXBvcnQgcGxheWVycyBmcm9tICcuL3BsYXllcnMnXG5cbi8vLyAtLS0gRVZFTlRTIC0tLVxuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgSUV2ZW50TmFtZXMgPSBrZXlvZiBJRXZlbnRzXG5cbi8qKlxuICogQHB1YmxpY1xuICogTm90ZTogRG9uJ3QgdXNlIGBvbmAgcHJlZml4IGZvciBJRXZlbnRzIHRvIGF2b2lkIHJlZHVuZGFuY3kgd2l0aCBgZXZlbnQub24oXCJvbkV2ZW50TmFtZVwiKWAgc3ludGF4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudHMge1xuICBwbGF5ZXJFeHByZXNzaW9uOiB7XG4gICAgZXhwcmVzc2lvbklkOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdldHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgZW50ZXJzIHRoZSBzY2VuZVxuICAgKi9cbiAgb25FbnRlclNjZW5lOiB7XG4gICAgdXNlcklkOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdldHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgbGVhdmVzIHRoZSBzY2VuZVxuICAgKi9cbiAgb25MZWF2ZVNjZW5lOiB7XG4gICAgdXNlcklkOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdldHMgdHJpZ2dlcmVkIGFmdGVyIHJlY2VpdmluZyBhIGNvbW1zIG1lc3NhZ2UuXG4gICAqL1xuICBjb21tczoge1xuICAgIHNlbmRlcjogc3RyaW5nXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0cmlnZ2VyZWQgb25jZSB0aGUgc2NlbmUgc2hvdWxkIHN0YXJ0LlxuICAgKi9cbiAgc2NlbmVTdGFydDogdW5rbm93blxuXG4gIC8qKiBUaGlzIGlzIHRyaWdnZXJlZCBhdCBsZWFzdCBmb3IgZWFjaCB2aWRlb1N0YXR1cyBjaGFuZ2UgKi9cbiAgdmlkZW9FdmVudDoge1xuICAgIGNvbXBvbmVudElkOiBzdHJpbmdcbiAgICB2aWRlb0NsaXBJZDogc3RyaW5nXG4gICAgLyoqIFN0YXR1cywgY2FuIGJlIE5PTkUgPSAwLCBFUlJPUiA9IDEsIExPQURJTkcgPSAyLCBSRUFEWSA9IDMsIFBMQVlJTkcgPSA0LEJVRkZFUklORyA9IDUgKi9cbiAgICB2aWRlb1N0YXR1czogbnVtYmVyXG4gICAgLyoqIEN1cnJlbnQgb2Zmc2V0IHBvc2l0aW9uIGluIHNlY29uZHMgKi9cbiAgICBjdXJyZW50T2Zmc2V0OiBudW1iZXJcbiAgICAvKiogVmlkZW8gbGVuZ3RoIGluIHNlY29uZHMuIENhbiBiZSAtMSAqL1xuICAgIHRvdGFsVmlkZW9MZW5ndGg6IG51bWJlclxuICB9XG5cbiAgLyoqIFRoaXMgaXMgdHJpZ2dlciBldmVyeXRpbWUgYSBwcm9maWxlIGlzIGNoYW5nZWQgKi9cbiAgcHJvZmlsZUNoYW5nZWQ6IHtcbiAgICBldGhBZGRyZXNzOiBzdHJpbmdcbiAgICB2ZXJzaW9uOiBudW1iZXJcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBwZWVyJ3MgYXZhdGFyIGlzIGNvbm5lY3RlZCBhbmQgdmlzaWJsZSAqL1xuICBwbGF5ZXJDb25uZWN0ZWQ6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqIFRyaWdnZXJlZCB3aGVuIHBlZXIgZGlzY29ubmVjdCBhbmQvb3IgaXQgYXZhdGFyIGlzIHNldCBpbnZpc2libGUgYnkgY29tbXMgKi9cbiAgcGxheWVyRGlzY29ubmVjdGVkOiB7XG4gICAgdXNlcklkOiBzdHJpbmdcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBjdXJyZW50IHJlYWxtIG9yIGlzbGFuZCBjaGFuZ2VzICovXG4gIG9uUmVhbG1DaGFuZ2VkOiB7XG4gICAgZG9tYWluOiBzdHJpbmdcbiAgICByb29tOiBzdHJpbmdcbiAgICBzZXJ2ZXJOYW1lOiBzdHJpbmdcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nXG4gIH1cblxuICAvKiogVHJpZ2dlcmVkIHdoZW4gb3RoZXIgcGxheWVyJ3MgYXZhdGFyIGlzIGNsaWNrZWQgKi9cbiAgcGxheWVyQ2xpY2tlZDoge1xuICAgIHVzZXJJZDogc3RyaW5nXG4gICAgcmF5OiB7XG4gICAgICBvcmlnaW46IFZlY3RvcjNUeXBlXG4gICAgICBkaXJlY3Rpb246IFZlY3RvcjNUeXBlXG4gICAgICBkaXN0YW5jZTogbnVtYmVyXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBPYnNlcnZhYmxlXG4gKiBjb25zdHJ1Y3RvciB0byBzdWJzY3JpYmUgdG8gdGhlIGV2ZW50cyBvZiB0aGUgRGVjZW50cmFsYW5kSW50ZXJmYWNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmliZXIoZXZlbnROYW1lOiBrZXlvZiBJRXZlbnRzKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1zJykge1xuICAgICAgc3Vic2NyaWJlKHsgZXZlbnRJZDogZXZlbnROYW1lIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIFNESzdDb21wb25lbnRzT2JzZXJ2YWJsZT8uc3Vic2NyaWJlKGV2ZW50TmFtZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGVzZSBldmVudHMgYXJlIHRyaWdnZXJlZCBhZnRlciB5b3VyIGNoYXJhY3RlciBlbnRlcnMgdGhlIHNjZW5lLlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uRW50ZXJTY2VuZU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydvbkVudGVyU2NlbmUnXT4oY3JlYXRlU3Vic2NyaWJlcignb25FbnRlclNjZW5lJykpXG4vKiogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuIFVzZSBvbkVudGVyU2NlbmVPYnNlcnZhYmxlIGluc3RlYWQuICovXG5leHBvcnQgY29uc3Qgb25FbnRlclNjZW5lID0gb25FbnRlclNjZW5lT2JzZXJ2YWJsZVxuXG4vKipcbiAqIFRoZXNlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGFmdGVyIHlvdXIgY2hhcmFjdGVyIGxlYXZlcyB0aGUgc2NlbmUuXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ29uTGVhdmVTY2VuZSddPihjcmVhdGVTdWJzY3JpYmVyKCdvbkxlYXZlU2NlbmUnKSlcblxuLyoqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLiBVc2Ugb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGNvbnN0IG9uTGVhdmVTY2VuZSA9IG9uTGVhdmVTY2VuZU9ic2VydmFibGVcblxuLyoqXG4gKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBhZnRlciBhbGwgdGhlIHJlc291cmNlcyBvZiB0aGUgc2NlbmUgd2VyZSBsb2FkZWQgKG1vZGVscywgdGV4dHVyZXMsIGV0Yy4uLilcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblNjZW5lUmVhZHlPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snc2NlbmVTdGFydCddPihjcmVhdGVTdWJzY3JpYmVyKCdzY2VuZVN0YXJ0JykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyRXhwcmVzc2lvbk9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwbGF5ZXJFeHByZXNzaW9uJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJFeHByZXNzaW9uJylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25WaWRlb0V2ZW50ID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sndmlkZW9FdmVudCddPihjcmVhdGVTdWJzY3JpYmVyKCd2aWRlb0V2ZW50JykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUHJvZmlsZUNoYW5nZWQgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwcm9maWxlQ2hhbmdlZCddPihjcmVhdGVTdWJzY3JpYmVyKCdwcm9maWxlQ2hhbmdlZCcpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwbGF5ZXJDb25uZWN0ZWQnXT4oXG4gIGNyZWF0ZVN1YnNjcmliZXIoJ3BsYXllckNvbm5lY3RlZCcpXG4pXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyRGlzY29ubmVjdGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckRpc2Nvbm5lY3RlZCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcigncGxheWVyRGlzY29ubmVjdGVkJylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snb25SZWFsbUNoYW5nZWQnXT4oY3JlYXRlU3Vic2NyaWJlcignb25SZWFsbUNoYW5nZWQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJDbGlja2VkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckNsaWNrZWQnXT4oY3JlYXRlU3Vic2NyaWJlcigncGxheWVyQ2xpY2tlZCcpKVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uQ29tbXNNZXNzYWdlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snY29tbXMnXT4oY3JlYXRlU3Vic2NyaWJlcignY29tbXMnKSlcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXByZWNhdGVkIHRoaXMgaXMgYW4gT0xEIEFQSS5cbiAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgU0RLNiBzZW5kQmF0Y2ggdG8gcG9sbCBldmVudHMgZnJvbSB0aGUgcmVuZGVyZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvbGxFdmVudHMoc2VuZEJhdGNoOiAoYm9keTogTWFueUVudGl0eUFjdGlvbikgPT4gUHJvbWlzZTxTZW5kQmF0Y2hSZXNwb25zZT4pIHtcbiAgY29uc3QgeyBldmVudHMgfSA9IGF3YWl0IHNlbmRCYXRjaCh7IGFjdGlvbnM6IFtdIH0pXG4gIGZvciAoY29uc3QgZSBvZiBldmVudHMpIHtcbiAgICBpZiAoZS5nZW5lcmljKSB7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShlLmdlbmVyaWMuZXZlbnREYXRhKVxuICAgICAgc3dpdGNoIChlLmdlbmVyaWMuZXZlbnRJZCkge1xuICAgICAgICBjYXNlICdjb21tcyc6IHtcbiAgICAgICAgICBvbkNvbW1zTWVzc2FnZS5ub3RpZnlPYnNlcnZlcnMoZGF0YSBhcyBJRXZlbnRzWydjb21tcyddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgU0RLN0NvbXBvbmVudHNPYnNlcnZhYmxlID0gcHJvY2Vzc09ic2VydmFibGVzKClcbmZ1bmN0aW9uIHByb2Nlc3NPYnNlcnZhYmxlcygpIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IG5ldyBTZXQ8a2V5b2YgSUV2ZW50cz4oKVxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShldmVudE5hbWU6IGtleW9mIElFdmVudHMpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9ucy5oYXMoZXZlbnROYW1lKSkgcmV0dXJuXG4gICAgc3dpdGNoIChldmVudE5hbWUpIHtcbiAgICAgIGNhc2UgJ3BsYXllckNsaWNrZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZVBsYXllckNsaWNrKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29uRW50ZXJTY2VuZSc6XG4gICAgICBjYXNlICdwbGF5ZXJDb25uZWN0ZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZUVudGVyU2NlbmUoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnb25MZWF2ZVNjZW5lJzpcbiAgICAgIGNhc2UgJ3BsYXllckRpc2Nvbm5lY3RlZCc6IHtcbiAgICAgICAgc3Vic2NyaWJlTGVhdmVTY2VuZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdvblJlYWxtQ2hhbmdlZCc6IHtcbiAgICAgICAgc3Vic2NyaWJlUmVhbG1DaGFuZ2UoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAncGxheWVyRXhwcmVzc2lvbic6IHtcbiAgICAgICAgc3Vic2NyaWJlUGxheWVyRXhwcmVzc2lvbigpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdwcm9maWxlQ2hhbmdlZCc6IHtcbiAgICAgICAgc3Vic2NyaWJlUHJvZmlsZUNoYW5nZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHN1YnNjcmlwdGlvbnMuYWRkKGV2ZW50TmFtZSlcbiAgfVxuICAvKipcbiAgICogUExBWUVSIEVOVEVSL0NPTk5FQ1RFRCBvYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBzdWJzY3JpYmVFbnRlclNjZW5lKCkge1xuICAgIHBsYXllcnMub25FbnRlclNjZW5lKChwbGF5ZXIpID0+IHtcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmhhcygnb25FbnRlclNjZW5lJykpIHtcbiAgICAgICAgb25FbnRlclNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoeyB1c2VySWQ6IHBsYXllci51c2VySWQgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMuaGFzKCdwbGF5ZXJDb25uZWN0ZWQnKSkge1xuICAgICAgICBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgdXNlcklkOiBwbGF5ZXIudXNlcklkIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogUExBWUVSIExFQVZFL0RJU0NPTk5FQ1RFRCBvYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBzdWJzY3JpYmVMZWF2ZVNjZW5lKCkge1xuICAgIHBsYXllcnMub25MZWF2ZVNjZW5lKCh1c2VySWQpID0+IHtcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmhhcygnb25MZWF2ZVNjZW5lJykpIHtcbiAgICAgICAgb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoeyB1c2VySWQgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMuaGFzKCdwbGF5ZXJEaXNjb25uZWN0ZWQnKSkge1xuICAgICAgICBvblBsYXllckRpc2Nvbm5lY3RlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgdXNlcklkIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogUkVBTE0gQ0hBTkdFIG9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZVJlYWxtQ2hhbmdlKCkge1xuICAgIFJlYWxtSW5mby5vbkNoYW5nZShlbmdpbmUuUm9vdEVudGl0eSwgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7XG4gICAgICAgICAgZG9tYWluOiB2YWx1ZS5iYXNlVXJsLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiB2YWx1ZS5yZWFsbU5hbWUsXG4gICAgICAgICAgcm9vbTogdmFsdWUucm9vbSA/PyAnJyxcbiAgICAgICAgICBzZXJ2ZXJOYW1lOiB2YWx1ZS5yZWFsbU5hbWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIC8qKlxuICAgKiBQTEFZRVIvQVZBVEFSIENMSUNLRUQgb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlUGxheWVyQ2xpY2soKSB7XG4gICAgY29uc3QgcGxheWVyRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKVxuICAgIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcklkZW50aXR5RGF0YSkpIHtcbiAgICAgICAgaWYgKHBsYXllckVudGl0aWVzLmhhcyhlbnRpdHkpKSBjb250aW51ZVxuICAgICAgICBwbGF5ZXJFbnRpdGllcy5hZGQoZW50aXR5KVxuXG4gICAgICAgIFBvaW50ZXJFdmVudHNSZXN1bHQub25DaGFuZ2UoZW50aXR5LCAoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhPy5oaXQpIHtcbiAgICAgICAgICAgIG9uUGxheWVyQ2xpY2tlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHtcbiAgICAgICAgICAgICAgdXNlcklkOiBQbGF5ZXJJZGVudGl0eURhdGEuZ2V0T3JOdWxsKGVudGl0eSk/LmFkZHJlc3MgPz8gJycsXG4gICAgICAgICAgICAgIHJheToge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZGF0YS5oaXQuZGlyZWN0aW9uISxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGF0YS5oaXQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG9yaWdpbjogZGF0YS5oaXQuZ2xvYmFsT3JpZ2luIVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBsYXllciBleHByZXNzaW9uIG9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZVBsYXllckV4cHJlc3Npb24oKSB7XG4gICAgQXZhdGFyRW1vdGVDb21tYW5kLm9uQ2hhbmdlKGVuZ2luZS5QbGF5ZXJFbnRpdHksICh2YWx1ZSkgPT4ge1xuICAgICAgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoeyBleHByZXNzaW9uSWQ6IHZhbHVlPy5lbW90ZVVybiA/PyAnJyB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUFJPRklMRSBDSEFOR0Ugb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlUHJvZmlsZUNoYW5nZSgpIHtcbiAgICBBdmF0YXJCYXNlLm9uQ2hhbmdlKGVuZ2luZS5QbGF5ZXJFbnRpdHksICgpID0+IHtcbiAgICAgIGlmICghcHJvZmlsZUFkZHJlc3MpIHJldHVyblxuICAgICAgb25Qcm9maWxlQ2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMoeyBldGhBZGRyZXNzOiBwcm9maWxlQWRkcmVzcywgdmVyc2lvbjogMCB9KVxuICAgIH0pXG5cbiAgICBBdmF0YXJFcXVpcHBlZERhdGEub25DaGFuZ2UoZW5naW5lLlBsYXllckVudGl0eSwgKCkgPT4ge1xuICAgICAgaWYgKCFwcm9maWxlQWRkcmVzcykgcmV0dXJuXG4gICAgICBvblByb2ZpbGVDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyh7IGV0aEFkZHJlc3M6IHByb2ZpbGVBZGRyZXNzLCB2ZXJzaW9uOiAwIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8vIEZsYWcgdG8gY2FsbCBvbmNlIHRoZSBzY2VuZSBpcyBpbml0YWxpemVkLlxuICBsZXQgc2NlbmVSZWFkeSA9IGZhbHNlXG4gIGxldCBwcm9maWxlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZVN5c3RlbSgpIHtcbiAgICBpZiAoc2NlbmVSZWFkeSAmJiBwcm9maWxlQWRkcmVzcykge1xuICAgICAgcmV0dXJuIGVuZ2luZS5yZW1vdmVTeXN0ZW0ob2JzZXJ2YWJsZVN5c3RlbSlcbiAgICB9XG4gICAgaWYgKCFzY2VuZVJlYWR5KSB7XG4gICAgICBzY2VuZVJlYWR5ID0gdHJ1ZVxuICAgICAgb25TY2VuZVJlYWR5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pXG4gICAgfVxuICAgIGlmIChwcm9maWxlQWRkcmVzcykgcmV0dXJuXG4gICAgcHJvZmlsZUFkZHJlc3MgPSBQbGF5ZXJJZGVudGl0eURhdGEuZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpPy5hZGRyZXNzXG4gIH1cblxuICBlbmdpbmUuYWRkU3lzdGVtKG9ic2VydmFibGVTeXN0ZW0pXG5cbiAgcmV0dXJuIHsgc3Vic2NyaWJlIH1cbn1cbiJdfQ==
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvb2JzZXJ2YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUVsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLFNBQVMsRUFFVCxNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUE7QUFDakIsT0FBTyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRixPQUFPLE9BQU8sTUFBTSxXQUFXLENBQUE7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUErRmhFOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQXdCO0lBQ2hELE9BQU8sR0FBRyxFQUFFO1FBQ1YsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1lBQ3pCLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDdkQ7YUFBTTtZQUNMLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUMvQztJQUNILENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQTBCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDL0c7OzhNQUU4TTtBQUM5TSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUE7QUFFbEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUEwQixnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBRS9HOzs4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QWtDLENBQUE7SUFFdEMsU0FBUyxnQkFBZ0I7UUFDdkIsSUFBSSxVQUFVLElBQUksY0FBYyxFQUFFO1lBQ2hDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1NBQzdDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRyxJQUFJLENBQUE7WUFDakIsc0JBQXNCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzNDO1FBQ0QsSUFBSSxjQUFjO1lBQUUsT0FBTTtRQUMxQixjQUFjLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUE7SUFDN0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUVsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUE7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL2ludGVybmFsL09ic2VydmFibGUnXG5pbXBvcnQge1xuICBBdmF0YXJCYXNlLFxuICBBdmF0YXJFbW90ZUNvbW1hbmQsXG4gIEF2YXRhckVxdWlwcGVkRGF0YSxcbiAgRW50aXR5LFxuICBQbGF5ZXJJZGVudGl0eURhdGEsXG4gIFBvaW50ZXJFdmVudHNSZXN1bHQsXG4gIFJlYWxtSW5mbyxcbiAgVmVjdG9yM1R5cGUsXG4gIGVuZ2luZVxufSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IE1hbnlFbnRpdHlBY3Rpb24sIFNlbmRCYXRjaFJlc3BvbnNlLCBzdWJzY3JpYmUgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcbmltcG9ydCBwbGF5ZXJzIGZyb20gJy4vcGxheWVycydcbmltcG9ydCB7IGxvY2FsZUNoYW5nZWRFdmVudHMgfSBmcm9tICcuL2ludGVybmFsL2xhbmd1YWdlLWV2ZW50cydcblxuLy8vIC0tLSBFVkVOVFMgLS0tXG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBJRXZlbnROYW1lcyA9IGtleW9mIElFdmVudHNcblxuLyoqXG4gKiBAcHVibGljXG4gKiBOb3RlOiBEb24ndCB1c2UgYG9uYCBwcmVmaXggZm9yIElFdmVudHMgdG8gYXZvaWQgcmVkdW5kYW5jeSB3aXRoIGBldmVudC5vbihcIm9uRXZlbnROYW1lXCIpYCBzeW50YXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50cyB7XG4gIHBsYXllckV4cHJlc3Npb246IHtcbiAgICBleHByZXNzaW9uSWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBlbnRlcnMgdGhlIHNjZW5lXG4gICAqL1xuICBvbkVudGVyU2NlbmU6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBsZWF2ZXMgdGhlIHNjZW5lXG4gICAqL1xuICBvbkxlYXZlU2NlbmU6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgYWZ0ZXIgcmVjZWl2aW5nIGEgY29tbXMgbWVzc2FnZS5cbiAgICovXG4gIGNvbW1zOiB7XG4gICAgc2VuZGVyOiBzdHJpbmdcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgcGxheWVyIHN3aXRjaGVzIHRoZSBjbGllbnQgbGFuZ3VhZ2UuIGBsb2NhbGVgIGlzIGEgQkNQLTQ3IHRhZyAqL1xuICBsb2NhbGVDaGFuZ2VkOiB7XG4gICAgbG9jYWxlOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRyaWdnZXJlZCBvbmNlIHRoZSBzY2VuZSBzaG91bGQgc3RhcnQuXG4gICAqL1xuICBzY2VuZVN0YXJ0OiB1bmtub3duXG5cbiAgLyoqIFRoaXMgaXMgdHJpZ2dlcmVkIGF0IGxlYXN0IGZvciBlYWNoIHZpZGVvU3RhdHVzIGNoYW5nZSAqL1xuICB2aWRlb0V2ZW50OiB7XG4gICAgY29tcG9uZW50SWQ6IHN0cmluZ1xuICAgIHZpZGVvQ2xpcElkOiBzdHJpbmdcbiAgICAvKiogU3RhdHVzLCBjYW4gYmUgTk9ORSA9IDAsIEVSUk9SID0gMSwgTE9BRElORyA9IDIsIFJFQURZID0gMywgUExBWUlORyA9IDQsQlVGRkVSSU5HID0gNSAqL1xuICAgIHZpZGVvU3RhdHVzOiBudW1iZXJcbiAgICAvKiogQ3VycmVudCBvZmZzZXQgcG9zaXRpb24gaW4gc2Vjb25kcyAqL1xuICAgIGN1cnJlbnRPZmZzZXQ6IG51bWJlclxuICAgIC8qKiBWaWRlbyBsZW5ndGggaW4gc2Vjb25kcy4gQ2FuIGJlIC0xICovXG4gICAgdG90YWxWaWRlb0xlbmd0aDogbnVtYmVyXG4gIH1cblxuICAvKiogVGhpcyBpcyB0cmlnZ2VyIGV2ZXJ5dGltZSBhIHByb2ZpbGUgaXMgY2hhbmdlZCAqL1xuICBwcm9maWxlQ2hhbmdlZDoge1xuICAgIGV0aEFkZHJlc3M6IHN0cmluZ1xuICAgIHZlcnNpb246IG51bWJlclxuICB9XG5cbiAgLyoqIFRyaWdnZXJlZCB3aGVuIHBlZXIncyBhdmF0YXIgaXMgY29ubmVjdGVkIGFuZCB2aXNpYmxlICovXG4gIHBsYXllckNvbm5lY3RlZDoge1xuICAgIHVzZXJJZDogc3RyaW5nXG4gIH1cblxuICAvKiogVHJpZ2dlcmVkIHdoZW4gcGVlciBkaXNjb25uZWN0IGFuZC9vciBpdCBhdmF0YXIgaXMgc2V0IGludmlzaWJsZSBieSBjb21tcyAqL1xuICBwbGF5ZXJEaXNjb25uZWN0ZWQ6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqIFRyaWdnZXJlZCB3aGVuIGN1cnJlbnQgcmVhbG0gb3IgaXNsYW5kIGNoYW5nZXMgKi9cbiAgb25SZWFsbUNoYW5nZWQ6IHtcbiAgICBkb21haW46IHN0cmluZ1xuICAgIHJvb206IHN0cmluZ1xuICAgIHNlcnZlck5hbWU6IHN0cmluZ1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmdcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBvdGhlciBwbGF5ZXIncyBhdmF0YXIgaXMgY2xpY2tlZCAqL1xuICBwbGF5ZXJDbGlja2VkOiB7XG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICByYXk6IHtcbiAgICAgIG9yaWdpbjogVmVjdG9yM1R5cGVcbiAgICAgIGRpcmVjdGlvbjogVmVjdG9yM1R5cGVcbiAgICAgIGRpc3RhbmNlOiBudW1iZXJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIE9ic2VydmFibGVcbiAqIGNvbnN0cnVjdG9yIHRvIHN1YnNjcmliZSB0byB0aGUgZXZlbnRzIG9mIHRoZSBEZWNlbnRyYWxhbmRJbnRlcmZhY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlcihldmVudE5hbWU6IGtleW9mIElFdmVudHMpIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29tbXMnKSB7XG4gICAgICBzdWJzY3JpYmUoeyBldmVudElkOiBldmVudE5hbWUgfSkuY2F0Y2goY29uc29sZS5lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgU0RLN0NvbXBvbmVudHNPYnNlcnZhYmxlPy5zdWJzY3JpYmUoZXZlbnROYW1lKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZXNlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGFmdGVyIHlvdXIgY2hhcmFjdGVyIGVudGVycyB0aGUgc2NlbmUuXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25FbnRlclNjZW5lT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ29uRW50ZXJTY2VuZSddPihjcmVhdGVTdWJzY3JpYmVyKCdvbkVudGVyU2NlbmUnKSlcbi8qKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC4gVXNlIG9uRW50ZXJTY2VuZU9ic2VydmFibGUgaW5zdGVhZC4gKi9cbmV4cG9ydCBjb25zdCBvbkVudGVyU2NlbmUgPSBvbkVudGVyU2NlbmVPYnNlcnZhYmxlXG5cbi8qKlxuICogVGhlc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgYWZ0ZXIgeW91ciBjaGFyYWN0ZXIgbGVhdmVzIHRoZSBzY2VuZS5cbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snb25MZWF2ZVNjZW5lJ10+KGNyZWF0ZVN1YnNjcmliZXIoJ29uTGVhdmVTY2VuZScpKVxuXG4vKiogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuIFVzZSBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlIGluc3RlYWQuICovXG5leHBvcnQgY29uc3Qgb25MZWF2ZVNjZW5lID0gb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZVxuXG4vKipcbiAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGFmdGVyIGFsbCB0aGUgcmVzb3VyY2VzIG9mIHRoZSBzY2VuZSB3ZXJlIGxvYWRlZCAobW9kZWxzLCB0ZXh0dXJlcywgZXRjLi4uKVxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uU2NlbmVSZWFkeU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydzY2VuZVN0YXJ0J10+KGNyZWF0ZVN1YnNjcmliZXIoJ3NjZW5lU3RhcnQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckV4cHJlc3Npb24nXT4oXG4gIGNyZWF0ZVN1YnNjcmliZXIoJ3BsYXllckV4cHJlc3Npb24nKVxuKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblZpZGVvRXZlbnQgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWyd2aWRlb0V2ZW50J10+KGNyZWF0ZVN1YnNjcmliZXIoJ3ZpZGVvRXZlbnQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25Qcm9maWxlQ2hhbmdlZCA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3Byb2ZpbGVDaGFuZ2VkJ10+KGNyZWF0ZVN1YnNjcmliZXIoJ3Byb2ZpbGVDaGFuZ2VkJykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyQ29ubmVjdGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckNvbm5lY3RlZCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcigncGxheWVyQ29ubmVjdGVkJylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJEaXNjb25uZWN0ZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sncGxheWVyRGlzY29ubmVjdGVkJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJEaXNjb25uZWN0ZWQnKVxuKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblJlYWxtQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydvblJlYWxtQ2hhbmdlZCddPihjcmVhdGVTdWJzY3JpYmVyKCdvblJlYWxtQ2hhbmdlZCcpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBsYXllckNsaWNrZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sncGxheWVyQ2xpY2tlZCddPihjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJDbGlja2VkJykpXG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25Db21tc01lc3NhZ2UgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydjb21tcyddPihjcmVhdGVTdWJzY3JpYmVyKCdjb21tcycpKVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgdGhpcyBpcyBhbiBPTEQgQVBJLlxuICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBTREs2IHNlbmRCYXRjaCB0byBwb2xsIGV2ZW50cyBmcm9tIHRoZSByZW5kZXJlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9sbEV2ZW50cyhzZW5kQmF0Y2g6IChib2R5OiBNYW55RW50aXR5QWN0aW9uKSA9PiBQcm9taXNlPFNlbmRCYXRjaFJlc3BvbnNlPikge1xuICBjb25zdCB7IGV2ZW50cyB9ID0gYXdhaXQgc2VuZEJhdGNoKHsgYWN0aW9uczogW10gfSlcbiAgZm9yIChjb25zdCBlIG9mIGV2ZW50cykge1xuICAgIGlmIChlLmdlbmVyaWMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGUuZ2VuZXJpYy5ldmVudERhdGEpXG4gICAgICBzd2l0Y2ggKGUuZ2VuZXJpYy5ldmVudElkKSB7XG4gICAgICAgIGNhc2UgJ2NvbW1zJzoge1xuICAgICAgICAgIG9uQ29tbXNNZXNzYWdlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ2NvbW1zJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdsb2NhbGVDaGFuZ2VkJzoge1xuICAgICAgICAgIGxvY2FsZUNoYW5nZWRFdmVudHMubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1snbG9jYWxlQ2hhbmdlZCddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgU0RLN0NvbXBvbmVudHNPYnNlcnZhYmxlID0gcHJvY2Vzc09ic2VydmFibGVzKClcbmZ1bmN0aW9uIHByb2Nlc3NPYnNlcnZhYmxlcygpIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IG5ldyBTZXQ8a2V5b2YgSUV2ZW50cz4oKVxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShldmVudE5hbWU6IGtleW9mIElFdmVudHMpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9ucy5oYXMoZXZlbnROYW1lKSkgcmV0dXJuXG4gICAgc3dpdGNoIChldmVudE5hbWUpIHtcbiAgICAgIGNhc2UgJ3BsYXllckNsaWNrZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZVBsYXllckNsaWNrKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29uRW50ZXJTY2VuZSc6XG4gICAgICBjYXNlICdwbGF5ZXJDb25uZWN0ZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZUVudGVyU2NlbmUoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnb25MZWF2ZVNjZW5lJzpcbiAgICAgIGNhc2UgJ3BsYXllckRpc2Nvbm5lY3RlZCc6IHtcbiAgICAgICAgc3Vic2NyaWJlTGVhdmVTY2VuZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdvblJlYWxtQ2hhbmdlZCc6IHtcbiAgICAgICAgc3Vic2NyaWJlUmVhbG1DaGFuZ2UoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAncGxheWVyRXhwcmVzc2lvbic6IHtcbiAgICAgICAgc3Vic2NyaWJlUGxheWVyRXhwcmVzc2lvbigpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdwcm9maWxlQ2hhbmdlZCc6IHtcbiAgICAgICAgc3Vic2NyaWJlUHJvZmlsZUNoYW5nZSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHN1YnNjcmlwdGlvbnMuYWRkKGV2ZW50TmFtZSlcbiAgfVxuICAvKipcbiAgICogUExBWUVSIEVOVEVSL0NPTk5FQ1RFRCBvYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBzdWJzY3JpYmVFbnRlclNjZW5lKCkge1xuICAgIHBsYXllcnMub25FbnRlclNjZW5lKChwbGF5ZXIpID0+IHtcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmhhcygnb25FbnRlclNjZW5lJykpIHtcbiAgICAgICAgb25FbnRlclNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoeyB1c2VySWQ6IHBsYXllci51c2VySWQgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMuaGFzKCdwbGF5ZXJDb25uZWN0ZWQnKSkge1xuICAgICAgICBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgdXNlcklkOiBwbGF5ZXIudXNlcklkIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogUExBWUVSIExFQVZFL0RJU0NPTk5FQ1RFRCBvYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBzdWJzY3JpYmVMZWF2ZVNjZW5lKCkge1xuICAgIHBsYXllcnMub25MZWF2ZVNjZW5lKCh1c2VySWQpID0+IHtcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmhhcygnb25MZWF2ZVNjZW5lJykpIHtcbiAgICAgICAgb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoeyB1c2VySWQgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMuaGFzKCdwbGF5ZXJEaXNjb25uZWN0ZWQnKSkge1xuICAgICAgICBvblBsYXllckRpc2Nvbm5lY3RlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgdXNlcklkIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogUkVBTE0gQ0hBTkdFIG9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZVJlYWxtQ2hhbmdlKCkge1xuICAgIFJlYWxtSW5mby5vbkNoYW5nZShlbmdpbmUuUm9vdEVudGl0eSwgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7XG4gICAgICAgICAgZG9tYWluOiB2YWx1ZS5iYXNlVXJsLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiB2YWx1ZS5yZWFsbU5hbWUsXG4gICAgICAgICAgcm9vbTogdmFsdWUucm9vbSA/PyAnJyxcbiAgICAgICAgICBzZXJ2ZXJOYW1lOiB2YWx1ZS5yZWFsbU5hbWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIC8qKlxuICAgKiBQTEFZRVIvQVZBVEFSIENMSUNLRUQgb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlUGxheWVyQ2xpY2soKSB7XG4gICAgY29uc3QgcGxheWVyRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKVxuICAgIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcklkZW50aXR5RGF0YSkpIHtcbiAgICAgICAgaWYgKHBsYXllckVudGl0aWVzLmhhcyhlbnRpdHkpKSBjb250aW51ZVxuICAgICAgICBwbGF5ZXJFbnRpdGllcy5hZGQoZW50aXR5KVxuXG4gICAgICAgIFBvaW50ZXJFdmVudHNSZXN1bHQub25DaGFuZ2UoZW50aXR5LCAoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhPy5oaXQpIHtcbiAgICAgICAgICAgIG9uUGxheWVyQ2xpY2tlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHtcbiAgICAgICAgICAgICAgdXNlcklkOiBQbGF5ZXJJZGVudGl0eURhdGEuZ2V0T3JOdWxsKGVudGl0eSk/LmFkZHJlc3MgPz8gJycsXG4gICAgICAgICAgICAgIHJheToge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZGF0YS5oaXQuZGlyZWN0aW9uISxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGF0YS5oaXQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG9yaWdpbjogZGF0YS5oaXQuZ2xvYmFsT3JpZ2luIVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBsYXllciBleHByZXNzaW9uIG9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZVBsYXllckV4cHJlc3Npb24oKSB7XG4gICAgQXZhdGFyRW1vdGVDb21tYW5kLm9uQ2hhbmdlKGVuZ2luZS5QbGF5ZXJFbnRpdHksICh2YWx1ZSkgPT4ge1xuICAgICAgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoeyBleHByZXNzaW9uSWQ6IHZhbHVlPy5lbW90ZVVybiA/PyAnJyB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUFJPRklMRSBDSEFOR0Ugb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlUHJvZmlsZUNoYW5nZSgpIHtcbiAgICBBdmF0YXJCYXNlLm9uQ2hhbmdlKGVuZ2luZS5QbGF5ZXJFbnRpdHksICgpID0+IHtcbiAgICAgIGlmICghcHJvZmlsZUFkZHJlc3MpIHJldHVyblxuICAgICAgb25Qcm9maWxlQ2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMoeyBldGhBZGRyZXNzOiBwcm9maWxlQWRkcmVzcywgdmVyc2lvbjogMCB9KVxuICAgIH0pXG5cbiAgICBBdmF0YXJFcXVpcHBlZERhdGEub25DaGFuZ2UoZW5naW5lLlBsYXllckVudGl0eSwgKCkgPT4ge1xuICAgICAgaWYgKCFwcm9maWxlQWRkcmVzcykgcmV0dXJuXG4gICAgICBvblByb2ZpbGVDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyh7IGV0aEFkZHJlc3M6IHByb2ZpbGVBZGRyZXNzLCB2ZXJzaW9uOiAwIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8vIEZsYWcgdG8gY2FsbCBvbmNlIHRoZSBzY2VuZSBpcyBpbml0YWxpemVkLlxuICBsZXQgc2NlbmVSZWFkeSA9IGZhbHNlXG4gIGxldCBwcm9maWxlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZVN5c3RlbSgpIHtcbiAgICBpZiAoc2NlbmVSZWFkeSAmJiBwcm9maWxlQWRkcmVzcykge1xuICAgICAgcmV0dXJuIGVuZ2luZS5yZW1vdmVTeXN0ZW0ob2JzZXJ2YWJsZVN5c3RlbSlcbiAgICB9XG4gICAgaWYgKCFzY2VuZVJlYWR5KSB7XG4gICAgICBzY2VuZVJlYWR5ID0gdHJ1ZVxuICAgICAgb25TY2VuZVJlYWR5T2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe30pXG4gICAgfVxuICAgIGlmIChwcm9maWxlQWRkcmVzcykgcmV0dXJuXG4gICAgcHJvZmlsZUFkZHJlc3MgPSBQbGF5ZXJJZGVudGl0eURhdGEuZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpPy5hZGRyZXNzXG4gIH1cblxuICBlbmdpbmUuYWRkU3lzdGVtKG9ic2VydmFibGVTeXN0ZW0pXG5cbiAgcmV0dXJuIHsgc3Vic2NyaWJlIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@dcl/sdk",
3
3
  "description": "",
4
- "version": "7.29.1-35901015152.commit-d1b7b96",
4
+ "version": "7.29.1-36041177279.commit-502e633",
5
5
  "author": "Decentraland",
6
6
  "dependencies": {
7
- "@dcl/ecs": "7.29.1-35901015152.commit-d1b7b96",
7
+ "@dcl/ecs": "7.29.1-36041177279.commit-502e633",
8
8
  "@dcl/ecs-math": "2.1.0",
9
- "@dcl/js-runtime": "7.29.1-35901015152.commit-d1b7b96",
10
- "@dcl/react-ecs": "7.29.1-35901015152.commit-d1b7b96",
11
- "@dcl/sdk-commands": "7.29.1-35901015152.commit-d1b7b96"
9
+ "@dcl/js-runtime": "7.29.1-36041177279.commit-502e633",
10
+ "@dcl/react-ecs": "7.29.1-36041177279.commit-502e633",
11
+ "@dcl/sdk-commands": "7.29.1-36041177279.commit-502e633"
12
12
  },
13
13
  "keywords": [],
14
14
  "license": "Apache-2.0",
@@ -33,5 +33,5 @@
33
33
  },
34
34
  "types": "./index.d.ts",
35
35
  "typings": "./index.d.ts",
36
- "commit": "d1b7b964cd184465c1b65118e47b5dc6be68a184"
36
+ "commit": "502e633b9f3f81eb8e0924783e0b5a7a62a4c087"
37
37
  }
@@ -1,5 +1,21 @@
1
+ import { Observable } from '../internal/Observable';
1
2
  export type Platform = 'mobile' | 'desktop' | 'web';
3
+ /**
4
+ * Triggered when the player switches the client language mid-session.
5
+ * Older clients never emit it.
6
+ * @public
7
+ */
8
+ export declare const onPlayerLanguageChanged: Observable<{
9
+ language: string;
10
+ }>;
2
11
  export declare function getPlatform(): Platform | null;
3
12
  export declare function isMobile(): boolean;
4
13
  export declare function isDesktop(): boolean;
5
14
  export declare function isWeb(): boolean;
15
+ /**
16
+ * Player's client language as a BCP-47 tag (e.g. `'es'`, `'pt-BR'`).
17
+ * Returns `'en'` until the explorer responds, and on clients that don't report a locale.
18
+ * Use `onPlayerLanguageChanged` to react to mid-session changes.
19
+ * @public
20
+ */
21
+ export declare function getPlayerLanguage(): string;
package/platform/index.js CHANGED
@@ -1,8 +1,40 @@
1
1
  import { getExplorerInformation } from '~system/Runtime';
2
+ import { subscribe } from '~system/EngineApi';
3
+ import { Observable } from '../internal/Observable';
4
+ import { localeChangedEvents } from '../internal/language-events';
2
5
  const VALID_PLATFORMS = new Set(['mobile', 'desktop', 'web']);
6
+ const DEFAULT_LANGUAGE = 'en';
7
+ const BCP47_TAG = /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$/;
3
8
  let platform = null;
9
+ let language = DEFAULT_LANGUAGE;
10
+ let languageSetByEvent = false;
11
+ /**
12
+ * Triggered when the player switches the client language mid-session.
13
+ * Older clients never emit it.
14
+ * @public
15
+ */
16
+ export const onPlayerLanguageChanged = new Observable();
17
+ function normalizeLocale(locale) {
18
+ const tag = (locale ?? '').trim().replace(/_/g, '-');
19
+ return BCP47_TAG.test(tag) ? tag : DEFAULT_LANGUAGE;
20
+ }
21
+ function setLanguage(next) {
22
+ if (next === language)
23
+ return;
24
+ language = next;
25
+ onPlayerLanguageChanged.notifyObservers({ language });
26
+ }
27
+ localeChangedEvents.add((event) => {
28
+ languageSetByEvent = true;
29
+ setLanguage(normalizeLocale(event.locale));
30
+ });
31
+ subscribe({ eventId: 'localeChanged' }).catch(console.error);
4
32
  void getExplorerInformation({})
5
33
  .then((response) => {
34
+ // a mid-session change that arrived first is more recent than this response
35
+ if (!languageSetByEvent) {
36
+ setLanguage(normalizeLocale(response.configurations?.['locale']));
37
+ }
6
38
  const normalized = response.platform.toLowerCase();
7
39
  if (VALID_PLATFORMS.has(normalized)) {
8
40
  platform = normalized;
@@ -26,4 +58,13 @@ export function isDesktop() {
26
58
  export function isWeb() {
27
59
  return getPlatform() === 'web';
28
60
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxhdGZvcm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFJeEQsTUFBTSxlQUFlLEdBQWdCLElBQUksR0FBRyxDQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBRWxGLElBQUksUUFBUSxHQUFvQixJQUFJLENBQUE7QUFDcEMsS0FBSyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7S0FDNUIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDakIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNsRCxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDbkMsUUFBUSxHQUFHLFVBQXNCLENBQUE7S0FDbEM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFBO0tBQ2hFO0FBQ0gsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQzdELENBQUMsQ0FBQyxDQUFBO0FBRUosTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRO0lBQ3RCLE9BQU8sV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFBO0FBQ25DLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQTtBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUs7SUFDbkIsT0FBTyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUE7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEV4cGxvcmVySW5mb3JtYXRpb24gfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnXG5cbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ21vYmlsZScgfCAnZGVza3RvcCcgfCAnd2ViJ1xuXG5jb25zdCBWQUxJRF9QTEFURk9STVM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KFsnbW9iaWxlJywgJ2Rlc2t0b3AnLCAnd2ViJ10pXG5cbmxldCBwbGF0Zm9ybTogUGxhdGZvcm0gfCBudWxsID0gbnVsbFxudm9pZCBnZXRFeHBsb3JlckluZm9ybWF0aW9uKHt9KVxuICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gcmVzcG9uc2UucGxhdGZvcm0udG9Mb3dlckNhc2UoKVxuICAgIGlmIChWQUxJRF9QTEFURk9STVMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICBwbGF0Zm9ybSA9IG5vcm1hbGl6ZWQgYXMgUGxhdGZvcm1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBwbGF0Zm9ybSB2YWx1ZTogXCIke3Jlc3BvbnNlLnBsYXRmb3JtfVwiYClcbiAgICB9XG4gIH0pXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGV4cGxvcmVyIGluZm9ybWF0aW9uOicsIGVycm9yKVxuICB9KVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxhdGZvcm0oKTogUGxhdGZvcm0gfCBudWxsIHtcbiAgcmV0dXJuIHBsYXRmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFBsYXRmb3JtKCkgPT09ICdtb2JpbGUnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRQbGF0Zm9ybSgpID09PSAnZGVza3RvcCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0UGxhdGZvcm0oKSA9PT0gJ3dlYidcbn1cbiJdfQ==
61
+ /**
62
+ * Player's client language as a BCP-47 tag (e.g. `'es'`, `'pt-BR'`).
63
+ * Returns `'en'` until the explorer responds, and on clients that don't report a locale.
64
+ * Use `onPlayerLanguageChanged` to react to mid-session changes.
65
+ * @public
66
+ */
67
+ export function getPlayerLanguage() {
68
+ return language;
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxhdGZvcm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUlqRSxNQUFNLGVBQWUsR0FBZ0IsSUFBSSxHQUFHLENBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFbEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7QUFDN0IsTUFBTSxTQUFTLEdBQUcscUNBQXFDLENBQUE7QUFFdkQsSUFBSSxRQUFRLEdBQW9CLElBQUksQ0FBQTtBQUNwQyxJQUFJLFFBQVEsR0FBVyxnQkFBZ0IsQ0FBQTtBQUN2QyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtBQUU5Qjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxVQUFVLEVBQXdCLENBQUE7QUFFN0UsU0FBUyxlQUFlLENBQUMsTUFBMEI7SUFDakQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNwRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUE7QUFDckQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQVk7SUFDL0IsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU07SUFDN0IsUUFBUSxHQUFHLElBQUksQ0FBQTtJQUNmLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDdkQsQ0FBQztBQUVELG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ2hDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtJQUN6QixXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQzVDLENBQUMsQ0FBQyxDQUFBO0FBQ0YsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUU1RCxLQUFLLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztLQUM1QixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtJQUNqQiw0RUFBNEU7SUFDNUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBQ3ZCLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNsRTtJQUNELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDbEQsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ25DLFFBQVEsR0FBRyxVQUFzQixDQUFBO0tBQ2xDO1NBQU07UUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQTtLQUNoRTtBQUNILENBQUMsQ0FBQztLQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUM3RCxDQUFDLENBQUMsQ0FBQTtBQUVKLE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUTtJQUN0QixPQUFPLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVM7SUFDdkIsT0FBTyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUE7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLO0lBQ25CLE9BQU8sV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFBO0FBQ2hDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEV4cGxvcmVySW5mb3JtYXRpb24gfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnXG5pbXBvcnQgeyBzdWJzY3JpYmUgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9pbnRlcm5hbC9PYnNlcnZhYmxlJ1xuaW1wb3J0IHsgbG9jYWxlQ2hhbmdlZEV2ZW50cyB9IGZyb20gJy4uL2ludGVybmFsL2xhbmd1YWdlLWV2ZW50cydcblxuZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSAnbW9iaWxlJyB8ICdkZXNrdG9wJyB8ICd3ZWInXG5cbmNvbnN0IFZBTElEX1BMQVRGT1JNUzogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oWydtb2JpbGUnLCAnZGVza3RvcCcsICd3ZWInXSlcblxuY29uc3QgREVGQVVMVF9MQU5HVUFHRSA9ICdlbidcbmNvbnN0IEJDUDQ3X1RBRyA9IC9eW2EtekEtWl17MiwzfSgtW2EtekEtWjAtOV17Miw4fSkqJC9cblxubGV0IHBsYXRmb3JtOiBQbGF0Zm9ybSB8IG51bGwgPSBudWxsXG5sZXQgbGFuZ3VhZ2U6IHN0cmluZyA9IERFRkFVTFRfTEFOR1VBR0VcbmxldCBsYW5ndWFnZVNldEJ5RXZlbnQgPSBmYWxzZVxuXG4vKipcbiAqIFRyaWdnZXJlZCB3aGVuIHRoZSBwbGF5ZXIgc3dpdGNoZXMgdGhlIGNsaWVudCBsYW5ndWFnZSBtaWQtc2Vzc2lvbi5cbiAqIE9sZGVyIGNsaWVudHMgbmV2ZXIgZW1pdCBpdC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyTGFuZ3VhZ2VDaGFuZ2VkID0gbmV3IE9ic2VydmFibGU8eyBsYW5ndWFnZTogc3RyaW5nIH0+KClcblxuZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGxvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgdGFnID0gKGxvY2FsZSA/PyAnJykudHJpbSgpLnJlcGxhY2UoL18vZywgJy0nKVxuICByZXR1cm4gQkNQNDdfVEFHLnRlc3QodGFnKSA/IHRhZyA6IERFRkFVTFRfTEFOR1VBR0Vcbn1cblxuZnVuY3Rpb24gc2V0TGFuZ3VhZ2UobmV4dDogc3RyaW5nKSB7XG4gIGlmIChuZXh0ID09PSBsYW5ndWFnZSkgcmV0dXJuXG4gIGxhbmd1YWdlID0gbmV4dFxuICBvblBsYXllckxhbmd1YWdlQ2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMoeyBsYW5ndWFnZSB9KVxufVxuXG5sb2NhbGVDaGFuZ2VkRXZlbnRzLmFkZCgoZXZlbnQpID0+IHtcbiAgbGFuZ3VhZ2VTZXRCeUV2ZW50ID0gdHJ1ZVxuICBzZXRMYW5ndWFnZShub3JtYWxpemVMb2NhbGUoZXZlbnQubG9jYWxlKSlcbn0pXG5zdWJzY3JpYmUoeyBldmVudElkOiAnbG9jYWxlQ2hhbmdlZCcgfSkuY2F0Y2goY29uc29sZS5lcnJvcilcblxudm9pZCBnZXRFeHBsb3JlckluZm9ybWF0aW9uKHt9KVxuICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAvLyBhIG1pZC1zZXNzaW9uIGNoYW5nZSB0aGF0IGFycml2ZWQgZmlyc3QgaXMgbW9yZSByZWNlbnQgdGhhbiB0aGlzIHJlc3BvbnNlXG4gICAgaWYgKCFsYW5ndWFnZVNldEJ5RXZlbnQpIHtcbiAgICAgIHNldExhbmd1YWdlKG5vcm1hbGl6ZUxvY2FsZShyZXNwb25zZS5jb25maWd1cmF0aW9ucz8uWydsb2NhbGUnXSkpXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSByZXNwb25zZS5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKFZBTElEX1BMQVRGT1JNUy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgIHBsYXRmb3JtID0gbm9ybWFsaXplZCBhcyBQbGF0Zm9ybVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIHBsYXRmb3JtIHZhbHVlOiBcIiR7cmVzcG9uc2UucGxhdGZvcm19XCJgKVxuICAgIH1cbiAgfSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgZXhwbG9yZXIgaW5mb3JtYXRpb246JywgZXJyb3IpXG4gIH0pXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybSgpOiBQbGF0Zm9ybSB8IG51bGwge1xuICByZXR1cm4gcGxhdGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0UGxhdGZvcm0oKSA9PT0gJ21vYmlsZSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVza3RvcCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFBsYXRmb3JtKCkgPT09ICdkZXNrdG9wJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWIoKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRQbGF0Zm9ybSgpID09PSAnd2ViJ1xufVxuXG4vKipcbiAqIFBsYXllcidzIGNsaWVudCBsYW5ndWFnZSBhcyBhIEJDUC00NyB0YWcgKGUuZy4gYCdlcydgLCBgJ3B0LUJSJ2ApLlxuICogUmV0dXJucyBgJ2VuJ2AgdW50aWwgdGhlIGV4cGxvcmVyIHJlc3BvbmRzLCBhbmQgb24gY2xpZW50cyB0aGF0IGRvbid0IHJlcG9ydCBhIGxvY2FsZS5cbiAqIFVzZSBgb25QbGF5ZXJMYW5ndWFnZUNoYW5nZWRgIHRvIHJlYWN0IHRvIG1pZC1zZXNzaW9uIGNoYW5nZXMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF5ZXJMYW5ndWFnZSgpOiBzdHJpbmcge1xuICByZXR1cm4gbGFuZ3VhZ2Vcbn1cbiJdfQ==
@@ -11,7 +11,6 @@ type GetPlayerDataRes = {
11
11
  avatar?: PBAvatarBase;
12
12
  wearables: PBAvatarEquippedData['wearableUrns'];
13
13
  emotes: PBAvatarEquippedData['emoteUrns'];
14
- forceRender: PBAvatarEquippedData['forceRender'];
15
14
  position: TransformType['position'] | undefined;
16
15
  };
17
16
  export declare function definePlayerHelper(engine: IEngine): {
package/players/index.js CHANGED
@@ -64,9 +64,11 @@ export function definePlayerHelper(engine) {
64
64
  isGuest: !!playerData?.isGuest,
65
65
  userId: playerData?.address ?? '',
66
66
  avatar: avatarData ?? undefined,
67
- wearables: wearablesData?.wearableUrns ?? [],
68
- emotes: wearablesData?.emoteUrns ?? [],
69
- forceRender: wearablesData?.forceRender ?? [],
67
+ // Component reads come back deeply readonly, so these are copied rather than
68
+ // aliased: the public Player type promises plain mutable arrays, and handing
69
+ // out the component's own frozen array would throw on any caller that writes.
70
+ wearables: [...(wearablesData?.wearableUrns ?? [])],
71
+ emotes: [...(wearablesData?.emoteUrns ?? [])],
70
72
  position: Transform.getOrNull(userEntity)?.position
71
73
  };
72
74
  }
@@ -76,4 +78,4 @@ const players = definePlayerHelper(engine);
76
78
  const { getPlayer, onEnterScene, onLeaveScene } = players;
77
79
  export { getPlayer, onEnterScene, onLeaveScene };
78
80
  export default players;
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxheWVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqRSxPQUFPLEVBQ0wsa0JBQWtCLElBQUksdUJBQXVCLEVBQzdDLFVBQVUsSUFBSSxnQkFBZ0IsRUFDOUIsa0JBQWtCLElBQUksd0JBQXdCLEVBRzlDLFNBQVMsSUFBSSxlQUFlLEVBQzdCLE1BQU0sMEJBQTBCLENBQUE7QUFpQmpDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFlO0lBQ2hELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QyxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFELE1BQU0sa0JBQWtCLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0QsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUE7SUFFaEQsTUFBTSxjQUFjLEdBQTJDLEVBQUUsQ0FBQTtJQUNqRSxNQUFNLGNBQWMsR0FBaUMsRUFBRSxDQUFBO0lBRXZELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ2xGLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsSUFBSTtZQUFFLE9BQU07UUFFbEQsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sRUFBRTtZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFB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TyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQzFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQTtBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQTtBQUNoRCxlQUFlLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgSUVuZ2luZSwgVHJhbnNmb3JtVHlwZSwgZW5naW5lIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQge1xuICBQbGF5ZXJJZGVudGl0eURhdGEgYXMgZGVmaW5lUGxheWVySWRlbml0eURhdGEsXG4gIEF2YXRhckJhc2UgYXMgZGVmaW5lQXZhdGFyQmFzZSxcbiAgQXZhdGFyRXF1aXBwZWREYXRhIGFzIGRlZmluZUF2YXRhckVxdWlwcGVkRGF0YSxcbiAgUEJBdmF0YXJCYXNlLFxuICBQQkF2YXRhckVxdWlwcGVkRGF0YSxcbiAgVHJhbnNmb3JtIGFzIGRlZmluZVRyYW5zZm9ybVxufSBmcm9tICdAZGNsL2Vjcy9kaXN0L2NvbXBvbmVudHMnXG5cbnR5cGUgR2V0UGxheWVyRGF0YVJlcSA9IHtcbiAgdXNlcklkOiBzdHJpbmdcbn1cbnR5cGUgR2V0UGxheWVyRGF0YVJlcyA9IHtcbiAgZW50aXR5OiBFbnRpdHlcbiAgbmFtZTogc3RyaW5nXG4gIGlzR3Vlc3Q6IGJvb2xlYW5cbiAgdXNlcklkOiBzdHJpbmdcbiAgYXZhdGFyPzogUEJBdmF0YXJCYXNlXG4gIHdlYXJhYmxlczogUEJBdmF0YXJFcXVpcHBlZERhdGFbJ3dlYXJhYmxlVXJucyddXG4gIGVtb3RlczogUEJBdmF0YXJFcXVpcHBlZERhdGFbJ2Vtb3RlVXJucyddXG4gIGZvcmNlUmVuZGVyOiBQQkF2YXRhckVxdWlwcGVkRGF0YVsnZm9yY2VSZW5kZXInXVxuICBwb3NpdGlvbjogVHJhbnNmb3JtVHlwZVsncG9zaXRpb24nXSB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUGxheWVySGVscGVyKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBUcmFuc2Zvcm0gPSBkZWZpbmVUcmFuc2Zvcm0oZW5naW5lKVxuICBjb25zdCBQbGF5ZXJJZGVudGl0eURhdGEgPSBkZWZpbmVQbGF5ZXJJZGVuaXR5RGF0YShlbmdpbmUpXG4gIGNvbnN0IEF2YXRhckVxdWlwcGVkRGF0YSA9IGRlZmluZUF2YXRhckVxdWlwcGVkRGF0YShlbmdpbmUpXG4gIGNvbnN0IEF2YXRhckJhc2UgPSBkZWZpbmVBdmF0YXJCYXNlKGVuZ2luZSlcbiAgY29uc3QgcGxheWVyRW50aXRpZXMgPSBuZXcgTWFwPEVudGl0eSwgc3RyaW5nPigpXG5cbiAgY29uc3Qgb25FbnRlclNjZW5lQ2I6ICgocGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzKSA9PiB2b2lkKVtdID0gW11cbiAgY29uc3Qgb25MZWF2ZVNjZW5lQ2I6ICgodXNlcklkOiBzdHJpbmcpID0+IHZvaWQpW10gPSBbXVxuXG4gIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgIGNvbnN0IHBsYXllcnMgPSBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoUGxheWVySWRlbnRpdHlEYXRhLCBBdmF0YXJCYXNlKSlcbiAgICBpZiAocGxheWVycy5sZW5ndGggPT09IHBsYXllckVudGl0aWVzLnNpemUpIHJldHVyblxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBpZGVudGl0eV0gb2YgcGxheWVycykge1xuICAgICAgaWYgKCFwbGF5ZXJFbnRpdGllcy5oYXMoZW50aXR5KSkge1xuICAgICAgICBwbGF5ZXJFbnRpdGllcy5zZXQoZW50aXR5LCBpZGVudGl0eS5hZGRyZXNzKVxuXG4gICAgICAgIC8vIENhbGwgb25FbnRlciBjYWxsYmFja1xuICAgICAgICBpZiAob25FbnRlclNjZW5lQ2IubGVuZ3RoKSB7XG4gICAgICAgICAgb25FbnRlclNjZW5lQ2IuZm9yRWFjaCgoY2IpID0+IGNiKGdldFBsYXllcih7IHVzZXJJZDogaWRlbnRpdHkuYWRkcmVzcyB9KSEpKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMvcmVtb3ZlIGNhbGxiYWNrc1xuICAgICAgICBBdmF0YXJCYXNlLm9uQ2hhbmdlKGVudGl0eSwgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWx1ZSAmJiBwbGF5ZXJFbnRpdGllcy5nZXQoZW50aXR5KSkge1xuICAgICAgICAgICAgb25MZWF2ZVNjZW5lQ2IuZm9yRWFjaCgoY2IpID0+IGNiKHBsYXllckVudGl0aWVzLmdldChlbnRpdHkpISkpXG4gICAgICAgICAgICBwbGF5ZXJFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBvbkVudGVyU2NlbmUoY2I6IChwbGF5ZXI6IEdldFBsYXllckRhdGFSZXMpID0+IHZvaWQpIHtcbiAgICAgIG9uRW50ZXJTY2VuZUNiLnB1c2goY2IpXG4gICAgfSxcbiAgICBvbkxlYXZlU2NlbmUoY2I6ICh1c2VySWQ6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgb25MZWF2ZVNjZW5lQ2IucHVzaChjYilcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGluZm8gb2YgdGhlIHBsYXllciBpZiBpdCdzIGluIHRoZSBzY2VuZS5cbiAgICAgKi9cbiAgICBnZXRQbGF5ZXIodXNlcj86IEdldFBsYXllckRhdGFSZXEpOiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCB7XG4gICAgICBmdW5jdGlvbiBnZXRFbnRpdHkoKSB7XG4gICAgICAgIGlmICghdXNlcj8udXNlcklkKSByZXR1cm4gZW5naW5lLlBsYXllckVudGl0eVxuICAgICAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGRhdGFdIG9mIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoUGxheWVySWRlbnRpdHlEYXRhKSkge1xuICAgICAgICAgIGlmIChkYXRhLmFkZHJlc3MgPT09IHVzZXIudXNlcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50aXR5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlckVudGl0eSA9IGdldEVudGl0eSgpXG4gICAgICBpZiAoIXVzZXJFbnRpdHkpIHJldHVybiBudWxsXG5cbiAgICAgIGNvbnN0IHBsYXllckRhdGEgPSBQbGF5ZXJJZGVudGl0eURhdGEuZ2V0T3JOdWxsKHVzZXJFbnRpdHkpXG4gICAgICBjb25zdCBhdmF0YXJEYXRhID0gQXZhdGFyQmFzZS5nZXRPck51bGwodXNlckVudGl0eSlcbiAgICAgIGNvbnN0IHdlYXJhYmxlc0RhdGEgPSBBdmF0YXJFcXVpcHBlZERhdGEuZ2V0T3JOdWxsKHVzZXJFbnRpdHkpXG5cbiAgICAgIGlmICghcGxheWVyRGF0YSAmJiAhYXZhdGFyRGF0YSAmJiAhd2VhcmFibGVzRGF0YSkgcmV0dXJuIG51bGxcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5OiB1c2VyRW50aXR5LFxuICAgICAgICBuYW1lOiBhdmF0YXJEYXRhPy5uYW1lID8/ICcnLFxuICAgICAgICBpc0d1ZXN0OiAhIXBsYXllckRhdGE/LmlzR3Vlc3QsXG4gICAgICAgIHVzZXJJZDogcGxheWVyRGF0YT8uYWRkcmVzcyA/PyAnJyxcbiAgICAgICAgYXZhdGFyOiBhdmF0YXJEYXRhID8/IHVuZGVmaW5lZCxcbiAgICAgICAgd2VhcmFibGVzOiB3ZWFyYWJsZXNEYXRhPy53ZWFyYWJsZVVybnMgPz8gW10sXG4gICAgICAgIGVtb3Rlczogd2VhcmFibGVzRGF0YT8uZW1vdGVVcm5zID8/IFtdLFxuICAgICAgICBmb3JjZVJlbmRlcjogd2VhcmFibGVzRGF0YT8uZm9yY2VSZW5kZXIgPz8gW10sXG4gICAgICAgIHBvc2l0aW9uOiBUcmFuc2Zvcm0uZ2V0T3JOdWxsKHVzZXJFbnRpdHkpPy5wb3NpdGlvblxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwbGF5ZXJzID0gZGVmaW5lUGxheWVySGVscGVyKGVuZ2luZSlcbmNvbnN0IHsgZ2V0UGxheWVyLCBvbkVudGVyU2NlbmUsIG9uTGVhdmVTY2VuZSB9ID0gcGxheWVyc1xuXG5leHBvcnQgeyBnZXRQbGF5ZXIsIG9uRW50ZXJTY2VuZSwgb25MZWF2ZVNjZW5lIH1cbmV4cG9ydCBkZWZhdWx0IHBsYXllcnNcbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxheWVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqRSxPQUFPLEVBQ0wsa0JBQWtCLElBQUksdUJBQXVCLEVBQzdDLFVBQVUsSUFBSSxnQkFBZ0IsRUFDOUIsa0JBQWtCLElBQUksd0JBQXdCLEVBRzlDLFNBQVMsSUFBSSxlQUFlLEVBQzdCLE1BQU0sMEJBQTBCLENBQUE7QUFnQmpDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFlO0lBQ2hELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6QyxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFELE1BQU0sa0JBQWtCLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0QsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUE7SUFFaEQsTUFBTSxjQUFjLEdBQTJDLEVBQUUsQ0FBQTtJQUNqRSxNQUFNLGNBQWMsR0FBaUMsRUFBRSxDQUFBO0lBRXZELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ2xGLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsSUFBSTtZQUFFLE9BQU07UUFFbEQsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sRUFBRTtZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFB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RCxDQUFBO1FBQ0gsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDMUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFBO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFBO0FBQ2hELGVBQWUsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5LCBJRW5naW5lLCBUcmFuc2Zvcm1UeXBlLCBlbmdpbmUgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7XG4gIFBsYXllcklkZW50aXR5RGF0YSBhcyBkZWZpbmVQbGF5ZXJJZGVuaXR5RGF0YSxcbiAgQXZhdGFyQmFzZSBhcyBkZWZpbmVBdmF0YXJCYXNlLFxuICBBdmF0YXJFcXVpcHBlZERhdGEgYXMgZGVmaW5lQXZhdGFyRXF1aXBwZWREYXRhLFxuICBQQkF2YXRhckJhc2UsXG4gIFBCQXZhdGFyRXF1aXBwZWREYXRhLFxuICBUcmFuc2Zvcm0gYXMgZGVmaW5lVHJhbnNmb3JtXG59IGZyb20gJ0BkY2wvZWNzL2Rpc3QvY29tcG9uZW50cydcblxudHlwZSBHZXRQbGF5ZXJEYXRhUmVxID0ge1xuICB1c2VySWQ6IHN0cmluZ1xufVxudHlwZSBHZXRQbGF5ZXJEYXRhUmVzID0ge1xuICBlbnRpdHk6IEVudGl0eVxuICBuYW1lOiBzdHJpbmdcbiAgaXNHdWVzdDogYm9vbGVhblxuICB1c2VySWQ6IHN0cmluZ1xuICBhdmF0YXI/OiBQQkF2YXRhckJhc2VcbiAgd2VhcmFibGVzOiBQQkF2YXRhckVxdWlwcGVkRGF0YVsnd2VhcmFibGVVcm5zJ11cbiAgZW1vdGVzOiBQQkF2YXRhckVxdWlwcGVkRGF0YVsnZW1vdGVVcm5zJ11cbiAgcG9zaXRpb246IFRyYW5zZm9ybVR5cGVbJ3Bvc2l0aW9uJ10gfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVBsYXllckhlbHBlcihlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgVHJhbnNmb3JtID0gZGVmaW5lVHJhbnNmb3JtKGVuZ2luZSlcbiAgY29uc3QgUGxheWVySWRlbnRpdHlEYXRhID0gZGVmaW5lUGxheWVySWRlbml0eURhdGEoZW5naW5lKVxuICBjb25zdCBBdmF0YXJFcXVpcHBlZERhdGEgPSBkZWZpbmVBdmF0YXJFcXVpcHBlZERhdGEoZW5naW5lKVxuICBjb25zdCBBdmF0YXJCYXNlID0gZGVmaW5lQXZhdGFyQmFzZShlbmdpbmUpXG4gIGNvbnN0IHBsYXllckVudGl0aWVzID0gbmV3IE1hcDxFbnRpdHksIHN0cmluZz4oKVxuXG4gIGNvbnN0IG9uRW50ZXJTY2VuZUNiOiAoKHBsYXllcjogR2V0UGxheWVyRGF0YVJlcykgPT4gdm9pZClbXSA9IFtdXG4gIGNvbnN0IG9uTGVhdmVTY2VuZUNiOiAoKHVzZXJJZDogc3RyaW5nKSA9PiB2b2lkKVtdID0gW11cblxuICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICBjb25zdCBwbGF5ZXJzID0gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcklkZW50aXR5RGF0YSwgQXZhdGFyQmFzZSkpXG4gICAgaWYgKHBsYXllcnMubGVuZ3RoID09PSBwbGF5ZXJFbnRpdGllcy5zaXplKSByZXR1cm5cblxuICAgIGZvciAoY29uc3QgW2VudGl0eSwgaWRlbnRpdHldIG9mIHBsYXllcnMpIHtcbiAgICAgIGlmICghcGxheWVyRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgcGxheWVyRW50aXRpZXMuc2V0KGVudGl0eSwgaWRlbnRpdHkuYWRkcmVzcylcblxuICAgICAgICAvLyBDYWxsIG9uRW50ZXIgY2FsbGJhY2tcbiAgICAgICAgaWYgKG9uRW50ZXJTY2VuZUNiLmxlbmd0aCkge1xuICAgICAgICAgIG9uRW50ZXJTY2VuZUNiLmZvckVhY2goKGNiKSA9PiBjYihnZXRQbGF5ZXIoeyB1c2VySWQ6IGlkZW50aXR5LmFkZHJlc3MgfSkhKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzL3JlbW92ZSBjYWxsYmFja3NcbiAgICAgICAgQXZhdGFyQmFzZS5vbkNoYW5nZShlbnRpdHksICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghdmFsdWUgJiYgcGxheWVyRW50aXRpZXMuZ2V0KGVudGl0eSkpIHtcbiAgICAgICAgICAgIG9uTGVhdmVTY2VuZUNiLmZvckVhY2goKGNiKSA9PiBjYihwbGF5ZXJFbnRpdGllcy5nZXQoZW50aXR5KSEpKVxuICAgICAgICAgICAgcGxheWVyRW50aXRpZXMuZGVsZXRlKGVudGl0eSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgb25FbnRlclNjZW5lKGNiOiAocGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzKSA9PiB2b2lkKSB7XG4gICAgICBvbkVudGVyU2NlbmVDYi5wdXNoKGNiKVxuICAgIH0sXG4gICAgb25MZWF2ZVNjZW5lKGNiOiAodXNlcklkOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgIG9uTGVhdmVTY2VuZUNiLnB1c2goY2IpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmZvIG9mIHRoZSBwbGF5ZXIgaWYgaXQncyBpbiB0aGUgc2NlbmUuXG4gICAgICovXG4gICAgZ2V0UGxheWVyKHVzZXI/OiBHZXRQbGF5ZXJEYXRhUmVxKTogR2V0UGxheWVyRGF0YVJlcyB8IG51bGwge1xuICAgICAgZnVuY3Rpb24gZ2V0RW50aXR5KCkge1xuICAgICAgICBpZiAoIXVzZXI/LnVzZXJJZCkgcmV0dXJuIGVuZ2luZS5QbGF5ZXJFbnRpdHlcbiAgICAgICAgZm9yIChjb25zdCBbZW50aXR5LCBkYXRhXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcklkZW50aXR5RGF0YSkpIHtcbiAgICAgICAgICBpZiAoZGF0YS5hZGRyZXNzID09PSB1c2VyLnVzZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGVudGl0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJFbnRpdHkgPSBnZXRFbnRpdHkoKVxuICAgICAgaWYgKCF1c2VyRW50aXR5KSByZXR1cm4gbnVsbFxuXG4gICAgICBjb25zdCBwbGF5ZXJEYXRhID0gUGxheWVySWRlbnRpdHlEYXRhLmdldE9yTnVsbCh1c2VyRW50aXR5KVxuICAgICAgY29uc3QgYXZhdGFyRGF0YSA9IEF2YXRhckJhc2UuZ2V0T3JOdWxsKHVzZXJFbnRpdHkpXG4gICAgICBjb25zdCB3ZWFyYWJsZXNEYXRhID0gQXZhdGFyRXF1aXBwZWREYXRhLmdldE9yTnVsbCh1c2VyRW50aXR5KVxuXG4gICAgICBpZiAoIXBsYXllckRhdGEgJiYgIWF2YXRhckRhdGEgJiYgIXdlYXJhYmxlc0RhdGEpIHJldHVybiBudWxsXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eTogdXNlckVudGl0eSxcbiAgICAgICAgbmFtZTogYXZhdGFyRGF0YT8ubmFtZSA/PyAnJyxcbiAgICAgICAgaXNHdWVzdDogISFwbGF5ZXJEYXRhPy5pc0d1ZXN0LFxuICAgICAgICB1c2VySWQ6IHBsYXllckRhdGE/LmFkZHJlc3MgPz8gJycsXG4gICAgICAgIGF2YXRhcjogYXZhdGFyRGF0YSA/PyB1bmRlZmluZWQsXG4gICAgICAgIC8vIENvbXBvbmVudCByZWFkcyBjb21lIGJhY2sgZGVlcGx5IHJlYWRvbmx5LCBzbyB0aGVzZSBhcmUgY29waWVkIHJhdGhlciB0aGFuXG4gICAgICAgIC8vIGFsaWFzZWQ6IHRoZSBwdWJsaWMgUGxheWVyIHR5cGUgcHJvbWlzZXMgcGxhaW4gbXV0YWJsZSBhcnJheXMsIGFuZCBoYW5kaW5nXG4gICAgICAgIC8vIG91dCB0aGUgY29tcG9uZW50J3Mgb3duIGZyb3plbiBhcnJheSB3b3VsZCB0aHJvdyBvbiBhbnkgY2FsbGVyIHRoYXQgd3JpdGVzLlxuICAgICAgICB3ZWFyYWJsZXM6IFsuLi4od2VhcmFibGVzRGF0YT8ud2VhcmFibGVVcm5zID8/IFtdKV0sXG4gICAgICAgIGVtb3RlczogWy4uLih3ZWFyYWJsZXNEYXRhPy5lbW90ZVVybnMgPz8gW10pXSxcbiAgICAgICAgcG9zaXRpb246IFRyYW5zZm9ybS5nZXRPck51bGwodXNlckVudGl0eSk/LnBvc2l0aW9uXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHBsYXllcnMgPSBkZWZpbmVQbGF5ZXJIZWxwZXIoZW5naW5lKVxuY29uc3QgeyBnZXRQbGF5ZXIsIG9uRW50ZXJTY2VuZSwgb25MZWF2ZVNjZW5lIH0gPSBwbGF5ZXJzXG5cbmV4cG9ydCB7IGdldFBsYXllciwgb25FbnRlclNjZW5lLCBvbkxlYXZlU2NlbmUgfVxuZXhwb3J0IGRlZmF1bHQgcGxheWVyc1xuIl19
@@ -0,0 +1,15 @@
1
+ /**
2
+ * EnvVar provides methods to fetch environment variables from the
3
+ * Server Side Storage service. This module only works when running
4
+ * on server-side scenes.
5
+ */
6
+ export declare const EnvVar: {
7
+ /**
8
+ * Fetches a specific environment variable by key as plain text.
9
+ *
10
+ * @param key - The name of the environment variable to fetch
11
+ * @returns A promise that resolves to the plain text value, or empty string if not found
12
+ * @throws Error if not running on a server-side scene
13
+ */
14
+ get(key: string): Promise<string>;
15
+ };
@@ -0,0 +1,31 @@
1
+ import { getStorageServerUrl } from './storage-url';
2
+ import { assertIsServer, wrapSignedFetch } from './utils';
3
+ const MODULE_NAME = 'EnvVar';
4
+ /**
5
+ * EnvVar provides methods to fetch environment variables from the
6
+ * Server Side Storage service. This module only works when running
7
+ * on server-side scenes.
8
+ */
9
+ export const EnvVar = {
10
+ /**
11
+ * Fetches a specific environment variable by key as plain text.
12
+ *
13
+ * @param key - The name of the environment variable to fetch
14
+ * @returns A promise that resolves to the plain text value, or empty string if not found
15
+ * @throws Error if not running on a server-side scene
16
+ */
17
+ async get(key) {
18
+ assertIsServer(MODULE_NAME);
19
+ const baseUrl = await getStorageServerUrl();
20
+ const url = `${baseUrl}/env/${encodeURIComponent(key)}`;
21
+ const [error, data] = await wrapSignedFetch({
22
+ url
23
+ });
24
+ if (error) {
25
+ console.error(`Failed to fetch environment variable '${key}': ${error}`);
26
+ return '';
27
+ }
28
+ return data?.value ?? '';
29
+ }
30
+ };
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXZhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2ZXIvZW52LXZhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFekQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFBO0FBRTVCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEI7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ25CLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUzQixNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixFQUFFLENBQUE7UUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLFFBQVEsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtRQUV2RCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFvQjtZQUM3RCxHQUFHO1NBQ0osQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxHQUFHLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUN4RSxPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBRUQsT0FBTyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFN0b3JhZ2VTZXJ2ZXJVcmwgfSBmcm9tICcuL3N0b3JhZ2UtdXJsJ1xuaW1wb3J0IHsgYXNzZXJ0SXNTZXJ2ZXIsIHdyYXBTaWduZWRGZXRjaCB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IE1PRFVMRV9OQU1FID0gJ0VudlZhcidcblxuLyoqXG4gKiBFbnZWYXIgcHJvdmlkZXMgbWV0aG9kcyB0byBmZXRjaCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSB0aGVcbiAqIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS4gVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aGVuIHJ1bm5pbmdcbiAqIG9uIHNlcnZlci1zaWRlIHNjZW5lcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVudlZhciA9IHtcbiAgLyoqXG4gICAqIEZldGNoZXMgYSBzcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZSBieSBrZXkgYXMgcGxhaW4gdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcGxhaW4gdGV4dCB2YWx1ZSwgb3IgZW1wdHkgc3RyaW5nIGlmIG5vdCBmb3VuZFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vdCBydW5uaW5nIG9uIGEgc2VydmVyLXNpZGUgc2NlbmVcbiAgICovXG4gIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0U3RvcmFnZVNlcnZlclVybCgpXG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vZW52LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9YFxuXG4gICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaDx7IHZhbHVlOiBzdHJpbmcgfT4oe1xuICAgICAgdXJsXG4gICAgfSlcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGVudmlyb25tZW50IHZhcmlhYmxlICcke2tleX0nOiAke2Vycm9yfWApXG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YT8udmFsdWUgPz8gJydcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export { EnvVar } from './env-var';
2
+ export { Storage, IStorage, ISceneStorage, IPlayerStorage, GetOptions, GetValuesOptions, GetValuesResult, SetOptions, StorageOptions } from './storage';
@@ -0,0 +1,3 @@
1
+ export { EnvVar } from './env-var';
2
+ export { Storage } from './storage';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUNMLE9BQU8sRUFTUixNQUFNLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEVudlZhciB9IGZyb20gJy4vZW52LXZhcidcbmV4cG9ydCB7XG4gIFN0b3JhZ2UsXG4gIElTdG9yYWdlLFxuICBJU2NlbmVTdG9yYWdlLFxuICBJUGxheWVyU3RvcmFnZSxcbiAgR2V0T3B0aW9ucyxcbiAgR2V0VmFsdWVzT3B0aW9ucyxcbiAgR2V0VmFsdWVzUmVzdWx0LFxuICBTZXRPcHRpb25zLFxuICBTdG9yYWdlT3B0aW9uc1xufSBmcm9tICcuL3N0b3JhZ2UnXG4iXX0=
@@ -0,0 +1,80 @@
1
+ export declare const MODULE_NAME = "Storage";
2
+ /**
3
+ * Options for getValues pagination and filtering.
4
+ */
5
+ export interface GetValuesOptions {
6
+ prefix?: string;
7
+ limit?: number;
8
+ offset?: number;
9
+ }
10
+ /**
11
+ * Result of getValues with pagination metadata.
12
+ */
13
+ export interface GetValuesResult {
14
+ /** Key-value entries for the current page. */
15
+ data: Array<{
16
+ key: string;
17
+ value: unknown;
18
+ }>;
19
+ pagination: {
20
+ offset: number;
21
+ total: number;
22
+ };
23
+ }
24
+ /**
25
+ * Per-call options for Storage get().
26
+ */
27
+ export interface GetOptions {
28
+ /**
29
+ * When true, bypasses the read cache and forces a network read (the result
30
+ * still refreshes the cache). Concurrent gets for the same key still share
31
+ * one in-flight request. Default: false.
32
+ */
33
+ fresh?: boolean;
34
+ }
35
+ /**
36
+ * Per-call options for Storage set().
37
+ */
38
+ export interface SetOptions {
39
+ /**
40
+ * When true, skips the network write if the serialized value matches the
41
+ * last value known to be stored for this key (from a previous successful
42
+ * set(), get() or getValues()). Overrides the configured default. Default: true.
43
+ */
44
+ skipIfUnchanged?: boolean;
45
+ }
46
+ /**
47
+ * Module-wide configuration for Storage, applied to both scene-scoped and
48
+ * player-scoped storage via Storage.configure().
49
+ */
50
+ export interface StorageOptions {
51
+ /**
52
+ * Default for set()'s skipIfUnchanged when not passed per call. A skip only
53
+ * suppresses a proven no-op: the exact serialized value was confirmed stored
54
+ * by a previous network round-trip within cacheMaxAgeMs. Default: true.
55
+ */
56
+ skipIfUnchanged?: boolean;
57
+ /**
58
+ * When true, get() serves values from the local cache within cacheMaxAgeMs,
59
+ * including confirmed "not found" results, without a network request.
60
+ * Out-of-band writers (e.g. CLI storage commands) may not be visible for up
61
+ * to cacheMaxAgeMs; pass { fresh: true } per call to force a network read.
62
+ * Default: true.
63
+ */
64
+ cacheReads?: boolean;
65
+ /**
66
+ * Max cache entries per scope (scene / player) before oldest entries are
67
+ * evicted. Entries hold the serialized value body, so memory scales with
68
+ * value size — this bounds entry count, not bytes. Infinity removes the bound.
69
+ * Default: 512.
70
+ */
71
+ cacheMaxEntries?: number;
72
+ /**
73
+ * Max age of a cache entry in milliseconds, bounding both read-cache
74
+ * staleness and write-dedup trust; older entries are treated as unknown.
75
+ * The default is deliberately short so out-of-band writers (CLI storage
76
+ * commands, dashboards) become visible within a minute, while still
77
+ * absorbing hot per-frame reads. Infinity never expires. Default: 60000 (1 minute).
78
+ */
79
+ cacheMaxAgeMs?: number;
80
+ }
@@ -0,0 +1,19 @@
1
+ export const MODULE_NAME = 'Storage';
2
+ /**
3
+ * Default values for the resolved storage configuration.
4
+ * @internal
5
+ */
6
+ export const DEFAULT_STORAGE_CONFIG = {
7
+ skipIfUnchanged: true,
8
+ cacheReads: true,
9
+ cacheMaxEntries: 512,
10
+ cacheMaxAgeMs: 60 * 1000
11
+ };
12
+ /**
13
+ * Creates a mutable config object, later mutated by Storage.configure().
14
+ * @internal
15
+ */
16
+ export function createStorageConfig(overrides) {
17
+ return { ...DEFAULT_STORAGE_CONFIG, ...overrides };
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zdG9yYWdlL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFBO0FBOEZwQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBaUM7SUFDbEUsZUFBZSxFQUFFLElBQUk7SUFDckIsVUFBVSxFQUFFLElBQUk7SUFDaEIsZUFBZSxFQUFFLEdBQUc7SUFDcEIsYUFBYSxFQUFFLEVBQUUsR0FBRyxJQUFJO0NBQ3pCLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsU0FBMEI7SUFDNUQsT0FBTyxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQTtBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE1PRFVMRV9OQU1FID0gJ1N0b3JhZ2UnXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZ2V0VmFsdWVzIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRWYWx1ZXNPcHRpb25zIHtcbiAgcHJlZml4Pzogc3RyaW5nXG4gIGxpbWl0PzogbnVtYmVyXG4gIG9mZnNldD86IG51bWJlclxufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBnZXRWYWx1ZXMgd2l0aCBwYWdpbmF0aW9uIG1ldGFkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFZhbHVlc1Jlc3VsdCB7XG4gIC8qKiBLZXktdmFsdWUgZW50cmllcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gKi9cbiAgZGF0YTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfT5cbiAgcGFnaW5hdGlvbjoge1xuICAgIG9mZnNldDogbnVtYmVyXG4gICAgdG90YWw6IG51bWJlclxuICB9XG59XG5cbi8qKlxuICogUGVyLWNhbGwgb3B0aW9ucyBmb3IgU3RvcmFnZSBnZXQoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgYnlwYXNzZXMgdGhlIHJlYWQgY2FjaGUgYW5kIGZvcmNlcyBhIG5ldHdvcmsgcmVhZCAodGhlIHJlc3VsdFxuICAgKiBzdGlsbCByZWZyZXNoZXMgdGhlIGNhY2hlKS4gQ29uY3VycmVudCBnZXRzIGZvciB0aGUgc2FtZSBrZXkgc3RpbGwgc2hhcmVcbiAgICogb25lIGluLWZsaWdodCByZXF1ZXN0LiBEZWZhdWx0OiBmYWxzZS5cbiAgICovXG4gIGZyZXNoPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFBlci1jYWxsIG9wdGlvbnMgZm9yIFN0b3JhZ2Ugc2V0KCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHNraXBzIHRoZSBuZXR3b3JrIHdyaXRlIGlmIHRoZSBzZXJpYWxpemVkIHZhbHVlIG1hdGNoZXMgdGhlXG4gICAqIGxhc3QgdmFsdWUga25vd24gdG8gYmUgc3RvcmVkIGZvciB0aGlzIGtleSAoZnJvbSBhIHByZXZpb3VzIHN1Y2Nlc3NmdWxcbiAgICogc2V0KCksIGdldCgpIG9yIGdldFZhbHVlcygpKS4gT3ZlcnJpZGVzIHRoZSBjb25maWd1cmVkIGRlZmF1bHQuIERlZmF1bHQ6IHRydWUuXG4gICAqL1xuICBza2lwSWZVbmNoYW5nZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogTW9kdWxlLXdpZGUgY29uZmlndXJhdGlvbiBmb3IgU3RvcmFnZSwgYXBwbGllZCB0byBib3RoIHNjZW5lLXNjb3BlZCBhbmRcbiAqIHBsYXllci1zY29wZWQgc3RvcmFnZSB2aWEgU3RvcmFnZS5jb25maWd1cmUoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IGZvciBzZXQoKSdzIHNraXBJZlVuY2hhbmdlZCB3aGVuIG5vdCBwYXNzZWQgcGVyIGNhbGwuIEEgc2tpcCBvbmx5XG4gICAqIHN1cHByZXNzZXMgYSBwcm92ZW4gbm8tb3A6IHRoZSBleGFjdCBzZXJpYWxpemVkIHZhbHVlIHdhcyBjb25maXJtZWQgc3RvcmVkXG4gICAqIGJ5IGEgcHJldmlvdXMgbmV0d29yayByb3VuZC10cmlwIHdpdGhpbiBjYWNoZU1heEFnZU1zLiBEZWZhdWx0OiB0cnVlLlxuICAgKi9cbiAgc2tpcElmVW5jaGFuZ2VkPzogYm9vbGVhblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBnZXQoKSBzZXJ2ZXMgdmFsdWVzIGZyb20gdGhlIGxvY2FsIGNhY2hlIHdpdGhpbiBjYWNoZU1heEFnZU1zLFxuICAgKiBpbmNsdWRpbmcgY29uZmlybWVkIFwibm90IGZvdW5kXCIgcmVzdWx0cywgd2l0aG91dCBhIG5ldHdvcmsgcmVxdWVzdC5cbiAgICogT3V0LW9mLWJhbmQgd3JpdGVycyAoZS5nLiBDTEkgc3RvcmFnZSBjb21tYW5kcykgbWF5IG5vdCBiZSB2aXNpYmxlIGZvciB1cFxuICAgKiB0byBjYWNoZU1heEFnZU1zOyBwYXNzIHsgZnJlc2g6IHRydWUgfSBwZXIgY2FsbCB0byBmb3JjZSBhIG5ldHdvcmsgcmVhZC5cbiAgICogRGVmYXVsdDogdHJ1ZS5cbiAgICovXG4gIGNhY2hlUmVhZHM/OiBib29sZWFuXG4gIC8qKlxuICAgKiBNYXggY2FjaGUgZW50cmllcyBwZXIgc2NvcGUgKHNjZW5lIC8gcGxheWVyKSBiZWZvcmUgb2xkZXN0IGVudHJpZXMgYXJlXG4gICAqIGV2aWN0ZWQuIEVudHJpZXMgaG9sZCB0aGUgc2VyaWFsaXplZCB2YWx1ZSBib2R5LCBzbyBtZW1vcnkgc2NhbGVzIHdpdGhcbiAgICogdmFsdWUgc2l6ZSDigJQgdGhpcyBib3VuZHMgZW50cnkgY291bnQsIG5vdCBieXRlcy4gSW5maW5pdHkgcmVtb3ZlcyB0aGUgYm91bmQuXG4gICAqIERlZmF1bHQ6IDUxMi5cbiAgICovXG4gIGNhY2hlTWF4RW50cmllcz86IG51bWJlclxuICAvKipcbiAgICogTWF4IGFnZSBvZiBhIGNhY2hlIGVudHJ5IGluIG1pbGxpc2Vjb25kcywgYm91bmRpbmcgYm90aCByZWFkLWNhY2hlXG4gICAqIHN0YWxlbmVzcyBhbmQgd3JpdGUtZGVkdXAgdHJ1c3Q7IG9sZGVyIGVudHJpZXMgYXJlIHRyZWF0ZWQgYXMgdW5rbm93bi5cbiAgICogVGhlIGRlZmF1bHQgaXMgZGVsaWJlcmF0ZWx5IHNob3J0IHNvIG91dC1vZi1iYW5kIHdyaXRlcnMgKENMSSBzdG9yYWdlXG4gICAqIGNvbW1hbmRzLCBkYXNoYm9hcmRzKSBiZWNvbWUgdmlzaWJsZSB3aXRoaW4gYSBtaW51dGUsIHdoaWxlIHN0aWxsXG4gICAqIGFic29yYmluZyBob3QgcGVyLWZyYW1lIHJlYWRzLiBJbmZpbml0eSBuZXZlciBleHBpcmVzLiBEZWZhdWx0OiA2MDAwMCAoMSBtaW51dGUpLlxuICAgKi9cbiAgY2FjaGVNYXhBZ2VNcz86IG51bWJlclxufVxuXG4vKipcbiAqIEZ1bGx5LXJlc29sdmVkIHN0b3JhZ2UgY29uZmlndXJhdGlvbiBzaGFyZWQgYnkgc2NlbmUgYW5kIHBsYXllciBzdG9yYWdlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUNvbmZpZ1N0YXRlIHtcbiAgc2tpcElmVW5jaGFuZ2VkOiBib29sZWFuXG4gIGNhY2hlUmVhZHM6IGJvb2xlYW5cbiAgY2FjaGVNYXhFbnRyaWVzOiBudW1iZXJcbiAgY2FjaGVNYXhBZ2VNczogbnVtYmVyXG59XG5cbi8qKlxuICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZXNvbHZlZCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RPUkFHRV9DT05GSUc6IFJlYWRvbmx5PFN0b3JhZ2VDb25maWdTdGF0ZT4gPSB7XG4gIHNraXBJZlVuY2hhbmdlZDogdHJ1ZSxcbiAgY2FjaGVSZWFkczogdHJ1ZSxcbiAgY2FjaGVNYXhFbnRyaWVzOiA1MTIsXG4gIGNhY2hlTWF4QWdlTXM6IDYwICogMTAwMFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtdXRhYmxlIGNvbmZpZyBvYmplY3QsIGxhdGVyIG11dGF0ZWQgYnkgU3RvcmFnZS5jb25maWd1cmUoKS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmFnZUNvbmZpZyhvdmVycmlkZXM/OiBTdG9yYWdlT3B0aW9ucyk6IFN0b3JhZ2VDb25maWdTdGF0ZSB7XG4gIHJldHVybiB7IC4uLkRFRkFVTFRfU1RPUkFHRV9DT05GSUcsIC4uLm92ZXJyaWRlcyB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The message of a thrown value, or `fallback` when it carries none.
3
+ * @internal
4
+ */
5
+ export function errorMessage(error, fallback = 'unknown error') {
6
+ const message = error instanceof Error ? error.message : typeof error === 'string' ? error : '';
7
+ return message || fallback;
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvc3RvcmFnZS9lcnJvci1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYyxFQUFFLFFBQVEsR0FBRyxlQUFlO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDL0YsT0FBTyxPQUFPLElBQUksUUFBUSxDQUFBO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBtZXNzYWdlIG9mIGEgdGhyb3duIHZhbHVlLCBvciBgZmFsbGJhY2tgIHdoZW4gaXQgY2FycmllcyBub25lLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24sIGZhbGxiYWNrID0gJ3Vua25vd24gZXJyb3InKTogc3RyaW5nIHtcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogJydcbiAgcmV0dXJuIG1lc3NhZ2UgfHwgZmFsbGJhY2tcbn1cbiJdfQ==
@@ -0,0 +1,54 @@
1
+ import { StorageOptions } from './constants';
2
+ import { ISceneStorage } from './scene';
3
+ import { IPlayerStorage } from './player';
4
+ export { GetOptions, GetValuesOptions, GetValuesResult, SetOptions, StorageOptions } from './constants';
5
+ export { ISceneStorage } from './scene';
6
+ export { IPlayerStorage } from './player';
7
+ /**
8
+ * Storage interface with methods for scene-scoped and player-scoped storage.
9
+ */
10
+ export interface IStorage extends ISceneStorage {
11
+ /** Player-scoped storage for key-value pairs */
12
+ player: IPlayerStorage;
13
+ /**
14
+ * Sets module-wide defaults for both scene-scoped and player-scoped storage.
15
+ * Merges the given partial options into the current configuration.
16
+ * Note: cacheMaxEntries applies per scope (scene and player each keep their
17
+ * own cache) and bounds entry count, not bytes (entries hold serialized
18
+ * value bodies).
19
+ */
20
+ configure(options: StorageOptions): void;
21
+ }
22
+ /**
23
+ * Storage provides methods to store and retrieve key-value data from the
24
+ * Server Side Storage service.
25
+ *
26
+ * - Use Storage.get/set/delete/getValues for scene-scoped storage
27
+ * - Use Storage.player.get/set/delete/getValues for player-scoped storage
28
+ * - Use Storage.configure to change module-wide defaults (e.g. skipIfUnchanged, cacheReads)
29
+ *
30
+ * A failure is never reported as absence. A read that fails throws; get() resolves
31
+ * null only for a confirmed absence (a 404, or a delete that landed) or a stored
32
+ * JSON null, and getValues() returns an empty page only for a genuinely empty
33
+ * listing. A delete that fails throws, and resolves false only for a confirmed 404.
34
+ * set() reports failure through its boolean result, and throws for a value that
35
+ * cannot be JSON-serialized. A get() issued while writes to its key are pending
36
+ * waits for them, so it reflects them; getValues() does not wait. Nothing is
37
+ * retried — that is the caller's to decide.
38
+ *
39
+ * Reads are cached by default: get() serves values known from a network
40
+ * round-trip within the last cacheMaxAgeMs (including confirmed "not found"
41
+ * results) without hitting the service, and concurrent gets for the same key
42
+ * share one request. Overlapping writes to the same key are serialized so the
43
+ * service commits them in issue order, and rapid writes coalesce to the
44
+ * latest value; a set()/delete() settles once its own write, or the newer
45
+ * write that replaced it, lands or fails. By default (skipIfUnchanged)
46
+ * an unchanged set is skipped, but only when a previous confirmed round-trip
47
+ * proved the exact value is already stored. Out-of-band writers (e.g. CLI storage commands)
48
+ * may not be visible for up to cacheMaxAgeMs; use get(key, { fresh: true })
49
+ * for an authoritative read or Storage.configure({ cacheReads: false }) to
50
+ * disable read caching.
51
+ *
52
+ * This module only works when running on server-side scenes.
53
+ */
54
+ export declare const Storage: IStorage;