@crowdedkingdoms/crowdyjs 17.14.0-dev.1 → 18.0.0-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 (271) hide show
  1. package/MIGRATION.md +92 -1
  2. package/README.md +93 -162
  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/host.d.ts +3 -3
  33. package/dist/domains/host.js +3 -3
  34. package/dist/domains/marketplace.d.ts +9 -70
  35. package/dist/domains/marketplace.d.ts.map +1 -1
  36. package/dist/domains/marketplace.js +9 -120
  37. package/dist/domains/playerWallet.d.ts +6 -12
  38. package/dist/domains/playerWallet.d.ts.map +1 -1
  39. package/dist/domains/playerWallet.js +6 -21
  40. package/dist/errors.d.ts +7 -13
  41. package/dist/errors.d.ts.map +1 -1
  42. package/dist/errors.js +6 -10
  43. package/dist/generated/graphql.d.ts +141 -7083
  44. package/dist/generated/graphql.d.ts.map +1 -1
  45. package/dist/generated/graphql.js +5 -313
  46. package/dist/grid-mods/exec-client-halves.d.ts +19 -3
  47. package/dist/grid-mods/exec-client-halves.d.ts.map +1 -1
  48. package/dist/grid-mods/exec-client-halves.js +17 -2
  49. package/dist/grid-mods/grid-host-calls.d.ts +29 -17
  50. package/dist/grid-mods/grid-host-calls.d.ts.map +1 -1
  51. package/dist/grid-mods/grid-host-calls.js +40 -46
  52. package/dist/grid-mods/mod-runtime.d.ts +18 -11
  53. package/dist/grid-mods/mod-runtime.d.ts.map +1 -1
  54. package/dist/grid-mods/mod-runtime.js +4 -2
  55. package/dist/grid-scope.d.ts +0 -189
  56. package/dist/grid-scope.d.ts.map +1 -1
  57. package/dist/grid-scope.js +0 -70
  58. package/dist/index.d.ts +11 -17
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +10 -16
  61. package/dist/kit/actions.d.ts +5 -9
  62. package/dist/kit/actions.d.ts.map +1 -1
  63. package/dist/kit/actions.js +5 -9
  64. package/dist/kit/index.d.ts +2 -33
  65. package/dist/kit/index.d.ts.map +1 -1
  66. package/dist/kit/index.js +1 -32
  67. package/dist/kit/kit.d.ts +8 -208
  68. package/dist/kit/kit.d.ts.map +1 -1
  69. package/dist/kit/kit.js +5 -163
  70. package/dist/kit/social.d.ts +1 -3
  71. package/dist/kit/social.d.ts.map +1 -1
  72. package/dist/kit/social.js +1 -3
  73. package/dist/kit/wire.d.ts +16 -5
  74. package/dist/kit/wire.d.ts.map +1 -1
  75. package/dist/kit/wire.js +19 -5
  76. package/dist/live-coding/assets/browser-authoring-index.json +1 -1
  77. package/dist/live-coding/assets/manifest.json +1 -1
  78. package/dist/live-coding/browser-authoring-index.generated.d.ts.map +1 -1
  79. package/dist/live-coding/browser-authoring-index.generated.js +1496 -4386
  80. package/dist/live-coding/rust-analysis.d.ts.map +1 -1
  81. package/dist/live-coding/rust-analysis.js +30 -34
  82. package/dist/player-runtime/client-host-calls.d.ts +8 -0
  83. package/dist/player-runtime/client-host-calls.d.ts.map +1 -0
  84. package/dist/player-runtime/client-host-calls.js +28 -0
  85. package/dist/player-runtime/glue-runtime.d.ts +24 -20
  86. package/dist/player-runtime/glue-runtime.d.ts.map +1 -1
  87. package/dist/player-runtime/glue-runtime.js +26 -55
  88. package/dist/player-runtime/glue-sab.d.ts +2 -2
  89. package/dist/player-runtime/glue-sab.js +2 -2
  90. package/dist/player-runtime/player-code-broker.d.ts +70 -43
  91. package/dist/player-runtime/player-code-broker.d.ts.map +1 -1
  92. package/dist/player-runtime/player-code-broker.js +159 -64
  93. package/dist/player-runtime/player-glue-worker.d.ts +8 -9
  94. package/dist/player-runtime/player-glue-worker.d.ts.map +1 -1
  95. package/dist/player-runtime/player-glue-worker.js +26 -11
  96. package/dist/stores/inbox.d.ts +1 -1
  97. package/dist/stores/inbox.d.ts.map +1 -1
  98. package/dist/stores/index.d.ts +0 -11
  99. package/dist/stores/index.d.ts.map +1 -1
  100. package/dist/stores/index.js +0 -4
  101. package/dist/stores/session.d.ts +0 -2
  102. package/dist/stores/session.d.ts.map +1 -1
  103. package/package.json +1 -1
  104. package/dist/crowdy-studio/model-lint-log.d.ts +0 -76
  105. package/dist/crowdy-studio/model-lint-log.d.ts.map +0 -1
  106. package/dist/crowdy-studio/model-lint-log.js +0 -93
  107. package/dist/crowdy-studio/model-lint.d.ts +0 -61
  108. package/dist/crowdy-studio/model-lint.d.ts.map +0 -1
  109. package/dist/crowdy-studio/model-lint.js +0 -45
  110. package/dist/domains/compute.d.ts +0 -208
  111. package/dist/domains/compute.d.ts.map +0 -1
  112. package/dist/domains/compute.js +0 -274
  113. package/dist/domains/controlPlane.d.ts +0 -38
  114. package/dist/domains/controlPlane.d.ts.map +0 -1
  115. package/dist/domains/controlPlane.js +0 -43
  116. package/dist/domains/gameModel.d.ts +0 -1174
  117. package/dist/domains/gameModel.d.ts.map +0 -1
  118. package/dist/domains/gameModel.js +0 -1333
  119. package/dist/domains/playerCompute.d.ts +0 -91
  120. package/dist/domains/playerCompute.d.ts.map +0 -1
  121. package/dist/domains/playerCompute.js +0 -136
  122. package/dist/domains/playerModel.d.ts +0 -20
  123. package/dist/domains/playerModel.d.ts.map +0 -1
  124. package/dist/domains/playerModel.js +0 -54
  125. package/dist/kit/abilities.d.ts +0 -66
  126. package/dist/kit/abilities.d.ts.map +0 -1
  127. package/dist/kit/abilities.js +0 -71
  128. package/dist/kit/blueprints/combat.d.ts +0 -81
  129. package/dist/kit/blueprints/combat.d.ts.map +0 -1
  130. package/dist/kit/blueprints/combat.js +0 -357
  131. package/dist/kit/blueprints/core.d.ts +0 -222
  132. package/dist/kit/blueprints/core.d.ts.map +0 -1
  133. package/dist/kit/blueprints/core.js +0 -185
  134. package/dist/kit/blueprints/decks.d.ts +0 -50
  135. package/dist/kit/blueprints/decks.d.ts.map +0 -1
  136. package/dist/kit/blueprints/decks.js +0 -163
  137. package/dist/kit/blueprints/economy.d.ts +0 -88
  138. package/dist/kit/blueprints/economy.d.ts.map +0 -1
  139. package/dist/kit/blueprints/economy.js +0 -533
  140. package/dist/kit/blueprints/guild.d.ts +0 -51
  141. package/dist/kit/blueprints/guild.d.ts.map +0 -1
  142. package/dist/kit/blueprints/guild.js +0 -50
  143. package/dist/kit/blueprints/index.d.ts +0 -23
  144. package/dist/kit/blueprints/index.d.ts.map +0 -1
  145. package/dist/kit/blueprints/index.js +0 -22
  146. package/dist/kit/blueprints/inventory.d.ts +0 -84
  147. package/dist/kit/blueprints/inventory.d.ts.map +0 -1
  148. package/dist/kit/blueprints/inventory.js +0 -257
  149. package/dist/kit/blueprints/leaderboards.d.ts +0 -49
  150. package/dist/kit/blueprints/leaderboards.d.ts.map +0 -1
  151. package/dist/kit/blueprints/leaderboards.js +0 -126
  152. package/dist/kit/blueprints/liveops.d.ts +0 -42
  153. package/dist/kit/blueprints/liveops.d.ts.map +0 -1
  154. package/dist/kit/blueprints/liveops.js +0 -170
  155. package/dist/kit/blueprints/locks.d.ts +0 -82
  156. package/dist/kit/blueprints/locks.d.ts.map +0 -1
  157. package/dist/kit/blueprints/locks.js +0 -155
  158. package/dist/kit/blueprints/loot.d.ts +0 -90
  159. package/dist/kit/blueprints/loot.d.ts.map +0 -1
  160. package/dist/kit/blueprints/loot.js +0 -229
  161. package/dist/kit/blueprints/matches.d.ts +0 -84
  162. package/dist/kit/blueprints/matches.d.ts.map +0 -1
  163. package/dist/kit/blueprints/matches.js +0 -349
  164. package/dist/kit/blueprints/moderation.d.ts +0 -32
  165. package/dist/kit/blueprints/moderation.d.ts.map +0 -1
  166. package/dist/kit/blueprints/moderation.js +0 -140
  167. package/dist/kit/blueprints/npcs.d.ts +0 -78
  168. package/dist/kit/blueprints/npcs.d.ts.map +0 -1
  169. package/dist/kit/blueprints/npcs.js +0 -125
  170. package/dist/kit/blueprints/plots.d.ts +0 -63
  171. package/dist/kit/blueprints/plots.d.ts.map +0 -1
  172. package/dist/kit/blueprints/plots.js +0 -151
  173. package/dist/kit/blueprints/progression.d.ts +0 -68
  174. package/dist/kit/blueprints/progression.d.ts.map +0 -1
  175. package/dist/kit/blueprints/progression.js +0 -324
  176. package/dist/kit/blueprints/quests.d.ts +0 -72
  177. package/dist/kit/blueprints/quests.d.ts.map +0 -1
  178. package/dist/kit/blueprints/quests.js +0 -285
  179. package/dist/kit/blueprints/worldsim.d.ts +0 -91
  180. package/dist/kit/blueprints/worldsim.d.ts.map +0 -1
  181. package/dist/kit/blueprints/worldsim.js +0 -468
  182. package/dist/kit/combat.d.ts +0 -141
  183. package/dist/kit/combat.d.ts.map +0 -1
  184. package/dist/kit/combat.js +0 -196
  185. package/dist/kit/decks.d.ts +0 -157
  186. package/dist/kit/decks.d.ts.map +0 -1
  187. package/dist/kit/decks.js +0 -186
  188. package/dist/kit/director.d.ts +0 -88
  189. package/dist/kit/director.d.ts.map +0 -1
  190. package/dist/kit/director.js +0 -86
  191. package/dist/kit/economy.d.ts +0 -289
  192. package/dist/kit/economy.d.ts.map +0 -1
  193. package/dist/kit/economy.js +0 -427
  194. package/dist/kit/engine.d.ts +0 -48
  195. package/dist/kit/engine.d.ts.map +0 -1
  196. package/dist/kit/engine.js +0 -113
  197. package/dist/kit/features.d.ts +0 -60
  198. package/dist/kit/features.d.ts.map +0 -1
  199. package/dist/kit/features.js +0 -65
  200. package/dist/kit/instances.d.ts +0 -52
  201. package/dist/kit/instances.d.ts.map +0 -1
  202. package/dist/kit/instances.js +0 -60
  203. package/dist/kit/inventory.d.ts +0 -129
  204. package/dist/kit/inventory.d.ts.map +0 -1
  205. package/dist/kit/inventory.js +0 -200
  206. package/dist/kit/leaderboards.d.ts +0 -86
  207. package/dist/kit/leaderboards.d.ts.map +0 -1
  208. package/dist/kit/leaderboards.js +0 -133
  209. package/dist/kit/liveops.d.ts +0 -112
  210. package/dist/kit/liveops.d.ts.map +0 -1
  211. package/dist/kit/liveops.js +0 -183
  212. package/dist/kit/loot.d.ts +0 -128
  213. package/dist/kit/loot.d.ts.map +0 -1
  214. package/dist/kit/loot.js +0 -160
  215. package/dist/kit/matches.d.ts +0 -301
  216. package/dist/kit/matches.d.ts.map +0 -1
  217. package/dist/kit/matches.js +0 -458
  218. package/dist/kit/matchmaking.d.ts +0 -57
  219. package/dist/kit/matchmaking.d.ts.map +0 -1
  220. package/dist/kit/matchmaking.js +0 -59
  221. package/dist/kit/minigames.d.ts +0 -30
  222. package/dist/kit/minigames.d.ts.map +0 -1
  223. package/dist/kit/minigames.js +0 -38
  224. package/dist/kit/mobs.d.ts +0 -90
  225. package/dist/kit/mobs.d.ts.map +0 -1
  226. package/dist/kit/mobs.js +0 -98
  227. package/dist/kit/moderation.d.ts +0 -73
  228. package/dist/kit/moderation.d.ts.map +0 -1
  229. package/dist/kit/moderation.js +0 -103
  230. package/dist/kit/movement.d.ts +0 -78
  231. package/dist/kit/movement.d.ts.map +0 -1
  232. package/dist/kit/movement.js +0 -103
  233. package/dist/kit/notifications.d.ts +0 -45
  234. package/dist/kit/notifications.d.ts.map +0 -1
  235. package/dist/kit/notifications.js +0 -67
  236. package/dist/kit/npcs.d.ts +0 -226
  237. package/dist/kit/npcs.d.ts.map +0 -1
  238. package/dist/kit/npcs.js +0 -141
  239. package/dist/kit/objects.d.ts +0 -116
  240. package/dist/kit/objects.d.ts.map +0 -1
  241. package/dist/kit/objects.js +0 -119
  242. package/dist/kit/pets.d.ts +0 -85
  243. package/dist/kit/pets.d.ts.map +0 -1
  244. package/dist/kit/pets.js +0 -96
  245. package/dist/kit/plots.d.ts +0 -85
  246. package/dist/kit/plots.d.ts.map +0 -1
  247. package/dist/kit/plots.js +0 -113
  248. package/dist/kit/progression.d.ts +0 -181
  249. package/dist/kit/progression.d.ts.map +0 -1
  250. package/dist/kit/progression.js +0 -265
  251. package/dist/kit/quests.d.ts +0 -171
  252. package/dist/kit/quests.d.ts.map +0 -1
  253. package/dist/kit/quests.js +0 -237
  254. package/dist/kit/racing.d.ts +0 -85
  255. package/dist/kit/racing.d.ts.map +0 -1
  256. package/dist/kit/racing.js +0 -99
  257. package/dist/kit/shared.d.ts +0 -73
  258. package/dist/kit/shared.d.ts.map +0 -1
  259. package/dist/kit/shared.js +0 -101
  260. package/dist/kit/telemetry.d.ts +0 -66
  261. package/dist/kit/telemetry.d.ts.map +0 -1
  262. package/dist/kit/telemetry.js +0 -133
  263. package/dist/kit/territory.d.ts +0 -97
  264. package/dist/kit/territory.d.ts.map +0 -1
  265. package/dist/kit/territory.js +0 -114
  266. package/dist/kit/worldsim.d.ts +0 -263
  267. package/dist/kit/worldsim.d.ts.map +0 -1
  268. package/dist/kit/worldsim.js +0 -268
  269. package/dist/stores/model.d.ts +0 -81
  270. package/dist/stores/model.d.ts.map +0 -1
  271. 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"}