@dcl/sdk 7.20.1-21975617794.commit-7189140 → 7.20.1-21988479316.commit-3b19265

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/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dcl/sdk",
3
3
  "description": "",
4
- "version": "7.20.1-21975617794.commit-7189140",
4
+ "version": "7.20.1-21988479316.commit-3b19265",
5
5
  "author": "Decentraland",
6
6
  "dependencies": {
7
- "@dcl/ecs": "7.20.1-21975617794.commit-7189140",
7
+ "@dcl/ecs": "7.20.1-21988479316.commit-3b19265",
8
8
  "@dcl/ecs-math": "2.1.0",
9
9
  "@dcl/explorer": "1.0.164509-20240802172549.commit-fb95b9b",
10
- "@dcl/js-runtime": "7.20.1-21975617794.commit-7189140",
11
- "@dcl/react-ecs": "7.20.1-21975617794.commit-7189140",
12
- "@dcl/sdk-commands": "7.20.1-21975617794.commit-7189140",
10
+ "@dcl/js-runtime": "7.20.1-21988479316.commit-3b19265",
11
+ "@dcl/react-ecs": "7.20.1-21988479316.commit-3b19265",
12
+ "@dcl/sdk-commands": "7.20.1-21988479316.commit-3b19265",
13
13
  "text-encoding": "0.7.0"
14
14
  },
15
15
  "keywords": [],
@@ -35,5 +35,5 @@
35
35
  },
36
36
  "types": "./index.d.ts",
37
37
  "typings": "./index.d.ts",
38
- "commit": "71891401b7e094a6aa6a6b079cb5c9655b64f735"
38
+ "commit": "3b19265b2333cbf74a4e7cb0245f6561e064e0c5"
39
39
  }
package/server/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { EnvVar } from './env-var';
2
- export { Storage, IStorage, ISceneStorage, IPlayerStorage } from './storage';
2
+ export { Storage, IStorage, ISceneStorage, IPlayerStorage, GetValuesOptions, GetValuesResult } from './storage';
package/server/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { EnvVar } from './env-var';
2
2
  export { Storage } from './storage';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBMkMsTUFBTSxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBFbnZWYXIgfSBmcm9tICcuL2Vudi12YXInXG5leHBvcnQgeyBTdG9yYWdlLCBJU3RvcmFnZSwgSVNjZW5lU3RvcmFnZSwgSVBsYXllclN0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UnXG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBOEUsTUFBTSxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBFbnZWYXIgfSBmcm9tICcuL2Vudi12YXInXG5leHBvcnQgeyBTdG9yYWdlLCBJU3RvcmFnZSwgSVNjZW5lU3RvcmFnZSwgSVBsYXllclN0b3JhZ2UsIEdldFZhbHVlc09wdGlvbnMsIEdldFZhbHVlc1Jlc3VsdCB9IGZyb20gJy4vc3RvcmFnZSdcbiJdfQ==
@@ -1 +1,23 @@
1
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
+ }
@@ -1,2 +1,2 @@
1
1
  export const MODULE_NAME = 'Storage';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zdG9yYWdlL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE1PRFVMRV9OQU1FID0gJ1N0b3JhZ2UnXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zdG9yYWdlL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE1PRFVMRV9OQU1FID0gJ1N0b3JhZ2UnXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZ2V0VmFsdWVzIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRWYWx1ZXNPcHRpb25zIHtcbiAgcHJlZml4Pzogc3RyaW5nXG4gIGxpbWl0PzogbnVtYmVyXG4gIG9mZnNldD86IG51bWJlclxufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBnZXRWYWx1ZXMgd2l0aCBwYWdpbmF0aW9uIG1ldGFkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFZhbHVlc1Jlc3VsdCB7XG4gIC8qKiBLZXktdmFsdWUgZW50cmllcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gKi9cbiAgZGF0YTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfT5cbiAgcGFnaW5hdGlvbjoge1xuICAgIG9mZnNldDogbnVtYmVyXG4gICAgdG90YWw6IG51bWJlclxuICB9XG59XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { ISceneStorage } from './scene';
2
2
  import { IPlayerStorage } from './player';
3
+ export { GetValuesOptions, GetValuesResult } from './constants';
3
4
  export { ISceneStorage } from './scene';
4
5
  export { IPlayerStorage } from './player';
5
6
  /**
@@ -13,8 +14,8 @@ export interface IStorage extends ISceneStorage {
13
14
  * Storage provides methods to store and retrieve key-value data from the
14
15
  * Server Side Storage service.
15
16
  *
16
- * - Use Storage.get/set/delete for scene-scoped storage
17
- * - Use Storage.player.get/set/delete for player-scoped storage
17
+ * - Use Storage.get/set/delete/getValues for scene-scoped storage
18
+ * - Use Storage.player.get/set/delete/getValues for player-scoped storage
18
19
  *
19
20
  * This module only works when running on server-side scenes.
20
21
  */
@@ -11,6 +11,7 @@ const createStorage = () => {
11
11
  get: sceneStorage.get,
12
12
  set: sceneStorage.set,
13
13
  delete: sceneStorage.delete,
14
+ getValues: sceneStorage.getValues,
14
15
  // Keep player as nested property
15
16
  player: playerStorage
16
17
  };
