@voltro/plugin-progression 0.0.0-stage → 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 (97) hide show
  1. package/CHANGELOG.md +24492 -0
  2. package/LICENSE +61 -0
  3. package/README.md +478 -2
  4. package/SECURITY.md +56 -0
  5. package/THIRD-PARTY-NOTICES.md +9841 -0
  6. package/dist/achievementComponents.js +91 -0
  7. package/dist/achievementStore.js +602 -0
  8. package/dist/achievementTables.entity.js +97 -0
  9. package/dist/achievements.d.ts +188 -0
  10. package/dist/achievements.js +204 -0
  11. package/dist/capture.js +63 -0
  12. package/dist/cmsQuests.d.ts +91 -0
  13. package/dist/cmsQuests.js +82 -0
  14. package/dist/components.d.ts +172 -0
  15. package/dist/components.js +4 -0
  16. package/dist/curve.d.ts +27 -0
  17. package/dist/curve.js +37 -0
  18. package/dist/daily.d.ts +152 -0
  19. package/dist/daily.js +125 -0
  20. package/dist/dailyStore.js +420 -0
  21. package/dist/dailySystem.fixture.js +137 -0
  22. package/dist/dailyTables.entity.js +89 -0
  23. package/dist/declarationFixtures.js +142 -0
  24. package/dist/errors.d.ts +13 -0
  25. package/dist/errors.js +19 -0
  26. package/dist/index.d.ts +1833 -0
  27. package/dist/index.js +19 -0
  28. package/dist/pass.d.ts +186 -0
  29. package/dist/pass.js +121 -0
  30. package/dist/passRules.js +95 -0
  31. package/dist/passStore.js +484 -0
  32. package/dist/passTables.entity.js +95 -0
  33. package/dist/plugin.js +1085 -0
  34. package/dist/port.js +4 -0
  35. package/dist/progressionStore.js +705 -0
  36. package/dist/questComponents.js +162 -0
  37. package/dist/questPort.d.ts +126 -0
  38. package/dist/questPort.js +4 -0
  39. package/dist/questRefresh.js +55 -0
  40. package/dist/questRefresh.server.js +125 -0
  41. package/dist/questRerollJournal.js +76 -0
  42. package/dist/questStore.js +591 -0
  43. package/dist/questTables.entity.js +116 -0
  44. package/dist/quests.d.ts +142 -0
  45. package/dist/quests.js +152 -0
  46. package/dist/rank-app/schedules/progression.dispatchRankClosures.cron.tsx +19 -0
  47. package/dist/rank-app/workflows/progression.closeRankSeason.workflow.server.tsx +10 -0
  48. package/dist/rank-app/workflows/progression.closeRankSeason.workflow.tsx +1 -0
  49. package/dist/rankClosure.d.ts +69 -0
  50. package/dist/rankClosure.js +34 -0
  51. package/dist/rankClosure.server.js +138 -0
  52. package/dist/rankClosureWorkflow.d.ts +34 -0
  53. package/dist/rankClosureWorkflow.js +15 -0
  54. package/dist/rankReader.server.js +56 -0
  55. package/dist/rankRewardParent.server.js +64 -0
  56. package/dist/rankSeasons.d.ts +144 -0
  57. package/dist/rankSeasons.js +90 -0
  58. package/dist/rankStore.js +520 -0
  59. package/dist/rankSystem.fixture.js +169 -0
  60. package/dist/rankTables.entity.js +100 -0
  61. package/dist/ranks.d.ts +167 -0
  62. package/dist/ranks.js +218 -0
  63. package/dist/resourceStore.js +463 -0
  64. package/dist/resourceTables.entity.js +88 -0
  65. package/dist/resources.d.ts +105 -0
  66. package/dist/resources.js +59 -0
  67. package/dist/reward-app/schedules/progression.dispatchRewards.cron.tsx +19 -0
  68. package/dist/reward-app/workflows/progression.deliverReward.workflow.server.tsx +10 -0
  69. package/dist/reward-app/workflows/progression.deliverReward.workflow.tsx +1 -0
  70. package/dist/reward.d.ts +27 -0
  71. package/dist/reward.js +38 -0
  72. package/dist/rewardDelivery.d.ts +163 -0
  73. package/dist/rewardDelivery.js +37 -0
  74. package/dist/rewardDelivery.server.js +429 -0
  75. package/dist/rewardDeliveryRecord.js +47 -0
  76. package/dist/rewardDeliveryWorkflow.d.ts +36 -0
  77. package/dist/rewardDeliveryWorkflow.js +15 -0
  78. package/dist/rpc.d.ts +880 -0
  79. package/dist/rpc.js +497 -0
  80. package/dist/server.d.ts +2812 -0
  81. package/dist/server.js +21 -0
  82. package/dist/stats.js +44 -0
  83. package/dist/strategies.d.ts +131 -0
  84. package/dist/strategies.js +4 -0
  85. package/dist/systemFixtures.js +473 -0
  86. package/dist/tables.entity.js +154 -0
  87. package/dist/testing.d.ts +1566 -0
  88. package/dist/testing.js +11 -0
  89. package/dist/track.js +71 -0
  90. package/dist/tutorial.d.ts +157 -0
  91. package/dist/tutorial.js +109 -0
  92. package/dist/tutorialStore.js +495 -0
  93. package/dist/tutorialSystem.fixture.js +99 -0
  94. package/dist/tutorialTables.entity.js +90 -0
  95. package/dist/web.d.ts +363 -0
  96. package/dist/web.js +6 -0
  97. package/package.json +167 -4
