@voltro/plugin-leaderboards 0.0.0-stage → 0.87.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 (67) hide show
  1. package/CHANGELOG.md +24329 -0
  2. package/LICENSE +61 -0
  3. package/README.md +1087 -2
  4. package/SECURITY.md +56 -0
  5. package/THIRD-PARTY-NOTICES.md +5007 -0
  6. package/dist/administration.js +5 -0
  7. package/dist/bracketAdmission.js +294 -0
  8. package/dist/bracketAdmissionPolicy.js +22 -0
  9. package/dist/bracketInstallation.js +133 -0
  10. package/dist/bracketMatchPorts.js +5 -0
  11. package/dist/bracketMatches.js +546 -0
  12. package/dist/brackets.d.ts +149 -0
  13. package/dist/brackets.js +379 -0
  14. package/dist/bucketStore.js +93 -0
  15. package/dist/buckets.js +9 -0
  16. package/dist/errors.d.ts +13 -0
  17. package/dist/errors.js +17 -0
  18. package/dist/glicko2.js +72 -0
  19. package/dist/index.d.ts +1208 -0
  20. package/dist/index.js +15 -0
  21. package/dist/inspect.js +84 -0
  22. package/dist/json.js +39 -0
  23. package/dist/leaderboard.d.ts +49 -0
  24. package/dist/leaderboard.js +57 -0
  25. package/dist/leagueSchedule.js +40 -0
  26. package/dist/leagues.js +31 -0
  27. package/dist/openskill.js +74 -0
  28. package/dist/plugin.js +338 -0
  29. package/dist/portLifetime.js +67 -0
  30. package/dist/ports.d.ts +294 -0
  31. package/dist/ports.js +7 -0
  32. package/dist/rankQuery.js +24 -0
  33. package/dist/ranking.d.ts +42 -0
  34. package/dist/ranking.js +71 -0
  35. package/dist/rating.d.ts +103 -0
  36. package/dist/rating.js +50 -0
  37. package/dist/ratingPools.js +134 -0
  38. package/dist/ratingStore.js +334 -0
  39. package/dist/ratingStrategies.js +108 -0
  40. package/dist/records.d.ts +116 -0
  41. package/dist/records.js +88 -0
  42. package/dist/rpc.d.ts +321 -0
  43. package/dist/rpc.js +306 -0
  44. package/dist/score.d.ts +13 -0
  45. package/dist/score.js +27 -0
  46. package/dist/server.d.ts +1477 -0
  47. package/dist/server.js +17 -0
  48. package/dist/service.js +949 -0
  49. package/dist/subjectFences.js +44 -0
  50. package/dist/tables.entity.js +188 -0
  51. package/dist/testing.d.ts +872 -0
  52. package/dist/testing.js +368 -0
  53. package/dist/tournament-app/tournament.advance.workflow.server.tsx +3 -0
  54. package/dist/tournament-app/tournament.advance.workflow.tsx +12 -0
  55. package/dist/tournament-app/tournament.stage.workflow.server.tsx +3 -0
  56. package/dist/tournament-app/tournament.stage.workflow.tsx +10 -0
  57. package/dist/tournamentInstallation.js +168 -0
  58. package/dist/tournamentPrizes.js +34 -0
  59. package/dist/tournamentStage.js +151 -0
  60. package/dist/tournamentStagePorts.js +5 -0
  61. package/dist/tournamentWorkflow.js +101 -0
  62. package/dist/tournamentWorkflowSchemas.js +54 -0
  63. package/dist/tournaments.d.ts +32 -0
  64. package/dist/tournaments.js +21 -0
  65. package/dist/web.d.ts +175 -0
  66. package/dist/web.js +17 -0
  67. package/package.json +113 -4
