@dappermountain/payload-plugin-achievements 0.5.1 → 1.0.0-beta.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.
- package/README.md +298 -239
- package/dist/admin/LucideIconField.d.ts +3 -2
- package/dist/admin/LucideIconField.d.ts.map +1 -1
- package/dist/admin/LucideIconField.js +2 -2
- package/dist/catalog.d.ts +3 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +8 -0
- package/dist/collections/EventTypes/access/index.d.ts +1 -11
- package/dist/collections/EventTypes/access/index.d.ts.map +1 -1
- package/dist/collections/Grants/hooks/afterGrantMutation.d.ts.map +1 -1
- package/dist/collections/Grants/hooks/afterGrantMutation.js +15 -0
- package/dist/collections/Logs/hooks/afterLogMutation.d.ts +4 -0
- package/dist/collections/Logs/hooks/afterLogMutation.d.ts.map +1 -0
- package/dist/collections/Logs/hooks/afterLogMutation.js +47 -0
- package/dist/collections/Logs/hooks/index.d.ts.map +1 -1
- package/dist/collections/Logs/hooks/index.js +3 -0
- package/dist/collections/Logs/index.js +1 -1
- package/dist/collections/Metrics/access/index.d.ts +1 -11
- package/dist/collections/Metrics/access/index.d.ts.map +1 -1
- package/dist/collections/Reactions/access/index.d.ts +2 -0
- package/dist/collections/Reactions/access/index.d.ts.map +1 -0
- package/dist/collections/Reactions/access/index.js +2 -0
- package/dist/collections/Reactions/index.d.ts +3 -0
- package/dist/collections/Reactions/index.d.ts.map +1 -0
- package/dist/collections/Reactions/index.js +97 -0
- package/dist/collections/fields/ruleFields.d.ts.map +1 -1
- package/dist/collections/fields/ruleFields.js +19 -0
- package/dist/collections/fields/whenSibling.d.ts +7 -0
- package/dist/collections/fields/whenSibling.d.ts.map +1 -0
- package/dist/collections/fields/whenSibling.js +21 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +15 -1
- package/dist/collections/slugs.d.ts.map +1 -1
- package/dist/collections/slugs.js +1 -0
- package/dist/defaults.d.ts +10 -1
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +34 -5
- package/dist/extensions/actions.d.ts +8 -0
- package/dist/extensions/actions.d.ts.map +1 -0
- package/dist/extensions/actions.js +26 -0
- package/dist/extensions/registry.d.ts +2 -0
- package/dist/extensions/registry.d.ts.map +1 -1
- package/dist/extensions/registry.js +19 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +9 -3
- package/dist/services/achievement/eventTypeRequiresActor.d.ts +1 -0
- package/dist/services/achievement/eventTypeRequiresActor.d.ts.map +1 -1
- package/dist/services/achievement/eventTypeRequiresActor.js +2 -0
- package/dist/services/achievement/grantSideEffects.d.ts +11 -0
- package/dist/services/achievement/grantSideEffects.d.ts.map +1 -1
- package/dist/services/achievement/grantSideEffects.js +32 -0
- package/dist/services/achievement/index.d.ts +3 -1
- package/dist/services/achievement/index.d.ts.map +1 -1
- package/dist/services/achievement/index.js +2 -1
- package/dist/services/achievement/runReactions.d.ts +20 -0
- package/dist/services/achievement/runReactions.d.ts.map +1 -0
- package/dist/services/achievement/runReactions.js +86 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +47 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -9
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CollectionConfig, OptionLabel, Payload, PayloadRequest,
|
|
1
|
+
import type { CollectionConfig, Field, OptionLabel, Payload, PayloadRequest, User } from 'payload';
|
|
2
2
|
/** Host-registered date anchors for computed elapsed metrics. */
|
|
3
3
|
export type AchievementMetricAnchor = (args: {
|
|
4
4
|
payload: Payload;
|
|
@@ -48,9 +48,43 @@ export type AchievementRuleType = {
|
|
|
48
48
|
* They are omitted from AND averages. Default: `requirement`.
|
|
49
49
|
*/
|
|
50
50
|
progressRole?: 'requirement' | 'gate';
|
|
51
|
+
/**
|
|
52
|
+
* Admin select label. Payload {@link OptionLabel}: string, `{ en, es }`, or `({ t }) => t(…)`.
|
|
53
|
+
* Defaults to `type` when omitted.
|
|
54
|
+
*/
|
|
55
|
+
label?: OptionLabel;
|
|
56
|
+
/**
|
|
57
|
+
* Admin fields shown when this leaf `type` is selected.
|
|
58
|
+
* Merged into the rule row; plugin ANDs visibility with `type === this.type`.
|
|
59
|
+
*/
|
|
60
|
+
fields?: Field[];
|
|
61
|
+
};
|
|
62
|
+
export type AchievementReactionTrigger = 'event' | 'achievement.granted' | 'achievement.revoked';
|
|
63
|
+
export type AchievementActionRunArgs = {
|
|
64
|
+
payload: PayloadRequest['payload'];
|
|
65
|
+
req: PayloadRequest;
|
|
66
|
+
userId: string;
|
|
67
|
+
scopeId: string | null;
|
|
68
|
+
trigger: AchievementReactionTrigger;
|
|
69
|
+
/** Reaction catalog row (flat plugin fields plus host param fields). */
|
|
70
|
+
reaction: Record<string, unknown>;
|
|
71
|
+
/** Present when `trigger` is `event`. */
|
|
72
|
+
log?: Record<string, unknown> | null;
|
|
73
|
+
/** Present when `trigger` is grant/revoke. */
|
|
74
|
+
achievementId?: string | null;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Host (or built-in) side effect when a reaction matches.
|
|
78
|
+
* `run` must be **set-based / idempotent** — the plugin does not store reaction run history.
|
|
79
|
+
*/
|
|
80
|
+
export type AchievementAction = {
|
|
81
|
+
type: string;
|
|
82
|
+
label?: OptionLabel;
|
|
83
|
+
fields?: Field[];
|
|
84
|
+
run: (args: AchievementActionRunArgs) => Promise<void> | void;
|
|
51
85
|
};
|
|
52
86
|
/** Logical collection ids — map to configurable slugs via `collections`. */
|
|
53
|
-
export type AchievementCollectionKey = 'tiers' | 'achievements' | 'grants' | 'achievementRequests' | 'tierRequests' | 'logs' | 'eventTypes' | 'metrics' | 'metricBalances';
|
|
87
|
+
export type AchievementCollectionKey = 'tiers' | 'achievements' | 'grants' | 'achievementRequests' | 'tierRequests' | 'logs' | 'eventTypes' | 'metrics' | 'metricBalances' | 'reactions';
|
|
54
88
|
/**
|
|
55
89
|
* Host overrides layered onto a plugin collection (Form Builder–style).
|
|
56
90
|
* Access/admin merge shallowly; hook arrays are appended after plugin hooks.
|
|
@@ -117,16 +151,17 @@ export type AchievementEndpointsOptions = {
|
|
|
117
151
|
export type AchievementSubjectsOptions = {
|
|
118
152
|
/**
|
|
119
153
|
* Collection slugs allowed on log `subject.relationTo` (e.g. `posts`, `comments`).
|
|
154
|
+
* `'all'` = every collection on the host Config except plugin collections and `payload-*`.
|
|
120
155
|
* Event types pick a subset via `subjectRelationTo`; validation rejects anything outside this list.
|
|
121
156
|
*/
|
|
122
|
-
collections?: string[];
|
|
157
|
+
collections?: 'all' | string[];
|
|
123
158
|
};
|
|
124
159
|
export type AchievementPluginOptions = {
|
|
125
160
|
/**
|
|
126
161
|
* Whether the user may review requests and manage achievement catalogs for a scope.
|
|
127
162
|
* Required for catalog edits and request approval. When omitted, those writes are denied.
|
|
128
163
|
*/
|
|
129
|
-
canReview?: (user:
|
|
164
|
+
canReview?: (user: User, scopeId: string | null) => boolean | Promise<boolean>;
|
|
130
165
|
/** Collection slug / admin grouping config. */
|
|
131
166
|
collections?: AchievementCollectionsOptions;
|
|
132
167
|
enabled?: boolean;
|
|
@@ -138,13 +173,18 @@ export type AchievementPluginOptions = {
|
|
|
138
173
|
*/
|
|
139
174
|
subjects?: AchievementSubjectsOptions;
|
|
140
175
|
extensions?: {
|
|
141
|
-
/** Custom rule evaluators merged with built-ins. */
|
|
176
|
+
/** Custom rule evaluators merged with built-ins. `label` / `fields` surface in Admin. */
|
|
142
177
|
ruleTypes?: AchievementRuleType[];
|
|
143
178
|
/**
|
|
144
|
-
|
|
145
|
-
|
|
179
|
+
* Named date anchors for computed `elapsed` metrics.
|
|
180
|
+
* Keys appear in Admin `since` selects; missing keys resolve to null at eval time.
|
|
146
181
|
*/
|
|
147
182
|
metricAnchors?: Record<string, AchievementMetricAnchorEntry>;
|
|
183
|
+
/**
|
|
184
|
+
* Side-effect commands for the reactions catalog (e.g. `accessGroup.addMember`).
|
|
185
|
+
* Built-in `achievement.grant` is always available. `run` must be idempotent.
|
|
186
|
+
*/
|
|
187
|
+
actions?: AchievementAction[];
|
|
148
188
|
};
|
|
149
189
|
/**
|
|
150
190
|
* When true (default), ensure system metrics + event types exist on Payload `onInit`
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,
|
|
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.
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
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",
|
|
@@ -69,26 +69,27 @@
|
|
|
69
69
|
"skills:check": "bunx skills check -p"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
|
-
"@payloadcms/richtext-lexical": "^
|
|
73
|
-
"@payloadcms/ui": "^
|
|
72
|
+
"@payloadcms/richtext-lexical": "^4.0.0-beta.1 || ^4.0.0",
|
|
73
|
+
"@payloadcms/ui": "^4.0.0-beta.1 || ^4.0.0",
|
|
74
74
|
"lucide-react": "^0.543.0",
|
|
75
|
-
"payload": "^
|
|
75
|
+
"payload": "^4.0.0-beta.1 || ^4.0.0",
|
|
76
76
|
"react": "^19.0.0"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
79
|
"@dappermountain/agent-payload": "^0.1.5",
|
|
80
80
|
"@dappermountain/agent-practices": "^0.1.2",
|
|
81
|
-
"@payloadcms/richtext-lexical": "
|
|
82
|
-
"@payloadcms/ui": "
|
|
81
|
+
"@payloadcms/richtext-lexical": "4.0.0-beta.1",
|
|
82
|
+
"@payloadcms/ui": "4.0.0-beta.1",
|
|
83
83
|
"@types/bun": "1.4.0",
|
|
84
84
|
"@types/react": "^19.0.0",
|
|
85
85
|
"lucide-react": "0.543.0",
|
|
86
|
-
"payload": "
|
|
86
|
+
"payload": "4.0.0-beta.1",
|
|
87
87
|
"prettier": "^3.6.2",
|
|
88
88
|
"react": "19.2.4",
|
|
89
|
-
"typescript": "
|
|
89
|
+
"typescript": "6.0.3"
|
|
90
90
|
},
|
|
91
91
|
"engines": {
|
|
92
|
-
"node": ">=20"
|
|
92
|
+
"node": ">=20",
|
|
93
|
+
"bun": ">=1.4.0"
|
|
93
94
|
}
|
|
94
95
|
}
|