tempest.games 0.2.100 → 0.2.101

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/app/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>TEMPEST</title>
8
- <script type="module" crossorigin src="/assets/index-BLzwxFXa.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-CmrgJmXA.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-DZ_4vJcE.css">
10
10
  </head>
11
11
  <body>
@@ -45817,7 +45817,52 @@ for (const e of _i) {
45817
45817
  (t2.configurable || t2.enumerable || t2.writable) && (t2.configurable = false, t2.enumerable = false, t2.writable = false, Object.defineProperty(e, "prototype", t2));
45818
45818
  }
45819
45819
 
45820
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/utils-CLZnJdb_.mjs
45820
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/codes-DagpWZLc.mjs
45821
+ function mergeWithoutOverrides(obj1, ...objs) {
45822
+ const newObj = Object.assign(emptyObject(), obj1);
45823
+ for (const overrides of objs)
45824
+ for (const key in overrides) {
45825
+ if (key in newObj && newObj[key] !== overrides[key])
45826
+ throw new Error(`Duplicate key ${key}`);
45827
+ newObj[key] = overrides[key];
45828
+ }
45829
+ return newObj;
45830
+ }
45831
+ function isObject(value) {
45832
+ return !!value && !Array.isArray(value) && typeof value === "object";
45833
+ }
45834
+ function isFunction(fn2) {
45835
+ return typeof fn2 === "function";
45836
+ }
45837
+ function emptyObject() {
45838
+ return Object.create(null);
45839
+ }
45840
+ var asyncIteratorsSupported = typeof Symbol === "function" && !!Symbol.asyncIterator;
45841
+ function isAsyncIterable(value) {
45842
+ return asyncIteratorsSupported && isObject(value) && Symbol.asyncIterator in value;
45843
+ }
45844
+ var run = (fn2) => fn2();
45845
+ function identity(it2) {
45846
+ return it2;
45847
+ }
45848
+ function abortSignalsAnyPonyfill(signals) {
45849
+ if (typeof AbortSignal.any === "function")
45850
+ return AbortSignal.any(signals);
45851
+ const ac = new AbortController;
45852
+ for (const signal of signals) {
45853
+ if (signal.aborted) {
45854
+ trigger();
45855
+ break;
45856
+ }
45857
+ signal.addEventListener("abort", trigger, { once: true });
45858
+ }
45859
+ return ac.signal;
45860
+ function trigger() {
45861
+ ac.abort();
45862
+ for (const signal of signals)
45863
+ signal.removeEventListener("abort", trigger);
45864
+ }
45865
+ }
45821
45866
  var TRPC_ERROR_CODES_BY_KEY = {
45822
45867
  PARSE_ERROR: -32700,
45823
45868
  BAD_REQUEST: -32600,
@@ -45866,35 +45911,8 @@ var retryableRpcCodes = [
45866
45911
  TRPC_ERROR_CODES_BY_KEY.GATEWAY_TIMEOUT,
45867
45912
  TRPC_ERROR_CODES_BY_KEY.INTERNAL_SERVER_ERROR
45868
45913
  ];
45869
- function mergeWithoutOverrides(obj1, ...objs) {
45870
- const newObj = Object.assign(Object.create(null), obj1);
45871
- for (const overrides of objs)
45872
- for (const key in overrides) {
45873
- if (key in newObj && newObj[key] !== overrides[key])
45874
- throw new Error(`Duplicate key ${key}`);
45875
- newObj[key] = overrides[key];
45876
- }
45877
- return newObj;
45878
- }
45879
- function isObject(value) {
45880
- return !!value && !Array.isArray(value) && typeof value === "object";
45881
- }
45882
- function isFunction(fn2) {
45883
- return typeof fn2 === "function";
45884
- }
45885
- function omitPrototype(obj) {
45886
- return Object.assign(Object.create(null), obj);
45887
- }
45888
- var asyncIteratorsSupported = typeof Symbol === "function" && !!Symbol.asyncIterator;
45889
- function isAsyncIterable(value) {
45890
- return asyncIteratorsSupported && isObject(value) && Symbol.asyncIterator in value;
45891
- }
45892
- var run = (fn2) => fn2();
45893
- function identity(it2) {
45894
- return it2;
45895
- }
45896
45914
 
45897
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/getErrorShape-BH60iMC2.mjs
45915
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/getErrorShape-vC8mUXJD.mjs
45898
45916
  var __create2 = Object.create;
45899
45917
  var __defProp2 = Object.defineProperty;
45900
45918
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -45957,7 +45975,7 @@ function createInnerProxy(callback, path, memo) {
45957
45975
  }));