@@ -19,10 +20,10 @@ const createStorage = () => {
19
20
  * Storage provides methods to store and retrieve key-value data from the
20
21
  * Server Side Storage service.
21
22
  *
22
- * - Use Storage.get/set/delete for scene-scoped storage
23
- * - Use Storage.player.get/set/delete for player-scoped storage
23
+ * - Use Storage.get/set/delete/getValues for scene-scoped storage
24
+ * - Use Storage.player.get/set/delete/getValues for player-scoped storage
24
25
  *
25
26
  * This module only works when running on server-side scenes.
26
27
  */
27
28
  export const Storage = createStorage();
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3N0b3JhZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFpQixNQUFNLFNBQVMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0sVUFBVSxDQUFBO0FBYzlEOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBYSxFQUFFO0lBQ25DLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixFQUFFLENBQUE7SUFDekMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQTtJQUUzQyxPQUFPO1FBQ0wsNENBQTRDO1FBQzVDLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztRQUNyQixHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUc7UUFDckIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1FBQzNCLGlDQUFpQztRQUNqQyxNQUFNLEVBQUUsYUFBYTtLQUN0QixDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQWEsYUFBYSxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTY2VuZVN0b3JhZ2UsIElTY2VuZVN0b3JhZ2UgfSBmcm9tICcuL3NjZW5lJ1xuaW1wb3J0IHsgY3JlYXRlUGxheWVyU3RvcmFnZSwgSVBsYXllclN0b3JhZ2UgfSBmcm9tICcuL3BsYXllcidcblxuLy8gUmUtZXhwb3J0IGludGVyZmFjZXNcbmV4cG9ydCB7IElTY2VuZVN0b3JhZ2UgfSBmcm9tICcuL3NjZW5lJ1xuZXhwb3J0IHsgSVBsYXllclN0b3JhZ2UgfSBmcm9tICcuL3BsYXllcidcblxuLyoqXG4gKiBTdG9yYWdlIGludGVyZmFjZSB3aXRoIG1ldGhvZHMgZm9yIHNjZW5lLXNjb3BlZCBhbmQgcGxheWVyLXNjb3BlZCBzdG9yYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdG9yYWdlIGV4dGVuZHMgSVNjZW5lU3RvcmFnZSB7XG4gIC8qKiBQbGF5ZXItc2NvcGVkIHN0b3JhZ2UgZm9yIGtleS12YWx1ZSBwYWlycyAqL1xuICBwbGF5ZXI6IElQbGF5ZXJTdG9yYWdlXG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU3RvcmFnZSBtb2R1bGUgd2l0aCBzY2VuZS1zY29wZWQgYW5kIHBsYXllci1zY29wZWQgc3RvcmFnZS5cbiAqL1xuY29uc3QgY3JlYXRlU3RvcmFnZSA9ICgpOiBJU3RvcmFnZSA9PiB7XG4gIGNvbnN0IHNjZW5lU3RvcmFnZSA9IGNyZWF0ZVNjZW5lU3RvcmFnZSgpXG4gIGNvbnN0IHBsYXllclN0b3JhZ2UgPSBjcmVhdGVQbGF5ZXJTdG9yYWdlKClcblxuICByZXR1cm4ge1xuICAgIC8vIFNwcmVhZCBzY2VuZSBzdG9yYWdlIG1ldGhvZHMgYXQgdG9wIGxldmVsXG4gICAgZ2V0OiBzY2VuZVN0b3JhZ2UuZ2V0LFxuICAgIHNldDogc2NlbmVTdG9yYWdlLnNldCxcbiAgICBkZWxldGU6IHNjZW5lU3RvcmFnZS5kZWxldGUsXG4gICAgLy8gS2VlcCBwbGF5ZXIgYXMgbmVzdGVkIHByb3BlcnR5XG4gICAgcGxheWVyOiBwbGF5ZXJTdG9yYWdlXG4gIH1cbn1cblxuLyoqXG4gKiBTdG9yYWdlIHByb3ZpZGVzIG1ldGhvZHMgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGtleS12YWx1ZSBkYXRhIGZyb20gdGhlXG4gKiBTZXJ2ZXIgU2lkZSBTdG9yYWdlIHNlcnZpY2UuXG4gKlxuICogLSBVc2UgU3RvcmFnZS5nZXQvc2V0L2RlbGV0ZSBmb3Igc2NlbmUtc2NvcGVkIHN0b3JhZ2VcbiAqIC0gVXNlIFN0b3JhZ2UucGxheWVyLmdldC9zZXQvZGVsZXRlIGZvciBwbGF5ZXItc2NvcGVkIHN0b3JhZ2VcbiAqXG4gKiBUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIHdoZW4gcnVubmluZyBvbiBzZXJ2ZXItc2lkZSBzY2VuZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBTdG9yYWdlOiBJU3RvcmFnZSA9IGNyZWF0ZVN0b3JhZ2UoKVxuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3N0b3JhZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFpQixNQUFNLFNBQVMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0sVUFBVSxDQUFBO0FBZTlEOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBYSxFQUFFO0lBQ25DLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixFQUFFLENBQUE7SUFDekMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQTtJQUUzQyxPQUFPO1FBQ0wsNENBQTRDO1FBQzVDLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztRQUNyQixHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUc7UUFDckIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1FBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztRQUNqQyxpQ0FBaUM7UUFDakMsTUFBTSxFQUFFLGFBQWE7S0FDdEIsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFhLGFBQWEsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2NlbmVTdG9yYWdlLCBJU2NlbmVTdG9yYWdlIH0gZnJvbSAnLi9zY2VuZSdcbmltcG9ydCB7IGNyZWF0ZVBsYXllclN0b3JhZ2UsIElQbGF5ZXJTdG9yYWdlIH0gZnJvbSAnLi9wbGF5ZXInXG5cbi8vIFJlLWV4cG9ydCBpbnRlcmZhY2VzIGFuZCB0eXBlc1xuZXhwb3J0IHsgR2V0VmFsdWVzT3B0aW9ucywgR2V0VmFsdWVzUmVzdWx0IH0gZnJvbSAnLi9jb25zdGFudHMnXG5leHBvcnQgeyBJU2NlbmVTdG9yYWdlIH0gZnJvbSAnLi9zY2VuZSdcbmV4cG9ydCB7IElQbGF5ZXJTdG9yYWdlIH0gZnJvbSAnLi9wbGF5ZXInXG5cbi8qKlxuICogU3RvcmFnZSBpbnRlcmZhY2Ugd2l0aCBtZXRob2RzIGZvciBzY2VuZS1zY29wZWQgYW5kIHBsYXllci1zY29wZWQgc3RvcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3RvcmFnZSBleHRlbmRzIElTY2VuZVN0b3JhZ2Uge1xuICAvKiogUGxheWVyLXNjb3BlZCBzdG9yYWdlIGZvciBrZXktdmFsdWUgcGFpcnMgKi9cbiAgcGxheWVyOiBJUGxheWVyU3RvcmFnZVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFN0b3JhZ2UgbW9kdWxlIHdpdGggc2NlbmUtc2NvcGVkIGFuZCBwbGF5ZXItc2NvcGVkIHN0b3JhZ2UuXG4gKi9cbmNvbnN0IGNyZWF0ZVN0b3JhZ2UgPSAoKTogSVN0b3JhZ2UgPT4ge1xuICBjb25zdCBzY2VuZVN0b3JhZ2UgPSBjcmVhdGVTY2VuZVN0b3JhZ2UoKVxuICBjb25zdCBwbGF5ZXJTdG9yYWdlID0gY3JlYXRlUGxheWVyU3RvcmFnZSgpXG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTcHJlYWQgc2NlbmUgc3RvcmFnZSBtZXRob2RzIGF0IHRvcCBsZXZlbFxuICAgIGdldDogc2NlbmVTdG9yYWdlLmdldCxcbiAgICBzZXQ6IHNjZW5lU3RvcmFnZS5zZXQsXG4gICAgZGVsZXRlOiBzY2VuZVN0b3JhZ2UuZGVsZXRlLFxuICAgIGdldFZhbHVlczogc2NlbmVTdG9yYWdlLmdldFZhbHVlcyxcbiAgICAvLyBLZWVwIHBsYXllciBhcyBuZXN0ZWQgcHJvcGVydHlcbiAgICBwbGF5ZXI6IHBsYXllclN0b3JhZ2VcbiAgfVxufVxuXG4vKipcbiAqIFN0b3JhZ2UgcHJvdmlkZXMgbWV0aG9kcyB0byBzdG9yZSBhbmQgcmV0cmlldmUga2V5LXZhbHVlIGRhdGEgZnJvbSB0aGVcbiAqIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAqXG4gKiAtIFVzZSBTdG9yYWdlLmdldC9zZXQvZGVsZXRlL2dldFZhbHVlcyBmb3Igc2NlbmUtc2NvcGVkIHN0b3JhZ2VcbiAqIC0gVXNlIFN0b3JhZ2UucGxheWVyLmdldC9zZXQvZGVsZXRlL2dldFZhbHVlcyBmb3IgcGxheWVyLXNjb3BlZCBzdG9yYWdlXG4gKlxuICogVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aGVuIHJ1bm5pbmcgb24gc2VydmVyLXNpZGUgc2NlbmVzLlxuICovXG5leHBvcnQgY29uc3QgU3RvcmFnZTogSVN0b3JhZ2UgPSBjcmVhdGVTdG9yYWdlKClcbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { GetValuesOptions, GetValuesResult } from './constants';
1
2
  /**
2
3
  * Player-scoped storage interface for key-value pairs from the Server Side Storage service.
3
4
  * This is NOT filesystem storage - data is stored in the remote storage service.
@@ -25,6 +26,14 @@ export interface IPlayerStorage {
25
26
  * @returns A promise that resolves to true if deleted, false if not found
26
27
  */
27
28
  delete(address: string, key: string): Promise<boolean>;
29
+ /**
30
+ * Returns key-value entries from a player's storage, optionally filtered by prefix.
31
+ * Supports pagination via limit and offset.
32
+ * @param address - The player's wallet address
33
+ * @param options - Optional { prefix, limit, offset } for filtering and pagination.
34
+ * @returns A promise that resolves to { data, pagination: { offset, total } } for pagination UI
35
+ */
36
+ getValues(address: string, options?: GetValuesOptions): Promise<GetValuesResult>;
28
37
  }
