@dappermountain/payload-plugin-achievements 0.4.0 → 0.4.2
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 +7 -7
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +5 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +5 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -294,9 +294,9 @@ achievementPlugin({
|
|
|
294
294
|
canReview,
|
|
295
295
|
extensions: {
|
|
296
296
|
metricAnchors: {
|
|
297
|
-
'
|
|
297
|
+
'enrollment-started': {
|
|
298
298
|
// Admin UI i18n (Payload label / OptionLabel)
|
|
299
|
-
label: ({ t }) => t('custom:achievements:anchors:
|
|
299
|
+
label: ({ t }) => t('custom:achievements:anchors:enrollmentStarted'),
|
|
300
300
|
resolve: async ({ payload, userId, scopeId }) => {
|
|
301
301
|
// return a Date from host data, or null
|
|
302
302
|
return null
|
|
@@ -371,12 +371,12 @@ await reconcileProgression({
|
|
|
371
371
|
payload,
|
|
372
372
|
userId: '…',
|
|
373
373
|
scopeId: '…',
|
|
374
|
-
achievementSlug: '
|
|
375
|
-
tierSlug: '
|
|
374
|
+
achievementSlug: 'path-complete',
|
|
375
|
+
tierSlug: 'veteran',
|
|
376
376
|
})
|
|
377
377
|
|
|
378
378
|
// Host CLI (only boot config in the app — flags live in the plugin):
|
|
379
|
-
// bun --env-file=.env ./scripts/reconcile-achievements.ts -- --user=<id> --achievement=
|
|
379
|
+
// bun --env-file=.env ./scripts/reconcile-achievements.ts -- --user=<id> --achievement=path-complete
|
|
380
380
|
import { runReconcileCli } from '@dappermountain/payload-plugin-achievements/cli'
|
|
381
381
|
await runReconcileCli({ config })
|
|
382
382
|
```
|
|
@@ -440,8 +440,8 @@ await seedAchievements(payload, {
|
|
|
440
440
|
metrics: [{ name: 'Streak days', slug: 'streak-days' }],
|
|
441
441
|
tiers: [
|
|
442
442
|
{
|
|
443
|
-
name: '
|
|
444
|
-
slug: '
|
|
443
|
+
name: 'Novice',
|
|
444
|
+
slug: 'novice',
|
|
445
445
|
rank: 0,
|
|
446
446
|
unlockRules: [], // open
|
|
447
447
|
},
|
package/dist/defaults.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAEL,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,eAAO,MAAM,wBAAwB,UAAU,CAAA;AAC/C,eAAO,MAAM,wBAAwB,qBAAqB,CAAA;AAC1D,eAAO,MAAM,iCAAiC,8BAA8B,CAAA;AAC5E,eAAO,MAAM,+BAA+B,4BAA4B,CAAA;AAExE,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC,GAAG;IAC5G,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAA;IAChC,kFAAkF;IAClF,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,+DAA+D;IAC/D,eAAe,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAA;IAC1D,oEAAoE;IACpE,UAAU,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAA;CAC1F,CAAA;AAED,6EAA6E;AAC7E,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,MAAM,EAAE,CAWtF;AAQD,wBAAgB,qBAAqB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAIzE;AAED,wBAAgB,8BAA8B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAIpF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAIlF;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,wBAA6B,GAAG,0BAA0B,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAEL,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,eAAO,MAAM,wBAAwB,UAAU,CAAA;AAC/C,eAAO,MAAM,wBAAwB,qBAAqB,CAAA;AAC1D,eAAO,MAAM,iCAAiC,8BAA8B,CAAA;AAC5E,eAAO,MAAM,+BAA+B,4BAA4B,CAAA;AAExE,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC,GAAG;IAC5G,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAA;IAChC,kFAAkF;IAClF,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,+DAA+D;IAC/D,eAAe,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAA;IAC1D,oEAAoE;IACpE,UAAU,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAA;CAC1F,CAAA;AAED,6EAA6E;AAC7E,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,MAAM,EAAE,CAWtF;AAQD,wBAAgB,qBAAqB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAIzE;AAED,wBAAgB,8BAA8B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAIpF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAIlF;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,wBAA6B,GAAG,0BAA0B,CAwBjG"}
|
package/dist/defaults.js
CHANGED
|
@@ -46,6 +46,10 @@ export function resolveReconcileEndpointPath(path) {
|
|
|
46
46
|
}
|
|
47
47
|
export function resolveOptions(options = {}) {
|
|
48
48
|
const { subjects: _subjects, ...rest } = options;
|
|
49
|
+
// Idempotent: `setAchievementOptions(resolveOptions(opts))` strips `subjects` and would
|
|
50
|
+
// otherwise wipe `subjectCollections` on the second pass.
|
|
51
|
+
const fromConfig = resolveSubjectCollections(options);
|
|
52
|
+
const alreadyResolved = options.subjectCollections;
|
|
49
53
|
return {
|
|
50
54
|
...rest,
|
|
51
55
|
enabled: options.enabled !== false,
|
|
@@ -54,7 +58,7 @@ export function resolveOptions(options = {}) {
|
|
|
54
58
|
users: {
|
|
55
59
|
includeJoins: options.users?.includeJoins !== false,
|
|
56
60
|
},
|
|
57
|
-
subjectCollections:
|
|
61
|
+
subjectCollections: options.subjects != null ? fromConfig : (alreadyResolved ?? fromConfig),
|
|
58
62
|
collectionSlugs: resolveCollectionSlugs(options),
|
|
59
63
|
adminGroup: resolveAdminGroup(options),
|
|
60
64
|
endpoints: {
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,SAAS,CAAA;AAM7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC3B,UAAS,wBAA6B,KAAG,MAqCzC,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { buildAchievementCollections } from './collections/index.js';
|
|
2
2
|
import { usersAchievementsGroup } from './collections/fields/usersAchievementsGroup.js';
|
|
3
|
-
import { resolveOptions } from './defaults.js';
|
|
4
3
|
import { buildAchievementEndpoints } from './endpoints/index.js';
|
|
5
|
-
import { setAchievementOptions } from './options-store.js';
|
|
4
|
+
import { getAchievementOptions, setAchievementOptions } from './options-store.js';
|
|
6
5
|
/**
|
|
7
6
|
* Payload achievements plugin — merges collections (hooks own request/grant flow)
|
|
8
7
|
* and an optional current-user grants endpoint.
|
|
9
8
|
*/
|
|
10
9
|
export const achievementPlugin = (options = {}) => (config) => {
|
|
11
|
-
|
|
12
|
-
setAchievementOptions
|
|
10
|
+
// Store the host options (not a pre-resolved object) so `subjects.collections`
|
|
11
|
+
// survives `setAchievementOptions` → `resolveOptions`.
|
|
12
|
+
setAchievementOptions(options);
|
|
13
|
+
const resolved = getAchievementOptions();
|
|
13
14
|
if (!resolved.enabled)
|
|
14
15
|
return config;
|
|
15
16
|
const achievementCollections = buildAchievementCollections();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dappermountain/payload-plugin-achievements",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
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",
|