@dappermountain/payload-plugin-achievements 0.2.5 → 0.2.7

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 (77) hide show
  1. package/README.md +34 -8
  2. package/dist/admin/LucideIconField.d.ts +1 -1
  3. package/dist/admin/LucideIconField.d.ts.map +1 -1
  4. package/dist/admin/LucideIconField.js +139 -24
  5. package/dist/catalog.d.ts +1 -0
  6. package/dist/catalog.d.ts.map +1 -1
  7. package/dist/catalog.js +1 -1
  8. package/dist/cli/reconcile.d.ts.map +1 -1
  9. package/dist/cli/reconcile.js +1 -0
  10. package/dist/collections/MetricBalances/access/index.d.ts +4 -0
  11. package/dist/collections/MetricBalances/access/index.d.ts.map +1 -0
  12. package/dist/collections/MetricBalances/access/index.js +9 -0
  13. package/dist/collections/MetricBalances/hooks/index.d.ts +3 -0
  14. package/dist/collections/MetricBalances/hooks/index.d.ts.map +1 -0
  15. package/dist/collections/MetricBalances/hooks/index.js +1 -0
  16. package/dist/collections/MetricBalances/index.d.ts +3 -0
  17. package/dist/collections/MetricBalances/index.d.ts.map +1 -0
  18. package/dist/collections/MetricBalances/index.js +48 -0
  19. package/dist/collections/Metrics/index.d.ts.map +1 -1
  20. package/dist/collections/Metrics/index.js +64 -3
  21. package/dist/collections/fields/ruleFields.d.ts.map +1 -1
  22. package/dist/collections/fields/ruleFields.js +45 -2
  23. package/dist/collections/hooks/preventCatalogDelete.d.ts.map +1 -1
  24. package/dist/collections/hooks/preventCatalogDelete.js +10 -1
  25. package/dist/collections/index.d.ts.map +1 -1
  26. package/dist/collections/index.js +2 -0
  27. package/dist/collections/slugs.d.ts.map +1 -1
  28. package/dist/collections/slugs.js +1 -0
  29. package/dist/defaults.d.ts +4 -0
  30. package/dist/defaults.d.ts.map +1 -1
  31. package/dist/defaults.js +10 -0
  32. package/dist/endpoints/index.d.ts.map +1 -1
  33. package/dist/endpoints/index.js +4 -0
  34. package/dist/endpoints/leaderboard.d.ts +6 -0
  35. package/dist/endpoints/leaderboard.d.ts.map +1 -0
  36. package/dist/endpoints/leaderboard.js +59 -0
  37. package/dist/extensions/elapsedSinceOptions.d.ts +7 -0
  38. package/dist/extensions/elapsedSinceOptions.d.ts.map +1 -0
  39. package/dist/extensions/elapsedSinceOptions.js +16 -0
  40. package/dist/index.d.ts +4 -4
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -2
  43. package/dist/plugin.d.ts.map +1 -1
  44. package/dist/plugin.js +9 -0
  45. package/dist/seed/index.d.ts +10 -0
  46. package/dist/seed/index.d.ts.map +1 -1
  47. package/dist/seed/index.js +14 -2
  48. package/dist/services/achievement/builtInRules.d.ts.map +1 -1
  49. package/dist/services/achievement/builtInRules.js +59 -21
  50. package/dist/services/achievement/duration.d.ts +6 -0
  51. package/dist/services/achievement/duration.d.ts.map +1 -0
  52. package/dist/services/achievement/duration.js +43 -0
  53. package/dist/services/achievement/getMetricLeaderboard.d.ts +30 -0
  54. package/dist/services/achievement/getMetricLeaderboard.d.ts.map +1 -0
  55. package/dist/services/achievement/getMetricLeaderboard.js +62 -0
  56. package/dist/services/achievement/index.d.ts +5 -0
  57. package/dist/services/achievement/index.d.ts.map +1 -1
  58. package/dist/services/achievement/index.js +4 -0
  59. package/dist/services/achievement/metricBalances.d.ts +42 -0
  60. package/dist/services/achievement/metricBalances.d.ts.map +1 -0
  61. package/dist/services/achievement/metricBalances.js +137 -0
  62. package/dist/services/achievement/reconcile.d.ts +1 -0
  63. package/dist/services/achievement/reconcile.d.ts.map +1 -1
  64. package/dist/services/achievement/reconcile.js +10 -0
  65. package/dist/services/achievement/recordEvent.d.ts.map +1 -1
  66. package/dist/services/achievement/recordEvent.js +22 -1
  67. package/dist/services/achievement/resolveElapsedAnchor.d.ts +15 -0
  68. package/dist/services/achievement/resolveElapsedAnchor.d.ts.map +1 -0
  69. package/dist/services/achievement/resolveElapsedAnchor.js +98 -0
  70. package/dist/services/achievement/resolveMetricValue.d.ts +32 -0
  71. package/dist/services/achievement/resolveMetricValue.d.ts.map +1 -0
  72. package/dist/services/achievement/resolveMetricValue.js +73 -0
  73. package/dist/services/achievement/validateRules.d.ts.map +1 -1
  74. package/dist/services/achievement/validateRules.js +19 -0
  75. package/dist/types.d.ts +26 -3
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +1 -1
package/dist/types.d.ts CHANGED
@@ -1,4 +1,11 @@
1
- import type { CollectionConfig, PayloadRequest, TypedUser } from 'payload';
1
+ import type { CollectionConfig, Payload, PayloadRequest, TypedUser } from 'payload';
2
+ /** Host-registered date anchors for computed elapsed metrics / `elapsed-since` rules. */
3
+ export type AchievementMetricAnchor = (args: {
4
+ payload: Payload;
5
+ req?: PayloadRequest;
6
+ userId: string;
7
+ scopeId: string | null;
8
+ }) => Date | null | Promise<Date | null>;
2
9
  export type AchievementScopeConfig = {
3
10
  collection: string;
4
11
  relationField?: string;
@@ -33,7 +40,7 @@ export type AchievementRuleType = {
33
40
  progressRole?: 'requirement' | 'gate';
34
41
  };
35
42
  /** Logical collection ids — map to configurable slugs via `collections`. */
36
- export type AchievementCollectionKey = 'tiers' | 'achievements' | 'grants' | 'achievementRequests' | 'tierRequests' | 'logs' | 'eventTypes' | 'metrics';
43
+ export type AchievementCollectionKey = 'tiers' | 'achievements' | 'grants' | 'achievementRequests' | 'tierRequests' | 'logs' | 'eventTypes' | 'metrics' | 'metricBalances';
37
44
  /**
38
45
  * Host overrides layered onto a plugin collection (Form Builder–style).
39
46
  * Access/admin merge shallowly; hook arrays are appended after plugin hooks.
@@ -80,6 +87,12 @@ export type AchievementEndpointsOptions = {
80
87
  * Pass `false` to skip registering the endpoint.
81
88
  */
82
89
  me?: string | false;
90
+ /**
91
+ * Root REST path for a stored-metric leaderboard (`GET`).
92
+ * Default: `'/achievements/leaderboard'`. Requires an authenticated user.
93
+ * Pass `false` to skip.
94
+ */
95
+ leaderboard?: string | false;
83
96
  /**
84
97
  * Root REST path to repair progression from existing grants (`POST`).
85
98
  * Default: `'/achievements/reconcile'`. Requires host `canReview`.
@@ -101,7 +114,17 @@ export type AchievementPluginOptions = {
101
114
  extensions?: {
102
115
  /** Custom rule evaluators merged with built-ins. */
103
116
  ruleTypes?: AchievementRuleType[];
117
+ /**
118
+ * Named date anchors for computed `elapsed` metrics and `elapsed-since` rules.
119
+ * Keys appear in Admin `since` selects; missing keys resolve to null at eval time.
120
+ */
121
+ metricAnchors?: Record<string, AchievementMetricAnchor>;
104
122
  };
