@voltro/plugin-leaderboards 0.87.0 → 0.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +169 -6
  2. package/THIRD-PARTY-NOTICES.md +647 -51
  3. package/dist/administration.js +1 -2
  4. package/dist/bracketAdmission.js +6 -7
  5. package/dist/bracketAdmissionPolicy.js +1 -2
  6. package/dist/bracketInstallation.js +3 -4
  7. package/dist/bracketMatchPorts.js +1 -2
  8. package/dist/bracketMatches.js +10 -11
  9. package/dist/brackets.js +1 -2
  10. package/dist/bucketStore.js +1 -2
  11. package/dist/buckets.js +1 -2
  12. package/dist/errors.js +1 -2
  13. package/dist/glicko2.js +1 -2
  14. package/dist/inspect.js +1 -2
  15. package/dist/json.js +1 -2
  16. package/dist/leaderboard.js +1 -2
  17. package/dist/leagueSchedule.js +1 -2
  18. package/dist/leagues.js +1 -2
  19. package/dist/openskill.js +1 -2
  20. package/dist/plugin.js +1 -2
  21. package/dist/portLifetime.js +3 -4
  22. package/dist/ports.js +1 -2
  23. package/dist/rankQuery.js +1 -2
  24. package/dist/ranking.js +1 -2
  25. package/dist/rating.js +1 -2
  26. package/dist/ratingPools.js +1 -2
  27. package/dist/ratingStore.js +1 -2
  28. package/dist/ratingStrategies.js +1 -2
  29. package/dist/records.js +1 -2
  30. package/dist/rpc.js +1 -2
  31. package/dist/score.js +1 -2
  32. package/dist/service.js +1 -2
  33. package/dist/subjectFences.js +1 -2
  34. package/dist/tables.entity.js +1 -2
  35. package/dist/testing.js +1 -2
  36. package/dist/tournamentInstallation.js +1 -2
  37. package/dist/tournamentPrizes.js +1 -2
  38. package/dist/tournamentStage.js +1 -2
  39. package/dist/tournamentStagePorts.js +1 -2
  40. package/dist/tournamentWorkflow.js +1 -2
  41. package/dist/tournamentWorkflowSchemas.js +1 -2
  42. package/dist/tournaments.js +1 -2
  43. package/dist/web.js +1 -2
  44. package/package.json +8 -8
@@ -1,5 +1,4 @@
1
1
  import { Context as e } from "effect";
2
- //#region src/administration.ts
2
+ // src/administration.ts
3
3
  var t = class extends e.Service()("@voltro/LeaderboardAdministration") {};
4
- //#endregion
5
4
  export { t as LeaderboardAdministration };
@@ -7,7 +7,7 @@ import { Effect as s, Layer as c, Schema as l } from "effect";
7
7
  import { Subject as u } from "@voltro/protocol";
8
8
  import { createHash as d } from "node:crypto";
9
9
  import { and as f, eq as p, id as m, json as h, table as g, text as _, timestamp as v } from "@voltro/database";