45958
45976
  return memo[cacheKey];
45959
45977
  }
45960
- var createRecursiveProxy = (callback) => createInnerProxy(callback, [], Object.create(null));
45978
+ var createRecursiveProxy = (callback) => createInnerProxy(callback, [], emptyObject());
45961
45979
  var JSONRPC2_TO_HTTP_CODE = {
45962
45980
  PARSE_ERROR: 400,
45963
45981
  BAD_REQUEST: 400,
@@ -46097,7 +46115,7 @@ function getErrorShape(opts) {
46097
46115
  return config.errorFormatter((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { shape }));
46098
46116
  }
46099
46117
 
46100
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/tracked-DBSMdVzR.mjs
46118
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/tracked-D4V22yc5.mjs
46101
46119
  var defaultFormatter = ({ shape }) => {
46102
46120
  return shape;
46103
46121
  };
@@ -46208,8 +46226,8 @@ function createRouterFactory(config) {
46208
46226
  const reservedWordsUsed = new Set(Object.keys(input).filter((v2) => reservedWords.includes(v2)));
46209
46227
  if (reservedWordsUsed.size > 0)
46210
46228
  throw new Error("Reserved words used in `router({})` call: " + Array.from(reservedWordsUsed).join(", "));
46211
- const procedures = omitPrototype({});
46212
- const lazy$1 = omitPrototype({});
46229
+ const procedures = emptyObject();
46230
+ const lazy$1 = emptyObject();
46213
46231
  function createLazyLoader(opts) {
46214
46232
  return {
46215
46233
  ref: opts.ref,
@@ -46232,7 +46250,7 @@ function createRouterFactory(config) {
46232
46250
  };
46233
46251
  }
46234
46252
  function step(from, path = []) {
46235
- const aggregate = omitPrototype({});
46253
+ const aggregate = emptyObject();
46236
46254
  for (const [key, item] of Object.entries(from !== null && from !== undefined ? from : {})) {
46237
46255
  if (isLazy(item)) {
46238
46256
  lazy$1[[...path, key].join(".")] = createLazyLoader({
@@ -46365,7 +46383,7 @@ function isTrackedEnvelope(value) {
46365
46383
  return Array.isArray(value) && value[2] === trackedSymbol;
46366
46384
  }
46367
46385
 
46368
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/observable-UMO3vUa_.mjs
46386
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/observable-UMO3vUa_.mjs
46369
46387
  function isObservable(x2) {
46370
46388
  return typeof x2 === "object" && x2 !== null && "subscribe" in x2;
46371
46389
  }
@@ -46438,7 +46456,7 @@ function observableToAsyncIterable(observable$1, signal) {
46438
46456
  } };
46439
46457
  }
46440
46458
 
46441
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/resolveResponse-D7zvnoIM.mjs
46459
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/resolveResponse-C7AcnFLN.mjs
46442
46460
  function parseConnectionParamsFromUnknown(parsed) {
46443
46461
  try {
46444
46462
  if (parsed === null)
@@ -46517,15 +46535,18 @@ var jsonContentTypeHandler = {
46517
46535
  } else
46518
46536
  inputs = await req.json();
46519
46537
  if (inputs === undefined)
46520
- return {};
46521
- if (!isBatchCall)
46522
- return { 0: opts.router._def._config.transformer.input.deserialize(inputs) };
46538
+ return emptyObject();
46539
+ if (!isBatchCall) {
46540
+ const result = emptyObject();
46541
+ result[0] = opts.router._def._config.transformer.input.deserialize(inputs);
46542
+ return result;
46543
+ }
46523
46544
  if (!isObject(inputs))
46524
46545
  throw new TRPCError({
46525
46546
  code: "BAD_REQUEST",
46526
46547
  message: '"input" needs to be an object when doing a batch call'
46527
46548
  });
46528
- const acc = {};
46549
+ const acc = emptyObject();
46529
46550
  for (const index of paths.keys()) {
46530
46551
  const input = inputs[index];
46531
46552
  if (input !== undefined)
@@ -47053,44 +47074,16 @@ function iteratorResource(iterable) {
47053
47074
  await ((_iterator$return = iterator.return) === null || _iterator$return === undefined ? undefined : _iterator$return.call(iterator));
47054
47075
  });
47055
47076
  }
47056
- function withMaxDuration(_x, _x2) {
47057
- return _withMaxDuration.apply(this, arguments);
47058
- }
47059
- function _withMaxDuration() {
47060
- _withMaxDuration = (0, import_wrapAsyncGenerator$5.default)(function* (iterable, opts) {
47061
- try {
47062
- var _usingCtx$1 = (0, import_usingCtx$4.default)();
47063
- const iterator = _usingCtx$1.a(iteratorResource(iterable));
47064
- const timer = _usingCtx$1.u(timerResource(opts.maxDurationMs));
47065
- const timerPromise = timer.start();
47066
- let result;
47067
- while (true) {
47068
- result = yield (0, import_awaitAsyncGenerator$4.default)(Unpromise.race([iterator.next(), timerPromise]));
47069
- if (result === disposablePromiseTimerResult)
47070
- throwAbortError();
47071
- if (result.done)
47072
- return result;
47073
- yield result.value;
47074
- result = null;
47075
- }
47076
- } catch (_2) {
47077
- _usingCtx$1.e = _2;
47078
- } finally {
47079
- yield (0, import_awaitAsyncGenerator$4.default)(_usingCtx$1.d());
47080
- }
47081
- });
47082
- return _withMaxDuration.apply(this, arguments);
47083
- }
47084
- function takeWithGrace(_x3, _x4) {
47077
+ function takeWithGrace(_x, _x2) {
47085
47078
  return _takeWithGrace.apply(this, arguments);
47086
47079
  }
47087
47080
  function _takeWithGrace() {
47088
47081
  _takeWithGrace = (0, import_wrapAsyncGenerator$5.default)(function* (iterable, opts) {
47089
47082
  try {
47090
- var _usingCtx3 = (0, import_usingCtx$4.default)();
47091
- const iterator = _usingCtx3.a(iteratorResource(iterable));
47083
+ var _usingCtx$1 = (0, import_usingCtx$4.default)();
47084
+ const iterator = _usingCtx$1.a(iteratorResource(iterable));
47092
47085
  let result;
47093
- const timer = _usingCtx3.u(timerResource(opts.gracePeriodMs));
47086
+ const timer = _usingCtx$1.u(timerResource(opts.gracePeriodMs));
47094
47087
  let count = opts.count;
47095
47088
  let timerPromise = new Promise(() => {});
47096
47089
  while (true) {
@@ -47105,9 +47098,9 @@ function _takeWithGrace() {
47105
47098
  result = null;
47106
47099
  }
47107
47100
  } catch (_2) {
47108
- _usingCtx3.e = _2;
47101
+ _usingCtx$1.e = _2;
47109
47102
  } finally {
47110
- yield (0, import_awaitAsyncGenerator$4.default)(_usingCtx3.d());
47103
+ yield (0, import_awaitAsyncGenerator$4.default)(_usingCtx$1.d());
47111
47104
  }
47112
47105
  });
47113
47106
  return _takeWithGrace.apply(this, arguments);
@@ -47520,7 +47513,7 @@ function _createBatchStreamProducer() {
47520
47513
  return [[placeholder], [null, ...reg]];
47521
47514
  if (!isPlainObject(value))
47522
47515
  return [[value]];
47523
- const newObj = {};
47516
+ const newObj = emptyObject();
47524
47517
  const asyncValues = [];
47525
47518
  for (const [key, item] of Object.entries(value)) {
47526
47519
  const transformed = encodeAsync(item, [...path, key]);
@@ -47533,7 +47526,7 @@ function _createBatchStreamProducer() {
47533
47526
  }
47534
47527
  return [[newObj], ...asyncValues];
47535
47528
  }
47536
- const newHead = {};
47529
+ const newHead = emptyObject();
47537
47530
  for (const [key, item] of Object.entries(data))
47538
47531
  newHead[key] = encode(item, [key]);
47539
47532
  yield newHead;
@@ -47641,8 +47634,6 @@ function sseStreamProducer(opts) {
47641
47634
  count: 1,
47642
47635
  gracePeriodMs: 1
47643
47636
  });
47644
- if (opts.maxDurationMs && opts.maxDurationMs > 0 && opts.maxDurationMs !== Infinity)
47645
- iterable = withMaxDuration(iterable, { maxDurationMs: opts.maxDurationMs });
47646
47637
  if (ping.enabled && ping.intervalMs !== Infinity && ping.intervalMs > 0)
47647
47638
  iterable = withPing(iterable, ping.intervalMs);
47648
47639
  let value;
@@ -47743,6 +47734,14 @@ function errorToAsyncIterable(err) {
47743
47734
  throw err;
47744
47735
  }));
47745
47736
  }
47737
+ function combinedAbortController(signal) {
47738
+ const controller = new AbortController;
47739
+ const combinedSignal = abortSignalsAnyPonyfill([signal, controller.signal]);
47740
+ return {
47741
+ signal: combinedSignal,
47742
+ controller
47743
+ };
47744
+ }
47746
47745
  var TYPE_ACCEPTED_METHOD_MAP = {
47747
47746
  mutation: ["POST"],
47748
47747
  query: ["GET"],
@@ -47891,6 +47890,7 @@ async function resolveResponse(opts) {
47891
47890
  await ctxManager.create(info);
47892
47891
  const rpcCalls = info.calls.map(async (call) => {
47893
47892
  const proc = call.procedure;
47893
+ const combinedAbort = combinedAbortController(opts.req.signal);
47894
47894
  try {
47895
47895
  if (opts.error)
47896
47896
  throw opts.error;
@@ -47905,18 +47905,28 @@ async function resolveResponse(opts) {
47905
47905
  message: `Unsupported ${req.method}-request to ${proc._def.type} procedure at path "${call.path}"`
47906
47906
  });
47907
47907
  if (proc._def.type === "subscription") {
47908
+ var _config$sse2;
47908
47909
  if (info.isBatchCall)
47909
47910
  throw new TRPCError({
47910
47911
  code: "BAD_REQUEST",
47911
47912
  message: `Cannot batch subscription calls`
47912
47913
  });
47914
+ if ((_config$sse2 = config.sse) === null || _config$sse2 === undefined ? undefined : _config$sse2.maxDurationMs) {
47915
+ let cleanup = function() {
47916
+ clearTimeout(timer);
47917
+ combinedAbort.signal.removeEventListener("abort", cleanup);
47918
+ combinedAbort.controller.abort();
47919
+ };
47920
+ const timer = setTimeout(cleanup, config.sse.maxDurationMs);
47921
+ combinedAbort.signal.addEventListener("abort", cleanup);
47922
+ }
47913
47923
  }
47914
47924
  const data = await proc({
47915
47925
  path: call.path,
47916
47926
  getRawInput: call.getRawInput,
47917
47927
  ctx: ctxManager.value(),
47918
47928
  type: proc._def.type,
47919
- signal: opts.req.signal
47929
+ signal: combinedAbort.signal
47920
47930
  });
47921
47931
  return [undefined, { data }];
47922
47932
  } catch (cause) {
@@ -48159,7 +48169,7 @@ async function resolveResponse(opts) {
48159
48169
  }
48160
48170
  }
48161
48171
 
48162
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/initTRPC-DGaJyg8t.mjs
48172
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/initTRPC-T5bbc89W.mjs
48163
48173
  var import_objectSpread2$2 = __toESM2(require_objectSpread2(), 1);
48164
48174
  var middlewareMarker = "middlewareMarker";
48165
48175
  function createMiddlewareFactory() {
@@ -48469,13 +48479,16 @@ var TRPCBuilder = class TRPCBuilder2 {
48469
48479
  };
48470
48480
  var initTRPC = new TRPCBuilder;
48471
48481
 
48472
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/node-http-Cd7-CwtL.mjs
48482
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/node-http-pD5xpNfK.mjs
48483
+ import { IncomingMessage } from "http";
48473
48484
  function createBody(req, opts) {
48474
48485
  if ("body" in req) {
48475
48486
  if (req.body === undefined)
48476
48487
  return;
48477
48488
  if (typeof req.body === "string")
48478
48489
  return req.body;
48490
+ if (req.body instanceof IncomingMessage)
48491
+ return req.body;
48479
48492
  return JSON.stringify(req.body);
48480
48493
  }
48481
48494
  let size = 0;
@@ -48675,7 +48688,7 @@ async function nodeHTTPRequestHandler(opts) {
48675
48688
  });
48676
48689
  }
48677
48690
 
48678
- // ../../node_modules/.pnpm/@trpc+server@11.8.0_typescript@5.9.3/node_modules/@trpc/server/dist/adapters/standalone.mjs
48691
+ // ../../node_modules/.pnpm/@trpc+server@11.8.1_typescript@5.9.3/node_modules/@trpc/server/dist/adapters/standalone.mjs
48679
48692
  var import_objectSpread26 = __toESM2(require_objectSpread2(), 1);
48680
48693
  function createHandler(opts) {
48681
48694
  var _opts$basePath;
@@ -60189,32 +60202,34 @@ var ParentSocket = class extends CustomSocket {
60189
60202
  this.id = this.proc.pid?.toString();
60190
60203
  this.on(`user-joins`, (userKey) => {
60191
60204
  this.logger.info(`\uD83D\uDC64`, userKey, `joined`);
60205
+ if (this.relays.get(userKey))
60206
+ return;
60192
60207
  const relay = new SubjectSocket(userKey);
60193
60208
  this.relays.set(userKey, relay);
60194
- this.logger.info(`\uD83D\uDD17`, `attaching services for user`, userKey);
60209
+ this.logger.info(`\uD83D\uDD17`, `attaching relay services for`, userKey);
60195
60210
  const cleanupRelay = this.initRelay(relay, userKey);
60196
60211
  if (cleanupRelay)
60197
60212
  relay.disposalFunctions.push(cleanupRelay);
60198
60213
  this.on(userKey, (...data) => {
60199
60214
  relay.in.next(data);
60200
60215
  });
60201
- relay.out.subscribe(`socket`, (data) => {
60202
- this.emit(...data);
60203
- });
60216
+ relay.disposalFunctions.push(relay.out.subscribe(`socket`, (data) => {
60217
+ this.emit(userKey, ...data);
60218
+ }));
60204
60219
  });
60205
- this.on(`user-leaves`, (username) => {
60206
- const relay = this.relays.get(username);
60207
- this.off(`relay:${username}`);
60220
+ this.on(`user-leaves`, (userKey) => {
60221
+ const relay = this.relays.get(userKey);
60222
+ this.off(userKey);
60208
60223
  if (relay) {
60209
60224
  relay.dispose();
60210
- this.relays.delete(username);
60225
+ this.relays.delete(userKey);
60211
60226
  }
60212
60227
  });
60213
60228
  this.proc.stdout.write(PROOF_OF_LIFE_SIGNAL);
60214
60229
  }
60215
60230
  receiveRelay(attachServices) {
60216
- this.logger.info(`\uD83D\uDD17`, `running relay method`);
60217
60231
  this.initRelay = attachServices;
60232
+ this.logger.info(`\uD83D\uDD17`, `ready to relay`);
60218
60233
  }
60219
60234
  };
60220
60235
  var ChildSocket = class extends CustomSocket {
@@ -60278,6 +60293,7 @@ var ChildSocket = class extends CustomSocket {
60278
60293
  continue;
60279
60294
  try {
60280
60295
  const jsonPiece = parseJson(piece);
60296
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, jsonPiece);
60281
60297
  this.handleEvent(...jsonPiece);
60282
60298
  this.incompleteData = ``;
60283
60299
  } catch (thrown0) {
@@ -60296,6 +60312,7 @@ var ChildSocket = class extends CustomSocket {
60296
60312
  if (idx === 0) {
60297
60313
  this.incompleteData = piece;
60298
60314
  const maybeActualJsonPiece = parseJson(initialMaybeWellFormed);
60315
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, maybeActualJsonPiece);
60299
60316
  this.handleEvent(...maybeActualJsonPiece);
60300
60317
  this.incompleteData = ``;
60301
60318
  } else
@@ -3157,32 +3157,34 @@ var ParentSocket = class extends CustomSocket {
3157
3157
  this.id = this.proc.pid?.toString();
3158
3158
  this.on(`user-joins`, (userKey) => {
3159
3159
  this.logger.info(`\uD83D\uDC64`, userKey, `joined`);
3160
+ if (this.relays.get(userKey))
3161
+ return;
3160
3162
  const relay = new SubjectSocket(userKey);
3161
3163
  this.relays.set(userKey, relay);
3162
- this.logger.info(`\uD83D\uDD17`, `attaching services for user`, userKey);
3164
+ this.logger.info(`\uD83D\uDD17`, `attaching relay services for`, userKey);
3163
3165
  const cleanupRelay = this.initRelay(relay, userKey);
3164
3166
  if (cleanupRelay)
3165
3167
  relay.disposalFunctions.push(cleanupRelay);
3166
3168
  this.on(userKey, (...data) => {
3167
3169
  relay.in.next(data);
3168
3170
  });
3169
- relay.out.subscribe(`socket`, (data) => {
3170
- this.emit(...data);
3171
- });
3171
+ relay.disposalFunctions.push(relay.out.subscribe(`socket`, (data) => {
3172
+ this.emit(userKey, ...data);
3173
+ }));
3172
3174
  });
3173
- this.on(`user-leaves`, (username) => {
3174
- const relay = this.relays.get(username);
3175
- this.off(`relay:${username}`);
3175
+ this.on(`user-leaves`, (userKey) => {
3176
+ const relay = this.relays.get(userKey);
3177
+ this.off(userKey);
3176
3178
  if (relay) {
3177
3179
  relay.dispose();
3178
- this.relays.delete(username);
3180
+ this.relays.delete(userKey);
3179
3181
  }
3180
3182
  });
3181
3183
  this.proc.stdout.write(PROOF_OF_LIFE_SIGNAL);
3182
3184
  }
3183
3185
  receiveRelay(attachServices) {
3184
- this.logger.info(`\uD83D\uDD17`, `running relay method`);
3185
3186
  this.initRelay = attachServices;
3187
+ this.logger.info(`\uD83D\uDD17`, `ready to relay`);
3186
3188
  }
3187
3189
  };
3188
3190
  var ChildSocket = class extends CustomSocket {
@@ -3246,6 +3248,7 @@ var ChildSocket = class extends CustomSocket {
3246
3248
  continue;
3247
3249
  try {
3248
3250
  const jsonPiece = parseJson(piece);
3251
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, jsonPiece);
3249
3252
  this.handleEvent(...jsonPiece);
3250
3253
  this.incompleteData = ``;
3251
3254
  } catch (thrown0) {
@@ -3264,6 +3267,7 @@ var ChildSocket = class extends CustomSocket {
3264
3267
  if (idx === 0) {
3265
3268
  this.incompleteData = piece;
3266
3269
  const maybeActualJsonPiece = parseJson(initialMaybeWellFormed);
3270
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, maybeActualJsonPiece);
3267
3271
  this.handleEvent(...maybeActualJsonPiece);
3268
3272
  this.incompleteData = ``;
3269
3273
  } else
@@ -3275,32 +3275,34 @@ var ParentSocket = class extends CustomSocket {
3275
3275
  this.id = this.proc.pid?.toString();
3276
3276
  this.on(`user-joins`, (userKey) => {
3277
3277
  this.logger.info(`\uD83D\uDC64`, userKey, `joined`);
3278
+ if (this.relays.get(userKey))
3279
+ return;
3278
3280
  const relay = new SubjectSocket(userKey);
3279
3281
  this.relays.set(userKey, relay);
3280
- this.logger.info(`\uD83D\uDD17`, `attaching services for user`, userKey);
3282
+ this.logger.info(`\uD83D\uDD17`, `attaching relay services for`, userKey);
3281
3283
  const cleanupRelay = this.initRelay(relay, userKey);
3282
3284
  if (cleanupRelay)
3283
3285
  relay.disposalFunctions.push(cleanupRelay);
3284
3286
  this.on(userKey, (...data) => {
3285
3287
  relay.in.next(data);
3286
3288
  });
3287
- relay.out.subscribe(`socket`, (data) => {
3288
- this.emit(...data);
3289
- });
3289
+ relay.disposalFunctions.push(relay.out.subscribe(`socket`, (data) => {
3290
+ this.emit(userKey, ...data);
3291
+ }));
3290
3292
  });
3291
- this.on(`user-leaves`, (username) => {
3292
- const relay = this.relays.get(username);
3293
- this.off(`relay:${username}`);
3293
+ this.on(`user-leaves`, (userKey) => {
3294
+ const relay = this.relays.get(userKey);
3295
+ this.off(userKey);
3294
3296
  if (relay) {
3295
3297
  relay.dispose();
3296
- this.relays.delete(username);
3298
+ this.relays.delete(userKey);
3297
3299
  }
3298
3300
  });
3299
3301
  this.proc.stdout.write(PROOF_OF_LIFE_SIGNAL);
3300
3302
  }
3301
3303
  receiveRelay(attachServices) {
3302
- this.logger.info(`\uD83D\uDD17`, `running relay method`);
3303
3304
  this.initRelay = attachServices;
3305
+ this.logger.info(`\uD83D\uDD17`, `ready to relay`);
3304
3306
  }
3305
3307
  };
3306
3308
  var ChildSocket = class extends CustomSocket {
@@ -3364,6 +3366,7 @@ var ChildSocket = class extends CustomSocket {
3364
3366
  continue;
3365
3367
  try {
3366
3368
  const jsonPiece = parseJson(piece);
3369
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, jsonPiece);
3367
3370
  this.handleEvent(...jsonPiece);
3368
3371
  this.incompleteData = ``;
3369
3372
  } catch (thrown0) {
@@ -3382,6 +3385,7 @@ var ChildSocket = class extends CustomSocket {
3382
3385
  if (idx === 0) {
3383
3386
  this.incompleteData = piece;
3384
3387
  const maybeActualJsonPiece = parseJson(initialMaybeWellFormed);
3388
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, maybeActualJsonPiece);
3385
3389
  this.handleEvent(...maybeActualJsonPiece);
3386
3390
  this.incompleteData = ``;
3387
3391
  } else
@@ -11726,32 +11726,34 @@ var ParentSocket = class extends CustomSocket {
11726
11726
  this.id = this.proc.pid?.toString();
11727
11727
  this.on(`user-joins`, (userKey) => {
11728
11728
  this.logger.info(`\uD83D\uDC64`, userKey, `joined`);
11729
+ if (this.relays.get(userKey))
11730
+ return;
11729
11731
  const relay = new SubjectSocket(userKey);
11730
11732
  this.relays.set(userKey, relay);
11731
- this.logger.info(`\uD83D\uDD17`, `attaching services for user`, userKey);
11733
+ this.logger.info(`\uD83D\uDD17`, `attaching relay services for`, userKey);
11732
11734
  const cleanupRelay = this.initRelay(relay, userKey);
11733
11735
  if (cleanupRelay)
11734
11736
  relay.disposalFunctions.push(cleanupRelay);
11735
11737
  this.on(userKey, (...data) => {
11736
11738
  relay.in.next(data);
11737
11739
  });
11738
- relay.out.subscribe(`socket`, (data) => {
11739
- this.emit(...data);
11740
- });
11740
+ relay.disposalFunctions.push(relay.out.subscribe(`socket`, (data) => {
11741
+ this.emit(userKey, ...data);
11742
+ }));
11741
11743
  });
11742
- this.on(`user-leaves`, (username) => {
11743
- const relay = this.relays.get(username);
11744
- this.off(`relay:${username}`);
11744
+ this.on(`user-leaves`, (userKey) => {
11745
+ const relay = this.relays.get(userKey);
11746
+ this.off(userKey);
11745
11747
  if (relay) {
11746
11748
  relay.dispose();
11747
- this.relays.delete(username);
11749
+ this.relays.delete(userKey);
11748
11750
  }
11749
11751
  });
11750
11752
  this.proc.stdout.write(PROOF_OF_LIFE_SIGNAL);
11751
11753
  }
11752
11754
  receiveRelay(attachServices) {
11753
- this.logger.info(`\uD83D\uDD17`, `running relay method`);
11754
11755
  this.initRelay = attachServices;
11756
+ this.logger.info(`\uD83D\uDD17`, `ready to relay`);
11755
11757
  }
11756
11758
  };
11757
11759
  var ChildSocket = class extends CustomSocket {
@@ -11815,6 +11817,7 @@ var ChildSocket = class extends CustomSocket {
11815
11817
  continue;
11816
11818
  try {
11817
11819
  const jsonPiece = parseJson2(piece);
11820
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, jsonPiece);
11818
11821
  this.handleEvent(...jsonPiece);
11819
11822
  this.incompleteData = ``;
11820
11823
  } catch (thrown0) {
@@ -11833,6 +11836,7 @@ var ChildSocket = class extends CustomSocket {
11833
11836
  if (idx === 0) {
11834
11837
  this.incompleteData = piece;
11835
11838
  const maybeActualJsonPiece = parseJson2(initialMaybeWellFormed);
11839
+ this.logger.info(`\uD83D\uDCB8`, `emitted`, maybeActualJsonPiece);
11836
11840
  this.handleEvent(...maybeActualJsonPiece);
11837
11841
  this.incompleteData = ``;
11838
11842
  } else
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tempest.games",
3
- "version": "0.2.100",
3
+ "version": "0.2.101",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -29,8 +29,8 @@
29
29
  "@js-temporal/polyfill": "0.5.1",
30
30
  "@react-email/components": "1.0.2",
31
31
  "@t3-oss/env-core": "0.13.10",
32
- "@trpc/client": "11.8.0",
33
- "@trpc/server": "11.8.0",
32
+ "@trpc/client": "11.8.1",
33
+ "@trpc/server": "11.8.1",
34
34
  "arktype": "2.1.29",
35
35
  "cron": "4.4.0",
36
36
  "drizzle-orm": "0.45.1",
@@ -45,7 +45,7 @@
45
45
  "safegen": "0.8.3",
46
46
  "socket.io": "4.8.1",
47
47
  "socket.io-client": "4.8.1",
48
- "atom.io": "0.46.8",
48
+ "atom.io": "0.46.9",
49
49
  "safedeposit": "0.1.2",
50
50
  "treetrunks": "0.1.5"
51
51
  },
@@ -69,7 +69,7 @@
69
69
  "sass-embedded": "1.97.1",
70
70
  "vite": "7.3.0",
71
71
  "vitest": "4.0.16",
72
- "flightdeck": "0.3.28",
72
+ "flightdeck": "0.3.29",
73
73
  "varmint": "0.5.11"
74
74
  },
75
75
  "scripts": {