@@ -0,0 +1,44 @@
1
+ import { leaderboardError as e } from "./errors.js";
2
+ import { canonicalLeaderboardJson as t } from "./json.js";
3
+ import { leaderboardSubjectsTable as n } from "./tables.entity.js";
4
+ import { createHash as r } from "node:crypto";
5
+ import { eq as i, queryFor as a } from "@voltro/database";
6
+ //#region src/subjectFences.ts
7
+ var o = (o) => {
8
+ let s = (e, n) => "lbo_" + r("sha256").update(t([e, n])).digest("hex").slice(0, 56), c = async (e, t) => {
9
+ let r = s(e, t);
10
+ try {
11
+ await o.insertIgnore(n.tableName, {
12
+ id: r,
13
+ tenantId: e,
14
+ subjectId: t,
15
+ erased: !1,
16
+ admission: 0
17
+ }, { conflictColumns: ["id"] });
18
+ } catch (e) {
19
+ if (!(await o.query(a(n).where(i("id", r)).limit(1).descriptor))[0]) throw e;
20
+ }
21
+ }, l = async (t, r, o, c = !1) => {
22
+ let l = s(r, o);
23
+ if (await t.updateMany(n.tableName, { admission: 0 }, { where: i("id", l) }) !== 1) throw e("unavailable");
24
+ let u = (await t.query(a(n).where(i("id", l)).limit(1).forUpdate().descriptor))[0], d = u?.erased === !0 || u?.erased === 1;
25
+ if (!u || u.tenantId !== r || u.subjectId !== o && !(c && u.subjectId === null && d)) throw e(d ? "erased" : "unavailable");
26
+ if (!c && d) throw e("erased");
27
+ return u;
28
+ };
29
+ return {
30
+ seedSubject: c,
31
+ subjectFence: l,
32
+ eraseSubjectFence: async (t, r) => {
33
+ await c(t, r), await o.transactional(async (i) => {
34
+ let a = await l(i, t, r, !0);
35
+ if (!await i.update(n.tableName, String(a.id), {
36
+ subjectId: null,
37
+ erased: !0
38
+ })) throw e("unavailable");
39
+ });
40
+ }
41
+ };
42
+ };
43
+ //#endregion
44
+ export { o as makeLeaderboardSubjectFences };
@@ -0,0 +1,188 @@
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
+ 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
4
+ var h = () => p().maxLength(256).externalId().sensitive("pii"), g = f(e, {
5
+ id: l({ prefix: "lbb" }),
6
+ tenantId: h(),
7
+ name: p().maxLength(256).safe(),
8
+ periodId: p().maxLength(64).safe(),
9
+ config: d().safe(),
10
+ admission: u().serverOnly(),
11
+ updatedAt: m().safe()
12
+ }).index(["tenantId", "name"]), _ = f(n, {
13
+ id: l({ prefix: "lbr" }),
14
+ tenantId: h(),
15
+ board: p().maxLength(256).safe(),
16
+ periodId: p().maxLength(64).safe(),
17
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
18
+ score: s().safe(),
19
+ subscore: s().safe(),
20
+ numSubmits: u().safe(),
21
+ metadata: d().sensitive("pii"),
22
+ updatedAt: m().safe(),
23
+ bucket: p().maxLength(64).nullable().safe()
24
+ }).index("voltro_lb_records_rank_idx", [
25
+ "tenantId",
26
+ "board",
27
+ "periodId",
28
+ "score",
29
+ "subscore",
30
+ "updatedAt"
31
+ ]).index(["tenantId", "ownerId"]).index([
32
+ "tenantId",
33
+ "board",
34
+ "periodId",
35
+ "bucket"
36
+ ]), v = f(t, {
37
+ id: l({ prefix: "lbp" }),
38
+ tenantId: h(),
39
+ board: p().maxLength(256).safe(),
40
+ startsAt: m().safe(),
41
+ endsAt: m().nullable().safe(),
42
+ state: p().maxLength(16).oneOf([
43
+ "active",
44
+ "closed",
45
+ "archived"
46
+ ]).safe(),
47
+ summary: d().sensitive("pii"),
48
+ previousPeriodId: p().maxLength(64).nullable().safe(),
49
+ requestKey: p().maxLength(64).nullable().serverOnly()
50
+ }).index([
51
+ "tenantId",
52
+ "board",
53
+ "startsAt"
54
+ ]), y = f(i, {
55
+ id: l({ prefix: "lbs" }),
56
+ tenantId: h(),
57
+ board: p().maxLength(256).safe(),
58
+ periodId: p().maxLength(64).safe(),
59
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
60
+ requestKey: p().maxLength(64).serverOnly(),
61
+ record: d().sensitive("pii"),
62
+ roomId: p().maxLength(256).nullable().sensitive("pii"),
63
+ matchId: p().maxLength(256).nullable().sensitive("pii"),
64
+ at: m().safe(),
65
+ tournamentId: p().maxLength(256).nullable().safe()
66
+ }).index(["tenantId", "ownerId"]).index([
67
+ "tenantId",
68
+ "board",
69
+ "periodId"
70
+ ]), b = f(r, {
71
+ id: l({ prefix: "lbo" }),
72
+ tenantId: h(),
73
+ subjectId: p().maxLength(256).nullable().externalId().sensitive("pii"),
74
+ erased: c().serverOnly(),
75
+ admission: u().serverOnly()
76
+ }).index(["tenantId", "subjectId"]), x = f(a, {
77
+ id: l({ prefix: "lbt" }),
78
+ tenantId: h(),
79
+ name: p().maxLength(256).safe(),
80
+ board: p().maxLength(256).safe(),
81
+ periodId: p().maxLength(64).safe(),
82
+ config: d().safe(),
83
+ admission: u().serverOnly(),
84
+ numEntries: u().serverOnly()
85
+ }).index(["tenantId", "name"]).index(["tenantId", "board"]), S = f(o, {
86
+ id: l({ prefix: "lbe" }),
87
+ tenantId: h(),
88
+ tournamentId: p().maxLength(64).safe(),
89
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
90
+ joinedAt: m().safe(),
91
+ attemptsLeft: u().safe()
92
+ }).index(["tenantId", "ownerId"]).index(["tenantId", "tournamentId"]), C = f("_voltro_lb_rating_pools", {
93
+ id: l({ prefix: "lbrp" }),
94
+ tenantId: h(),
95
+ name: p().maxLength(256).safe(),
96
+ config: d().safe(),
97
+ admission: u().serverOnly()
98
+ }).index(["tenantId", "name"]), w = f("_voltro_lb_ratings", {
99
+ id: l({ prefix: "lbrr" }),
100
+ tenantId: h(),
101
+ pool: p().maxLength(256).safe(),
102
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
103
+ state: d().sensitive("pii"),
104
+ games: u().safe(),
105
+ updatedAt: m().safe()
106
+ }).index(["tenantId", "pool"]).index(["tenantId", "ownerId"]), T = f("_voltro_lb_rating_matches", {
107
+ id: l({ prefix: "lbrm" }),
108
+ tenantId: h(),
109
+ pool: p().maxLength(256).safe(),
110
+ matchId: p().maxLength(256).nullable().sensitive("pii"),
111
+ requestKey: p().maxLength(64).serverOnly(),
112
+ state: p().maxLength(16).oneOf([
113
+ "prepared",
114
+ "applied",
115
+ "erased"
116
+ ]).serverOnly(),
117
+ input: d().nullable().sensitive("pii"),
118
+ participants: u().safe(),
119
+ preparedAt: m().safe(),
120
+ appliedAt: m().nullable().safe()
121
+ }).index([
122
+ "tenantId",
123
+ "pool",
124
+ "state"
125
+ ]), E = f("_voltro_lb_rating_results", {
126
+ id: l({ prefix: "lbrs" }),
127
+ tenantId: h(),
128
+ pool: p().maxLength(256).safe(),
129
+ matchKey: p().maxLength(64).serverOnly(),
130
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
131
+ previous: d().sensitive("pii"),
132
+ current: d().sensitive("pii"),
133
+ at: m().safe()
134
+ }).index(["tenantId", "ownerId"]).index([
135
+ "tenantId",
136
+ "pool",
137
+ "matchKey"
138
+ ]), D = f("_voltro_lb_bucket_assignments", {
139
+ id: l({ prefix: "lbba" }),
140
+ tenantId: h(),
141
+ board: p().maxLength(256).safe(),
142
+ periodId: p().maxLength(64).safe(),
143
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
144
+ bucket: p().maxLength(64).safe(),
145
+ ordinal: u().safe(),
146
+ groupKey: p().maxLength(64).serverOnly(),
147
+ group: p().maxLength(256).nullable().sensitive("pii"),
148
+ assignedAt: m().safe()
149
+ }).index(["tenantId", "ownerId"]).index("voltro_lb_bucket_assignments_group_idx", [
150
+ "tenantId",
151
+ "board",
152
+ "periodId",
153
+ "groupKey"
154
+ ]), O = f("_voltro_lb_league_members", {
155
+ id: l({ prefix: "lblm" }),
156
+ tenantId: h(),
157
+ league: p().maxLength(256).safe(),
158
+ ownerId: p().maxLength(256).externalId().sensitive("pii"),
159
+ division: p().maxLength(256).safe(),
160
+ updatedAt: m().safe()
161
+ }).index(["tenantId", "ownerId"]).index("voltro_lb_league_members_division_idx", [
162
+ "tenantId",
163
+ "league",
164
+ "division"
165
+ ]).index("voltro_lb_league_members_league_idx", ["league", "tenantId"]), k = f("_voltro_lb_league_rolls", {
166
+ id: l({ prefix: "lblr" }),
167
+ tenantId: h(),
168
+ league: p().maxLength(256).safe(),
169
+ movements: d().sensitive("pii"),
170
+ at: m().safe()
171
+ }).index(["tenantId", "league"]), A = [
172
+ g,
173
+ _,
174
+ v,
175
+ y,
176
+ b,
177
+ x,
178
+ S,
179
+ C,
180
+ w,
181
+ T,
182
+ E,
183
+ D,
184
+ O,
185
+ k
186
+ ];
187
+ //#endregion
188
+ 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 };