10
- //#region src/bracketAdmission.ts
10
+ // src/bracketAdmission.ts
11
11
  var y = "_voltro_tournament_admissions", b = g(y, {
12
12
  id: m({ prefix: "tadm" }),
13
13
  tenantId: _().maxLength(120).externalId().sensitive("pii"),
@@ -21,7 +21,7 @@ function S(e) {
21
21
  }
22
22
  var C = (e) => Number.isSafeInteger(e) && e >= 0 && e <= 864e13 ? e : S("invalid_input"), w = (e) => {
23
23
  let t = r(e, 1024);
24
- return (!t || Object.keys(t).length !== 2 || !Object.hasOwn(t, "tenantId") || !Object.hasOwn(t, "tournamentId")) && S("invalid_input"), Object.freeze({
24
+ return t && Object.keys(t).length === 2 && Object.hasOwn(t, "tenantId") && Object.hasOwn(t, "tournamentId") || S("invalid_input"), Object.freeze({
25
25
  tenantId: x(t.tenantId),
26
26
  tournamentId: x(t.tournamentId)
27
27
  });
@@ -53,7 +53,7 @@ var C = (e) => Number.isSafeInteger(e) && e >= 0 && e <= 864e13 ? e : S("invalid
53
53
  i(n.definition), (n.entries.length > n.definition.maxEntries || new Set(n.entries.map((e) => e.ownerId)).size !== n.entries.length) && S("unavailable");
54
54
  for (let e of n.entries) x(e.ownerId), C(e.joinedAt), (e.joinedAt < n.definition.registrationOpensAt || e.joinedAt >= n.definition.registrationClosesAt) && S("unavailable"), e.checkedInAt !== null && (C(e.checkedInAt) < n.definition.checkInOpensAt || e.checkedInAt >= n.definition.checkInClosesAt) && S("unavailable");
55
55
  n.eraseRequest !== null && x(n.eraseRequest), (n.eraseRequest === null != (n.eraseTarget === null) || n.eraseTarget !== null && !/^[a-f0-9]{64}$/.test(n.eraseTarget) || n.phase === "erasing" && n.eraseRequest === null || ["open", "sealed"].includes(n.phase) && n.eraseRequest !== null) && S("unavailable");
56
- for (let t of ["createdAt", "updatedAt"]) (!(e[t] instanceof Date) || !Number.isFinite(e[t].getTime())) && S("unavailable");
56
+ for (let t of ["createdAt", "updatedAt"]) e[t] instanceof Date && Number.isFinite(e[t].getTime()) || S("unavailable");
57
57
  return n;
58
58
  }, O = async (e, t, n = !1) => {
59
59
  let r = await e.query({
@@ -88,11 +88,11 @@ var C = (e) => Number.isSafeInteger(e) && e >= 0 && e <= 864e13 ? e : S("invalid
88
88
  }).pipe(s.uninterruptible);
89
89
  }, A = (e) => {
90
90
  let t = r(e, 2048);
91
- return (!t || Object.keys(t).some((e) => !["requestId", "target"].includes(e)) || !t.target || Object.keys(t.target).some((e) => ![
91
+ return t && !Object.keys(t).some((e) => !["requestId", "target"].includes(e)) && t.target && !Object.keys(t.target).some((e) => ![
92
92
  "tenantId",
93
93
  "subjectId",
94
94
  "kind"
95
- ].includes(e)) || !["user", "guest"].includes(t.target.kind)) && S("invalid_input"), Object.freeze({
95
+ ].includes(e)) && ["user", "guest"].includes(t.target.kind) || S("invalid_input"), Object.freeze({
96
96
  requestId: x(t.requestId),
97
97
  target: Object.freeze({
98
98
  tenantId: x(t.target.tenantId),
@@ -214,7 +214,7 @@ var C = (e) => Number.isSafeInteger(e) && e >= 0 && e <= 864e13 ? e : S("invalid
214
214
  return g(r, n, "checkIn").pipe(s.flatMap(() => N(() => T(n.tenantId, i))), s.flatMap(() => N(() => o.transactional(async (e) => {
215
215
  await E(e, n.tenantId, i);
216
216
  let { row: t, state: r } = await P(e, n, !0), a = C(m()), o = r.entries.find((e) => e.ownerId === i);
217
- if ((r.phase !== "open" || !o) && S("conflict"), o.checkedInAt !== null) return R(r, i);
217
+ if (r.phase === "open" && o || S("conflict"), o.checkedInAt !== null) return R(r, i);
218
218
  (a < r.definition.checkInOpensAt || a >= r.definition.checkInClosesAt) && S("conflict");
219
219
  let s = {
220
220
  ...r,
@@ -290,5 +290,4 @@ var C = (e) => Number.isSafeInteger(e) && e >= 0 && e <= 864e13 ? e : S("invalid
290
290
  })
291
291
  });
292
292
  }, N = (e, t) => c.succeed(o, M(e, t));
293
- //#endregion
294
293
  export { y as BRACKET_ADMISSIONS_TABLE, N as bracketAdmissionLayer, b as bracketAdmissionsTable, M as dataStoreBracketAdmissions, k as readBracketAdmissionWindow, j as resolveBracketAdmissionOptions };
@@ -1,7 +1,7 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { captureLeaderboardJson as t } from "./json.js";
3
3
  import { Schema as n } from "effect";
4
- //#region src/bracketAdmissionPolicy.ts
4
+ // src/bracketAdmissionPolicy.ts
5
5
  var r = n.Struct({
6
6
  registrationOpensAt: n.Int,
7
7
  registrationClosesAt: n.Int,
@@ -18,5 +18,4 @@ var r = n.Struct({
18
18
  if (a.registrationOpensAt < 0 || a.registrationClosesAt <= a.registrationOpensAt || a.checkInOpensAt < a.registrationClosesAt || a.checkInClosesAt <= a.checkInOpensAt || a.checkInClosesAt > 864e13 || a.maxEntries < 2 || a.maxEntries > 256) throw e("invalid_input");
19
19
  return Object.freeze(a);
20
20
  };
21
- //#endregion
22
21
  export { i as defineBracketAdmission };
@@ -4,7 +4,7 @@ import { defineBracketAdmission as r } from "./bracketAdmissionPolicy.js";
4
4
  import { dataStoreBracketAdmissions as i, resolveBracketAdmissionOptions as a } from "./bracketAdmission.js";
5
5
  import { Effect as o, Schema as s } from "effect";
6
6
  import { Subject as c } from "@voltro/protocol";
7
- //#region src/bracketInstallation.ts
7
+ // src/bracketInstallation.ts
8
8
  var l = [
9
9
  "create",
10
10
  "register",
@@ -19,10 +19,10 @@ function u() {
19
19
  throw t("invalid_input");
20
20
  }
21
21
  var d = (e) => {
22
- (!e || typeof e != "object") && u();
22
+ e && typeof e == "object" || u();
23
23
  for (let t of l) {
24
24
  let n = Object.getOwnPropertyDescriptor(e, t);
25
- (!n || !("value" in n) || typeof n.value != "function") && u();
25
+ n && "value" in n && typeof n.value == "function" || u();
26
26
  }
27
27
  return Object.freeze({
28
28
  create: e.create.bind(e),
@@ -129,5 +129,4 @@ var d = (e) => {
129
129
  })))
130
130
  });
131
131
  };
132
- //#endregion
133
132
  export { f as makeBracketAdmissionInstallation };
@@ -1,5 +1,4 @@
1
1
  import { Context as e } from "effect";
2
- //#region src/bracketMatchPorts.ts
2
+ // src/bracketMatchPorts.ts
3
3
  var t = class extends e.Service()("@voltro/TournamentBracketPort") {};
4
- //#endregion
5
4
  export { t as TournamentBracketPort };
@@ -7,7 +7,7 @@ import { Effect as f, Layer as p, Schema as m } from "effect";
7
7
  import { Subject as h } from "@voltro/protocol";
8
8
  import { createHash as g } from "node:crypto";
9
9
  import { and as _, eq as v, id as y, json as b, table as x, text as S, timestamp as C } from "@voltro/database";
10
- //#region src/bracketMatches.ts
10
+ // src/bracketMatches.ts
11
11
  var w = "_voltro_brackets", T = x(w, {
12
12
  id: y({ prefix: "tbrk" }),
13
13
  tenantId: S().maxLength(120).externalId().sensitive("pii"),
@@ -21,7 +21,7 @@ function E(e) {
21
21
  }
22
22
  var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim() === e && e.isWellFormed() && !/[\u0000-\u001f\u007f]/.test(e) ? e : E("invalid_input"), O = (e) => Number.isSafeInteger(e) && e >= 0 && e <= 864e13 ? e : E("invalid_input"), k = (e) => {
23
23
  let t = r(e, 1024);
24
- return (!t || Object.keys(t).length !== 2 || !Object.hasOwn(t, "tenantId") || !Object.hasOwn(t, "tournamentId")) && E("invalid_input"), Object.freeze({
24
+ return t && Object.keys(t).length === 2 && Object.hasOwn(t, "tenantId") && Object.hasOwn(t, "tournamentId") || E("invalid_input"), Object.freeze({
25
25
  tenantId: D(t.tenantId),
26
26
  tournamentId: D(t.tournamentId)
27
27
  });
@@ -138,7 +138,7 @@ var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim
138
138
  (e.tenantId !== t.tenantId || e.tournamentId !== t.tournamentId) && E("unavailable");
139
139
  let n = A(L, e.state);
140
140
  D(n.ruleVersion), W(n.entrants, (e) => e.entrantId), W(n.provisions, (e) => e.matchId), W(n.provisions, (e) => e.requestId), W(n.results, (e) => e.matchId), W(n.results, (e) => e.reportId), W(n.disputes, (e) => e.disputeId);
141
- for (let t of ["createdAt", "updatedAt"]) (!(e[t] instanceof Date) || !Number.isFinite(e[t].getTime())) && E("unavailable");
141
+ for (let t of ["createdAt", "updatedAt"]) e[t] instanceof Date && Number.isFinite(e[t].getTime()) || E("unavailable");
142
142
  (n.provisions.length > 127 || n.results.length > 127 || n.disputes.length > 254) && E("unavailable");
143
143
  for (let e of n.entrants) D(e.entrantId), (!Number.isSafeInteger(e.seed) || e.seed < 1 || e.seed > 64) && E("unavailable");
144
144
  for (let e of n.provisions) {
@@ -160,18 +160,18 @@ var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim
160
160
  "reportedWinnerId"
161
161
  ]) D(e[t]);
162
162
  let t = n.provisions.find((t) => t.matchId === e.matchId);
163
- (!t || t.roomId !== e.roomId || t.epoch !== e.epoch || ![t.left, t.right].includes(e.winnerId) || ![t.left, t.right].includes(e.reportedWinnerId)) && E("unavailable");
163
+ t && t.roomId === e.roomId && t.epoch === e.epoch && [t.left, t.right].includes(e.winnerId) && [t.left, t.right].includes(e.reportedWinnerId) || E("unavailable");
164
164
  }
165
165
  for (let e of n.disputes) {
166
166
  D(e.disputeId), D(e.ownerId);
167
167
  let t = n.provisions.find((t) => t.matchId === e.matchId);
168
- (!t || !n.results.some((t) => t.matchId === e.matchId) || ![t.left, t.right].includes(e.ownerId) || e.resolutionId === null != (e.winnerId === null)) && E("unavailable"), e.resolutionId !== null && (D(e.resolutionId), (!t || ![t.left, t.right].includes(e.winnerId)) && E("unavailable"));
168
+ t && n.results.some((t) => t.matchId === e.matchId) && [t.left, t.right].includes(e.ownerId) && e.resolutionId === null == (e.winnerId === null) || E("unavailable"), e.resolutionId !== null && (D(e.resolutionId), t && [t.left, t.right].includes(e.winnerId) || E("unavailable"));
169
169
  }
170
- if (n.erase !== null && (!/^[a-f0-9]{64}$/.test(n.erase.targetDigest) || !D(n.erase.requestId)) && E("unavailable"), ["erasing", "cancelled"].includes(n.phase) !== (n.erase !== null) && E("unavailable"), n.phase === "cancelled" && !n.withdrawn && E("unavailable"), n.withdrawn) return (!["erasing", "cancelled"].includes(n.phase) || n.provisions.length || n.results.length || n.disputes.length || n.settlement !== null) && E("unavailable"), n;
170
+ if (n.erase === null || /^[a-f0-9]{64}$/.test(n.erase.targetDigest) && D(n.erase.requestId) || E("unavailable"), ["erasing", "cancelled"].includes(n.phase) !== (n.erase !== null) && E("unavailable"), n.phase === "cancelled" && !n.withdrawn && E("unavailable"), n.withdrawn) return (!["erasing", "cancelled"].includes(n.phase) || n.provisions.length || n.results.length || n.disputes.length || n.settlement !== null) && E("unavailable"), n;
171
171
  let r = B(n, n.results);
172
172
  for (let e of n.provisions) {
173
173
  let t = r.matches.find((t) => t.id === e.matchId);
174
- (!t || t.left !== e.left || t.right !== e.right || !["ready", "complete"].includes(t.status)) && E("unavailable");
174
+ t && t.left === e.left && t.right === e.right && ["ready", "complete"].includes(t.status) || E("unavailable");
175
175
  }
176
176
  let i = n.disputes.filter((e) => e.resolutionId === null).length;
177
177
  return n.phase !== "erasing" && (n.phase === "paused" ? i === 0 : i !== 0) && E("unavailable"), n.settlement !== null && (r.champion !== n.settlement.winnerId || n.settlement.requestId !== z(t, n.ruleVersion, "champion") || i !== 0) && E("unavailable"), (n.phase === "complete" && n.settlement?.complete !== !0 || n.settlement?.complete && !["complete", "erasing"].includes(n.phase)) && E("unavailable"), n;
@@ -304,7 +304,7 @@ var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim
304
304
  }, Q = (e, t) => e.roomId === t.roomId && e.epoch === t.epoch && e.reportId === t.reportId && e.reportedWinnerId === t.winnerId && e.matchId === t.matchId, $ = (e, t) => {
305
305
  J(e), e.phase !== "active" && E("conflict");
306
306
  let n = B(e, e.results).matches.find((e) => e.id === t.matchId), r = e.provisions.find((e) => e.matchId === t.matchId);
307
- (!n || n.status !== "ready" || ![n.left, n.right].includes(t.winnerId) || !r || r.roomId !== t.roomId || r.epoch !== t.epoch) && E("conflict");
307
+ n && n.status === "ready" && [n.left, n.right].includes(t.winnerId) && r && r.roomId === t.roomId && r.epoch === t.epoch || E("conflict");
308
308
  };
309
309
  return Object.freeze({
310
310
  create: (e, t, r) => I(() => {
@@ -369,7 +369,7 @@ var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim
369
369
  let r = n.disputes.find((e) => e.disputeId === a.disputeId);
370
370
  if (r) return (r.ownerId !== i.id || r.matchId !== a.matchId || r.reason !== a.reason) && E("conflict"), Y(n);
371
371
  let o = n.provisions.find((e) => e.matchId === a.matchId);
372
- (n.settlement !== null || !o || ![o.left, o.right].includes(i.id) || !n.results.some((e) => e.matchId === a.matchId) || n.disputes.some((e) => e.matchId === a.matchId && e.ownerId === i.id)) && E("conflict");
372
+ n.settlement === null && o && [o.left, o.right].includes(i.id) && n.results.some((e) => e.matchId === a.matchId) && !n.disputes.some((e) => e.matchId === a.matchId && e.ownerId === i.id) || E("conflict");
373
373
  let s = {
374
374
  ...n,
375
375
  phase: "paused",
@@ -478,7 +478,7 @@ var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim
478
478
  })), f.flatMap((e) => X(i, async (t, r, i) => {
479
479
  J(i);
480
480
  let a = i.provisions.find((e) => e.requestId === n.work.requestId);
481
- if ((i.phase !== "active" || !a) && E("conflict"), a.roomId !== null) return (a.roomId !== e.roomId || a.epoch !== e.epoch) && E("conflict"), Y(i);
481
+ if (i.phase === "active" && a || E("conflict"), a.roomId !== null) return (a.roomId !== e.roomId || a.epoch !== e.epoch) && E("conflict"), Y(i);
482
482
  let o = {
483
483
  ...i,
484
484
  provisions: i.provisions.map((t) => t.requestId === n.work.requestId ? {
@@ -542,5 +542,4 @@ var D = (e) => typeof e == "string" && e.length > 0 && e.length <= 120 && e.trim
542
542
  })
543
543
  });
544
544
  }, J = (e, t) => p.succeed(a, q(e, t));
545
- //#endregion
546
545
  export { w as TOURNAMENT_BRACKETS_TABLE, q as dataStoreTournamentBrackets, K as resolveTournamentBracketOptions, J as tournamentBracketLayer, T as tournamentBracketsTable };
package/dist/brackets.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { canonicalLeaderboardJson as t, captureLeaderboardJson as n } from "./json.js";
3
3
  import { Schema as r } from "effect";
4
- //#region src/brackets.ts
4
+ // src/brackets.ts
5
5
  var i = Object.freeze({
6
6
  maxEntrants: 256,
7
7
  maxMatches: 65536,
@@ -375,5 +375,4 @@ var o = (e, t) => Number.isSafeInteger(e) && e > 0 && e <= t ? e : a(), s = (e)
375
375
  })))
376
376
  });
377
377
  };
378
- //#endregion
379
378
  export { w as advanceDoubleElimination, y as advanceRoundRobin, S as advanceSingleElimination, b as advanceSwiss, p as roundRobin, C as seedDoubleElimination, x as seedSingleElimination, h as swissPairings };
@@ -1,7 +1,7 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { leaderboardBucketAssignmentsTable as t } from "./tables.entity.js";
3
3
  import { and as n, eq as r, queryFor as i } from "@voltro/database";
4
- //#region src/bucketStore.ts
4
+ // src/bucketStore.ts
5
5
  var a = (a) => {
6
6
  let o = (e, t, n, r) => a.key("lbba_", [
7
7
  e,
@@ -89,5 +89,4 @@ var a = (a) => {
89
89
  }
90
90
  };
91
91
  };
92
- //#endregion
93
92
  export { a as makeBucketStore };
package/dist/buckets.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { hashBucket as t } from "./ranking.js";
3
- //#region src/buckets.ts
3
+ // src/buckets.ts
4
4
  var n = (n) => {
5
5
  if (n.candidates.length === 0) throw e("limit_exceeded");
6
6
  return n.candidates[t(n.tenantId, n.periodId, n.ownerId, n.candidates.length)].id;
7
7
  };
8
- //#endregion
9
8
  export { n as defaultLeaderboardBucketAssign };
package/dist/errors.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Schema as e } from "effect";
2
- //#region src/errors.ts
2
+ // src/errors.ts
3
3
  var t = class extends e.TaggedError()("LeaderboardError", { code: e.Literals([
4
4
  "invalid_board",
5
5
  "invalid_score",
@@ -13,5 +13,4 @@ var t = class extends e.TaggedError()("LeaderboardError", { code: e.Literals([
13
13
  "erased",
14
14
  "limit_exceeded"
15
15
  ]) }) {}, n = (e) => new t({ code: e });
16
- //#endregion
17
16
  export { t as LeaderboardError, n as leaderboardError };
package/dist/glicko2.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
- //#region src/glicko2.ts
2
+ // src/glicko2.ts
3
3
  var t = 173.7178, n = (e, t, n) => Number.isFinite(e) && e >= t && e <= n, r = (e, t) => Number.isSafeInteger(e) && e >= 1 && e <= t, i = (e) => n(e, -1e9, 1e9), a = (e) => n(e, 1e-6, 1e6), o = (e) => n(e, 1e-12, 10), s = (t) => {
4
4
  if (!Number.isFinite(t)) throw e("overflow");
5
5
  return t;
@@ -68,5 +68,4 @@ var t = 173.7178, n = (e, t, n) => Number.isFinite(e) && e >= t && e <= n, r = (
68
68
  return v(g + N ** 2 * b, N, M);
69
69
  };
70
70
  };
71
- //#endregion
72
71
  export { l as glicko2 };
package/dist/inspect.js CHANGED
@@ -4,7 +4,7 @@ import { defaultLeaderboardTiebreak as a, defaultPeriodSummary as o } from "./ra
4
4
  import { defaultLeaderboardBucketAssign as s } from "./buckets.js";
5
5
  import { defaultLeaderboardRankQuery as c } from "./rankQuery.js";
6
6
  import { acceptLeaderboardSubmission as l } from "./service.js";
7
- //#region src/inspect.ts
7
+ // src/inspect.ts
8
8
  var u = (u, d, f = Date.now(), p = null, m = null) => {
9
9
  if (!Number.isSafeInteger(f) || f < 0 || f > 864e13) throw e("unavailable");
10
10
  let h = i(u.ratingStrategies);
@@ -80,5 +80,4 @@ var u = (u, d, f = Date.now(), p = null, m = null) => {
80
80
  ]
81
81
  };
82
82
  };
83
- //#endregion
84
83
  export { u as leaderboardsStatus };
package/dist/json.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
- //#region src/json.ts
2
+ // src/json.ts
3
3
  var t = (n, r, i, a, o) => {
4
4
  if (i > 32) throw e("invalid_input");
5
5
  if (o !== void 0 && (o.remaining -= typeof n == "string" ? n.length + 2 : typeof n == "object" && n ? 2 : 1, o.remaining < 0)) throw e("limit_exceeded");
@@ -35,5 +35,4 @@ var t = (n, r, i, a, o) => {
35
35
  let o = structuredClone(r);
36
36
  return t(o, /* @__PURE__ */ new Set(), 0, !0), o;
37
37
  };
38
- //#endregion
39
38
  export { n as canonicalLeaderboardJson, r as captureLeaderboardJson };
@@ -1,6 +1,6 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { Cron as t, Result as n, Schema as r } from "effect";
3
- //#region src/leaderboard.ts
3
+ // src/leaderboard.ts
4
4
  var i = (e) => typeof e == "string" && e.trim().length > 0 && e.length <= 256 && !e.includes("\0"), a = (e, t) => Number.isSafeInteger(e) && e >= 1 && e <= t, o = (o) => {
5
5
  if (!o || !i(o.name)) throw e("invalid_board");
6
6
  let s = o.sort ?? "desc", c = o.operator ?? "best", l = o.maxRankRecords ?? 1e4, u = o.maxPageSize ?? 100;
@@ -53,5 +53,4 @@ var i = (e) => typeof e == "string" && e.trim().length > 0 && e.length <= 256 &&
53
53
  maxPageSize: u
54
54
  });
55
55
  };
56
- //#endregion
57
56
  export { o as defineLeaderboard, i as leaderboardIdentifier };
@@ -4,7 +4,7 @@ import { LeaderboardAdministration as n } from "./administration.js";
4
4
  import { Effect as r, Result as i } from "effect";
5
5
  import { systemSubject as a } from "@voltro/protocol";
6
6
  import { defineSchedule as o } from "@voltro/runtime";
7
- //#region src/leagueSchedule.ts
7
+ // src/leagueSchedule.ts
8
8
  var s = (s) => {
9
9
  let c = s?.pageSize ?? 100, l = s?.maxPages ?? 100, u = s?.timezone ?? "UTC";
10
10
  if (!s || !t(s.league) || s.league.length > 120 || typeof s.cron != "string" || s.cron.length > 128 || typeof u != "string" || u.length > 128 || ![c, l].every((e) => Number.isSafeInteger(e) && e >= 1 && e <= 1e3)) throw e("invalid_input");
@@ -36,5 +36,4 @@ var s = (s) => {
36
36
  })
37
37
  });
38
38
  };
39
- //#endregion
40
39
  export { s as defineLeagueRollSchedule };
package/dist/leagues.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { leaderboardIdentifier as t } from "./leaderboard.js";
3
- //#region src/leagues.ts
3
+ // src/leagues.ts
4
4
  var n = (n) => {
5
5
  if (!n || typeof n != "object" || !t(n.name) || !Array.isArray(n.divisions) || n.divisions.length < 2 || n.divisions.length > 16 || n.divisions.some((e) => !t(e)) || new Set(n.divisions).size !== n.divisions.length || ![n.promote, n.relegate].every((e) => Number.isSafeInteger(e) && e >= 0 && e <= 1e3) || n.promote + n.relegate < 1) throw e("invalid_input");
6
6
  return Object.freeze({
@@ -27,5 +27,4 @@ var n = (n) => {
27
27
  }));
28
28
  }), Object.freeze(i);
29
29
  };
30
- //#endregion
31
30
  export { n as defineLeague, r as leagueMovements };
package/dist/openskill.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { leaderboardIdentifier as t } from "./leaderboard.js";
3
- //#region src/openskill.ts
3
+ // src/openskill.ts
4
4
  var n = (e, t, n) => Number.isFinite(e) && e >= t && e <= n, r = (r = {}) => {
5
5
  let i = r.beta ?? 25 / 6, a = r.tau ?? 25 / 300, o = r.kappa ?? 1e-4, s = r.ordinalZ ?? 3;
6
6
  if (!n(i, 1e-6, 1e6) || !n(a, 0, 1e6) || !n(o, 1e-12, 1) || !n(s, 0, 100)) throw e("invalid_input");
@@ -70,5 +70,4 @@ var n = (e, t, n) => Number.isFinite(e) && e >= t && e <= n, r = (r = {}) => {
70
70
  }));
71
71
  };
72
72
  };
73
- //#endregion
74
73
  export { r as openskill };
package/dist/plugin.js CHANGED
@@ -16,7 +16,7 @@ import { makeTournamentInstallation as N } from "./tournamentInstallation.js";
16
16
  import { Effect as P, Layer as F, Schema as I } from "effect";
17
17
  import { defineLicensedGamePlugin as L } from "@voltro/plugin-licensing/gate";
18
18
  import { defineAction as R, systemSubject as z } from "@voltro/protocol";
19
- //#region src/plugin.ts
19
+ // src/plugin.ts
20
20
  var B = R({
21
21
  name: "leaderboards.submit",
22
22
  guards: [{ scope: "leaderboards:submit" }],
@@ -334,5 +334,4 @@ var B = R({
334
334
  })
335
335
  };
336
336
  };
337
- //#endregion
338
337
  export { H as leaderboardsPlugin, V as leaderboardsSystemContract };
@@ -2,7 +2,7 @@ import { LeaderboardError as e, leaderboardError as t } from "./errors.js";
2
2
  import { captureLeaderboardJson as n } from "./json.js";
3
3
  import { Effect as r, Schema as i } from "effect";
4
4
  import { Subject as a } from "@voltro/protocol";
5
- //#region src/portLifetime.ts
5
+ // src/portLifetime.ts
6
6
  function o() {
7
7
  throw t("invalid_input");
8
8
  }
@@ -11,10 +11,10 @@ var s = (e, t, n = []) => {
11
11
  let r = Object.getOwnPropertyDescriptors(e);
12
12
  (Object.entries(r).some(([e, r]) => ![...t, ...n].includes(e) || !r.enumerable || !("value" in r)) || t.some((e) => !Object.hasOwn(r, e))) && o();
13
13
  }, c = (e, t) => {
14
- (!e || typeof e != "object") && o();
14
+ e && typeof e == "object" || o();
15
15
  let n = t.map((t) => {
16
16
  let n = Object.getOwnPropertyDescriptor(e, t);
17
- return (!n || !("value" in n) || typeof n.value != "function") && o(), [t, n.value.bind(e)];
17
+ return n && "value" in n && typeof n.value == "function" || o(), [t, n.value.bind(e)];
18
18
  });
19
19
  return Object.freeze(Object.fromEntries(n));
20
20
  }, l = (e) => ((typeof e != "string" || !/^[a-zA-Z0-9][a-zA-Z0-9:._-]{0,119}$/.test(e) || e.startsWith("voltro:")) && o(), e), u = (e) => {
@@ -63,5 +63,4 @@ var s = (e, t, n = []) => {
63
63
  })
64
64
  });
65
65
  };
66
- //#endregion
67
66
  export { s as assertPortBindingKeys, c as capturePortMethods, f as capturePortPrivacyRequest, u as capturePortSources, d as capturePortSubject, l as capturePortVersion, o as invalidPortBinding, p as makeLeaderboardPortLifetime };
package/dist/ports.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { TournamentBracketPort as e } from "./bracketMatchPorts.js";
2
2
  import { TournamentStagePort as t } from "./tournamentStagePorts.js";
3
3
  import { Context as n } from "effect";
4
- //#region src/bracketPorts.ts
4
+ // src/bracketPorts.ts
5
5
  var r = class extends n.Service()("@voltro/BracketAdmissionPort") {};
6
- //#endregion
7
6
  export { r as BracketAdmissionPort, e as TournamentBracketPort, t as TournamentStagePort };
package/dist/rankQuery.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LeaderboardError as e, leaderboardError as t } from "./errors.js";
2
2
  import { rankLeaderboardRecords as n } from "./ranking.js";
3
3
  import { Effect as r } from "effect";
4
- //#region src/rankQuery.ts
4
+ // src/rankQuery.ts
5
5
  var i = (i) => r.try({
6
6
  try: () => Object.freeze(n(i.records, {
7
7
  sort: i.sort,
@@ -20,5 +20,4 @@ var i = (i) => r.try({
20
20
  }
21
21
  return Object.freeze(a);
22
22
  };
23
- //#endregion
24
23
  export { a as admitLeaderboardRankOrder, i as defaultLeaderboardRankQuery };
package/dist/ranking.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
2
  import { leaderboardIdentifier as t } from "./leaderboard.js";
3
3
  import { scoreString as n, scoreValue as r } from "./score.js";
4
- //#region src/ranking.ts
4
+ // src/ranking.ts
5
5
  var i = (e, t) => e < t ? -1 : +(e > t), a = (e, t) => {
6
6
  let n = r(e.subscore), a = r(t.subscore);
7
7
  return n > a ? -1 : n < a ? 1 : e.updatedAt - t.updatedAt || i(e.ownerId, t.ownerId) || i(e.id, t.id);
@@ -67,5 +67,4 @@ var i = (e, t) => e < t ? -1 : +(e > t), a = (e, t) => {
67
67
  ]))) o = BigInt.asUintN(64, (o ^ BigInt(e)) * 1099511628211n);
68
68
  return Number(o % BigInt(a));
69
69
  };
70
- //#endregion
71
70
  export { a as defaultLeaderboardTiebreak, c as defaultPeriodSummary, l as hashBucket, s as leaderboardAround, o as rankLeaderboardRecords };
package/dist/rating.js CHANGED
@@ -2,7 +2,7 @@ import { leaderboardError as e } from "./errors.js";
2
2
  import { leaderboardIdentifier as t } from "./leaderboard.js";
3
3
  import { glicko2 as n } from "./glicko2.js";
4
4
  import { openskill as r } from "./openskill.js";
5
- //#region src/rating.ts
5
+ // src/rating.ts
6
6
  var i = (n = {}) => {
7
7
  let r = n.k ?? 32, i = n.scale ?? 400;
8
8
  if (!Number.isFinite(r) || r <= 0 || r > 1e6 || !Number.isFinite(i) || i <= 0 || i > 1e6) throw e("invalid_input");
@@ -46,5 +46,4 @@ var i = (n = {}) => {
46
46
  }))));
47
47
  };
48
48
  };
49
- //#endregion
50
49
  export { i as elo, n as glicko2, r as openskill };
@@ -5,7 +5,7 @@ import { glicko2 as i } from "./glicko2.js";
5
5
  import { openskill as a } from "./openskill.js";
6
6
  import { elo as o } from "./rating.js";
7
7
  import { Schema as s } from "effect";
8
- //#region src/ratingPools.ts
8
+ // src/ratingPools.ts
9
9
  var c = s.Number.pipe(s.check(s.isFinite()), s.check(s.isBetween({
10
10
  minimum: -1e9,
11
11
  maximum: 1e9
@@ -130,5 +130,4 @@ var c = s.Number.pipe(s.check(s.isFinite()), s.check(s.isBetween({
130
130
  maximum: 64
131
131
  })))).pipe(s.check(s.isMinLength(2)), s.check(s.isMaxLength(64)))
132
132
  });
133
- //#endregion
134
133
  export { m as PrepareRatingMatchSchema, u as RatingStateSchema, d as exactRatingState, f as resolveRatingPools };
@@ -6,7 +6,7 @@ import { admitRatingStrategyResults as s } from "./ratingStrategies.js";
6
6
  import { leaderboardRatingMatchesTable as c, leaderboardRatingPoolsTable as l, leaderboardRatingResultsTable as u, leaderboardRatingsTable as d } from "./tables.entity.js";
7
7
  import { Effect as f, Schema as p } from "effect";
8
8
  import { and as m, eq as h, queryFor as g } from "@voltro/database";
9
- //#region src/ratingStore.ts
9
+ // src/ratingStore.ts
10
10
  var _ = (n) => n instanceof e ? n : t("unavailable"), v = (e) => f.tryPromise({
11
11
  try: e,
12
12
  catch: _
@@ -330,5 +330,4 @@ var _ = (n) => n instanceof e ? n : t("unavailable"), v = (e) => f.tryPromise({
330
330
  }
331
331
  };
332
332
  };
333
- //#endregion
334
333
  export { b as makeRatingStore };
@@ -5,7 +5,7 @@ import { glicko2 as r } from "./glicko2.js";
5
5
  import { openskill as i } from "./openskill.js";
6
6
  import { elo as a } from "./rating.js";
7
7
  import { exactRatingState as o } from "./ratingPools.js";
8
- //#region src/ratingStrategies.ts
8
+ // src/ratingStrategies.ts
9
9
  var s = (e) => e.pool.initial, c = (e) => e.state, l = (t) => {
10
10
  let { pool: n, teams: s, ranks: c } = t;
11
11
  if (n.algorithm === "elo") return Object.freeze(a(n.options)({
@@ -104,5 +104,4 @@ var s = (e) => e.pool.initial, c = (e) => e.state, l = (t) => {
104
104
  }
105
105
  return s;
106
106
  };
107
- //#endregion
108
107
  export { f as admitRatingStrategyResults, c as defaultRatingDecay, s as defaultRatingPlacement, l as defaultRatingRate, d as resolveRatingStrategies };
package/dist/records.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { scoreString as e } from "./score.js";
2
2
  import { RatingStateSchema as t } from "./ratingPools.js";
3
3
  import { Schema as n } from "effect";
4
- //#region src/records.ts
4
+ // src/records.ts
5
5
  var r = "_voltro_lb_boards", i = "_voltro_lb_records", a = "_voltro_lb_periods", o = "_voltro_lb_submissions", s = "_voltro_lb_subject_admission", c = "_voltro_lb_tournaments", l = "_voltro_lb_tournament_entries", u = "_voltro_lb_bucket_assignments", d = n.String.pipe(n.check(n.isMaxLength(20)), n.check(n.makeFilter((t) => {
6
6
  try {
7
7
  return e(t) === t;
@@ -84,5 +84,4 @@ var r = "_voltro_lb_boards", i = "_voltro_lb_records", a = "_voltro_lb_periods",
84
84
  ]),
85
85
  entry: n.NullOr(_)
86
86
  });
87
- //#endregion
88
87
  export { r as BOARDS_TABLE, u as BUCKET_ASSIGNMENTS_TABLE, g as LeaderboardPeriodSchema, m as LeaderboardRecordSchema, _ as LeaderboardTournamentEntrySchema, v as LeaderboardTournamentStatusSchema, p as MyRatingSchema, a as PERIODS_TABLE, i as RECORDS_TABLE, s as SUBJECTS_TABLE, o as SUBMISSIONS_TABLE, c as TOURNAMENTS_TABLE, l as TOURNAMENT_ENTRIES_TABLE };
package/dist/rpc.js CHANGED
@@ -3,7 +3,7 @@ import { BOARDS_TABLE as t, BUCKET_ASSIGNMENTS_TABLE as n, LeaderboardPeriodSche
3
3
  import { TournamentAdvancePayload as f, TournamentStageNotification as p, TournamentStagePayload as m, TournamentStageWindow as h, TournamentWorkflowSummary as g } from "./tournamentWorkflowSchemas.js";
4
4
  import { Schema as _ } from "effect";
5
5
  import { defineAction as v, defineQuery as y } from "@voltro/protocol";
6
- //#region src/rpc.ts
6
+ // src/rpc.ts
7
7
  var b = "@voltro/plugin-leaderboards", x = "The adapter requires a verified human and resolves the tenant from the request, never a player-supplied tenant or score.", S = _.Struct({
8
8
  ...i.fields,
9
9
  rank: _.Number.pipe(_.check(_.isInt()), _.check(_.isGreaterThan(0)))
@@ -302,5 +302,4 @@ var b = "@voltro/plugin-leaderboards", x = "The adapter requires a verified huma
302
302
  }
303
303
  }
304
304
  ];
305
- //#endregion
306
305
  export { b as BASE_NAME, C as BracketAdmissionStatusSchema, k as MyBracketMatchesSchema, f as TournamentAdvancePayload, j as TournamentBracketViewSchema, T as TournamentDisputeInput, p as TournamentStageNotification, m as TournamentStagePayload, h as TournamentStageWindow, g as TournamentWorkflowSummary, L as aroundDescriptor, W as bracketRpcClientImports, N as bracketStatusDescriptor, M as bracketViewDescriptor, O as checkInBracketDescriptor, E as disputeBracketDescriptor, R as historyDescriptor, z as joinTournamentDescriptor, V as leaderboardRpcClientImports, I as meDescriptor, A as myBracketMatchesDescriptor, P as myRatingDescriptor, U as ratingRpcClientImports, D as registerBracketDescriptor, F as topDescriptor, G as tournamentCoordinationRpcClientImports, H as tournamentRpcClientImports, B as tournamentStatusDescriptor };
package/dist/score.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { leaderboardError as e } from "./errors.js";
2
- //#region src/score.ts
2
+ // src/score.ts
3
3
  var t = -(1n << 63n), n = (1n << 63n) - 1n, r = (r) => {
4
4
  let i;
5
5
  if (typeof r == "bigint") i = r;
@@ -23,5 +23,4 @@ var t = -(1n << 63n), n = (1n << 63n) - 1n, r = (r) => {
23
23
  case "decrement": return i((c ?? 0n) - s);
24
24
  }
25
25
  };
26
- //#endregion
27
26
  export { a as applyScore, i as scoreString, r as scoreValue };
package/dist/service.js CHANGED
@@ -17,7 +17,7 @@ import { admitLeaderboardRankOrder as se, defaultLeaderboardRankQuery as ce } fr
17
17
  import { Cron as le, Effect as k, Result as ue, Schema as A } from "effect";
18
18
  import { createHash as de } from "node:crypto";
19
19
  import { and as j, eq as M, gt as fe, queryFor as N } from "@voltro/database";
20
- //#region src/service.ts
20
+ // src/service.ts
21
21
  var pe = () => k.void, P = (n) => n instanceof e ? n : t("unavailable"), F = (e) => k.tryPromise({
22
22
  try: e,
23
23
  catch: P
@@ -945,5 +945,4 @@ var pe = () => k.void, P = (n) => n instanceof e ? n : t("unavailable"), F = (e)
945
945
  }
946
946
  };
947
947
  };
948
- //#endregion
949
948
  export { pe as acceptLeaderboardSubmission, ge as dataStoreLeaderboards, he as resolveLeaderboardStoreOptions };
@@ -3,7 +3,7 @@ import { canonicalLeaderboardJson as t } from "./json.js";
3
3
  import { leaderboardSubjectsTable as n } from "./tables.entity.js";
4
4
  import { createHash as r } from "node:crypto";
5
5
  import { eq as i, queryFor as a } from "@voltro/database";
6
- //#region src/subjectFences.ts
6
+ // src/subjectFences.ts
7
7
  var o = (o) => {
8
8
  let s = (e, n) => "lbo_" + r("sha256").update(t([e, n])).digest("hex").slice(0, 56), c = async (e, t) => {
9
9
  let r = s(e, t);
@@ -40,5 +40,4 @@ var o = (o) => {
40
40
  }
41
41
  };
42
42
  };
43
- //#endregion
44
43
  export { o as makeLeaderboardSubjectFences };
@@ -1,6 +1,6 @@
1
1
  import { BOARDS_TABLE as e, PERIODS_TABLE as t, RECORDS_TABLE as n, SUBJECTS_TABLE as r, SUBMISSIONS_TABLE as i, TOURNAMENTS_TABLE as a, TOURNAMENT_ENTRIES_TABLE as o } from "./records.js";
2
2
  import { bigint as s, boolean as c, id as l, integer as u, json as d, table as f, text as p, timestamp as m } from "@voltro/database";
3
- //#region src/tables.entity.ts
3
+ // src/tables.entity.ts
4
4
  var h = () => p().maxLength(256).externalId().sensitive("pii"), g = f(e, {
5
5
  id: l({ prefix: "lbb" }),
6
6
  tenantId: h(),
@@ -184,5 +184,4 @@ var h = () => p().maxLength(256).externalId().sensitive("pii"), g = f(e, {
184
184
  O,
185
185
  k
186
186
  ];
187
- //#endregion
188
187
  export { g as leaderboardBoardsTable, D as leaderboardBucketAssignmentsTable, O as leaderboardLeagueMembersTable, k as leaderboardLeagueRollsTable, v as leaderboardPeriodsTable, T as leaderboardRatingMatchesTable, C as leaderboardRatingPoolsTable, E as leaderboardRatingResultsTable, w as leaderboardRatingsTable, _ as leaderboardRecordsTable, b as leaderboardSubjectsTable, y as leaderboardSubmissionsTable, A as leaderboardTables, S as leaderboardTournamentEntriesTable, x as leaderboardTournamentsTable };
package/dist/testing.js CHANGED
@@ -13,7 +13,7 @@ import { BracketAdmissionPort as h } from "./ports.js";
13
13
  import { advanceDoubleElimination as g, advanceSingleElimination as _, roundRobin as v, seedDoubleElimination as y, seedSingleElimination as te, swissPairings as ne } from "./brackets.js";
14
14
  import { Effect as b, Layer as x, Result as S } from "effect";
15
15
  import { systemSubject as C } from "@voltro/protocol";
16
- //#region src/testing.ts
16
+ // src/testing.ts
17
17
  var w = (e = "player") => ({
18
18
  id: "record-" + e,
19
19
  tenantId: "tenant",
@@ -364,5 +364,4 @@ var w = (e = "player") => ({
364
364
  expected: "unavailable"
365
365
  }
366
366
  });
367
- //#endregion
368
367
  export { j as bracketAdmissionFakeLayer, M as bracketAdmissionPortFixture, ae as bracketAdmissionPortSystemFixture, X as bracketAdmissionSystemFakeLayer, K as bucketAssignSystemFixture, E as eloFixture, A as fakeBracketAdmissionService, N as fakeTournamentBracketService, I as fakeTournamentStageService, k as leaderboardBucketAssignFixture, T as leaderboardPureFixture, D as leaderboardRankQueryFixture, w as leaderboardRecordFixture, W as periodSummarySystemFixture, G as rankQuerySystemFixture, ie as ratingDecaySystemFixture, Y as ratingPlacementSystemFixture, J as ratingRateSystemFixture, O as ratingStrategiesFixture, U as tiebreakSystemFixture, P as tournamentBracketFakeLayer, F as tournamentBracketPortFixture, oe as tournamentBracketPortSystemFixture, Z as tournamentBracketSystemFakeLayer, re as tournamentPairingFixture, L as tournamentStageFakeLayer, R as tournamentStagePortFixture, se as tournamentStagePortSystemFixture, Q as tournamentStageSystemFakeLayer, q as validateSystemFixture };