29
38
  /**
30
39
  * Creates player-scoped storage that provides methods to interact with
@@ -55,7 +55,38 @@ export const createPlayerStorage = () => {
55
55
  return false;
56
56
  }
57
57
  return true;
58
+ },
59
+ async getValues(address, options) {
60
+ assertIsServer(MODULE_NAME);
61
+ const { prefix, limit, offset } = options ?? {};
62
+ const baseUrl = await getStorageServerUrl();
63
+ const parts = [];
64
+ if (!!prefix) {
65
+ parts.push(`prefix=${encodeURIComponent(prefix)}`);
66
+ }
67
+ if (!!limit) {
68
+ parts.push(`limit=${limit}`);
69
+ }
70
+ if (!!offset) {
71
+ parts.push(`offset=${offset}`);
72
+ }
73
+ const query = parts.join('&');
74
+ const url = query
75
+ ? `${baseUrl}/players/${encodeURIComponent(address)}/values?${query}`
76
+ : `${baseUrl}/players/${encodeURIComponent(address)}/values`;
77
+ const [error, response] = await wrapSignedFetch({ url });
78
+ if (error) {
79
+ console.error(`Failed to get player storage values for '${address}': ${error}`);
80
+ return { data: [], pagination: { offset: 0, total: 0 } };
81
+ }
82
+ const data = response?.data ?? [];
83
+ const requestedOffset = offset ?? 0;
84
+ const pagination = {
85
+ offset: response?.pagination?.offset ?? requestedOffset,
86
+ total: response?.pagination?.total ?? data.length
87
+ };
88
+ return { data, pagination };
58
89
  }
59
90
  };
60
91
  };
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zdG9yYWdlL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBaUN6Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBbUIsRUFBRTtJQUN0RCxPQUFPO1FBQ0wsS0FBSyxDQUFDLEdBQUcsQ0FBYyxPQUFlLEVBQUUsR0FBVztZQUNqRCxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsRUFBRSxDQUFBO1lBQzNDLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxZQUFZLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxXQUFXLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7WUFFakcsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLGVBQWUsQ0FBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFFbEUsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyxVQUFVLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUN2RixPQUFPLElBQUksQ0FBQTthQUNaO1lBRUQsT0FBTyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQTtRQUM1QixDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBYyxPQUFlLEVBQUUsR0FBVyxFQUFFLEtBQVE7WUFDM0QsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRTNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQTtZQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sWUFBWSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO1lBRWpHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLGVBQWUsQ0FBQztnQkFDcEMsR0FBRztnQkFDSCxJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFLEtBQUs7b0JBQ2IsT0FBTyxFQUFFO3dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7cUJBQ25DO29CQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7aUJBQ2hDO2FBQ0YsQ0FBQyxDQUFBO1lBRUYsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyxVQUFVLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUN2RixPQUFPLEtBQUssQ0FBQTthQUNiO1lBRUQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFlLEVBQUUsR0FBVztZQUN2QyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsRUFBRSxDQUFBO1lBQzNDLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxZQUFZLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxXQUFXLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7WUFFakcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFDO2dCQUNwQyxHQUFHO2dCQUNILElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7YUFDRixDQUFDLENBQUE7WUFFRixJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxHQUFHLFVBQVUsT0FBTyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUE7Z0JBQzFGLE9BQU8sS0FBSyxDQUFBO2FBQ2I7WUFFRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlclVybCB9IGZyb20gJy4uL3N0b3JhZ2UtdXJsJ1xuaW1wb3J0IHsgYXNzZXJ0SXNTZXJ2ZXIsIHdyYXBTaWduZWRGZXRjaCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgTU9EVUxFX05BTUUgfSBmcm9tICcuL2NvbnN0YW50cydcblxuLyoqXG4gKiBQbGF5ZXItc2NvcGVkIHN0b3JhZ2UgaW50ZXJmYWNlIGZvciBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBpcyBOT1QgZmlsZXN5c3RlbSBzdG9yYWdlIC0gZGF0YSBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZSBzdG9yYWdlIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBsYXllclN0b3JhZ2Uge1xuICAvKipcbiAgICogUmV0cmlldmVzIGEgdmFsdWUgZnJvbSBhIHBsYXllcidzIHN0b3JhZ2UgYnkga2V5IGZyb20gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGFkZHJlc3MgLSBUaGUgcGxheWVyJ3Mgd2FsbGV0IGFkZHJlc3NcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHBhcnNlZCBKU09OIHZhbHVlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0PFQgPSB1bmtub3duPihhZGRyZXNzOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD5cblxuICAvKipcbiAgICogU3RvcmVzIGEgdmFsdWUgaW4gYSBwbGF5ZXIncyBzdG9yYWdlIGluIHRoZSBTZXJ2ZXIgU2lkZSBTdG9yYWdlIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIHBsYXllcidzIHdhbGxldCBhZGRyZXNzXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlclxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmUgKHdpbGwgYmUgSlNPTiBzZXJpYWxpemVkKVxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgc2V0PFQgPSB1bmtub3duPihhZGRyZXNzOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj5cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHZhbHVlIGZyb20gYSBwbGF5ZXIncyBzdG9yYWdlIGluIHRoZSBTZXJ2ZXIgU2lkZSBTdG9yYWdlIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIHBsYXllcidzIHdhbGxldCBhZGRyZXNzXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZGVsZXRlKGFkZHJlc3M6IHN0cmluZywga2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+XG59XG5cbi8qKlxuICogQ3JlYXRlcyBwbGF5ZXItc2NvcGVkIHN0b3JhZ2UgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIGludGVyYWN0IHdpdGhcbiAqIHBsYXllci1zcGVjaWZpYyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aGVuIHJ1bm5pbmcgb24gc2VydmVyLXNpZGUgc2NlbmVzLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGxheWVyU3RvcmFnZSA9ICgpOiBJUGxheWVyU3RvcmFnZSA9PiB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPihhZGRyZXNzOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaDx7IHZhbHVlOiBUIH0+KHsgdXJsIH0pXG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2V0IHBsYXllciBzdG9yYWdlIHZhbHVlICcke2tleX0nIGZvciAnJHthZGRyZXNzfSc6ICR7ZXJyb3J9YClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE/LnZhbHVlID8/IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0PFQgPSB1bmtub3duPihhZGRyZXNzOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZSB9KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNldCBwbGF5ZXIgc3RvcmFnZSB2YWx1ZSAnJHtrZXl9JyBmb3IgJyR7YWRkcmVzc30nOiAke2Vycm9yfWApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoYWRkcmVzczogc3RyaW5nLCBrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgaGVhZGVyczoge31cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgcGxheWVyIHN0b3JhZ2UgdmFsdWUgJyR7a2V5fScgZm9yICcke2FkZHJlc3N9JzogJHtlcnJvcn1gKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbn1cbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zdG9yYWdlL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMxRCxPQUFPLEVBQXFDLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQTBDNUU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQW1CLEVBQUU7SUFDdEQsT0FBTztRQUNMLEtBQUssQ0FBQyxHQUFHLENBQWMsT0FBZSxFQUFFLEdBQVc7WUFDakQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRTNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQTtZQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sWUFBWSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO1lBRWpHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBRWxFLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEdBQUcsVUFBVSxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQTtnQkFDdkYsT0FBTyxJQUFJLENBQUE7YUFDWjtZQUVELE9BQU8sSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUE7UUFDNUIsQ0FBQztRQUVELEtBQUssQ0FBQyxHQUFHLENBQWMsT0FBZSxFQUFFLEdBQVcsRUFBRSxLQUFRO1lBQzNELGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUUzQixNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFt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LEtBQUssQ0FBQyw0Q0FBNEMsT0FBTyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUE7Z0JBQy9FLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUE7YUFDekQ7WUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQTtZQUNqQyxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFBO1lBQ25DLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksZUFBZTtnQkFDdkQsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNO2FBQ2xELENBQUE7WUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQzdCLENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlclVybCB9IGZyb20gJy4uL3N0b3JhZ2UtdXJsJ1xuaW1wb3J0IHsgYXNzZXJ0SXNTZXJ2ZXIsIHdyYXBTaWduZWRGZXRjaCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgR2V0VmFsdWVzT3B0aW9ucywgR2V0VmFsdWVzUmVzdWx0LCBNT0RVTEVfTkFNRSB9IGZyb20gJy4vY29uc3RhbnRzJ1xuXG4vKipcbiAqIFBsYXllci1zY29wZWQgc3RvcmFnZSBpbnRlcmZhY2UgZm9yIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBTZXJ2ZXIgU2lkZSBTdG9yYWdlIHNlcnZpY2UuXG4gKiBUaGlzIGlzIE5PVCBmaWxlc3lzdGVtIHN0b3JhZ2UgLSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgcmVtb3RlIHN0b3JhZ2Ugc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUGxheWVyU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIGEgcGxheWVyJ3Mgc3RvcmFnZSBieSBrZXkgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBwbGF5ZXIncyB3YWxsZXQgYWRkcmVzc1xuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcGFyc2VkIEpTT04gdmFsdWUsIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXQ8VCA9IHVua25vd24+KGFkZHJlc3M6IHN0cmluZywga2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPlxuXG4gIC8qKlxuICAgKiBTdG9yZXMgYSB2YWx1ZSBpbiBhIHBsYXllcidzIHN0b3JhZ2UgaW4gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGFkZHJlc3MgLSBUaGUgcGxheWVyJ3Mgd2FsbGV0IGFkZHJlc3NcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzdG9yZSAod2lsbCBiZSBKU09OIHNlcmlhbGl6ZWQpXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBzZXQ8VCA9IHVua25vd24+KGFkZHJlc3M6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTxib29sZWFuPlxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgdmFsdWUgZnJvbSBhIHBsYXllcidzIHN0b3JhZ2UgaW4gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGFkZHJlc3MgLSBUaGUgcGxheWVyJ3Mgd2FsbGV0IGFkZHJlc3NcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgZGVsZXRlZCwgZmFsc2UgaWYgbm90IGZvdW5kXG4gICAqL1xuICBkZWxldGUoYWRkcmVzczogc3RyaW5nLCBrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj5cblxuICAvKipcbiAgICogUmV0dXJucyBrZXktdmFsdWUgZW50cmllcyBmcm9tIGEgcGxheWVyJ3Mgc3RvcmFnZSwgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBwcmVmaXguXG4gICAqIFN1cHBvcnRzIHBhZ2luYXRpb24gdmlhIGxpbWl0IGFuZCBvZmZzZXQuXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIHBsYXllcidzIHdhbGxldCBhZGRyZXNzXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgeyBwcmVmaXgsIGxpbWl0LCBvZmZzZXQgfSBmb3IgZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB7IGRhdGEsIHBhZ2luYXRpb246IHsgb2Zmc2V0LCB0b3RhbCB9IH0gZm9yIHBhZ2luYXRpb24gVUlcbiAgICovXG4gIGdldFZhbHVlcyhhZGRyZXNzOiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRWYWx1ZXNPcHRpb25zKTogUHJvbWlzZTxHZXRWYWx1ZXNSZXN1bHQ+XG59XG5cbi8qKlxuICogQ3JlYXRlcyBwbGF5ZXItc2NvcGVkIHN0b3JhZ2UgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIGludGVyYWN0IHdpdGhcbiAqIHBsYXllci1zcGVjaWZpYyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aGVuIHJ1bm5pbmcgb24gc2VydmVyLXNpZGUgc2NlbmVzLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGxheWVyU3RvcmFnZSA9ICgpOiBJUGxheWVyU3RvcmFnZSA9PiB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPihhZGRyZXNzOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaDx7IHZhbHVlOiBUIH0+KHsgdXJsIH0pXG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2V0IHBsYXllciBzdG9yYWdlIHZhbHVlICcke2tleX0nIGZvciAnJHthZGRyZXNzfSc6ICR7ZXJyb3J9YClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE/LnZhbHVlID8/IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0PFQgPSB1bmtub3duPihhZGRyZXNzOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZSB9KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNldCBwbGF5ZXIgc3RvcmFnZSB2YWx1ZSAnJHtrZXl9JyBmb3IgJyR7YWRkcmVzc30nOiAke2Vycm9yfWApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoYWRkcmVzczogc3RyaW5nLCBrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgaGVhZGVyczoge31cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgcGxheWVyIHN0b3JhZ2UgdmFsdWUgJyR7a2V5fScgZm9yICcke2FkZHJlc3N9JzogJHtlcnJvcn1gKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFsdWVzKGFkZHJlc3M6IHN0cmluZywgb3B0aW9ucz86IEdldFZhbHVlc09wdGlvbnMpOiBQcm9taXNlPEdldFZhbHVlc1Jlc3VsdD4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IHsgcHJlZml4LCBsaW1pdCwgb2Zmc2V0IH0gPSBvcHRpb25zID8/IHt9XG4gICAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0U3RvcmFnZVNlcnZlclVybCgpXG4gICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXVxuXG4gICAgICBpZiAoISFwcmVmaXgpIHtcbiAgICAgICAgcGFydHMucHVzaChgcHJlZml4PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHByZWZpeCl9YClcbiAgICAgIH1cblxuICAgICAgaWYgKCEhbGltaXQpIHtcbiAgICAgICAgcGFydHMucHVzaChgbGltaXQ9JHtsaW1pdH1gKVxuICAgICAgfVxuXG4gICAgICBpZiAoISFvZmZzZXQpIHtcbiAgICAgICAgcGFydHMucHVzaChgb2Zmc2V0PSR7b2Zmc2V0fWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFydHMuam9pbignJicpXG4gICAgICBjb25zdCB1cmwgPSBxdWVyeVxuICAgICAgICA/IGAke2Jhc2VVcmx9L3BsYXllcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcyl9L3ZhbHVlcz8ke3F1ZXJ5fWBcbiAgICAgICAgOiBgJHtiYXNlVXJsfS9wbGF5ZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpfS92YWx1ZXNgXG5cbiAgICAgIGNvbnN0IFtlcnJvciwgcmVzcG9uc2VdID0gYXdhaXQgd3JhcFNpZ25lZEZldGNoPEdldFZhbHVlc1Jlc3VsdD4oeyB1cmwgfSlcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBnZXQgcGxheWVyIHN0b3JhZ2UgdmFsdWVzIGZvciAnJHthZGRyZXNzfSc6ICR7ZXJyb3J9YClcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10sIHBhZ2luYXRpb246IHsgb2Zmc2V0OiAwLCB0b3RhbDogMCB9IH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhID8/IFtdXG4gICAgICBjb25zdCByZXF1ZXN0ZWRPZmZzZXQgPSBvZmZzZXQgPz8gMFxuICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICAgICAgb2Zmc2V0OiByZXNwb25zZT8ucGFnaW5hdGlvbj8ub2Zmc2V0ID8/IHJlcXVlc3RlZE9mZnNldCxcbiAgICAgICAgdG90YWw6IHJlc3BvbnNlPy5wYWdpbmF0aW9uPy50b3RhbCA/PyBkYXRhLmxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBkYXRhLCBwYWdpbmF0aW9uIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { GetValuesOptions, GetValuesResult } from './constants';
1
2
  /**
2
3
  * Scene-scoped storage interface for key-value pairs from the Server Side Storage service.
3
4
  * This is NOT filesystem storage - data is stored in the remote storage service.
@@ -21,6 +22,13 @@ export interface ISceneStorage {
21
22
  * @returns A promise that resolves to true if deleted, false if not found
22
23
  */