package/dist/plugin.js ADDED
@@ -0,0 +1,1085 @@
1
+ import { ProgressionError as e, progressionError as t } from "./errors.js";
2
+ import { captureArguments as n, captureMethods as r, object as i } from "./capture.js";
3
+ import { RankClosurePort as a } from "./rankClosure.js";
4
+ import { RankRatingSource as ee, defaultRankDecay as te, defaultRankGrade as ne, defaultRankScore as re, defaultRankSeasonReset as ie } from "./ranks.js";
5
+ import { RankPort as ae } from "./rankSeasons.js";
6
+ import { TutorialPort as oe, TutorialVerifier as se, defaultTutorialStepPolicy as ce } from "./tutorial.js";
7
+ import { SeasonPassPort as le, defaultPassCatchUp as ue } from "./pass.js";
8
+ import { QuestSource as de, defaultQuestProgressResolver as fe, defaultQuestSelector as pe } from "./quests.js";
9
+ import { DailyProfileSource as me, LoginCalendarPort as he, defaultDailyClaimPolicy as ge } from "./daily.js";
10
+ import { RewardDeliveryPort as _e } from "./rewardDelivery.js";
11
+ import { defaultXpCurve as ve } from "./curve.js";
12
+ import { ProgressionPort as ye } from "./port.js";
13
+ import { PROGRESSION_NAME as be, achievementsMineDescriptor as xe, achievementsRpcClientImports as Se, claimDailyDescriptor as Ce, dailyRpcClientImports as we, dailyStateDescriptor as Te, passClaimDescriptor as Ee, passesMineDescriptor as De, passesRpcClientImports as Oe, progressionMineDescriptor as ke, progressionRpcClientImports as Ae, progressionStatsDescriptor as je, questsMineDescriptor as Me, questsRerollDescriptor as Ne, questsRpcClientImports as Pe, rankObserveDescriptor as Fe, rankRpcClientImports as Ie, ranksMineDescriptor as Le, resourcesMineDescriptor as Re, resourcesRpcClientImports as ze, tutorialRpcClientImports as Be, tutorialSkipDescriptor as Ve, tutorialStepDescriptor as He, tutorialsMineDescriptor as Ue } from "./rpc.js";
14
+ import { defaultRewardResolver as We, trackDeclaration as Ge } from "./track.js";
15
+ import { progressionTables as Ke } from "./tables.entity.js";
16
+ import { dataStoreProgression as qe, resolveProgressionOptions as Je } from "./progressionStore.js";
17
+ import { QuestPort as Ye } from "./questPort.js";
18
+ import { questTables as Xe } from "./questTables.entity.js";
19
+ import { dataStoreQuests as Ze, questHash as Qe, resolveQuestOptions as $e } from "./questStore.js";
20
+ import { QuestPlayerSource as et, QuestRefreshPort as tt, capturedRefresh as o, defaultQuestWindow as nt } from "./questRefresh.js";
21
+ import { defaultQuestSeed as rt, makeQuestRefreshService as it, resolveQuestRefreshOptions as at } from "./questRefresh.server.js";
22
+ import { RegenResourcePort as ot, defaultResourceRegen as st } from "./resources.js";
23
+ import { resourceTables as ct } from "./resourceTables.entity.js";
24
+ import { dataStoreResources as lt, resolveResourceOptions as ut } from "./resourceStore.js";
25
+ import { AchievementPort as dt, AchievementStatSource as ft, defaultAchievementEvaluator as pt } from "./achievements.js";
26
+ import { achievementTables as mt } from "./achievementTables.entity.js";
27
+ import { dataStoreAchievements as ht, resolveAchievementOptions as gt } from "./achievementStore.js";
28
+ import { dailyTables as _t } from "./dailyTables.entity.js";
29
+ import { passTables as vt } from "./passTables.entity.js";
30
+ import { tutorialTables as yt } from "./tutorialTables.entity.js";
31
+ import { rankTables as bt } from "./rankTables.entity.js";
32
+ import { dataStoreRewardDelivery as xt, resolveRewardDeliveryOptions as St } from "./rewardDelivery.server.js";
33
+ import { dataStoreLoginCalendars as Ct, resolveDailyOptions as wt } from "./dailyStore.js";
34
+ import { dataStoreSeasonPasses as Tt, resolvePassOptions as Et } from "./passStore.js";
35
+ import { dataStoreTutorials as Dt, resolveTutorialOptions as Ot } from "./tutorialStore.js";
36
+ import { dataStoreRankSeasons as kt, resolveRankStoreOptions as At } from "./rankStore.js";
37
+ import { dataStoreRankClosure as jt, resolveRankClosureOptions as Mt } from "./rankClosure.server.js";
38
+ import { Effect as s, Layer as c } from "effect";
39
+ import { defineLicensedGamePlugin as Nt } from "@voltro/plugin-licensing/gate";
40
+ import { fileURLToPath as Pt } from "node:url";
41
+ import { systemSubject as Ft } from "@voltro/protocol";
42
+ // src/plugin.ts
43
+ var It = Object.freeze({
44
+ slots: {
45
+ questSelector: {
46
+ defaultExport: "defaultQuestSelector",
47
+ fixtureExport: "questSelectorSystemFixture"
48
+ },
49
+ questProgressResolver: {
50
+ defaultExport: "defaultQuestProgressResolver",
51
+ fixtureExport: "questProgressResolverSystemFixture"
52
+ }
53
+ },
54
+ ports: {
55
+ quests: {
56
+ tagExport: "QuestPort",
57
+ fakeLayerExport: "questFakeLayer",
58
+ fixtureExport: "questPortSystemFixture"
59
+ },
60
+ questSource: {
61
+ tagExport: "QuestSource",
62
+ fakeLayerExport: "questSourceFakeLayer",
63
+ fixtureExport: "questSourceSystemFixture"
64
+ }
65
+ },
66
+ events: []
67
+ }), l = Object.freeze({
68
+ slots: { resourceRegen: {
69
+ defaultExport: "defaultResourceRegen",
70
+ fixtureExport: "resourceRegenSystemFixture"
71
+ } },
72
+ ports: { resources: {
73
+ tagExport: "RegenResourcePort",
74
+ fakeLayerExport: "resourceFakeLayer",
75
+ fixtureExport: "resourcePortSystemFixture"
76
+ } },
77
+ events: []
78
+ }), u = Object.freeze({
79
+ slots: { achievementEvaluator: {
80
+ defaultExport: "defaultAchievementEvaluator",
81
+ fixtureExport: "achievementEvaluatorSystemFixture"
82
+ } },
83
+ ports: {
84
+ achievements: {
85
+ tagExport: "AchievementPort",
86
+ fakeLayerExport: "achievementFakeLayer",
87
+ fixtureExport: "achievementPortSystemFixture"
88
+ },
89
+ achievementStatSource: {
90
+ tagExport: "AchievementStatSource",
91
+ fakeLayerExport: "achievementStatSourceFakeLayer",
92
+ fixtureExport: "achievementStatSourceSystemFixture"
93
+ }
94
+ },
95
+ events: []
96
+ }), d = Object.freeze({
97
+ slots: { passCatchUp: {
98
+ defaultExport: "defaultPassCatchUp",
99
+ fixtureExport: "passCatchUpSystemFixture"
100
+ } },
101
+ ports: { passes: {
102
+ tagExport: "SeasonPassPort",
103
+ fakeLayerExport: "passFakeLayer",
104
+ fixtureExport: "passPortSystemFixture"
105
+ } },
106
+ events: []
107
+ }), f = Object.freeze({
108
+ slots: { tutorialStepPolicy: {
109
+ defaultExport: "defaultTutorialStepPolicy",
110
+ fixtureExport: "tutorialStepPolicySystemFixture"
111
+ } },
112
+ ports: { tutorials: {
113
+ tagExport: "TutorialPort",
114
+ fakeLayerExport: "tutorialFakeLayer",
115
+ fixtureExport: "tutorialPortSystemFixture"
116
+ } },
117
+ events: []
118
+ }), p = Object.freeze({
119
+ slots: { dailyClaimPolicy: {
120
+ defaultExport: "defaultDailyClaimPolicy",
121
+ fixtureExport: "dailyClaimPolicySystemFixture"
122
+ } },
123
+ ports: {
124
+ daily: {
125
+ tagExport: "LoginCalendarPort",
126
+ fakeLayerExport: "loginCalendarFakeLayer",
127
+ fixtureExport: "loginCalendarPortSystemFixture"
128
+ },
129
+ dailyProfileSource: {
130
+ tagExport: "DailyProfileSource",
131
+ fakeLayerExport: "dailyProfileSourceFakeLayer",
132
+ fixtureExport: "dailyProfileSourceSystemFixture"
133
+ }
134
+ },
135
+ events: []
136
+ }), m = Object.freeze({
137
+ slots: {
138
+ rankScore: {
139
+ defaultExport: "defaultRankScore",
140
+ fixtureExport: "rankScoreSystemFixture"
141
+ },
142
+ rankDecay: {
143
+ defaultExport: "defaultRankDecay",
144
+ fixtureExport: "rankDecaySystemFixture"
145
+ },
146
+ rankGrade: {
147
+ defaultExport: "defaultRankGrade",
148
+ fixtureExport: "rankGradeSystemFixture"
149
+ },
150
+ rankSeasonReset: {
151
+ defaultExport: "defaultRankSeasonReset",
152
+ fixtureExport: "rankSeasonResetSystemFixture"
153
+ }
154
+ },
155
+ ports: {
156
+ ranks: {
157
+ tagExport: "RankPort",
158
+ fakeLayerExport: "rankFakeLayer",
159
+ fixtureExport: "rankPortSystemFixture"
160
+ },
161
+ rankRatingSource: {
162
+ tagExport: "RankRatingSource",
163
+ fakeLayerExport: "rankRatingSourceFakeLayer",
164
+ fixtureExport: "rankRatingSourceSystemFixture"
165
+ }
166
+ },
167
+ events: []
168
+ }), h = Object.freeze({
169
+ slots: {
170
+ xpCurve: {
171
+ defaultExport: "defaultXpCurve",
172
+ fixtureExport: "xpCurveSystemFixture"
173
+ },
174
+ rewardResolver: {
175
+ defaultExport: "defaultRewardResolver",
176
+ fixtureExport: "rewardResolverSystemFixture"
177
+ }
178
+ },
179
+ ports: { progression: {
180
+ tagExport: "ProgressionPort",
181
+ fakeLayerExport: "progressionFakeLayer",
182
+ fixtureExport: "progressionPortSystemFixture"
183
+ } },
184
+ events: []
185
+ }), g = (It) => {
186
+ let l = i(It, [
187
+ "tracks",
188
+ "stats",
189
+ "statSources",
190
+ "allowedServices",
191
+ "maxHistoryRows",
192
+ "maxPendingRewards",
193
+ "now",
194
+ "strategies",
195
+ "service",
196
+ "quests",
197
+ "resources",
198
+ "achievements",
199
+ "delivery",
200
+ "daily",
201
+ "passes",
202
+ "tutorials",
203
+ "ranks"
204
+ ]), u = Je({
205
+ tracks: l.tracks,
206
+ stats: l.stats,
207
+ statSources: l.statSources,
208
+ allowedServices: l.allowedServices,
209
+ maxHistoryRows: l.maxHistoryRows,
210
+ maxPendingRewards: l.maxPendingRewards,
211
+ now: l.now,
212
+ strategies: l.strategies
213
+ }), d = l.service === void 0 ? void 0 : r(l.service, [
214
+ "applyXp",
215
+ "applyStat",
216
+ "mine",
217
+ "stats",
218
+ "exportSubject",
219
+ "eraseSubject"
220
+ ]), f = l.quests === void 0 ? void 0 : i(l.quests, [
221
+ "source",
222
+ "channel",
223
+ "locale",
224
+ "allowedServices",
225
+ "eventSources",
226
+ "statSources",
227
+ "maxWorkRows",
228
+ "now",
229
+ "strategies",
230
+ "service",
231
+ "refresh"
232
+ ]), p = f ? $e({
233
+ source: f.source,
234
+ channel: f.channel,
235
+ locale: f.locale,
236
+ allowedServices: f.allowedServices,
237
+ eventSources: f.eventSources,
238
+ statSources: f.statSources,
239
+ maxWorkRows: f.maxWorkRows,
240
+ now: f.now,
241
+ strategies: f.strategies
242
+ }) : void 0, m = f?.service === void 0 ? void 0 : r(f.service, [
243
+ "assign",
244
+ "record",
245
+ "reroll",
246
+ "mine",
247
+ "exportSubject",
248
+ "eraseSubject"
249
+ ]), h = l.resources === void 0 ? void 0 : i(l.resources, [
250
+ "definitions",
251
+ "sources",
252
+ "allowedServices",
253
+ "maxHistoryRows",
254
+ "now",
255
+ "strategies",
256
+ "service"
257
+ ]), g = h ? ut({
258
+ definitions: h.definitions,
259
+ sources: h.sources,
260
+ allowedServices: h.allowedServices,
261
+ maxHistoryRows: h.maxHistoryRows,
262
+ now: h.now,
263
+ strategies: h.strategies
264
+ }) : void 0, _ = h?.service === void 0 ? void 0 : r(h.service, [
265
+ "initialize",
266
+ "consume",
267
+ "grant",
268
+ "mine",
269
+ "exportSubject",
270
+ "eraseSubject"
271
+ ]), v, Lt, y, b = !1, x = l.achievements === void 0 ? void 0 : i(l.achievements, [
272
+ "definitions",
273
+ "source",
274
+ "allowedServices",
275
+ "maxHistoryRows",
276
+ "maxPendingRewards",
277
+ "now",
278
+ "strategies",
279
+ "service"
280
+ ]), Rt = Object.freeze({ history: (e, n) => o({
281
+ subject: e,
282
+ input: n
283
+ }, (e) => s.suspend(() => b && y && !d ? y.achievementHistory(e.subject, e.input.tenantId, e.input.ownerId, e.input.limit) : s.fail(t("unavailable")))) });
284
+ if (x && d && x.source === void 0) throw t("invalid_input");
285
+ let zt = x ? {
286
+ definitions: n(x.definitions),
287
+ source: x.source ?? Rt,
288
+ allowedServices: x.allowedServices ?? u.allowedServices,
289
+ maxHistoryRows: x.maxHistoryRows,
290
+ maxPendingRewards: x.maxPendingRewards,
291
+ now: x.now,
292
+ strategies: x.strategies
293
+ } : void 0, S = zt ? gt(zt) : void 0, C = x?.service === void 0 ? void 0 : r(x.service, [
294
+ "evaluate",
295
+ "mine",
296
+ "exportSubject",
297
+ "eraseSubject"
298
+ ]), w, T = f?.refresh === void 0 ? void 0 : at(f.refresh), Bt, Vt, Ht, Ut = (e) => s.suspend(() => {
299
+ let n = d ?? y;
300
+ return b && n ? e(n) : s.fail(t("unavailable"));
301
+ }), Wt = (e, r, i) => {
302
+ try {
303
+ let t = n(e), a = n(r);
304
+ return Ut((e) => i(e, t, a));
305
+ } catch {
306
+ return s.fail(t("invalid_input"));
307
+ }
308
+ }, E = Object.freeze({
309
+ applyXp: (e, t) => Wt(e, t, (e, t, n) => e.applyXp(t, n)),
310
+ applyStat: (e, t) => Wt(e, t, (e, t, n) => s.flatMap(e.applyStat(t, n), (e) => S ? s.as(k.evaluate(t, {
311
+ tenantId: n.tenantId,
312
+ ownerId: n.ownerId,
313
+ requestId: "stat." + Qe(e.operationId).slice(0, 56)
314
+ }), e) : s.succeed(e))),
315
+ mine: (e) => Wt(e, null, (e, t) => e.mine(t)),
316
+ stats: (e) => Wt(e, null, (e, t) => e.stats(t)),
317
+ exportSubject: (e) => {
318
+ try {
319
+ let t = n(e);
320
+ return Ut((e) => e.exportSubject(t));
321
+ } catch {
322
+ return s.fail(t("invalid_input"));
323
+ }
324
+ },
325
+ eraseSubject: (e) => {
326
+ try {
327
+ let t = n(e);
328
+ return Ut((e) => e.eraseSubject(t));
329
+ } catch {
330
+ return s.fail(t("invalid_input"));
331
+ }
332
+ }
333
+ }), Gt = (e, r) => {
334
+ try {
335
+ let i = n(e);
336
+ return s.suspend(() => {
337
+ let e = m ?? Ht;
338
+ return b && p && e ? r(e, i) : s.fail(t("unavailable"));
339
+ });
340
+ } catch {
341
+ return s.fail(t("invalid_input"));
342
+ }
343
+ }, D = Object.freeze({
344
+ assign: (e, t) => Gt({
345
+ subject: e,
346
+ input: t
347
+ }, (e, t) => e.assign(t.subject, t.input)),
348
+ record: (e, t) => Gt({
349
+ subject: e,
350
+ input: t
351
+ }, (e, t) => e.record(t.subject, t.input)),
352
+ reroll: (e, t) => Gt({
353
+ subject: e,
354
+ input: t
355
+ }, (e, t) => e.reroll(t.subject, t.input)),
356
+ mine: (e) => Gt(e, (e, t) => e.mine(t)),
357
+ exportSubject: (e) => Gt(e, (e, t) => e.exportSubject(t)),
358
+ eraseSubject: (e) => Gt(e, (e, t) => e.eraseSubject(t))
359
+ }), Kt = Object.freeze({
360
+ refreshOwner: (e, n) => o({
361
+ subject: e,
362
+ player: n
363
+ }, (e) => s.suspend(() => b && Vt ? Vt.refreshOwner(e.subject, e.player) : s.fail(t("unavailable")))),
364
+ refreshAll: (e) => o(e, (e) => s.suspend(() => b && Vt ? Vt.refreshAll(e) : s.fail(t("unavailable"))))
365
+ }), O = (e, n) => o(e, (e) => s.suspend(() => {
366
+ let r = _ ?? v;
367
+ return b && g && r ? n(r, e) : s.fail(t("unavailable"));
368
+ })), qt = Object.freeze({
369
+ initialize: (e, t) => O({
370
+ subject: e,
371
+ input: t
372
+ }, (e, t) => e.initialize(t.subject, t.input)),
373
+ consume: (e, t) => O({
374
+ subject: e,
375
+ input: t
376
+ }, (e, t) => e.consume(t.subject, t.input)),
377
+ grant: (e, t) => O({
378
+ subject: e,
379
+ input: t
380
+ }, (e, t) => e.grant(t.subject, t.input)),
381
+ mine: (e) => O(e, (e, t) => e.mine(t)),
382
+ exportSubject: (e) => O(e, (e, t) => e.exportSubject(t)),
383
+ eraseSubject: (e) => O(e, (e, t) => e.eraseSubject(t))
384
+ }), Jt = (e, n) => o(e, (e) => s.suspend(() => {
385
+ let r = C ?? w;
386
+ return b && S && r ? n(r, e) : s.fail(t("unavailable"));
387
+ })), k = Object.freeze({
388
+ evaluate: (e, t) => Jt({
389
+ subject: e,
390
+ input: t
391
+ }, (e, t) => e.evaluate(t.subject, t.input)),
392
+ mine: (e) => Jt(e, (e, t) => e.mine(t)),
393
+ exportSubject: (e) => Jt(e, (e, t) => e.exportSubject(t)),
394
+ eraseSubject: (e) => Jt(e, (e, t) => e.eraseSubject(t))
395
+ }), A = l.daily === void 0 ? void 0 : i(l.daily, [
396
+ "calendars",
397
+ "profileSource",
398
+ "maxHistoryRows",
399
+ "now",
400
+ "allowedServices",
401
+ "strategies",
402
+ "service"
403
+ ]), j = A ? wt({
404
+ calendars: A.calendars,
405
+ profileSource: A.profileSource,
406
+ maxHistoryRows: A.maxHistoryRows,
407
+ now: A.now,
408
+ allowedServices: A.allowedServices,
409
+ strategies: A.strategies
410
+ }) : void 0, M = A?.service === void 0 ? void 0 : r(A.service, [
411
+ "claim",
412
+ "mine",
413
+ "exportSubject",
414
+ "eraseSubject"
415
+ ]), N, Yt = (e, n) => o(e, (e) => s.suspend(() => {
416
+ let r = M ?? N;
417
+ return b && j && r ? n(r, e) : s.fail(t("unavailable"));
418
+ })), P = Object.freeze({
419
+ claim: (e, t) => Yt({
420
+ subject: e,
421
+ input: t
422
+ }, (e, t) => e.claim(t.subject, t.input)),
423
+ mine: (e) => Yt(e, (e, t) => e.mine(t)),
424
+ exportSubject: (e) => Yt(e, (e, t) => e.exportSubject(t)),
425
+ eraseSubject: (e) => Yt(e, (e, t) => e.eraseSubject(t))
426
+ }), F = l.passes === void 0 ? void 0 : i(l.passes, [
427
+ "definitions",
428
+ "allowedServices",
429
+ "maxHistoryRows",
430
+ "maxPendingRewards",
431
+ "now",
432
+ "strategies",
433
+ "service"
434
+ ]), I = F ? Et({
435
+ definitions: F.definitions,
436
+ allowedServices: F.allowedServices,
437
+ maxHistoryRows: F.maxHistoryRows,
438
+ maxPendingRewards: F.maxPendingRewards,
439
+ now: F.now,
440
+ strategies: F.strategies
441
+ }) : void 0, L = F?.service === void 0 ? void 0 : r(F.service, [
442
+ "applyXp",
443
+ "grantPremium",
444
+ "claim",
445
+ "close",
446
+ "mine",
447
+ "exportSubject",
448
+ "eraseSubject"
449
+ ]), R, z = (e, n) => o(e, (e) => s.suspend(() => {
450
+ let r = L ?? R;
451
+ return b && I && r ? n(r, e) : s.fail(t("unavailable"));
452
+ })), B = Object.freeze({
453
+ applyXp: (e, t) => z({
454
+ subject: e,
455
+ input: t
456
+ }, (e, t) => e.applyXp(t.subject, t.input)),
457
+ grantPremium: (e, t) => z({
458
+ subject: e,
459
+ input: t
460
+ }, (e, t) => e.grantPremium(t.subject, t.input)),
461
+ claim: (e, t) => z({
462
+ subject: e,
463
+ input: t
464
+ }, (e, t) => e.claim(t.subject, t.input)),
465
+ close: (e, t) => z({
466
+ subject: e,
467
+ input: t
468
+ }, (e, t) => e.close(t.subject, t.input)),
469
+ mine: (e) => z(e, (e, t) => e.mine(t)),
470
+ exportSubject: (e) => z(e, (e, t) => e.exportSubject(t)),
471
+ eraseSubject: (e) => z(e, (e, t) => e.eraseSubject(t))
472
+ }), V = l.tutorials === void 0 ? void 0 : i(l.tutorials, [
473
+ "definitions",
474
+ "eventSources",
475
+ "verifier",
476
+ "allowedServices",
477
+ "maxHistoryRows",
478
+ "maxPendingRewards",
479
+ "now",
480
+ "strategies",
481
+ "service"
482
+ ]), H = V ? Ot({
483
+ definitions: V.definitions,
484
+ eventSources: V.eventSources,
485
+ verifier: V.verifier,
486
+ allowedServices: V.allowedServices,
487
+ maxHistoryRows: V.maxHistoryRows,
488
+ maxPendingRewards: V.maxPendingRewards,
489
+ now: V.now,
490
+ strategies: V.strategies
491
+ }) : void 0, U = V?.service === void 0 ? void 0 : r(V.service, [
492
+ "completeStep",
493
+ "record",
494
+ "skip",
495
+ "mine",
496
+ "exportSubject",
497
+ "eraseSubject"
498
+ ]), W, G = (e, n) => o(e, (e) => s.suspend(() => {
499
+ let r = U ?? W;
500
+ return b && H && r ? n(r, e) : s.fail(t("unavailable"));
501
+ })), K = Object.freeze({
502
+ completeStep: (e, t) => G({
503
+ subject: e,
504
+ input: t
505
+ }, (e, t) => e.completeStep(t.subject, t.input)),
506
+ record: (e, t) => G({
507
+ subject: e,
508
+ input: t
509
+ }, (e, t) => e.record(t.subject, t.input)),
510
+ skip: (e, t) => G({
511
+ subject: e,
512
+ input: t
513
+ }, (e, t) => e.skip(t.subject, t.input)),
514
+ mine: (e) => G(e, (e, t) => e.mine(t)),
515
+ exportSubject: (e) => G(e, (e, t) => e.exportSubject(t)),
516
+ eraseSubject: (e) => G(e, (e, t) => e.eraseSubject(t))
517
+ }), q = l.ranks === void 0 ? void 0 : i(l.ranks, [
518
+ "ladders",
519
+ "seasons",
520
+ "source",
521
+ "strategies",
522
+ "allowedServices",
523
+ "maxHistoryRows",
524
+ "maxPendingRewards",
525
+ "now",
526
+ "service",
527
+ "closure"
528
+ ]), J = q ? At({
529
+ ladders: q.ladders,
530
+ seasons: q.seasons,
531
+ source: q.source,
532
+ strategies: q.strategies,
533
+ allowedServices: q.allowedServices,
534
+ maxHistoryRows: q.maxHistoryRows,
535
+ maxPendingRewards: q.maxPendingRewards,
536
+ now: q.now
537
+ }) : void 0, Y = q?.service === void 0 ? void 0 : r(q.service, [
538
+ "observe",
539
+ "close",
540
+ "mine",
541
+ "exportSubject",
542
+ "eraseSubject"
543
+ ]), X, Xt = (e, n) => o(e, (e) => s.suspend(() => {
544
+ let r = Y ?? X;
545
+ return b && J && r ? n(r, e) : s.fail(t("unavailable"));
546
+ })), Z = Object.freeze({
547
+ observe: (e, t) => Xt({
548
+ subject: e,
549
+ input: t
550
+ }, (e, t) => e.observe(t.subject, t.input)),
551
+ close: (e, t) => Xt({
552
+ subject: e,
553
+ input: t
554
+ }, (e, t) => e.close(t.subject, t.input)),
555
+ mine: (e) => Xt(e, (e, t) => e.mine(t)),
556
+ exportSubject: (e) => Xt(e, (e, t) => e.exportSubject(t)),
557
+ eraseSubject: (e) => Xt(e, (e, t) => e.eraseSubject(t))
558
+ }), Zt = q?.closure === void 0 ? void 0 : i(q.closure, [
559
+ "service",
560
+ "now",
561
+ "allowedServices"
562
+ ]), Q = Zt ? Mt({
563
+ ...Zt,
564
+ now: Zt.now ?? J.now,
565
+ allowedServices: Zt.allowedServices ?? J.allowedServices
566
+ }) : void 0;
567
+ if (Q && !Q.service && Y) throw t("invalid_input");
568
+ let Qt, $t = (e, n) => o(e, (e) => s.suspend(() => {
569
+ let r = Q?.service ?? Qt;
570
+ return b && Q && r ? n(r, e) : s.fail(t("unavailable"));
571
+ })), en = Object.freeze({
572
+ execute: (e, t) => $t({
573
+ subject: e,
574
+ input: t
575
+ }, (e, t) => e.execute(t.subject, t.input)),
576
+ dispatch: (e, t, n) => $t({
577
+ subject: e,
578
+ input: t
579
+ }, (e, t) => e.dispatch(t.subject, t.input, n))
580
+ }), tn = l.delivery === void 0 ? void 0 : i(l.delivery, [
581
+ "systemAccount",
582
+ "economy",
583
+ "inventory",
584
+ "progression",
585
+ "allowedServices",
586
+ "now",
587
+ "version",
588
+ "service"
589
+ ]), $ = tn ? St({
590
+ ...tn,
591
+ progression: tn.progression ?? E
592
+ }) : void 0;
593
+ if ($ && !$.service && (d || m || C || M || L || U || Y)) throw t("invalid_input");
594
+ let nn = Object.freeze([
595
+ "level",
596
+ ...p ? ["quest"] : [],
597
+ ...S ? ["achievement"] : [],
598
+ ...j ? ["daily"] : [],
599
+ ...I ? ["pass"] : [],
600
+ ...H ? ["tutorial"] : [],
601
+ ...J ? ["rank"] : []
602
+ ]), rn, an = (e, n) => o(e, (e) => s.suspend(() => {
603
+ let r = $?.service ?? rn;
604
+ return b && $ && r ? n(r, e) : s.fail(t("unavailable"));
605
+ })), on = Object.freeze({
606
+ execute: (e, t) => an({
607
+ subject: e,
608
+ input: t
609
+ }, (e, t) => e.execute(t.subject, t.input)),
610
+ dispatch: (e, t, n) => an({
611
+ subject: e,
612
+ input: t
613
+ }, (e, t) => e.dispatch(t.subject, t.input, n))
614
+ }), sn = [
615
+ ...d ? [] : Ke,
616
+ ...p && !m ? Xe : [],
617
+ ...g && !_ ? ct : [],
618
+ ...S && !C ? mt : [],
619
+ ...j && !M ? _t : [],
620
+ ...I && !L ? vt : [],
621
+ ...H && !U ? yt : [],
622
+ ...J && !Y ? bt : []
623
+ ], cn = c.succeed(ye, E), ln = p ? c.merge(cn, c.merge(c.succeed(Ye, D), c.succeed(de, p.source))) : cn, un = T ? c.merge(ln, c.merge(c.succeed(tt, Kt), c.succeed(et, T.players))) : ln, dn = g ? c.merge(un, c.succeed(ot, qt)) : un, fn = S ? c.merge(dn, c.merge(c.succeed(dt, k), c.succeed(ft, S.source))) : dn, pn = j ? c.merge(fn, c.merge(c.succeed(he, P), c.succeed(me, j.profileSource))) : fn, mn = I ? c.merge(pn, c.succeed(le, B)) : pn, hn = H ? c.merge(mn, c.succeed(oe, K)) : mn, gn = H?.verifier ? c.merge(hn, c.succeed(se, H.verifier)) : hn, _n = J ? c.merge(gn, c.merge(c.succeed(ae, Z), c.succeed(ee, J.source))) : gn, vn = Q ? c.merge(_n, c.succeed(a, en)) : _n, yn = $ ? c.merge(vn, c.succeed(_e, on)) : vn, bn = Nt({
624
+ name: be,
625
+ description: "Exact SQL XP/stat progression and durable level-reward intentions.",
626
+ permissions: ["store:write", "inspect:read"],
627
+ services: yn,
628
+ ...$ || Q ? { sources: Object.freeze({
629
+ ...$ ? { rewards: Pt(new URL("./reward-app", "" + import.meta.url)) } : {},
630
+ ...Q ? { ranks: Pt(new URL("./rank-app", "" + import.meta.url)) } : {}
631
+ }) } : {},
632
+ routes: [
633
+ {
634
+ ...ke,
635
+ execute: (e, t) => E.mine(t.request.subject)
636
+ },
637
+ {
638
+ ...je,
639
+ execute: (e, t) => E.stats(t.request.subject)
640
+ },
641
+ ...p ? [{
642
+ ...Me,
643
+ execute: (e, t) => D.mine(t.request.subject)
644
+ }, {
645
+ ...Ne,
646
+ execute: (e, t) => D.reroll(t.request.subject, e)
647
+ }] : [],
648
+ ...g ? [{
649
+ ...Re,
650
+ execute: (e, t) => qt.mine(t.request.subject)
651
+ }] : [],
652
+ ...S ? [{
653
+ ...xe,
654
+ execute: (e, t) => k.mine(t.request.subject)
655
+ }] : [],
656
+ ...j ? [{
657
+ ...Te,
658
+ execute: (e, t) => P.mine(t.request.subject)
659
+ }, {
660
+ ...Ce,
661
+ execute: (e, t) => P.claim(t.request.subject, e)
662
+ }] : [],
663
+ ...I ? [{
664
+ ...De,
665
+ execute: (e, t) => B.mine(t.request.subject)
666
+ }, {
667
+ ...Ee,
668
+ execute: (e, t) => B.claim(t.request.subject, e)
669
+ }] : [],
670
+ ...J ? [{
671
+ ...Le,
672
+ execute: (e, t) => Z.mine(t.request.subject)
673
+ }, {
674
+ ...Fe,
675
+ execute: (e, t) => Z.observe(t.request.subject, e)
676
+ }] : [],
677
+ ...H ? [
678
+ {
679
+ ...Ue,
680
+ execute: (e, t) => K.mine(t.request.subject)
681
+ },
682
+ {
683
+ ...He,
684
+ execute: (e, t) => K.completeStep(t.request.subject, e)
685
+ },
686
+ {
687
+ ...Ve,
688
+ execute: (e, t) => K.skip(t.request.subject, e)
689
+ }
690
+ ] : []
691
+ ],
692
+ rpcClientDescriptors: [
693
+ ...Ae,
694
+ ...p ? Pe : [],
695
+ ...g ? ze : [],
696
+ ...S ? Se : [],
697
+ ...j ? we : [],
698
+ ...I ? Oe : [],
699
+ ...H ? Be : [],
700
+ ...J ? Ie : []
701
+ ],
702
+ errorSchemas: [{
703
+ schema: e,
704
+ import: {
705
+ module: "@voltro/plugin-progression/errors",
706
+ name: "ProgressionError"
707
+ }
708
+ }],
709
+ extendSchema: { tables: sn },
710
+ subjectPrivacy: {
711
+ tables: sn.map((e) => e.tableName),
712
+ kinds: ["user", "guest"]
713
+ },
714
+ bindDataStore: (e, n) => {
715
+ if (T && !n?.scheduleCoordinated) throw Error("Quest refresh requires the framework coordinated scheduler bind context");
716
+ if (Lt !== void 0 && Lt !== e) throw Error("Progression plugin instance cannot cross app stores");
717
+ Lt = e, d || (y = qe(e, {
718
+ tracks: u.tracks.map(Ge),
719
+ stats: u.stats,
720
+ statSources: u.statSources,
721
+ allowedServices: u.allowedServices,
722
+ maxHistoryRows: u.maxHistoryRows,
723
+ maxPendingRewards: u.maxPendingRewards,
724
+ now: u.now,
725
+ strategies: u.strategies
726
+ })), p && !m && (Ht = Ze(e, p)), g && !_ && (v = lt(e, g)), zt && !C && (w = ht(e, zt)), j && !M && (N = Ct(e, j)), I && !L && (R = Tt(e, I)), H && !U && (W = Dt(e, H)), J && !Y && (X = kt(e, J)), Q && !Q.service && (Qt = jt(e, X, J, Q)), $ && !$.service && (rn = xt(e, $, nn)), b = !0, T && p && (Vt = T.service ?? it(D, p, T), Bt?.stop(), Bt = n.scheduleCoordinated("progression.quests.refresh", T.intervalMs, async () => {
727
+ let e = await s.runPromise(Kt.refreshAll(Ft("progression.quests.refresh")));
728
+ if (e.failures.length > 0) throw t("unavailable");
729
+ return { idle: e.players === 0 };
730
+ }));
731
+ },
732
+ onDeactivate: () => s.sync(() => {
733
+ b = !1, Bt?.stop(), Bt = void 0, Vt = void 0, v = void 0, w = void 0, rn = void 0, N = void 0, R = void 0, W = void 0, X = void 0, Qt = void 0, y = void 0, Ht = void 0;
734
+ }),
735
+ onExport: (e, t) => {
736
+ let n = {
737
+ subjectId: e,
738
+ tenantId: t.tenantId,
739
+ kind: t.kind
740
+ };
741
+ return p || g || S || j || I || H || J ? s.gen(function* () {
742
+ let e = yield* E.exportSubject(n), t = p ? yield* D.exportSubject(n) : void 0, r = g ? yield* qt.exportSubject(n) : void 0, i = S ? yield* k.exportSubject(n) : void 0, a = j ? yield* P.exportSubject(n) : void 0, ee = I ? yield* B.exportSubject(n) : void 0, te = H ? yield* K.exportSubject(n) : void 0, ne = J ? yield* Z.exportSubject(n) : void 0;
743
+ return {
744
+ progression: e,
745
+ ...p ? { quests: t } : {},
746
+ ...g ? { resources: r } : {},
747
+ ...S ? { achievements: i } : {},
748
+ ...j ? { daily: a } : {},
749
+ ...I ? { passes: ee } : {},
750
+ ...H ? { tutorials: te } : {},
751
+ ...J ? { ranks: ne } : {}
752
+ };
753
+ }) : E.exportSubject(n);
754
+ },
755
+ onErase: (e, t) => {
756
+ let n = {
757
+ subjectId: e,
758
+ tenantId: t.tenantId,
759
+ kind: t.kind
760
+ }, r = p ? s.andThen(E.eraseSubject(n), D.eraseSubject(n)) : E.eraseSubject(n), i = g ? s.andThen(r, qt.eraseSubject(n)) : r, a = S ? s.andThen(i, k.eraseSubject(n)) : i, ee = j ? s.andThen(a, P.eraseSubject(n)) : a, te = I ? s.andThen(ee, B.eraseSubject(n)) : ee, ne = H ? s.andThen(te, K.eraseSubject(n)) : te;
761
+ return J ? s.andThen(ne, Z.eraseSubject(n)) : ne;
762
+ },
763
+ inspectEndpoints: [{
764
+ method: "GET",
765
+ path: "/status",
766
+ scope: "process",
767
+ description: "Captured progression declarations and binding; no player values, origins or reward bodies.",
768
+ handler: () => s.sync(() => ({
769
+ kind: "json",
770
+ data: {
771
+ capturedAt: (u.now ?? Date.now)(),
772
+ bound: b,
773
+ backend: d ? "custom" : "sql",
774
+ slots: {
775
+ xpCurve: u.strategies.xpCurve === ve ? "default" : "custom",
776
+ rewardResolver: u.strategies.rewardResolver === We ? "default" : "custom",
777
+ version: u.strategies.version
778
+ },
779
+ tracks: u.tracks.map((e) => ({
780
+ id: e.id,
781
+ version: e.version,
782
+ levels: e.xpCurve.thresholds.length,
783
+ sources: e.sources
784
+ })),
785
+ stats: u.stats.map((e) => ({
786
+ id: e.id,
787
+ cap: e.cap,
788
+ operators: e.operators
789
+ })),
790
+ budgets: {
791
+ historyRows: u.maxHistoryRows,
792
+ pendingRewards: u.maxPendingRewards
793
+ },
794
+ tableRoles: sn.map((e) => e.tableName),
795
+ rankInstalled: J !== void 0,
796
+ rankSystem: J ? {
797
+ backend: Y ? "custom" : "sql",
798
+ source: "custom",
799
+ maxHistoryRows: J.maxHistoryRows,
800
+ maxPendingRewards: J.maxPendingRewards,
801
+ ladders: J.ladders,
802
+ seasons: J.seasons.map((e) => ({
803
+ id: e.id,
804
+ version: e.version,
805
+ ladderId: e.ladderId,
806
+ from: e.from,
807
+ until: e.until,
808
+ rewardCounts: e.rewards.map((e) => e.length)
809
+ })),
810
+ slots: {
811
+ score: J.strategies.score === re ? "default" : "custom",
812
+ decay: J.strategies.decay === te ? "default" : "custom",
813
+ grade: J.strategies.grade === ne ? "default" : "custom",
814
+ seasonReset: J.strategies.seasonReset === ie ? "default" : "custom",
815
+ version: J.strategies.version
816
+ },
817
+ closureWorkflowInstalled: Q !== void 0,
818
+ closureSystem: Q ? {
819
+ backend: Q.service ? "custom" : "sql",
820
+ workflow: "progression.closeRankSeason",
821
+ schedule: "progression.dispatchRankClosures",
822
+ cron: "* * * * *",
823
+ timezone: "UTC",
824
+ scan: {
825
+ pageSize: 100,
826
+ maxPages: 100
827
+ },
828
+ activityMaxAttempts: 5,
829
+ suspendOnFailure: !0
830
+ } : null,
831
+ observationInstalled: !0,
832
+ completeMatchCoverageInstalled: !1,
833
+ seasonPlacementsInstalled: !1,
834
+ decayWorkflowInstalled: !1,
835
+ ratingResetInstalled: !1,
836
+ rewardDeliveryInstalled: $ !== void 0
837
+ } : null,
838
+ passInstalled: I !== void 0,
839
+ passSystem: I ? {
840
+ backend: L ? "custom" : "sql",
841
+ maxHistoryRows: I.maxHistoryRows,
842
+ maxPendingRewards: I.maxPendingRewards,
843
+ definitions: I.definitions.map((e) => ({
844
+ id: e.id,
845
+ version: e.version,
846
+ from: e.from,
847
+ until: e.until,
848
+ tiers: e.tiers,
849
+ xpPerTier: e.xpPerTier,
850
+ premiumOffer: e.premiumOffer,
851
+ autoClaim: e.autoClaim,
852
+ expireUnclaimed: e.expireUnclaimed,
853
+ catchUp: e.catchUp,
854
+ sources: e.sources
855
+ })),
856
+ slots: {
857
+ passCatchUp: I.strategies.passCatchUp === ue ? "default" : "custom",
858
+ version: I.strategies.version
859
+ },
860
+ claimInstalled: !0,
861
+ shopInstalled: !1,
862
+ expiryWorkflowInstalled: !1,
863
+ inboxInstalled: !1,
864
+ rewardDeliveryInstalled: $ !== void 0
865
+ } : null,
866
+ tutorialInstalled: H !== void 0,
867
+ tutorialSystem: H ? {
868
+ backend: U ? "custom" : "sql",
869
+ maxHistoryRows: H.maxHistoryRows,
870
+ maxPendingRewards: H.maxPendingRewards,
871
+ eventSources: H.eventSources,
872
+ definitions: H.definitions.map((e) => ({
873
+ id: e.id,
874
+ version: e.version,
875
+ steps: e.steps,
876
+ skippable: e.skippable,
877
+ rewardOnSkip: e.rewardOnSkip,
878
+ hints: e.hints
879
+ })),
880
+ slots: {
881
+ stepPolicy: H.strategies.stepPolicy === ce ? "default" : "custom",
882
+ version: H.strategies.version
883
+ },
884
+ verifier: U ? "customPort" : H.verifier ? "custom" : "absent",
885
+ telemetryInstalled: !1,
886
+ joinContextInstalled: !1,
887
+ hintsContentInstalled: !1,
888
+ rewardDeliveryInstalled: $ !== void 0
889
+ } : null,
890
+ resourcesInstalled: g !== void 0,
891
+ resourceSystem: g ? {
892
+ backend: _ ? "custom" : "sql",
893
+ definitions: g.definitions.map((e) => ({
894
+ id: e.id,
895
+ version: e.version,
896
+ max: e.max,
897
+ initial: e.initial,
898
+ regenAmount: e.regenAmount,
899
+ regenEveryMs: e.regenEveryMs,
900
+ refillOffer: e.refillOffer ?? null
901
+ })),
902
+ sources: g.sources,
903
+ maxHistoryRows: g.maxHistoryRows,
904
+ slots: {
905
+ regen: g.strategies.regen === st ? "default" : "custom",
906
+ version: g.strategies.version
907
+ }
908
+ } : null,
909
+ dailyInstalled: j !== void 0,
910
+ dailySystem: j ? {
911
+ backend: M ? "custom" : "sql",
912
+ profileSource: "custom",
913
+ maxHistoryRows: j.maxHistoryRows,
914
+ definitions: j.calendars.map((e) => ({
915
+ id: e.id,
916
+ version: e.version,
917
+ days: e.days.length,
918
+ streakProtection: e.streakProtection
919
+ })),
920
+ slots: {
921
+ claimPolicy: j.strategies.claimPolicy === ge ? "default" : "custom",
922
+ version: j.strategies.version
923
+ },
924
+ timezonePolicy: "pin-on-first-claim",
925
+ claimInstalled: !0,
926
+ rewardDeliveryInstalled: $ !== void 0,
927
+ timePushInstalled: !1
928
+ } : null,
929
+ deliverySystem: $ ? {
930
+ backend: $.service ? "custom" : "sql",
931
+ version: $.version,
932
+ sourceKinds: nn,
933
+ currencyPort: $.economy !== void 0,
934
+ itemPort: $.inventory !== void 0,
935
+ xpPort: $.progression !== void 0,
936
+ workflow: "progression.deliverReward",
937
+ schedule: "progression.dispatchRewards",
938
+ cron: "* * * * *",
939
+ timezone: "UTC",
940
+ scan: {
941
+ pageSize: 100,
942
+ maxPages: 100
943
+ },
944
+ activityMaxAttempts: 5,
945
+ suspendOnFailure: !0
946
+ } : null,
947
+ rewardDeliveryInstalled: $ !== void 0,
948
+ questsInstalled: p !== void 0,
949
+ achievementsInstalled: S !== void 0,
950
+ achievementSystem: S ? {
951
+ backend: C ? "custom" : "sql",
952
+ source: x?.source === void 0 ? "progressionSql" : "custom",
953
+ maxHistoryRows: S.maxHistoryRows,
954
+ maxPendingRewards: S.maxPendingRewards,
955
+ definitions: S.definitions.map((e) => ({
956
+ id: e.id,
957
+ version: e.version,
958
+ hidden: e.hidden,
959
+ tiers: e.tiers.length,
960
+ platformMappings: e.tiers.reduce((e, t) => e + Object.keys(t.platform).length, 0)
961
+ })),
962
+ slots: {
963
+ achievementEvaluator: S.strategies.achievementEvaluator === pt ? "default" : "custom",
964
+ version: S.strategies.version
965
+ },
966
+ statEvaluationInstalled: !0,
967
+ platformSyncInstalled: !1,
968
+ rewardDeliveryInstalled: $ !== void 0
969
+ } : null,
970
+ questSystem: p ? {
971
+ backend: m ? "custom" : "sql",
972
+ channel: p.channel,
973
+ locale: p.locale,
974
+ maxWorkRows: p.maxWorkRows,
975
+ eventSources: p.eventSources,
976
+ statSources: p.statSources,
977
+ slots: {
978
+ questSelector: p.strategies.questSelector === pe ? "default" : "custom",
979
+ questProgressResolver: p.strategies.questProgressResolver === fe ? "default" : "custom",
980
+ version: p.strategies.version
981
+ },
982
+ schedulingInstalled: Bt !== void 0,
983
+ refresh: T ? {
984
+ backend: T.service ? "custom" : "default",
985
+ intervalMs: T.intervalMs,
986
+ maxPlayers: T.maxPlayers,
987
+ slots: {
988
+ questWindow: T.strategies.questWindow === nt ? "default" : "custom",
989
+ questSeed: T.strategies.questSeed === rt ? "default" : "custom",
990
+ version: T.strategies.version
991
+ }
992
+ } : null,
993
+ rewardDeliveryInstalled: $ !== void 0
994
+ } : null
995
+ }
996
+ }))
997
+ }]
998
+ }), xn = (e, r, i, a) => {
999
+ try {
1000
+ let ee = n(e), te = r, ne = i;
1001
+ return s.suspend(() => b && y && !d ? a(y, ee, te, ne) : s.fail(t("unavailable")));
1002
+ } catch {
1003
+ return s.fail(t("invalid_input"));
1004
+ }
1005
+ };
1006
+ return {
1007
+ ...bn,
1008
+ progression: Object.freeze({
1009
+ service: () => E,
1010
+ auditProgression: (e, t, n) => xn(e, t, n, (e, t, n, r) => e.auditProgression(t, n, r)),
1011
+ rebuildProgression: (e, t, n) => xn(e, t, n, (e, t, n, r) => e.rebuildProgression(t, n, r)),
1012
+ ranks: () => Z,
1013
+ rankClosure: () => en,
1014
+ auditRanks: (e, n, r) => o({
1015
+ subject: e,
1016
+ tenantId: n,
1017
+ ownerId: r
1018
+ }, (e) => s.suspend(() => b && X && !Y ? X.auditRanks(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1019
+ rebuildRanks: (e, n, r) => o({
1020
+ subject: e,
1021
+ tenantId: n,
1022
+ ownerId: r
1023
+ }, (e) => s.suspend(() => b && X && !Y ? X.rebuildRanks(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1024
+ tutorials: () => K,
1025
+ auditTutorials: (e, n, r) => o({
1026
+ subject: e,
1027
+ tenantId: n,
1028
+ ownerId: r
1029
+ }, (e) => s.suspend(() => b && W && !U ? W.auditTutorials(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1030
+ rebuildTutorials: (e, n, r) => o({
1031
+ subject: e,
1032
+ tenantId: n,
1033
+ ownerId: r
1034
+ }, (e) => s.suspend(() => b && W && !U ? W.rebuildTutorials(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1035
+ passes: () => B,
1036
+ auditPasses: (e, n, r) => o({
1037
+ subject: e,
1038
+ tenantId: n,
1039
+ ownerId: r
1040
+ }, (e) => s.suspend(() => b && R && !L ? R.auditPasses(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1041
+ rebuildPasses: (e, n, r) => o({
1042
+ subject: e,
1043
+ tenantId: n,
1044
+ ownerId: r
1045
+ }, (e) => s.suspend(() => b && R && !L ? R.rebuildPasses(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1046
+ daily: () => P,
1047
+ auditDaily: (e, n, r) => o({
1048
+ subject: e,
1049
+ tenantId: n,
1050
+ ownerId: r
1051
+ }, (e) => s.suspend(() => b && N && !M ? N.auditDaily(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1052
+ rebuildDaily: (e, n, r) => o({
1053
+ subject: e,
1054
+ tenantId: n,
1055
+ ownerId: r
1056
+ }, (e) => s.suspend(() => b && N && !M ? N.rebuildDaily(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1057
+ delivery: () => on,
1058
+ achievements: () => k,
1059
+ auditAchievements: (e, n, r) => o({
1060
+ subject: e,
1061
+ tenantId: n,
1062
+ ownerId: r
1063
+ }, (e) => s.suspend(() => b && w && !C ? w.auditAchievements(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1064
+ rebuildAchievements: (e, n, r) => o({
1065
+ subject: e,
1066
+ tenantId: n,
1067
+ ownerId: r
1068
+ }, (e) => s.suspend(() => b && w && !C ? w.rebuildAchievements(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1069
+ quests: () => D,
1070
+ questRefresh: () => Kt,
1071
+ resources: () => qt,
1072
+ auditResources: (e, n, r) => o({
1073
+ subject: e,
1074
+ tenantId: n,
1075
+ ownerId: r
1076
+ }, (e) => s.suspend(() => b && v && !_ ? v.auditResources(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable")))),
1077
+ rebuildResources: (e, n, r) => o({
1078
+ subject: e,
1079
+ tenantId: n,
1080
+ ownerId: r
1081
+ }, (e) => s.suspend(() => b && v && !_ ? v.rebuildResources(e.subject, e.tenantId, e.ownerId) : s.fail(t("unavailable"))))
1082
+ })
1083
+ };
1084
+ };
1085
+ export { u as progressionAchievementsSystemContract, p as progressionDailySystemContract, d as progressionPassesSystemContract, g as progressionPlugin, It as progressionQuestsSystemContract, m as progressionRanksSystemContract, l as progressionResourcesSystemContract, h as progressionSystemContract, f as progressionTutorialsSystemContract };