@crowdedkingdoms/crowdy-dsh 0.4.8-dev.1 → 0.4.9-dev.1

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.
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "package": "@crowdedkingdoms/crowdy-dsh",
3
- "version": "0.4.8",
4
- "builtAt": "2026-10-15T22:43:35.458Z",
3
+ "version": "0.4.9",
4
+ "builtAt": "2026-10-16T00:55:35.856Z",
5
5
  "source": {
6
6
  "repository": "CrowdedKingdoms/crowdy-dsh",
7
- "commit": "6be157fc87333ca64a2688d5e2ab77c9e57101dc",
7
+ "commit": "00f9782d0b449acfcec6025c2e63d52298a0e1ef",
8
8
  "dirty": false
9
9
  },
10
10
  "upstream": {
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "crowdyjs": {
17
17
  "name": "@crowdedkingdoms/crowdyjs",
18
- "version": "18.12.0-dev.1",
18
+ "version": "18.13.0-dev.1",
19
19
  "source": "node_modules"
20
20
  },
21
21
  "files": {
@@ -112,7 +112,7 @@
112
112
  "manifest.webmanifest": "sha256:9b54d57eea00f2fdd1affe6e7999a4209a515755f12ac1a3299da2d55e178d4c",
113
113
  "preview/bootstrap-CYECZNXt.js": "sha256:9f303a0485c0badfdd19fad0c357ef050c5b9a343744ab5bf0c70015e7d95092",
114
114
  "preview/crowdy-boot-Cklh1qNl.js": "sha256:b21e8eb126e1cd8a52159d2d577e610df6c8af36a436f9ed5028cfabd11a85ff",
115
- "preview/vfs-image.tar.gz": "sha256:95c3425e186deba4ce4355980db01d6451cca0404591c372180bef6c33ea2e5b",
115
+ "preview/vfs-image.tar.gz": "sha256:9eec4e84bf3530fa569beb85862ce4d5c4b914d49c3c86802fe3639e72bab6d0",
116
116
  "preview/worker-C8-_ANaz.js": "sha256:81099e5732dfe0c32bacd5897316b7956c5a0a22da01b4a0c6e21d0a3b9d9aa1"
117
117
  }
118
118
  }
@@ -10340,6 +10340,28 @@ function parseKitRefusal(message) {
10340
10340
  const m = CODED.exec(message);
10341
10341
  return m ? { code: m[1], text: m[2] } : null;
10342
10342
  }