23
24
  delete(key: string): Promise<boolean>;
25
+ /**
26
+ * Returns key-value entries from scene storage, optionally filtered by prefix.
27
+ * Supports pagination via limit and offset.
28
+ * @param options - Optional { prefix, limit, offset } for filtering and pagination.
29
+ * @returns A promise that resolves to { data, pagination: { offset, total } } for pagination UI
30
+ */
31
+ getValues(options?: GetValuesOptions): Promise<GetValuesResult>;
24
32
  }
25
33
  /**
26
34
  * Creates scene-scoped storage that provides methods to interact with
@@ -55,7 +55,36 @@ export const createSceneStorage = () => {
55
55
  return false;
56
56
  }
57
57
  return true;
58
+ },
59
+ async getValues(options) {
60
+ assertIsServer(MODULE_NAME);
61
+ const { prefix, limit, offset } = options ?? {};
62
+ const baseUrl = await getStorageServerUrl();
63
+ const parts = [];
64
+ if (!!prefix) {
65
+ parts.push(`prefix=${encodeURIComponent(prefix)}`);
66
+ }
67
+ if (!!limit) {
68
+ parts.push(`limit=${limit}`);
69
+ }
70
+ if (!!offset) {
71
+ parts.push(`offset=${offset}`);
72
+ }
73
+ const query = parts.join('&');
74
+ const url = query ? `${baseUrl}/values?${query}` : `${baseUrl}/values`;
75
+ const [error, response] = await wrapSignedFetch({ url });
76
+ if (error) {
77
+ console.error(`Failed to get storage values: ${error}`);
78
+ return { data: [], pagination: { offset: 0, total: 0 } };
79
+ }
80
+ const data = response?.data ?? [];
81
+ const requestedOffset = offset ?? 0;
82
+ const pagination = {
83
+ offset: response?.pagination?.offset ?? requestedOffset,
84
+ total: response?.pagination?.total ?? data.length
85
+ };
86
+ return { data, pagination };
58
87
  }
59
88
  };
60
89
  };
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3N0b3JhZ2Uvc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQTZCekM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQWtCLEVBQUU7SUFDcEQsT0FBTztRQUNMLEtBQUssQ0FBQyxHQUFHLENBQWMsR0FBVztZQUNoQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsRUFBRSxDQUFBO1lBQzNDLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxXQUFXLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7WUFFMUQsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLGVBQWUsQ0FBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFFbEUsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUE7Z0JBQy9ELE9BQU8sSUFBSSxDQUFBO2FBQ1o7WUFFRCxPQUFPLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxDQUFBO1FBQzVCLENBQUM7UUFFRCxLQUFLLENBQUMsR0FBRyxDQUFjLEdBQVcsRUFBRSxLQUFRO1lBQzFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUUzQixNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixFQUFFLENBQUE7WUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLFdBQVcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtZQUUxRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQUM7Z0JBQ3BDLEdBQUc7Z0JBQ0gsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxLQUFLO29CQUNiLE9BQU8sRUFBRTt3QkFDUCxjQUFjLEVBQUUsa0JBQWtCO3FCQUNuQztvQkFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUNoQzthQUNGLENBQUMsQ0FBQTtZQUVGLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEdBQUcsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUMvRCxPQUFPLEtBQUssQ0FBQTthQUNiO1lBRUQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXO1lBQ3RCLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUUzQixNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixFQUFFLENBQUE7WUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLFdBQVcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtZQUUxRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQUM7Z0JBQ3BDLEdBQUc7Z0JBQ0gsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxRQUFRO29CQUNoQixPQUFPLEVBQUUsRUFBRTtpQkFDWjthQUNGLENBQUMsQ0FBQTtZQUVGLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEdBQUcsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUNsRSxPQUFPLEtBQUssQ0FBQTthQUNiO1lBRUQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFN0b3JhZ2VTZXJ2ZXJVcmwgfSBmcm9tICcuLi9zdG9yYWdlLXVybCdcbmltcG9ydCB7IGFzc2VydElzU2VydmVyLCB3cmFwU2lnbmVkRmV0Y2ggfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IE1PRFVMRV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbi8qKlxuICogU2NlbmUtc2NvcGVkIHN0b3JhZ2UgaW50ZXJmYWNlIGZvciBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBpcyBOT1QgZmlsZXN5c3RlbSBzdG9yYWdlIC0gZGF0YSBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZSBzdG9yYWdlIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNjZW5lU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHNjZW5lIHN0b3JhZ2UgYnkga2V5IGZyb20gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHBhcnNlZCBKU09OIHZhbHVlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0PFQgPSB1bmtub3duPihrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBhIHZhbHVlIGluIHNjZW5lIHN0b3JhZ2UgaW4gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzdG9yZSAod2lsbCBiZSBKU09OIHNlcmlhbGl6ZWQpXG4gICAqL1xuICBzZXQ8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj5cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHZhbHVlIGZyb20gc2NlbmUgc3RvcmFnZSBpbiB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBpZiBub3QgZm91bmRcbiAgICovXG4gIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIHNjZW5lLXNjb3BlZCBzdG9yYWdlIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBpbnRlcmFjdCB3aXRoXG4gKiBzY2VuZS1zcGVjaWZpYyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aGVuIHJ1bm5pbmcgb24gc2VydmVyLXNpZGUgc2NlbmVzLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2NlbmVTdG9yYWdlID0gKCk6IElTY2VuZVN0b3JhZ2UgPT4ge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgICBhc3NlcnRJc1NlcnZlcihNT0RVTEVfTkFNRSlcblxuICAgICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldFN0b3JhZ2VTZXJ2ZXJVcmwoKVxuICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vdmFsdWVzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9YFxuXG4gICAgICBjb25zdCBbZXJyb3IsIGRhdGFdID0gYXdhaXQgd3JhcFNpZ25lZEZldGNoPHsgdmFsdWU6IFQgfT4oeyB1cmwgfSlcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBnZXQgc3RvcmFnZSB2YWx1ZSAnJHtrZXl9JzogJHtlcnJvcn1gKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YT8udmFsdWUgPz8gbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZXQ8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZSB9KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNldCBzdG9yYWdlIHZhbHVlICcke2tleX0nOiAke2Vycm9yfWApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGFzc2VydElzU2VydmVyKE1PRFVMRV9OQU1FKVxuXG4gICAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0U3RvcmFnZVNlcnZlclVybCgpXG4gICAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS92YWx1ZXMvJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX1gXG5cbiAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCB3cmFwU2lnbmVkRmV0Y2goe1xuICAgICAgICB1cmwsXG4gICAgICAgIGluaXQ6IHtcbiAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHN0b3JhZ2UgdmFsdWUgJyR7a2V5fSc6ICR7ZXJyb3J9YClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3N0b3JhZ2Uvc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDMUQsT0FBTyxFQUFxQyxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFxQzVFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFrQixFQUFFO0lBQ3BELE9BQU87UUFDTCxLQUFLLENBQUMsR0FBRyxDQUFjLEdBQVc7WUFDaEMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRTNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQTtZQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sV0FBVyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO1lBRTFELE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBRWxFLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEdBQUcsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUMvRCxPQUFPLElBQUksQ0FBQTthQUNaO1lBRUQsT0FBTyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQTtRQUM1QixDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBYyxHQUFXLEVBQUUsS0FBUTtZQUMxQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsRUFBRSxDQUFBO1lBQzNDLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxXQUFXLGtCQUFrQixDQUFD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ZSxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUE7WUFDbkMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxlQUFlO2dCQUN2RCxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU07YUFDbEQsQ0FBQTtZQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUE7UUFDN0IsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRTdG9yYWdlU2VydmVyVXJsIH0gZnJvbSAnLi4vc3RvcmFnZS11cmwnXG5pbXBvcnQgeyBhc3NlcnRJc1NlcnZlciwgd3JhcFNpZ25lZEZldGNoIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBHZXRWYWx1ZXNPcHRpb25zLCBHZXRWYWx1ZXNSZXN1bHQsIE1PRFVMRV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbi8qKlxuICogU2NlbmUtc2NvcGVkIHN0b3JhZ2UgaW50ZXJmYWNlIGZvciBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBpcyBOT1QgZmlsZXN5c3RlbSBzdG9yYWdlIC0gZGF0YSBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZSBzdG9yYWdlIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNjZW5lU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHNjZW5lIHN0b3JhZ2UgYnkga2V5IGZyb20gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHBhcnNlZCBKU09OIHZhbHVlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0PFQgPSB1bmtub3duPihrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBhIHZhbHVlIGluIHNjZW5lIHN0b3JhZ2UgaW4gdGhlIFNlcnZlciBTaWRlIFN0b3JhZ2Ugc2VydmljZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzdG9yZSAod2lsbCBiZSBKU09OIHNlcmlhbGl6ZWQpXG4gICAqL1xuICBzZXQ8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj5cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHZhbHVlIGZyb20gc2NlbmUgc3RvcmFnZSBpbiB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBpZiBub3QgZm91bmRcbiAgICovXG4gIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj5cblxuICAvKipcbiAgICogUmV0dXJucyBrZXktdmFsdWUgZW50cmllcyBmcm9tIHNjZW5lIHN0b3JhZ2UsIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgcHJlZml4LlxuICAgKiBTdXBwb3J0cyBwYWdpbmF0aW9uIHZpYSBsaW1pdCBhbmQgb2Zmc2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHsgcHJlZml4LCBsaW1pdCwgb2Zmc2V0IH0gZm9yIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8geyBkYXRhLCBwYWdpbmF0aW9uOiB7IG9mZnNldCwgdG90YWwgfSB9IGZvciBwYWdpbmF0aW9uIFVJXG4gICAqL1xuICBnZXRWYWx1ZXMob3B0aW9ucz86IEdldFZhbHVlc09wdGlvbnMpOiBQcm9taXNlPEdldFZhbHVlc1Jlc3VsdD5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIHNjZW5lLXNjb3BlZCBzdG9yYWdlIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBpbnRlcmFjdCB3aXRoXG4gKiBzY2VuZS1zcGVjaWZpYyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgU2VydmVyIFNpZGUgU3RvcmFnZSBzZXJ2aWNlLlxuICogVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aGVuIHJ1bm5pbmcgb24gc2VydmVyLXNpZGUgc2NlbmVzLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2NlbmVTdG9yYWdlID0gKCk6IElTY2VuZVN0b3JhZ2UgPT4ge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgICBhc3NlcnRJc1NlcnZlcihNT0RVTEVfTkFNRSlcblxuICAgICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldFN0b3JhZ2VTZXJ2ZXJVcmwoKVxuICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vdmFsdWVzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9YFxuXG4gICAgICBjb25zdCBbZXJyb3IsIGRhdGFdID0gYXdhaXQgd3JhcFNpZ25lZEZldGNoPHsgdmFsdWU6IFQgfT4oeyB1cmwgfSlcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBnZXQgc3RvcmFnZSB2YWx1ZSAnJHtrZXl9JzogJHtlcnJvcn1gKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YT8udmFsdWUgPz8gbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZXQ8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgYXNzZXJ0SXNTZXJ2ZXIoTU9EVUxFX05BTUUpXG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3ZhbHVlcy8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWBcblxuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IHdyYXBTaWduZWRGZXRjaCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgaW5pdDoge1xuICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZSB9KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNldCBzdG9yYWdlIHZhbHVlICcke2tleX0nOiAke2Vycm9yfWApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGFzc2VydElzU2VydmVyKE1PRFVMRV9OQU1FKVxuXG4gICAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0U3RvcmFnZVNlcnZlclVybCgpXG4gICAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS92YWx1ZXMvJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX1gXG5cbiAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCB3cmFwU2lnbmVkRmV0Y2goe1xuICAgICAgICB1cmwsXG4gICAgICAgIGluaXQ6IHtcbiAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIGhlYWRlcnM6IHt9XG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHN0b3JhZ2UgdmFsdWUgJyR7a2V5fSc6ICR7ZXJyb3J9YClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbHVlcyhvcHRpb25zPzogR2V0VmFsdWVzT3B0aW9ucyk6IFByb21pc2U8R2V0VmFsdWVzUmVzdWx0PiB7XG4gICAgICBhc3NlcnRJc1NlcnZlcihNT0RVTEVfTkFNRSlcblxuICAgICAgY29uc3QgeyBwcmVmaXgsIGxpbWl0LCBvZmZzZXQgfSA9IG9wdGlvbnMgPz8ge31cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRTdG9yYWdlU2VydmVyVXJsKClcbiAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgIGlmICghIXByZWZpeCkge1xuICAgICAgICBwYXJ0cy5wdXNoKGBwcmVmaXg9JHtlbmNvZGVVUklDb21wb25lbnQocHJlZml4KX1gKVxuICAgICAgfVxuXG4gICAgICBpZiAoISFsaW1pdCkge1xuICAgICAgICBwYXJ0cy5wdXNoKGBsaW1pdD0ke2xpbWl0fWApXG4gICAgICB9XG5cbiAgICAgIGlmICghIW9mZnNldCkge1xuICAgICAgICBwYXJ0cy5wdXNoKGBvZmZzZXQ9JHtvZmZzZXR9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnkgPSBwYXJ0cy5qb2luKCcmJylcbiAgICAgIGNvbnN0IHVybCA9IHF1ZXJ5ID8gYCR7YmFzZVVybH0vdmFsdWVzPyR7cXVlcnl9YCA6IGAke2Jhc2VVcmx9L3ZhbHVlc2BcblxuICAgICAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCB3cmFwU2lnbmVkRmV0Y2g8R2V0VmFsdWVzUmVzdWx0Pih7IHVybCB9KVxuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGdldCBzdG9yYWdlIHZhbHVlczogJHtlcnJvcn1gKVxuICAgICAgICByZXR1cm4geyBkYXRhOiBbXSwgcGFnaW5hdGlvbjogeyBvZmZzZXQ6IDAsIHRvdGFsOiAwIH0gfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGEgPz8gW11cbiAgICAgIGNvbnN0IHJlcXVlc3RlZE9mZnNldCA9IG9mZnNldCA/PyAwXG4gICAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgICBvZmZzZXQ6IHJlc3BvbnNlPy5wYWdpbmF0aW9uPy5vZmZzZXQgPz8gcmVxdWVzdGVkT2Zmc2V0LFxuICAgICAgICB0b3RhbDogcmVzcG9uc2U/LnBhZ2luYXRpb24/LnRvdGFsID8/IGRhdGEubGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRhdGEsIHBhZ2luYXRpb24gfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export { EnvVar } from './env-var'
2
- export { Storage, IStorage, ISceneStorage, IPlayerStorage } from './storage'
2
+ export { Storage, IStorage, ISceneStorage, IPlayerStorage, GetValuesOptions, GetValuesResult } from './storage'
@@ -1 +1,22 @@
1
1
  export const MODULE_NAME = 'Storage'
2
+
3
+ /**
4
+ * Options for getValues pagination and filtering.
5
+ */
6
+ export interface GetValuesOptions {
7
+ prefix?: string
8
+ limit?: number
9
+ offset?: number
10
+ }
11
+
12
+ /**
13
+ * Result of getValues with pagination metadata.
14
+ */
15
+ export interface GetValuesResult {
16
+ /** Key-value entries for the current page. */
17
+ data: Array<{ key: string; value: unknown }>
18
+ pagination: {
19
+ offset: number
20
+ total: number
21
+ }
22
+ }
@@ -1,7 +1,8 @@
1
1
  import { createSceneStorage, ISceneStorage } from './scene'