123
+ /**
124
+ * When true (default), ensure system metrics + event types exist on Payload `onInit`
125
+ * (`seedAchievementCatalog`). Host product catalogs still seed via `seedAchievements`.
126
+ */
127
+ seedSystemCatalog?: boolean;
105
128
  /**
106
129
  * Host upload collection slug (e.g. `'media'`). When set, tiers gain an optional
107
130
  * `image` upload field for ladder badges. Icon keys still work without this.
@@ -117,7 +140,7 @@ export type AchievementPluginOptions = {
117
140
  users?: AchievementUsersOptions;
118
141
  usersCollectionSlug?: string;
119
142
  };
120
- export type BuiltInRuleType = 'achievement-complete' | 'event-count' | 'metric-minimum' | 'tier-at-least';
143
+ export type BuiltInRuleType = 'achievement-complete' | 'elapsed-since' | 'event-count' | 'metric-minimum' | 'tier-at-least';
121
144
  /** Engine log-type catalog slugs (seeded as system catalog rows). */
122
145
  export type BuiltInEventType = 'achievement.granted' | 'achievement.revoked' | 'metric.delta' | 'tier.changed';
123
146
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE1E,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAClC,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,+FAA+F;IAC/F,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IACvE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IACtE;;;OAGG;IACH,YAAY,CAAC,EAAE,aAAa,GAAG,MAAM,CAAA;CACtC,CAAA;AAED,4EAA4E;AAC5E,MAAM,MAAM,wBAAwB,GAChC,OAAO,GACP,cAAc,GACd,QAAQ,GACR,qBAAqB,GACrB,cAAc,GACd,MAAM,GACN,YAAY,GACZ,SAAS,CAAA;AAEb;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC3B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,CAAA;IACzD;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,6BAA6B,CAAC,CAAC,CAAA;CACrF,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;OAIG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACnF,+CAA+C;IAC/C,WAAW,CAAC,EAAE,6BAA6B,CAAA;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uDAAuD;IACvD,SAAS,CAAC,EAAE,2BAA2B,CAAA;IACvC,UAAU,CAAC,EAAE;QACX,oDAAoD;QACpD,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAA;KAClC,CAAA;IACD;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,sBAAsB,CAAA;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,uBAAuB,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,eAAe,GACvB,sBAAsB,GACtB,aAAa,GACb,gBAAgB,GAChB,eAAe,CAAA;AAEnB,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,cAAc,GACd,cAAc,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dappermountain/payload-plugin-achievements",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "A robust, Admin-configured achievements engine for Payload: composable unlock rules, derived rank progress, request/review grants, metrics, and scoped multi-tenant support.",
5
5
  "license": "MIT",
6
6
  "type": "module",