10343
+ var KIT_CODES = {
10344
+ BAD_REQUEST: "bad_request",
10345
+ NOT_FOUND: "not_found",
10346
+ FORBIDDEN: "forbidden",
10347
+ CONFLICT: "conflict",
10348
+ FULL: "full",
10349
+ LIMIT: "limit",
10350
+ COOLDOWN: "cooldown",
10351
+ NOT_YOUR_TURN: "not_your_turn",
10352
+ NOT_MEMBER: "not_member",
10353
+ STARTED: "started",
10354
+ FINISHED: "finished",
10355
+ NOT_READY: "not_ready",
10356
+ RESERVED: "reserved",
10357
+ EMPTY: "empty",
10358
+ OUT_OF_REACH: "out_of_reach",
10359
+ EXPIRED: "expired",
10360
+ INSUFFICIENT: "insufficient",
10361
+ ALREADY_DONE: "already_done",
10362
+ /** A hub the call needed did not answer: the kit sends it again with its action id. */
10363
+ UNAVAILABLE: "unavailable"
10364
+ };
10343
10365
  var KitError = class _KitError extends CrowdyExecError {
10344
10366
  constructor(code, text, cause) {
10345
10367
  super("AppError", `kit:${code}: ${text}`, cause);
@@ -10906,6 +10928,133 @@ var LeaderboardHandle = class {
10906
10928
  }
10907
10929
  };
10908
10930
 
10931
+ var TOPIC = "market";
10932
+ var MarketCore = class {
10933
+ constructor(runtime, nodeType, key) {
10934
+ this.runtime = runtime;
10935
+ this.nodeType = nodeType;
10936
+ this.key = key;
10937
+ this.view = new HubState(runtime, nodeType, key, TOPIC);
10938
+ const source = { nodeType, key, topic: TOPIC };
10939
+ this.orders = new PrivateState(runtime, { ...source, what: "orders", read: () => runtime.call(nodeType, key, "orders") });
10940
+ this.trades = new PrivateState(runtime, { ...source, what: "trades", read: () => runtime.call(nodeType, key, "trades") });
10941
+ }
10942
+ change(method, args) {
10943
+ return this.runtime.call(this.nodeType, this.key, method, args, { action: true });
10944
+ }
10945
+ };
10946
+ var MarketsKit = class {
10947
+ constructor(core) {
10948
+ this.core = core;
10949
+ }
10950
+ at(key = "town") {
10951
+ return new MarketHandle(this.core(key));
10952
+ }
10953
+ };
10954
+ var MarketHandle = class {
10955
+ constructor(core) {
10956
+ this.core = core;
10957
+ }
10958
+ get view() {
10959
+ return this.core.view;
10960
+ }
10961
+ get orders() {
10962
+ return this.core.orders;
10963
+ }
10964
+ async watch() {
10965
+ const [view] = await Promise.all([this.core.view.start(), this.core.orders.start()]);
10966
+ return view;
10967
+ }
10968
+ async unwatch() {
10969
+ await Promise.all([this.core.view.stop(), this.core.orders.stop()]);
10970
+ }
10971
+ book(item) {
10972
+ return this.core.runtime.call(this.core.nodeType, this.core.key, "book", { item });
10973
+ }
10974
+ /**
10975
+ * Places a limit order; a buy holds `price * count` of the market's currency, a sell the items.
10976
+ * @throws {KitError} `insufficient`, `limit` (open orders), `not_found` (no book), `unavailable`.
10977
+ */
10978
+ order(order) {
10979
+ return this.core.change("order", order);
10980
+ }
10981
+ /** Cancels an open order; what it still holds comes back. @throws {KitError} `not_found`. */
10982
+ cancel(order) {
10983
+ return this.core.change("cancel", { order });
10984
+ }
10985
+ };
10986
+ var ShopsKit = class {
10987
+ constructor(core) {
10988
+ this.core = core;
10989
+ }
10990
+ at(key = "town") {
10991
+ return new ShopHandle(this.core(key));
10992
+ }
10993
+ };
10994
+ var ShopHandle = class {
10995
+ constructor(core) {
10996
+ this.core = core;
10997
+ }
10998
+ get view() {
10999
+ return this.core.view;
11000
+ }
11001
+ watch() {
11002
+ return this.core.view.start();
11003
+ }
11004
+ unwatch() {
11005
+ return this.core.view.stop();
11006
+ }
11007
+ vendors() {
11008
+ return this.core.runtime.call(this.core.nodeType, this.core.key, "vendors");
11009
+ }
11010
+ /** Buys `count` (one by default). @throws {KitError} `insufficient` (gold or stock), `limit`, `full`, `not_found`, `unavailable`. */
11011
+ buy(vendor, item, count) {
11012
+ return this.core.change("buy", count === void 0 ? { vendor, item } : { vendor, item, count });
11013
+ }
11014
+ /** Sells `count` (one by default). @throws {KitError} `forbidden` (it does not buy them), `insufficient`, `unavailable`. */
11015
+ sell(vendor, item, count) {
11016
+ return this.core.change("sell", count === void 0 ? { vendor, item } : { vendor, item, count });
11017
+ }
11018
+ };
11019
+ var TradesKit = class {
11020
+ constructor(core) {
11021
+ this.core = core;
11022
+ }
11023
+ at(key = "town") {
11024
+ return new TradeDesk(this.core(key));
11025
+ }
11026
+ };
11027
+ var TradeDesk = class {
11028
+ constructor(core) {
11029
+ this.core = core;
11030
+ }
11031
+ get mine() {
11032
+ return this.core.trades;
11033
+ }
11034
+ async watch() {
11035
+ return this.core.trades.start();
11036
+ }
11037
+ unwatch() {
11038
+ return this.core.trades.stop();
11039
+ }
11040
+ /** Opens a trade with `player`; resolves with its id. */
11041
+ open(player) {
11042
+ return this.core.change("trade", { with: Number(player) });
11043
+ }
11044
+ /** Offers `bundle` (held at once; an empty one withdraws). @throws {KitError} `insufficient`, `forbidden`, `finished`. */
11045
+ offer(trade, bundle) {
11046
+ return this.core.change("offer", { trade, bundle });
11047
+ }
11048
+ /** Accepts the offers as they stand; resolves with the trade's state. @throws {KitError} `not_ready`, `finished`. */
11049
+ accept(trade) {
11050
+ return this.core.change("accept", { trade });
11051
+ }
11052
+ /** Calls it off; what each offered comes back. */
11053
+ decline(trade) {
11054
+ return this.core.change("decline", { trade });
11055
+ }
11056
+ };
11057
+
10909
11058
  var WritableKitStore = class {
10910
11059
  constructor(initial) {
10911
11060
  this.listeners = /* @__PURE__ */ new Set();
@@ -11080,6 +11229,247 @@ var Duel = class {
11080
11229
  }
11081
11230
  };
11082
11231
 
11232
+ var TOPIC2 = "player";
11233
+ var Relay = class extends WritableKitStore {
11234
+ constructor() {
11235
+ super(void 0);
11236
+ }
11237
+ attach(source) {
11238
+ source.subscribe((v) => this.set(v));
11239
+ if (source.get() !== void 0)
11240
+ this.set(source.get());
11241
+ }
11242
+ };
11243
+ var PlayerKit = class {
11244
+ constructor(runtime, nodeType = "player", playerKey) {
11245
+ this.runtime = runtime;
11246
+ this.nodeType = nodeType;
11247
+ this.playerKey = playerKey;
11248
+ this.profile = new Relay();
11249
+ this.inventory = new Relay();
11250
+ this.wallet = new Relay();
11251
+ this.progress = new Relay();
11252
+ this.parts = null;
11253
+ this.rulesRead = null;
11254
+ this.events = /* @__PURE__ */ new Set();
11255
+ }
11256
+ /** The hub's key: the player's id. */
11257
+ async key() {
11258
+ const key = this.playerKey ?? await this.runtime.playerId();
11259
+ if (key === null || key === void 0) {
11260
+ throw new CrowdyError({ message: "the kit does not know which player it is: pass playerId to client.kit()" });
11261
+ }
11262
+ return key;
11263
+ }
11264
+ ready() {
11265
+ this.parts ?? (this.parts = (async () => {
11266
+ const key = await this.key();
11267
+ const read = (method) => () => this.runtime.call(this.nodeType, key, method);
11268
+ const source = { nodeType: this.nodeType, key, topic: TOPIC2 };
11269
+ const parts = {
11270
+ key,
11271
+ profile: new HubState(this.runtime, this.nodeType, key, TOPIC2),
11272
+ inventory: new PrivateState(this.runtime, { ...source, what: "inventory", read: read("inventory") }),
11273
+ wallet: new PrivateState(this.runtime, { ...source, what: "wallet", read: read("wallet") }),
11274
+ progress: new PrivateState(this.runtime, { ...source, what: "progress", read: read("progress") })
11275
+ };
11276
+ this.profile.attach(parts.profile);
11277
+ this.inventory.attach(parts.inventory);
11278
+ this.wallet.attach(parts.wallet);
11279
+ this.progress.attach(parts.progress);
11280
+ parts.profile.onEvent((body) => {
11281
+ for (const l of [...this.events])
11282
+ l(body);
11283
+ });
11284
+ return parts;
11285
+ })().catch((e) => {
11286
+ this.parts = null;
11287
+ throw e;
11288
+ }));
11289
+ return this.parts;
11290
+ }
11291
+ /** Mirrors the profile and reads what only the player reads (all of it, or the parts named). */
11292
+ async watch(...which) {
11293
+ const parts = await this.ready();
11294
+ const all = which.length ? which : ["profile", "inventory", "wallet", "progress"];
11295
+ await Promise.all(all.map((w) => parts[w].start()));
11296
+ }
11297
+ async unwatch() {
11298
+ if (!this.parts)
11299
+ return;
11300
+ const parts = await this.parts;
11301
+ await Promise.all([parts.profile.stop(), parts.inventory.stop(), parts.wallet.stop(), parts.progress.stop()]);
11302
+ }
11303
+ /** Levels gained and achievements unlocked, as the `player` topic announces them. */
11304
+ onEvent(listener) {
11305
+ this.events.add(listener);
11306
+ return () => this.events.delete(listener);
11307
+ }
11308
+ /** Calls the player's hub; a change carries an action id. */
11309
+ async call(method, args, change = true) {
11310
+ return this.runtime.call(this.nodeType, await this.key(), method, args ?? null, change ? { action: true } : {});
11311
+ }
11312
+ /** Everything the hub keeps for the player. */
11313
+ me() {
11314
+ return this.call("me", null, false);
11315
+ }
11316
+ /** The game's items, recipes, loot tables, quests and achievements (read once). */
11317
+ rules() {
11318
+ this.rulesRead ?? (this.rulesRead = this.call("rules", null, false).catch((e) => {
11319
+ this.rulesRead = null;
11320
+ throw e;
11321
+ }));
11322
+ return this.rulesRead;
11323
+ }
11324
+ /** Another player's public profile. */
11325
+ profileOf(player) {
11326
+ return this.runtime.call(this.nodeType, String(player), "profile");
11327
+ }
11328
+ };
11329
+ var InventoryKit = class {
11330
+ constructor(player) {
11331
+ this.player = player;
11332
+ }
11333
+ get items() {
11334
+ return this.player.inventory;
11335
+ }
11336
+ async watch() {
11337
+ await this.player.watch("inventory");
11338
+ return this.player.inventory.get();
11339
+ }
11340
+ /** How many of `item` the player has, as last read. */
11341
+ count(item) {
11342
+ return (this.player.inventory.get()?.stacks ?? []).filter((s) => s.item === item).reduce((n, s) => n + s.count, 0);
11343
+ }
11344
+ /** @throws {KitError} `insufficient`. */
11345
+ discard(item, count) {
11346
+ return this.player.call("discard", { item, count });
11347
+ }
11348
+ /** Moves what fits from the mail into the inventory; resolves with what moved. */
11349
+ takeMail() {
11350
+ return this.player.call("take_mail");
11351
+ }
11352
+ };
11353
+ var WalletKit = class {
11354
+ constructor(player) {
11355
+ this.player = player;
11356
+ }
11357
+ get balances() {
11358
+ return this.player.wallet;
11359
+ }
11360
+ async watch() {
11361
+ await this.player.watch("wallet");
11362
+ return this.player.wallet.get();
11363
+ }
11364
+ /** The balance of `currency`, as last read. */
11365
+ balance(currency) {
11366
+ return this.player.wallet.get()?.balances[currency] ?? 0;
11367
+ }
11368
+ };
11369
+ var ProgressionKit = class {
11370
+ constructor(player) {
11371
+ this.player = player;
11372
+ }
11373
+ get progress() {
11374
+ return this.player.progress;
11375
+ }
11376
+ get profile() {
11377
+ return this.player.profile;
11378
+ }
11379
+ async watch() {
11380
+ await this.player.watch("profile", "progress");
11381
+ return this.player.progress.get();
11382
+ }
11383
+ /** Another player's public profile. */
11384
+ profileOf(player) {
11385
+ return this.player.profileOf(player);
11386
+ }
11387
+ /** Called with each level the player reaches. */
11388
+ onLevel(listener) {
11389
+ return this.player.onEvent((e) => e.type === "level" && listener(e.level));
11390
+ }
11391
+ };
11392
+ var AchievementsKit = class {
11393
+ constructor(player) {
11394
+ this.player = player;
11395
+ }
11396
+ async watch() {
11397
+ await this.player.watch("profile", "progress");
11398
+ return this.list();
11399
+ }
11400
+ /** The achievements with their counts, as last read (hidden ones once unlocked). */
11401
+ list() {
11402
+ return this.player.progress.get()?.achievements ?? [];
11403
+ }
11404
+ /** Called with each achievement the player unlocks. */
11405
+ onUnlock(listener) {
11406
+ return this.player.onEvent((e) => e.type === "achievement" && listener(e.achievement));
11407
+ }
11408
+ };
11409
+ var QuestsKit = class {
11410
+ constructor(player) {
11411
+ this.player = player;
11412
+ }
11413
+ async watch() {
11414
+ await this.player.watch("progress");
11415
+ return this.list();
11416
+ }
11417
+ list() {
11418
+ return this.player.progress.get()?.quests ?? [];
11419
+ }
11420
+ /** @throws {KitError} `conflict` (taken, done, or another first), `forbidden` (level), `not_found`. */
11421
+ accept(quest) {
11422
+ return this.player.call("accept", { quest });
11423
+ }
11424
+ /** Claims a complete quest's reward. @throws {KitError} `not_ready`, `full`. */
11425
+ claim(quest) {
11426
+ return this.player.call("claim", { quest });
11427
+ }
11428
+ /**
11429
+ * Reports one of the counters the game lets a client report (a tutorial step).
11430
+ * @throws {KitError} `forbidden` for a counter the game's hubs count.
11431
+ */
11432
+ step(counter) {
11433
+ return this.player.call("step", { counter });
11434
+ }
11435
+ };
11436
+ var CraftingKit = class {
11437
+ constructor(player) {
11438
+ this.player = player;
11439
+ }
11440
+ async recipes() {
11441
+ return (await this.player.rules()).recipes;
11442
+ }
11443
+ /** Crafts `times` (once by default). @throws {KitError} `insufficient`, `full`, `forbidden` (level), `not_found`. */
11444
+ craft(recipe, times) {
11445
+ return this.player.call("craft", times === void 0 ? { recipe } : { recipe, times });
11446
+ }
11447
+ };
11448
+ var LootKit = class {
11449
+ constructor(player) {
11450
+ this.player = player;
11451
+ }
11452
+ async tables() {
11453
+ return (await this.player.rules()).loot;
11454
+ }
11455
+ /** Pays the table's cost and rolls once. @throws {KitError} `insufficient`, `full`, `not_found`. */
11456
+ open(table) {
11457
+ return this.player.call("open", { table });
11458
+ }
11459
+ };
11460
+ var ProductionKit = class {
11461
+ constructor(player) {
11462
+ this.player = player;
11463
+ }
11464
+ async view() {
11465
+ return (await this.player.me()).production;
11466
+ }
11467
+ /** Moves what the producers made into the inventory, as far as it fits. */
11468
+ collect() {
11469
+ return this.player.call("collect");
11470
+ }
11471
+ };
11472
+
11083
11473
  var NpcsKit = class {
11084
11474
  constructor(runtime, options = {}) {
11085
11475
  this.runtime = runtime;
@@ -11793,6 +12183,10 @@ var KitRuntime = class {
11793
12183
  return await conn.call(nodeType, key, method, sent, { timeoutMs: options.timeoutMs });
11794
12184
  } catch (e) {
11795
12185
  const err = KitError.from(e);
12186
+ if (attempt < this.retries && actionId && err instanceof KitError && err.code === KIT_CODES.UNAVAILABLE) {
12187
+ await sleep(Math.min(2e3, 200 * 2 ** attempt) * (0.5 + Math.random() / 2));
12188
+ continue;
12189
+ }
11796
12190
  if (attempt < this.retries && err instanceof CrowdyExecError && !(err instanceof KitError)) {
11797
12191
  if (err.status === "Busy" && err.rateLimited) {
11798
12192
  this.budget.hold(err.retryAfterMs ?? 1e3);
@@ -12245,6 +12639,17 @@ var GameKitClient = class {
12245
12639
  this.arenasKit = null;
12246
12640
  this.racingKit = null;
12247
12641
  this.territoryKit = null;
12642
+ this.playerKit = null;
12643
+ this.economy = /* @__PURE__ */ new Map();
12644
+ this.markets = /* @__PURE__ */ new Map();
12645
+ this.marketCore = (key) => {
12646
+ let core = this.markets.get(key);
12647
+ if (!core) {
12648
+ core = new MarketCore(this.runtime, this.options.nodes?.market ?? "market", key);
12649
+ this.markets.set(key, core);
12650
+ }
12651
+ return core;
12652
+ };
12248
12653
  this.social = new SocialKit(appId, domains.teams, domains.channels, domains.udp, gameApps, options.social);
12249
12654
  this.runtime = new KitRuntime(String(appId), domains.exec, options, domains.whoAmI);
12250
12655
  }
@@ -12304,6 +12709,60 @@ var GameKitClient = class {
12304
12709
  get territory() {
12305
12710
  return this.territoryKit ?? (this.territoryKit = new TerritoryKit(this.runtime, this.options.nodes?.territory, this.options.nodes?.zone));
12306
12711
  }
12712
+ /**
12713
+ * The caller's own `player` hub: what they own and what they did. The economy lives in hub
12714
+ * state and is not a ledger. The modules below are views of it.
12715
+ */
12716
+ get player() {
12717
+ return this.playerKit ?? (this.playerKit = new PlayerKit(this.runtime, this.options.nodes?.player));
12718
+ }
12719
+ view(name, make) {
12720
+ if (!this.economy.has(name))
12721
+ this.economy.set(name, make(this.player));
12722
+ return this.economy.get(name);
12723
+ }
12724
+ /** The player's items: stacks in slots, and mail for what did not fit. */
12725
+ get inventory() {
12726
+ return this.view("inventory", (p) => new InventoryKit(p));
12727
+ }
12728
+ /** The player's soft currencies. */
12729
+ get wallet() {
12730
+ return this.view("wallet", (p) => new WalletKit(p));
12731
+ }
12732
+ /** Experience, levels and public profiles. */
12733
+ get progression() {
12734
+ return this.view("progression", (p) => new ProgressionKit(p));
12735
+ }
12736
+ get achievements() {
12737
+ return this.view("achievements", (p) => new AchievementsKit(p));
12738
+ }
12739
+ /** Quests, first-session tutorials among them. */
12740
+ get quests() {
12741
+ return this.view("quests", (p) => new QuestsKit(p));
12742
+ }
12743
+ get crafting() {
12744
+ return this.view("crafting", (p) => new CraftingKit(p));
12745
+ }
12746
+ /** Loot tables with pity. */
12747
+ get loot() {
12748
+ return this.view("loot", (p) => new LootKit(p));
12749
+ }
12750
+ /** Idle production that catches up on the time away. */
12751
+ get production() {
12752
+ return this.view("production", (p) => new ProductionKit(p));
12753
+ }
12754
+ /** Markets' order books. */
12755
+ get market() {
12756
+ return this.view("market", () => new MarketsKit(this.marketCore));
12757
+ }
12758
+ /** Markets' vendors. */
12759
+ get shops() {
12760
+ return this.view("shops", () => new ShopsKit(this.marketCore));
12761
+ }
12762
+ /** Trades between two players at a market. */
12763
+ get trades() {
12764
+ return this.view("trades", () => new TradesKit(this.marketCore));
12765
+ }
12307
12766
  /** Composing and deploying the app's tree of starter hubs (developers). */
12308
12767
  get topology() {
12309
12768
  return this.topologyKit ?? (this.topologyKit = new KitTopology(String(this.appId), this.domains.exec));
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@crowdedkingdoms/crowdyjs",
3
- "version": "18.12.0-dev.1",
3
+ "version": "18.13.0-dev.1",
4
4
  "source": "node_modules"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowdedkingdoms/crowdy-dsh",
3
- "version": "0.4.8-dev.1",
3
+ "version": "0.4.9-dev.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -94,11 +94,11 @@
94
94
  "crowdyDsh": {
95
95
  "build": {
96
96
  "package": "@crowdedkingdoms/crowdy-dsh",
97
- "version": "0.4.8",
98
- "builtAt": "2026-10-15T22:43:35.458Z",
97
+ "version": "0.4.9",
98
+ "builtAt": "2026-10-16T00:55:35.856Z",
99
99
  "source": {
100
100
  "repository": "CrowdedKingdoms/crowdy-dsh",
101
- "commit": "6be157fc87333ca64a2688d5e2ab77c9e57101dc",
101
+ "commit": "00f9782d0b449acfcec6025c2e63d52298a0e1ef",
102
102
  "dirty": false
103
103
  },
104
104
  "upstream": {
@@ -109,7 +109,7 @@
109
109
  },
110
110
  "crowdyjs": {
111
111
  "name": "@crowdedkingdoms/crowdyjs",
112
- "version": "18.12.0-dev.1",
112
+ "version": "18.13.0-dev.1",
113
113
  "source": "node_modules"
114
114
  },
115
115
  "files": {
@@ -206,7 +206,7 @@
206
206
  "manifest.webmanifest": "sha256:9b54d57eea00f2fdd1affe6e7999a4209a515755f12ac1a3299da2d55e178d4c",
207
207
  "preview/bootstrap-CYECZNXt.js": "sha256:9f303a0485c0badfdd19fad0c357ef050c5b9a343744ab5bf0c70015e7d95092",
208
208
  "preview/crowdy-boot-Cklh1qNl.js": "sha256:b21e8eb126e1cd8a52159d2d577e610df6c8af36a436f9ed5028cfabd11a85ff",
209
- "preview/vfs-image.tar.gz": "sha256:95c3425e186deba4ce4355980db01d6451cca0404591c372180bef6c33ea2e5b",
209
+ "preview/vfs-image.tar.gz": "sha256:9eec4e84bf3530fa569beb85862ce4d5c4b914d49c3c86802fe3639e72bab6d0",
210
210
  "preview/worker-C8-_ANaz.js": "sha256:81099e5732dfe0c32bacd5897316b7956c5a0a22da01b4a0c6e21d0a3b9d9aa1"
211
211
  }
212
212
  }