2
2
  import { createPlayerStorage, IPlayerStorage } from './player'
3
3
 
4
- // Re-export interfaces
4
+ // Re-export interfaces and types
5
+ export { GetValuesOptions, GetValuesResult } from './constants'
5
6
  export { ISceneStorage } from './scene'
6
7
  export { IPlayerStorage } from './player'
7
8
 
@@ -25,6 +26,7 @@ const createStorage = (): IStorage => {
25
26
  get: sceneStorage.get,
26
27
  set: sceneStorage.set,
27
28
  delete: sceneStorage.delete,
29
+ getValues: sceneStorage.getValues,
28
30
  // Keep player as nested property
29
31
  player: playerStorage
30
32
  }
@@ -34,8 +36,8 @@ const createStorage = (): IStorage => {
34
36
  * Storage provides methods to store and retrieve key-value data from the
35
37
  * Server Side Storage service.
36
38
  *
37
- * - Use Storage.get/set/delete for scene-scoped storage
38
- * - Use Storage.player.get/set/delete for player-scoped storage
39
+ * - Use Storage.get/set/delete/getValues for scene-scoped storage
40
+ * - Use Storage.player.get/set/delete/getValues for player-scoped storage
39
41
  *
40
42
  * This module only works when running on server-side scenes.
41
43
  */
@@ -1,6 +1,6 @@
1
1
  import { getStorageServerUrl } from '../storage-url'
2
2
  import { assertIsServer, wrapSignedFetch } from '../utils'
3
- import { MODULE_NAME } from './constants'
3
+ import { GetValuesOptions, GetValuesResult, MODULE_NAME } from './constants'
4
4
 
5
5
  /**
6
6
  * Player-scoped storage interface for key-value pairs from the Server Side Storage service.
@@ -31,6 +31,15 @@ export interface IPlayerStorage {
31
31
  * @returns A promise that resolves to true if deleted, false if not found
32
32
  */
33
33
  delete(address: string, key: string): Promise<boolean>
34
+
35
+ /**
36
+ * Returns key-value entries from a player's storage, optionally filtered by prefix.
37
+ * Supports pagination via limit and offset.
38
+ * @param address - The player's wallet address
39
+ * @param options - Optional { prefix, limit, offset } for filtering and pagination.
40
+ * @returns A promise that resolves to { data, pagination: { offset, total } } for pagination UI
41
+ */
42
+ getValues(address: string, options?: GetValuesOptions): Promise<GetValuesResult>
34
43
  }
