@crowdedkingdoms/crowdyjs 17.14.0-dev.1 → 18.0.1-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/MIGRATION.md +129 -1
  2. package/README.md +97 -164
  3. package/dist/crowdy-client.d.ts +12 -31
  4. package/dist/crowdy-client.d.ts.map +1 -1
  5. package/dist/crowdy-client.js +15 -37
  6. package/dist/crowdy-dsh/bridge.d.ts.map +1 -1
  7. package/dist/crowdy-dsh/bridge.js +3 -6
  8. package/dist/crowdy-studio/controller.d.ts +34 -59
  9. package/dist/crowdy-studio/controller.d.ts.map +1 -1
  10. package/dist/crowdy-studio/controller.js +96 -225
  11. package/dist/crowdy-studio/diagnostics.d.ts +3 -12
  12. package/dist/crowdy-studio/diagnostics.d.ts.map +1 -1
  13. package/dist/crowdy-studio/dom-shell.d.ts +2 -4
  14. package/dist/crowdy-studio/dom-shell.d.ts.map +1 -1
  15. package/dist/crowdy-studio/dom-shell.js +16 -49
  16. package/dist/crowdy-studio/embed/hud-layer.d.ts +1 -2
  17. package/dist/crowdy-studio/embed/hud-layer.d.ts.map +1 -1
  18. package/dist/crowdy-studio/embed/panel.d.ts +3 -13
  19. package/dist/crowdy-studio/embed/panel.d.ts.map +1 -1
  20. package/dist/crowdy-studio/embed/panel.js +3 -6
  21. package/dist/crowdy-studio/index.d.ts +1 -3
  22. package/dist/crowdy-studio/index.d.ts.map +1 -1
  23. package/dist/crowdy-studio/index.js +0 -2
  24. package/dist/crowdy-studio/models.d.ts +3 -4
  25. package/dist/crowdy-studio/models.d.ts.map +1 -1
  26. package/dist/crowdy-studio/starter-projects.d.ts +8 -12
  27. package/dist/crowdy-studio/starter-projects.d.ts.map +1 -1
  28. package/dist/crowdy-studio/starter-projects.js +12 -103
  29. package/dist/domains/appAccess.d.ts +14 -1
  30. package/dist/domains/appAccess.d.ts.map +1 -1
  31. package/dist/domains/appAccess.js +37 -1
  32. package/dist/domains/apps.d.ts +1 -10
  33. package/dist/domains/apps.d.ts.map +1 -1
  34. package/dist/domains/apps.js +1 -16
  35. package/dist/domains/host.d.ts +3 -3
  36. package/dist/domains/host.js +3 -3
  37. package/dist/domains/hosting.d.ts +0 -6
  38. package/dist/domains/hosting.d.ts.map +1 -1
  39. package/dist/domains/hosting.js +1 -16
  40. package/dist/domains/marketplace.d.ts +9 -70
  41. package/dist/domains/marketplace.d.ts.map +1 -1
  42. package/dist/domains/marketplace.js +9 -120
  43. package/dist/domains/organizations.d.ts +1 -9
  44. package/dist/domains/organizations.d.ts.map +1 -1
  45. package/dist/domains/organizations.js +1 -15
  46. package/dist/domains/payments.d.ts +5 -48
  47. package/dist/domains/payments.d.ts.map +1 -1
  48. package/dist/domains/payments.js +5 -57
  49. package/dist/domains/playerWallet.d.ts +6 -12
  50. package/dist/domains/playerWallet.d.ts.map +1 -1
  51. package/dist/domains/playerWallet.js +6 -21
  52. package/dist/domains/quotas.d.ts +20 -7
  53. package/dist/domains/quotas.d.ts.map +1 -1
  54. package/dist/domains/quotas.js +15 -6
  55. package/dist/domains/users.d.ts +7 -74
  56. package/dist/domains/users.d.ts.map +1 -1
  57. package/dist/domains/users.js +7 -105
  58. package/dist/errors.d.ts +7 -13
  59. package/dist/errors.d.ts.map +1 -1
  60. package/dist/errors.js +6 -10
  61. package/dist/generated/graphql.d.ts +955 -8272
  62. package/dist/generated/graphql.d.ts.map +1 -1
  63. package/dist/generated/graphql.js +5 -329
  64. package/dist/grid-mods/exec-client-halves.d.ts +19 -3
  65. package/dist/grid-mods/exec-client-halves.d.ts.map +1 -1
  66. package/dist/grid-mods/exec-client-halves.js +17 -2
  67. package/dist/grid-mods/grid-host-calls.d.ts +29 -17
  68. package/dist/grid-mods/grid-host-calls.d.ts.map +1 -1
  69. package/dist/grid-mods/grid-host-calls.js +40 -46
  70. package/dist/grid-mods/mod-runtime.d.ts +18 -11
  71. package/dist/grid-mods/mod-runtime.d.ts.map +1 -1
  72. package/dist/grid-mods/mod-runtime.js +4 -2
  73. package/dist/grid-scope.d.ts +0 -189
  74. package/dist/grid-scope.d.ts.map +1 -1
  75. package/dist/grid-scope.js +0 -70
  76. package/dist/index.d.ts +12 -18
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +10 -16
  79. package/dist/kit/actions.d.ts +5 -9
  80. package/dist/kit/actions.d.ts.map +1 -1
  81. package/dist/kit/actions.js +5 -9
  82. package/dist/kit/index.d.ts +2 -33
  83. package/dist/kit/index.d.ts.map +1 -1
  84. package/dist/kit/index.js +1 -32
  85. package/dist/kit/kit.d.ts +8 -208
  86. package/dist/kit/kit.d.ts.map +1 -1
  87. package/dist/kit/kit.js +5 -163
  88. package/dist/kit/social.d.ts +1 -3
  89. package/dist/kit/social.d.ts.map +1 -1
  90. package/dist/kit/social.js +1 -3
  91. package/dist/kit/wire.d.ts +16 -5
  92. package/dist/kit/wire.d.ts.map +1 -1
  93. package/dist/kit/wire.js +19 -5
  94. package/dist/live-coding/assets/browser-authoring-index.json +1 -1
  95. package/dist/live-coding/assets/manifest.json +1 -1
  96. package/dist/live-coding/browser-authoring-index.generated.d.ts.map +1 -1
  97. package/dist/live-coding/browser-authoring-index.generated.js +1496 -4386
  98. package/dist/live-coding/rust-analysis.d.ts.map +1 -1
  99. package/dist/live-coding/rust-analysis.js +30 -34
  100. package/dist/player-runtime/client-host-calls.d.ts +8 -0
  101. package/dist/player-runtime/client-host-calls.d.ts.map +1 -0
  102. package/dist/player-runtime/client-host-calls.js +28 -0
  103. package/dist/player-runtime/glue-runtime.d.ts +24 -20
  104. package/dist/player-runtime/glue-runtime.d.ts.map +1 -1
  105. package/dist/player-runtime/glue-runtime.js +26 -55
  106. package/dist/player-runtime/glue-sab.d.ts +2 -2
  107. package/dist/player-runtime/glue-sab.js +2 -2
  108. package/dist/player-runtime/player-code-broker.d.ts +70 -43
  109. package/dist/player-runtime/player-code-broker.d.ts.map +1 -1
  110. package/dist/player-runtime/player-code-broker.js +159 -64
  111. package/dist/player-runtime/player-glue-worker.d.ts +8 -9
  112. package/dist/player-runtime/player-glue-worker.d.ts.map +1 -1
  113. package/dist/player-runtime/player-glue-worker.js +26 -11
  114. package/dist/stores/inbox.d.ts +1 -1
  115. package/dist/stores/inbox.d.ts.map +1 -1
  116. package/dist/stores/index.d.ts +0 -11
  117. package/dist/stores/index.d.ts.map +1 -1
  118. package/dist/stores/index.js +0 -4
  119. package/dist/stores/session.d.ts +0 -2
  120. package/dist/stores/session.d.ts.map +1 -1
  121. package/package.json +1 -1
  122. package/dist/crowdy-studio/model-lint-log.d.ts +0 -76
  123. package/dist/crowdy-studio/model-lint-log.d.ts.map +0 -1
  124. package/dist/crowdy-studio/model-lint-log.js +0 -93
  125. package/dist/crowdy-studio/model-lint.d.ts +0 -61
  126. package/dist/crowdy-studio/model-lint.d.ts.map +0 -1
  127. package/dist/crowdy-studio/model-lint.js +0 -45
  128. package/dist/domains/compute.d.ts +0 -208
  129. package/dist/domains/compute.d.ts.map +0 -1
  130. package/dist/domains/compute.js +0 -274
  131. package/dist/domains/controlPlane.d.ts +0 -38
  132. package/dist/domains/controlPlane.d.ts.map +0 -1
  133. package/dist/domains/controlPlane.js +0 -43
  134. package/dist/domains/gameModel.d.ts +0 -1174
  135. package/dist/domains/gameModel.d.ts.map +0 -1
  136. package/dist/domains/gameModel.js +0 -1333
  137. package/dist/domains/playerCompute.d.ts +0 -91
  138. package/dist/domains/playerCompute.d.ts.map +0 -1
  139. package/dist/domains/playerCompute.js +0 -136
  140. package/dist/domains/playerModel.d.ts +0 -20
  141. package/dist/domains/playerModel.d.ts.map +0 -1
  142. package/dist/domains/playerModel.js +0 -54
  143. package/dist/kit/abilities.d.ts +0 -66
  144. package/dist/kit/abilities.d.ts.map +0 -1
  145. package/dist/kit/abilities.js +0 -71
  146. package/dist/kit/blueprints/combat.d.ts +0 -81
  147. package/dist/kit/blueprints/combat.d.ts.map +0 -1
  148. package/dist/kit/blueprints/combat.js +0 -357
  149. package/dist/kit/blueprints/core.d.ts +0 -222
  150. package/dist/kit/blueprints/core.d.ts.map +0 -1
  151. package/dist/kit/blueprints/core.js +0 -185
  152. package/dist/kit/blueprints/decks.d.ts +0 -50
  153. package/dist/kit/blueprints/decks.d.ts.map +0 -1
  154. package/dist/kit/blueprints/decks.js +0 -163
  155. package/dist/kit/blueprints/economy.d.ts +0 -88
  156. package/dist/kit/blueprints/economy.d.ts.map +0 -1
  157. package/dist/kit/blueprints/economy.js +0 -533
  158. package/dist/kit/blueprints/guild.d.ts +0 -51
  159. package/dist/kit/blueprints/guild.d.ts.map +0 -1
  160. package/dist/kit/blueprints/guild.js +0 -50
  161. package/dist/kit/blueprints/index.d.ts +0 -23
  162. package/dist/kit/blueprints/index.d.ts.map +0 -1
  163. package/dist/kit/blueprints/index.js +0 -22
  164. package/dist/kit/blueprints/inventory.d.ts +0 -84
  165. package/dist/kit/blueprints/inventory.d.ts.map +0 -1
  166. package/dist/kit/blueprints/inventory.js +0 -257
  167. package/dist/kit/blueprints/leaderboards.d.ts +0 -49
  168. package/dist/kit/blueprints/leaderboards.d.ts.map +0 -1
  169. package/dist/kit/blueprints/leaderboards.js +0 -126
  170. package/dist/kit/blueprints/liveops.d.ts +0 -42
  171. package/dist/kit/blueprints/liveops.d.ts.map +0 -1
  172. package/dist/kit/blueprints/liveops.js +0 -170
  173. package/dist/kit/blueprints/locks.d.ts +0 -82
  174. package/dist/kit/blueprints/locks.d.ts.map +0 -1
  175. package/dist/kit/blueprints/locks.js +0 -155
  176. package/dist/kit/blueprints/loot.d.ts +0 -90
  177. package/dist/kit/blueprints/loot.d.ts.map +0 -1
  178. package/dist/kit/blueprints/loot.js +0 -229
  179. package/dist/kit/blueprints/matches.d.ts +0 -84
  180. package/dist/kit/blueprints/matches.d.ts.map +0 -1
  181. package/dist/kit/blueprints/matches.js +0 -349
  182. package/dist/kit/blueprints/moderation.d.ts +0 -32
  183. package/dist/kit/blueprints/moderation.d.ts.map +0 -1
  184. package/dist/kit/blueprints/moderation.js +0 -140
  185. package/dist/kit/blueprints/npcs.d.ts +0 -78
  186. package/dist/kit/blueprints/npcs.d.ts.map +0 -1
  187. package/dist/kit/blueprints/npcs.js +0 -125
  188. package/dist/kit/blueprints/plots.d.ts +0 -63
  189. package/dist/kit/blueprints/plots.d.ts.map +0 -1
  190. package/dist/kit/blueprints/plots.js +0 -151
  191. package/dist/kit/blueprints/progression.d.ts +0 -68
  192. package/dist/kit/blueprints/progression.d.ts.map +0 -1
  193. package/dist/kit/blueprints/progression.js +0 -324
  194. package/dist/kit/blueprints/quests.d.ts +0 -72
  195. package/dist/kit/blueprints/quests.d.ts.map +0 -1
  196. package/dist/kit/blueprints/quests.js +0 -285
  197. package/dist/kit/blueprints/worldsim.d.ts +0 -91
  198. package/dist/kit/blueprints/worldsim.d.ts.map +0 -1
  199. package/dist/kit/blueprints/worldsim.js +0 -468
  200. package/dist/kit/combat.d.ts +0 -141
  201. package/dist/kit/combat.d.ts.map +0 -1
  202. package/dist/kit/combat.js +0 -196
  203. package/dist/kit/decks.d.ts +0 -157
  204. package/dist/kit/decks.d.ts.map +0 -1
  205. package/dist/kit/decks.js +0 -186
  206. package/dist/kit/director.d.ts +0 -88
  207. package/dist/kit/director.d.ts.map +0 -1
  208. package/dist/kit/director.js +0 -86
  209. package/dist/kit/economy.d.ts +0 -289
  210. package/dist/kit/economy.d.ts.map +0 -1
  211. package/dist/kit/economy.js +0 -427
  212. package/dist/kit/engine.d.ts +0 -48
  213. package/dist/kit/engine.d.ts.map +0 -1
  214. package/dist/kit/engine.js +0 -113
  215. package/dist/kit/features.d.ts +0 -60
  216. package/dist/kit/features.d.ts.map +0 -1
  217. package/dist/kit/features.js +0 -65
  218. package/dist/kit/instances.d.ts +0 -52
  219. package/dist/kit/instances.d.ts.map +0 -1
  220. package/dist/kit/instances.js +0 -60
  221. package/dist/kit/inventory.d.ts +0 -129
  222. package/dist/kit/inventory.d.ts.map +0 -1
  223. package/dist/kit/inventory.js +0 -200
  224. package/dist/kit/leaderboards.d.ts +0 -86
  225. package/dist/kit/leaderboards.d.ts.map +0 -1
  226. package/dist/kit/leaderboards.js +0 -133
  227. package/dist/kit/liveops.d.ts +0 -112
  228. package/dist/kit/liveops.d.ts.map +0 -1
  229. package/dist/kit/liveops.js +0 -183
  230. package/dist/kit/loot.d.ts +0 -128
  231. package/dist/kit/loot.d.ts.map +0 -1
  232. package/dist/kit/loot.js +0 -160
  233. package/dist/kit/matches.d.ts +0 -301
  234. package/dist/kit/matches.d.ts.map +0 -1
  235. package/dist/kit/matches.js +0 -458
  236. package/dist/kit/matchmaking.d.ts +0 -57
  237. package/dist/kit/matchmaking.d.ts.map +0 -1
  238. package/dist/kit/matchmaking.js +0 -59
  239. package/dist/kit/minigames.d.ts +0 -30
  240. package/dist/kit/minigames.d.ts.map +0 -1
  241. package/dist/kit/minigames.js +0 -38
  242. package/dist/kit/mobs.d.ts +0 -90
  243. package/dist/kit/mobs.d.ts.map +0 -1
  244. package/dist/kit/mobs.js +0 -98
  245. package/dist/kit/moderation.d.ts +0 -73
  246. package/dist/kit/moderation.d.ts.map +0 -1
  247. package/dist/kit/moderation.js +0 -103
  248. package/dist/kit/movement.d.ts +0 -78
  249. package/dist/kit/movement.d.ts.map +0 -1
  250. package/dist/kit/movement.js +0 -103
  251. package/dist/kit/notifications.d.ts +0 -45
  252. package/dist/kit/notifications.d.ts.map +0 -1
  253. package/dist/kit/notifications.js +0 -67
  254. package/dist/kit/npcs.d.ts +0 -226
  255. package/dist/kit/npcs.d.ts.map +0 -1
  256. package/dist/kit/npcs.js +0 -141
  257. package/dist/kit/objects.d.ts +0 -116
  258. package/dist/kit/objects.d.ts.map +0 -1
  259. package/dist/kit/objects.js +0 -119
  260. package/dist/kit/pets.d.ts +0 -85
  261. package/dist/kit/pets.d.ts.map +0 -1
  262. package/dist/kit/pets.js +0 -96
  263. package/dist/kit/plots.d.ts +0 -85
  264. package/dist/kit/plots.d.ts.map +0 -1
  265. package/dist/kit/plots.js +0 -113
  266. package/dist/kit/progression.d.ts +0 -181
  267. package/dist/kit/progression.d.ts.map +0 -1
  268. package/dist/kit/progression.js +0 -265
  269. package/dist/kit/quests.d.ts +0 -171
  270. package/dist/kit/quests.d.ts.map +0 -1
  271. package/dist/kit/quests.js +0 -237
  272. package/dist/kit/racing.d.ts +0 -85
  273. package/dist/kit/racing.d.ts.map +0 -1
  274. package/dist/kit/racing.js +0 -99
  275. package/dist/kit/shared.d.ts +0 -73
  276. package/dist/kit/shared.d.ts.map +0 -1
  277. package/dist/kit/shared.js +0 -101
  278. package/dist/kit/telemetry.d.ts +0 -66
  279. package/dist/kit/telemetry.d.ts.map +0 -1
  280. package/dist/kit/telemetry.js +0 -133
  281. package/dist/kit/territory.d.ts +0 -97
  282. package/dist/kit/territory.d.ts.map +0 -1
  283. package/dist/kit/territory.js +0 -114
  284. package/dist/kit/worldsim.d.ts +0 -263
  285. package/dist/kit/worldsim.d.ts.map +0 -1
  286. package/dist/kit/worldsim.js +0 -268
  287. package/dist/stores/model.d.ts +0 -81
  288. package/dist/stores/model.d.ts.map +0 -1
  289. package/dist/stores/model.js +0 -163