35
44
 
36
45
  /**
@@ -101,6 +110,47 @@ export const createPlayerStorage = (): IPlayerStorage => {
101
110
  }
102
111
 
103
112
  return true
113
+ },
114
+
115
+ async getValues(address: string, options?: GetValuesOptions): Promise<GetValuesResult> {
116
+ assertIsServer(MODULE_NAME)
117
+
118
+ const { prefix, limit, offset } = options ?? {}
119
+ const baseUrl = await getStorageServerUrl()
120
+ const parts: string[] = []
121
+
122
+ if (!!prefix) {
123
+ parts.push(`prefix=${encodeURIComponent(prefix)}`)
124
+ }
125
+
126
+ if (!!limit) {
127
+ parts.push(`limit=${limit}`)
128
+ }
129
+
130
+ if (!!offset) {
131
+ parts.push(`offset=${offset}`)
132
+ }
133
+
134
+ const query = parts.join('&')
135
+ const url = query
136
+ ? `${baseUrl}/players/${encodeURIComponent(address)}/values?${query}`
137
+ : `${baseUrl}/players/${encodeURIComponent(address)}/values`
138
+
139
+ const [error, response] = await wrapSignedFetch<GetValuesResult>({ url })
140
+
141
+ if (error) {
142
+ console.error(`Failed to get player storage values for '${address}': ${error}`)
143
+ return { data: [], pagination: { offset: 0, total: 0 } }
144
+ }
145
+
146
+ const data = response?.data ?? []
147
+ const requestedOffset = offset ?? 0
148
+ const pagination = {
149
+ offset: response?.pagination?.offset ?? requestedOffset,
150
+ total: response?.pagination?.total ?? data.length
151
+ }
152
+
153
+ return { data, pagination }
104
154
  }
105
155
  }
106
156
  }
@@ -1,6 +1,6 @@
1
1
  import { getStorageServerUrl } from '../storage-url'
2
2
  import { assertIsServer, wrapSignedFetch } from '../utils'
3
- import { MODULE_NAME } from './constants'
3
+ import { GetValuesOptions, GetValuesResult, MODULE_NAME } from './constants'
4
4
 
5
5
  /**
6
6
  * Scene-scoped storage interface for key-value pairs from the Server Side Storage service.
@@ -27,6 +27,14 @@ export interface ISceneStorage {
27
27
  * @returns A promise that resolves to true if deleted, false if not found
28
28
  */
29
29
  delete(key: string): Promise<boolean>
30
+
31
+ /**
32
+ * Returns key-value entries from scene storage, optionally filtered by prefix.
33
+ * Supports pagination via limit and offset.
34
+ * @param options - Optional { prefix, limit, offset } for filtering and pagination.
35
+ * @returns A promise that resolves to { data, pagination: { offset, total } } for pagination UI
36
+ */
37
+ getValues(options?: GetValuesOptions): Promise<GetValuesResult>
30
38
  }
31
39
 
32
40
  /**
@@ -97,6 +105,45 @@ export const createSceneStorage = (): ISceneStorage => {
97
105
  }
98
106
 
99
107
  return true
108
+ },
109
+
110
+ async getValues(options?: GetValuesOptions): Promise<GetValuesResult> {
111
+ assertIsServer(MODULE_NAME)
112
+
113
+ const { prefix, limit, offset } = options ?? {}
114
+ const baseUrl = await getStorageServerUrl()
115
+ const parts: string[] = []
116
+
117
+ if (!!prefix) {
118
+ parts.push(`prefix=${encodeURIComponent(prefix)}`)
119
+ }
120
+
121
+ if (!!limit) {
122
+ parts.push(`limit=${limit}`)
123
+ }
124
+
125
+ if (!!offset) {
126
+ parts.push(`offset=${offset}`)
127
+ }
128
+
129
+ const query = parts.join('&')
130
+ const url = query ? `${baseUrl}/values?${query}` : `${baseUrl}/values`
131
+
132
+ const [error, response] = await wrapSignedFetch<GetValuesResult>({ url })
133
+
134
+ if (error) {
135
+ console.error(`Failed to get storage values: ${error}`)
136
+ return { data: [], pagination: { offset: 0, total: 0 } }
137
+ }
138
+
139
+ const data = response?.data ?? []
140
+ const requestedOffset = offset ?? 0
141
+ const pagination = {
142
+ offset: response?.pagination?.offset ?? requestedOffset,
143
+ total: response?.pagination?.total ?? data.length
144
+ }
145
+
146
+ return { data, pagination }
100
147
  }
101
148
  }
102
149
  }