@@ -1 +0,0 @@
1
- {"version":3,"file":"progression.d.ts","sourceRoot":"","sources":["../../../src/kit/blueprints/progression.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAEnB,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC;;;OAGG;IACH,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,UAAU,SAAK,GAAG,gBAAgB,CAclE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,YAAY,CAoTd"}
@@ -1,324 +0,0 @@
1
- import { kitPolicyJson, ownerEqualsCaller, ownerMirrorProperty, toSnakeCase, trustedAuthorityFields, } from './core.js';
2
- /** Compute the type/function names a progression blueprint (and its runtime helper) uses. */
3
- export function progressionNames(typePrefix = '') {
4
- const fnPrefix = typePrefix ? `${toSnakeCase(typePrefix)}_` : '';
5
- return {
6
- progressType: `${typePrefix}Progress`,
7
- skillDefType: `${typePrefix}SkillDef`,
8
- skillRankType: `${typePrefix}SkillRank`,
9
- achievementDefType: `${typePrefix}AchievementDef`,
10
- achievementUnlockType: `${typePrefix}AchievementUnlock`,
11
- xpForLevelFn: `${fnPrefix}xp_for_level`,
12
- grantXpFn: `${fnPrefix}grant_xp`,
13
- buySkillFn: `${fnPrefix}spend_skill_point`,
14
- unlockAchievementFn: `${fnPrefix}unlock_achievement`,
15
- adjustRatingFn: `${fnPrefix}adjust_rating`,
16
- };
17
- }
18
- /**
19
- * Blueprint for **character progression**: per-player `Progress` (xp / level /
20
- * skill points / rating), an admin `SkillDef` catalog with prerequisite
21
- * chains bought into per-player `SkillRank`s, threshold `AchievementDef`s
22
- * unlocked into `AchievementUnlock`s, and an ELO-style `adjust_rating` hook
23
- * for the match layer.
24
- *
25
- * Level-ups are computed server-side inside `grant_xp` using the `fn:`
26
- * helper pattern: the XP curve lives in ONE `internal` function
27
- * (`xp_for_level`, not directly invocable) that mutation expressions call as
28
- * `fn:xp_for_level(self.level + 1)`. Ordered mutations see earlier writes,
29
- * so xp is applied first, then the skill-point award, then the level bump —
30
- * one level per grant (call repeatedly for multi-level jumps).
31
- *
32
- * Runtime counterpart: `client.kit(appId).progression`.
33
- */
34
- export function progressionBlueprint(options = {}) {
35
- const { typePrefix = '', xpAuthority = 'server', ratingAuthority = 'host', xpForLevelExpression = '100 * $level * $level', skillPointsPerLevel = 1, initialRating = 1000, ownerIdKind: kind = 'int', } = options;
36
- const names = progressionNames(typePrefix);
37
- const levelUpCondition = `self.xp >= fn:${names.xpForLevelFn}(self.level + 1)`;
38
- const propertyDefinitions = [
39
- ownerMirrorProperty(names.progressType, kind),
40
- {
41
- containerTypeName: names.progressType,
42
- key: 'xp',
43
- valueType: 'int',
44
- defaultValueJson: '0',
45
- description: 'Lifetime experience points.',
46
- },
47
- {
48
- containerTypeName: names.progressType,
49
- key: 'level',
50
- valueType: 'int',
51
- defaultValueJson: '1',
52
- description: 'Current level, advanced server-side by grant_xp.',
53
- },
54
- {
55
- containerTypeName: names.progressType,
56
- key: 'skill_points',
57
- valueType: 'int',
58
- defaultValueJson: '0',
59
- description: 'Unspent skill points (earned on level-up).',
60
- },
61
- {
62
- containerTypeName: names.progressType,
63
- key: 'rating',
64
- valueType: 'int',
65
- defaultValueJson: String(initialRating),
66
- description: 'Competitive rating (ELO-style), adjusted by the match layer.',
67
- },
68
- {
69
- containerTypeName: names.skillDefType,
70
- key: 'skill_id',
71
- valueType: 'string',
72
- description: 'Stable skill identifier.',
73
- },
74
- {
75
- containerTypeName: names.skillDefType,
76
- key: 'cost',
77
- valueType: 'int',
78
- defaultValueJson: '1',
79
- description: 'Skill points per rank.',
80
- },
81
- {
82
- containerTypeName: names.skillDefType,
83
- key: 'requires_skill_id',
84
- valueType: 'string',
85
- defaultValueJson: '""',
86
- description: 'Prerequisite skill_id (empty for none); rank ≥ 1 required.',
87
- },
88
- {
89
- containerTypeName: names.skillDefType,
90
- key: 'max_rank',
91
- valueType: 'int',
92
- defaultValueJson: '1',
93
- description: 'Maximum purchasable rank.',
94
- },
95
- ownerMirrorProperty(names.skillRankType, kind),
96
- {
97
- containerTypeName: names.skillRankType,
98
- key: 'skill_id',
99
- valueType: 'string',
100
- defaultValueJson: '""',
101
- description: 'The skill this rank row tracks.',
102
- },
103
- {
104
- containerTypeName: names.skillRankType,
105
- key: 'rank',
106
- valueType: 'int',
107
- defaultValueJson: '0',
108
- description: 'Current rank (0 = not learned).',
109
- },
110
- {
111
- containerTypeName: names.achievementDefType,
112
- key: 'achievement_id',
113
- valueType: 'string',
114
- description: 'Stable achievement identifier.',
115
- },
116
- {
117
- containerTypeName: names.achievementDefType,
118
- key: 'threshold',
119
- valueType: 'int',
120
- defaultValueJson: '0',
121
- description: 'Total xp required to unlock.',
122
- },
123
- ownerMirrorProperty(names.achievementUnlockType, kind),
124
- {
125
- containerTypeName: names.achievementUnlockType,
126
- key: 'achievement_id',
127
- valueType: 'string',
128
- defaultValueJson: '""',
129
- description: 'The achievement this unlock row tracks.',
130
- },
131
- {
132
- containerTypeName: names.achievementUnlockType,
133
- key: 'unlocked',
134
- valueType: 'bool',
135
- defaultValueJson: 'false',
136
- description: 'True once the threshold check has passed (idempotent).',
137
- },
138
- ];
139
- const functions = [
140
- {
141
- name: names.xpForLevelFn,
142
- containerTypeName: names.progressType,
143
- returnType: 'int',
144
- invokeScope: 'internal',
145
- parameters: [
146
- {
147
- name: 'level',
148
- valueType: 'int',
149
- required: true,
150
- description: 'The level whose total-xp requirement to compute.',
151
- },
152
- ],
153
- mutations: [],
154
- returnExpression: xpForLevelExpression,
155
- description: 'The XP curve: total xp required to reach $level. Internal-only; read via fn: calls from grant_xp (the fn: helper pattern).',
156
- },
157
- {
158
- name: names.grantXpFn,
159
- containerTypeName: names.progressType,
160
- returnType: 'int',
161
- parameters: [
162
- {
163
- name: 'amount',
164
- valueType: 'int',
165
- required: true,
166
- description: 'XP to add (negative values are ignored).',
167
- },
168
- ],
169
- mutations: [
170
- { target: 'self', property: 'xp', expression: 'self.xp + max(0, $amount)' },
171
- {
172
- target: 'self',
173
- property: 'skill_points',
174
- expression: `self.skill_points + if(${levelUpCondition}, ${skillPointsPerLevel}, 0)`,
175
- },
176
- {
177
- target: 'self',
178
- property: 'level',
179
- expression: `if(${levelUpCondition}, self.level + 1, self.level)`,
180
- },
181
- ],
182
- returnExpression: 'self.level',
183
- ...trustedAuthorityFields(xpAuthority),
184
- description: 'Trusted XP grant: adds xp, then awards skill points and bumps the level when the fn:xp_for_level curve is crossed (one level per grant).',
185
- },
186
- {
187
- name: names.buySkillFn,
188
- containerTypeName: names.skillRankType,
189
- returnType: 'int',
190
- parameters: [
191
- {
192
- name: 'progress_id',
193
- valueType: 'container_ref',
194
- required: true,
195
- description: "The caller's Progress container (pays the skill points).",
196
- },
197
- {
198
- name: 'def_id',
199
- valueType: 'container_ref',
200
- required: true,
201
- description: 'The SkillDef being bought.',
202
- },
203
- {
204
- name: 'prereq_id',
205
- valueType: 'container_ref',
206
- required: true,
207
- description: "The caller's SkillRank for the prerequisite skill (pass this rank container itself when the skill has no prerequisite).",
208
- },
209
- ],
210
- mutations: [
211
- {
212
- target: 'ref($progress_id)',
213
- property: 'skill_points',
214
- expression: 'ref($progress_id).skill_points - ref($def_id).cost',
215
- },
216
- { target: 'self', property: 'rank', expression: 'self.rank + 1' },
217
- ],
218
- returnExpression: 'self.rank',
219
- invokePolicyJson: kitPolicyJson({
220
- type: 'condition',
221
- expression: [
222
- ownerEqualsCaller('self.owner_user_id', kind),
223
- ownerEqualsCaller('ref($progress_id).owner_user_id', kind),
224
- 'self.skill_id == ref($def_id).skill_id',
225
- 'ref($progress_id).skill_points >= ref($def_id).cost',
226
- 'self.rank < ref($def_id).max_rank',
227
- `if(ref($def_id).requires_skill_id == "", true, ref($prereq_id).skill_id == ref($def_id).requires_skill_id && ref($prereq_id).rank >= 1 && ${ownerEqualsCaller('ref($prereq_id).owner_user_id', kind)})`,
228
- ].join(' && '),
229
- }),
230
- description: 'Buy one rank of a skill: point cost, max rank, and the prerequisite chain are all checked server-side; the spend and the rank-up are one transaction.',
231
- },
232
- {
233
- name: names.unlockAchievementFn,
234
- containerTypeName: names.achievementUnlockType,
235
- returnType: 'bool',
236
- parameters: [
237
- {
238
- name: 'progress_id',
239
- valueType: 'container_ref',
240
- required: true,
241
- description: "The caller's Progress container (xp threshold source).",
242
- },
243
- {
244
- name: 'def_id',
245
- valueType: 'container_ref',
246
- required: true,
247
- description: 'The AchievementDef whose threshold to check.',
248
- },
249
- ],
250
- mutations: [{ target: 'self', property: 'unlocked', expression: 'true' }],
251
- returnExpression: 'self.unlocked',
252
- invokePolicyJson: kitPolicyJson({
253
- type: 'condition',
254
- expression: [
255
- ownerEqualsCaller('self.owner_user_id', kind),
256
- ownerEqualsCaller('ref($progress_id).owner_user_id', kind),
257
- 'self.achievement_id == ref($def_id).achievement_id',
258
- 'ref($progress_id).xp >= ref($def_id).threshold',
259
- ].join(' && '),
260
- }),
261
- description: 'Unlock an achievement once its xp threshold is met (idempotent: re-invoking just re-writes true).',
262
- },
263
- {
264
- name: names.adjustRatingFn,
265
- containerTypeName: names.progressType,
266
- returnType: 'int',
267
- parameters: [
268
- {
269
- name: 'delta',
270
- valueType: 'int',
271
- required: true,
272
- description: 'Signed rating change (an ELO delta computed by the match layer).',
273
- },
274
- ],
275
- mutations: [
276
- {
277
- target: 'self',
278
- property: 'rating',
279
- expression: 'max(0, self.rating + $delta)',
280
- },
281
- ],
282
- returnExpression: 'self.rating',
283
- ...trustedAuthorityFields(ratingAuthority),
284
- description: 'Trusted rating adjustment (host-gated by default) — wired from kit.matches match results.',
285
- },
286
- ];
287
- return {
288
- name: names.progressType,
289
- containerTypes: [
290
- {
291
- typeName: names.progressType,
292
- displayName: names.progressType,
293
- instantiableBy: 'member',
294
- description: 'Per-player progression: xp, level, skill points, rating.',
295
- },
296
- {
297
- typeName: names.skillDefType,
298
- displayName: names.skillDefType,
299
- instantiableBy: 'admin',
300
- description: 'Studio skill catalog row (cost, prerequisite, max rank).',
301
- },
302
- {
303
- typeName: names.skillRankType,
304
- displayName: names.skillRankType,
305
- instantiableBy: 'member',
306
- description: "A player's purchased rank of one skill.",
307
- },
308
- {
309
- typeName: names.achievementDefType,
310
- displayName: names.achievementDefType,
311
- instantiableBy: 'admin',
312
- description: 'Studio achievement catalog row (xp threshold).',
313
- },
314
- {
315
- typeName: names.achievementUnlockType,
316
- displayName: names.achievementUnlockType,
317
- instantiableBy: 'member',
318
- description: "A player's unlock state for one achievement.",
319
- },
320
- ],
321
- propertyDefinitions,
322
- functions,
323
- };
324
- }
@@ -1,72 +0,0 @@
1
- import { type KitBlueprint, type KitOwnerIdKind, type KitTrustedAuthority } from './core.js';
2
- /** An event-driven quest advance: bump matching QuestProgress rows on a model event. */
3
- export interface QuestAdvanceSpec {
4
- /** Automation name (unique per app), e.g. `'advance-on-craft'`. */
5
- name: string;
6
- /** Only progress rows of this quest advance. */
7
- questId: string;
8
- /** The gameplay event that advances the quest (e.g. `consume_stack` invoked). */
9
- onEvent: 'function_invoked' | 'property_changed' | 'container_created';
10
- functionName?: string;
11
- containerTypeName?: string;
12
- propertyKey?: string;
13
- /**
14
- * `property_changed` only: which writes advance the quest. Kit progress
15
- * properties are written by functions (`advance_quest`, the daily reset),
16
- * not by client `setProperty` calls, so watching one needs `'function'` or
17
- * `'any'` — the default `'direct'` would never match.
18
- */
19
- writeSource?: 'direct' | 'function' | 'any';
20
- debounceMs?: number;
21
- /** Progress added per event. Defaults to 1. */
22
- amount?: number;
23
- /** Progress rows advanced per event. Defaults to 8. */
24
- maxTargets?: number;
25
- }
26
- /** Options for {@link questsBlueprint}. */
27
- export interface QuestsBlueprintOptions {
28
- /** Prefix for the type/function names. Defaults to none. */
29
- typePrefix?: string;
30
- /**
31
- * Who may advance quest progress. Defaults to `'server'`; use
32
- * `'automation'` when driving progress purely through `advanceOn` event
33
- * automations. Never plain players — they would complete their own quests.
34
- */
35
- advanceAuthority?: KitTrustedAuthority;
36
- /**
37
- * The wallet currency property that `claim_reward` pays `reward_gold`
38
- * into. Defaults to `'gold'` (compose with the economy blueprint's
39
- * wallet).
40
- */
41
- currencyProperty?: string;
42
- /** Cron for the daily reset automation. Defaults to `'0 0 * * *'` (UTC midnight). */
43
- dailyResetCron?: string;
44
- /** Event automations that advance quests from gameplay functions. */
45
- advanceOn?: QuestAdvanceSpec[];
46
- /** Owner-mirror typing (see the kit convention). Defaults to `'int'`. */
47
- ownerIdKind?: KitOwnerIdKind;
48
- }
49
- /** Names derived by {@link questsBlueprint} for a given prefix. */
50
- export interface QuestsNames {
51
- defType: string;
52
- progressType: string;
53
- advanceFn: string;
54
- claimFn: string;
55
- resetFn: string;
56
- dailyResetAutomation: string;
57
- }
58
- /** Compute the type/function names a quests blueprint (and its runtime helper) uses. */
59
- export declare function questsNames(typePrefix?: string): QuestsNames;
60
- /**
61
- * Blueprint for **quests**: an admin `QuestDef` catalog (objective count +
62
- * reward spec + daily flag) and per-player `QuestProgress` rows. Progress
63
- * advances through trusted calls or event automations on your gameplay
64
- * functions; `claim_reward` marks the progress claimed AND grants the item
65
- * and currency rewards through `container_ref` params in ONE transaction
66
- * (composing with the inventory stack and economy wallet types); a **cron
67
- * automation** resets daily quests at midnight.
68
- *
69
- * Runtime counterpart: `client.kit(appId).quests`.
70
- */
71
- export declare function questsBlueprint(options?: QuestsBlueprintOptions): KitBlueprint;
72
- //# sourceMappingURL=quests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quests.d.ts","sourceRoot":"","sources":["../../../src/kit/blueprints/quests.ts"],"names":[],"mappings":"AAIA,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAEnB,wFAAwF;AACxF,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yEAAyE;IACzE,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,UAAU,SAAK,GAAG,WAAW,CAUxD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,YAAY,CAmRlF"}