@carlonicora/nextjs-jsonapi 6.10.1 → 6.11.0

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 (116) hide show
  1. package/dist/{AbstractApiData-XLhBP5Tl.d.mts → AbstractApiData-CKy8tbde.d.mts} +6 -0
  2. package/dist/{AbstractApiData-DtitRWPz.d.ts → AbstractApiData-rgvs0cdY.d.ts} +6 -0
  3. package/dist/{BlockNoteEditor-GK3DRTOP.mjs → BlockNoteEditor-5WM5DX3J.mjs} +4 -4
  4. package/dist/{BlockNoteEditor-YOKJOVV3.js → BlockNoteEditor-GY5R25YI.js} +19 -19
  5. package/dist/{BlockNoteEditor-YOKJOVV3.js.map → BlockNoteEditor-GY5R25YI.js.map} +1 -1
  6. package/dist/{BlockNoteViewer-EKAWVLIR.js → BlockNoteViewer-FLUHEXE6.js} +3 -3
  7. package/dist/{BlockNoteViewer-EKAWVLIR.js.map → BlockNoteViewer-FLUHEXE6.js.map} +1 -1
  8. package/dist/{BlockNoteViewer-RWRI3QO2.mjs → BlockNoteViewer-UCA3LV3N.mjs} +2 -2
  9. package/dist/billing/index.js +491 -491
  10. package/dist/billing/index.mjs +3 -3
  11. package/dist/{chunk-THZAK7S3.mjs → chunk-3PRLRCMF.mjs} +1281 -603
  12. package/dist/chunk-3PRLRCMF.mjs.map +1 -0
  13. package/dist/{chunk-AWLTSKMM.mjs → chunk-6RLATJ2L.mjs} +2 -2
  14. package/dist/{chunk-6HFRXEF5.mjs → chunk-BGLOFZ3K.mjs} +296 -6
  15. package/dist/chunk-BGLOFZ3K.mjs.map +1 -0
  16. package/dist/{chunk-KRQRJA4J.js → chunk-FNPXCYHO.js} +8 -8
  17. package/dist/{chunk-KRQRJA4J.js.map → chunk-FNPXCYHO.js.map} +1 -1
  18. package/dist/{chunk-4UFMLTL2.js → chunk-MP3DV2I5.js} +1647 -969
  19. package/dist/chunk-MP3DV2I5.js.map +1 -0
  20. package/dist/{chunk-RNZ3IK5J.js → chunk-OHJSI6L2.js} +4 -4
  21. package/dist/{chunk-RNZ3IK5J.js.map → chunk-OHJSI6L2.js.map} +1 -1
  22. package/dist/{chunk-SQTXJPRE.js → chunk-YGEOX2XX.js} +297 -7
  23. package/dist/chunk-YGEOX2XX.js.map +1 -0
  24. package/dist/{chunk-DPAM7BCE.mjs → chunk-YP6W4AB5.mjs} +2 -2
  25. package/dist/client/index.js +4 -4
  26. package/dist/client/index.mjs +3 -3
  27. package/dist/components/index.d.mts +68 -30
  28. package/dist/components/index.d.ts +68 -30
  29. package/dist/components/index.js +10 -4
  30. package/dist/components/index.js.map +1 -1
  31. package/dist/components/index.mjs +9 -3
  32. package/dist/contexts/index.js +4 -4
  33. package/dist/contexts/index.mjs +3 -3
  34. package/dist/core/index.d.mts +160 -4
  35. package/dist/core/index.d.ts +160 -4
  36. package/dist/core/index.js +14 -2
  37. package/dist/core/index.js.map +1 -1
  38. package/dist/core/index.mjs +13 -1
  39. package/dist/email-automations/index.js +93 -93
  40. package/dist/email-automations/index.mjs +3 -3
  41. package/dist/features/analytics/index.d.mts +1 -1
  42. package/dist/features/analytics/index.d.ts +1 -1
  43. package/dist/features/analytics/index.js +120 -122
  44. package/dist/features/analytics/index.js.map +1 -1
  45. package/dist/features/analytics/index.mjs +7 -9
  46. package/dist/features/analytics/index.mjs.map +1 -1
  47. package/dist/features/analytics/server.js +4 -4
  48. package/dist/features/analytics/server.mjs +2 -2
  49. package/dist/features/blog/index.js +150 -150
  50. package/dist/features/blog/index.mjs +3 -3
  51. package/dist/features/blog/server.js +16 -16
  52. package/dist/features/blog/server.mjs +1 -1
  53. package/dist/features/help/index.js +37 -37
  54. package/dist/features/help/index.mjs +3 -3
  55. package/dist/features/tokenusage/index.d.mts +1 -1
  56. package/dist/features/tokenusage/index.d.ts +1 -1
  57. package/dist/features/tokenusage/index.js +126 -128
  58. package/dist/features/tokenusage/index.js.map +1 -1
  59. package/dist/features/tokenusage/index.mjs +14 -16
  60. package/dist/features/tokenusage/index.mjs.map +1 -1
  61. package/dist/index.d.mts +3 -3
  62. package/dist/index.d.ts +3 -3
  63. package/dist/index.js +15 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.mjs +14 -2
  66. package/dist/{HandbookSectionInterface-BPgqqwgw.d.mts → referral-admin.interface-C87ApGMR.d.mts} +42 -2
  67. package/dist/{HandbookSectionInterface-_51oA3om.d.ts → referral-admin.interface-CMwl5NiV.d.ts} +42 -2
  68. package/dist/server/index.js +3 -3
  69. package/dist/server/index.mjs +2 -2
  70. package/messages/en.json +78 -1
  71. package/messages/it.json +78 -1
  72. package/package.json +1 -1
  73. package/src/core/abstracts/AbstractApiData.ts +14 -3
  74. package/src/core/abstracts/__tests__/readIncludedWithMeta.spec.ts +103 -0
  75. package/src/core/index.ts +2 -0
  76. package/src/core/registry/ModuleRegistry.ts +5 -0
  77. package/src/features/referral/__tests__/referral-admin-models.spec.ts +122 -0
  78. package/src/features/referral/__tests__/referral-admin-service.spec.ts +70 -0
  79. package/src/features/referral/__tests__/referral-code-capture.spec.tsx +105 -0
  80. package/src/features/referral/__tests__/referral-invite-errors.spec.tsx +82 -0
  81. package/src/features/referral/__tests__/referral-visit-service.spec.ts +47 -0
  82. package/src/features/referral/__tests__/referrals-admin-container.spec.tsx +230 -0
  83. package/src/features/referral/components/ReferralCodeCapture.tsx +3 -0
  84. package/src/features/referral/components/ReferralDialog.tsx +9 -13
  85. package/src/features/referral/components/ReferralWidget.tsx +75 -45
  86. package/src/features/referral/components/ReferralsAdminFunnel.tsx +74 -0
  87. package/src/features/referral/components/ReferralsAdminTiles.tsx +128 -0
  88. package/src/features/referral/components/containers/ReferralsAdminContainer.tsx +205 -0
  89. package/src/features/referral/components/index.ts +3 -0
  90. package/src/features/referral/data/ReferralAdminReferral.ts +65 -0
  91. package/src/features/referral/data/ReferralAdminReferrer.ts +65 -0
  92. package/src/features/referral/data/ReferralAdminService.ts +51 -0
  93. package/src/features/referral/data/ReferralAdminSummary.ts +60 -0
  94. package/src/features/referral/data/ReferralService.ts +20 -0
  95. package/src/features/referral/data/ReferralVisit.ts +23 -0
  96. package/src/features/referral/data/index.ts +5 -0
  97. package/src/features/referral/hooks/index.ts +2 -0
  98. package/src/features/referral/hooks/useReferralAdminReferralTableStructure.tsx +127 -0
  99. package/src/features/referral/hooks/useReferralAdminReferrerTableStructure.tsx +229 -0
  100. package/src/features/referral/hooks/useReferralInvite.ts +2 -0
  101. package/src/features/referral/index.ts +1 -0
  102. package/src/features/referral/interfaces/index.ts +1 -0
  103. package/src/features/referral/interfaces/referral-admin.interface.ts +45 -0
  104. package/src/features/referral/referral-admin.modules.ts +32 -0
  105. package/dist/chunk-3TNGKMJU.mjs +0 -115
  106. package/dist/chunk-3TNGKMJU.mjs.map +0 -1
  107. package/dist/chunk-4UFMLTL2.js.map +0 -1
  108. package/dist/chunk-6HFRXEF5.mjs.map +0 -1
  109. package/dist/chunk-G3YKDIAL.js +0 -115
  110. package/dist/chunk-G3YKDIAL.js.map +0 -1
  111. package/dist/chunk-SQTXJPRE.js.map +0 -1
  112. package/dist/chunk-THZAK7S3.mjs.map +0 -1
  113. /package/dist/{BlockNoteEditor-GK3DRTOP.mjs.map → BlockNoteEditor-5WM5DX3J.mjs.map} +0 -0
  114. /package/dist/{BlockNoteViewer-RWRI3QO2.mjs.map → BlockNoteViewer-UCA3LV3N.mjs.map} +0 -0
  115. /package/dist/{chunk-AWLTSKMM.mjs.map → chunk-6RLATJ2L.mjs.map} +0 -0
  116. /package/dist/{chunk-DPAM7BCE.mjs.map → chunk-YP6W4AB5.mjs.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  EndpointCreator,
4
4
  Modules,
5
5
  useI18nTranslations
6
- } from "./chunk-6HFRXEF5.mjs";
6
+ } from "./chunk-BGLOFZ3K.mjs";
7
7
  import {
8
8
  ENV,
9
9
  setBootstrapper
@@ -340,4 +340,4 @@ export {
340
340
  ACTION_TYPES,
341
341
  RbacService
342
342
  };
343
- //# sourceMappingURL=chunk-AWLTSKMM.mjs.map
343
+ //# sourceMappingURL=chunk-6RLATJ2L.mjs.map
@@ -41,7 +41,7 @@ var RehydrationFactory = class {
41
41
  };
42
42
 
43
43
  // src/core/abstracts/AbstractApiData.ts
44
- var AbstractApiData = class {
44
+ var AbstractApiData = class _AbstractApiData {
45
45
  static {
46
46
  __name(this, "AbstractApiData");
47
47
  }
@@ -190,7 +190,7 @@ var AbstractApiData = class {
190
190
  included: data.included
191
191
  });
192
192
  if (item.meta) {
193
- Object.assign(entity2, item.meta);
193
+ _AbstractApiData._mergeMeta(entity2, item.meta);
194
194
  }
195
195
  result.push(entity2);
196
196
  }
@@ -211,7 +211,7 @@ var AbstractApiData = class {
211
211
  });
212
212
  const relationshipMeta2 = data.jsonApi.relationships[type].meta;
213
213
  if (relationshipMeta2) {
214
- Object.assign(entity2, relationshipMeta2);
214
+ _AbstractApiData._mergeMeta(entity2, relationshipMeta2);
215
215
  }
216
216
  return entity2;
217
217
  }
@@ -224,10 +224,20 @@ var AbstractApiData = class {
224
224
  });
225
225
  const relationshipMeta = data.jsonApi.relationships[type].meta;
226
226
  if (relationshipMeta) {
227
- Object.assign(entity, relationshipMeta);
227
+ _AbstractApiData._mergeMeta(entity, relationshipMeta);
228
228
  }
229
229
  return entity;
230
230
  }
231
+ /**
232
+ * Copies relationship meta onto a rehydrated entity as own data properties. Object.assign throws
233
+ * when the model declares a getter-only accessor of the same name (an app's `Chunk` with
234
+ * `get relevance()`); an own property shadows that getter, so the model reads the meta value.
235
+ */
236
+ static _mergeMeta(entity, meta) {
237
+ for (const [key, value] of Object.entries(meta)) {
238
+ Object.defineProperty(entity, key, { value, writable: true, enumerable: true, configurable: true });
239
+ }
240
+ }
231
241
  dehydrate() {
232
242
  return {
233
243
  jsonApi: this._jsonApi,
@@ -11643,7 +11653,260 @@ var ReferralService = class extends AbstractService {
11643
11653
  method: "POST" /* POST */,
11644
11654
  endpoint: endpoint.generate(),
11645
11655
  input: { email },
11646
- overridesJsonApiCreation: true
11656
+ overridesJsonApiCreation: true,
11657
+ // The widget turns the error code into a translated message; the global
11658
+ // handler would show the API's English text and swallow the failure.
11659
+ suppressGlobalError: true
11660
+ });
11661
+ }
11662
+ /**
11663
+ * Count one visit to a referral link. Answers 204 whatever the code.
11664
+ */
11665
+ static async recordVisit(params) {
11666
+ const endpoint = new EndpointCreator({ endpoint: Modules.ReferralVisit });
11667
+ await this.callApi({
11668
+ type: Modules.ReferralVisit,
11669
+ method: "POST" /* POST */,
11670
+ endpoint: endpoint.generate(),
11671
+ // The request layer builds the body through ReferralVisit.createJsonApi().
11672
+ input: { referralCode: params.referralCode },
11673
+ // A failed beacon must never show an error to a visitor.
11674
+ suppressGlobalError: true
11675
+ });
11676
+ }
11677
+ };
11678
+
11679
+ // src/features/referral/data/ReferralVisit.ts
11680
+ var ReferralVisit = class extends AbstractApiData {
11681
+ static {
11682
+ __name(this, "ReferralVisit");
11683
+ }
11684
+ rehydrate(data) {
11685
+ super.rehydrate(data);
11686
+ return this;
11687
+ }
11688
+ createJsonApi(data) {
11689
+ return {
11690
+ data: {
11691
+ type: Modules.ReferralVisit.name,
11692
+ attributes: { referralCode: data.referralCode }
11693
+ }
11694
+ };
11695
+ }
11696
+ };
11697
+
11698
+ // src/features/referral/data/ReferralAdminSummary.ts
11699
+ var ReferralAdminSummary = class extends AbstractApiData {
11700
+ static {
11701
+ __name(this, "ReferralAdminSummary");
11702
+ }
11703
+ _window;
11704
+ _visits;
11705
+ _invitesSent;
11706
+ _signups;
11707
+ _paying;
11708
+ _creditsGiven;
11709
+ _sharingCompanies;
11710
+ _eligibleCompanies;
11711
+ get window() {
11712
+ return this._window ?? "";
11713
+ }
11714
+ get visits() {
11715
+ return this._visits ?? 0;
11716
+ }
11717
+ get invitesSent() {
11718
+ return this._invitesSent ?? 0;
11719
+ }
11720
+ get signups() {
11721
+ return this._signups ?? 0;
11722
+ }
11723
+ get paying() {
11724
+ return this._paying ?? 0;
11725
+ }
11726
+ get creditsGiven() {
11727
+ return this._creditsGiven ?? 0;
11728
+ }
11729
+ get sharingCompanies() {
11730
+ return this._sharingCompanies ?? 0;
11731
+ }
11732
+ get eligibleCompanies() {
11733
+ return this._eligibleCompanies ?? 0;
11734
+ }
11735
+ rehydrate(data) {
11736
+ super.rehydrate(data);
11737
+ const attrs = data.jsonApi.attributes;
11738
+ this._window = attrs.window;
11739
+ this._visits = attrs.visits;
11740
+ this._invitesSent = attrs.invitesSent;
11741
+ this._signups = attrs.signups;
11742
+ this._paying = attrs.paying;
11743
+ this._creditsGiven = attrs.creditsGiven;
11744
+ this._sharingCompanies = attrs.sharingCompanies;
11745
+ this._eligibleCompanies = attrs.eligibleCompanies;
11746
+ return this;
11747
+ }
11748
+ /** The resource is read-only: there are no attributes to send. */
11749
+ createJsonApi(data) {
11750
+ return { data: { type: Modules.ReferralAdminSummary.name, id: data.id, attributes: {} } };
11751
+ }
11752
+ };
11753
+
11754
+ // src/features/referral/data/ReferralAdminReferrer.ts
11755
+ var ReferralAdminReferrer = class extends AbstractApiData {
11756
+ static {
11757
+ __name(this, "ReferralAdminReferrer");
11758
+ }
11759
+ _name;
11760
+ _email;
11761
+ _visits;
11762
+ _invitesSent;
11763
+ _signupsLink;
11764
+ _signupsDirect;
11765
+ _paying;
11766
+ _creditsEarned;
11767
+ _lastInviteAt;
11768
+ get name() {
11769
+ return this._name ?? "";
11770
+ }
11771
+ get email() {
11772
+ return this._email ?? "";
11773
+ }
11774
+ get visits() {
11775
+ return this._visits ?? 0;
11776
+ }
11777
+ get invitesSent() {
11778
+ return this._invitesSent ?? 0;
11779
+ }
11780
+ get signupsLink() {
11781
+ return this._signupsLink ?? 0;
11782
+ }
11783
+ get signupsDirect() {
11784
+ return this._signupsDirect ?? 0;
11785
+ }
11786
+ get paying() {
11787
+ return this._paying ?? 0;
11788
+ }
11789
+ get creditsEarned() {
11790
+ return this._creditsEarned ?? 0;
11791
+ }
11792
+ get lastInviteAt() {
11793
+ return this._lastInviteAt;
11794
+ }
11795
+ rehydrate(data) {
11796
+ super.rehydrate(data);
11797
+ const attrs = data.jsonApi.attributes;
11798
+ this._name = attrs.name;
11799
+ this._email = attrs.email;
11800
+ this._visits = attrs.visits;
11801
+ this._invitesSent = attrs.invitesSent;
11802
+ this._signupsLink = attrs.signupsLink;
11803
+ this._signupsDirect = attrs.signupsDirect;
11804
+ this._paying = attrs.paying;
11805
+ this._creditsEarned = attrs.creditsEarned;
11806
+ this._lastInviteAt = attrs.lastInviteAt ? new Date(attrs.lastInviteAt) : void 0;
11807
+ return this;
11808
+ }
11809
+ /** The resource is read-only: there are no attributes to send. */
11810
+ createJsonApi(data) {
11811
+ return { data: { type: Modules.ReferralAdminReferrer.name, id: data.id, attributes: {} } };
11812
+ }
11813
+ };
11814
+
11815
+ // src/features/referral/data/ReferralAdminReferral.ts
11816
+ var ReferralAdminReferral = class extends AbstractApiData {
11817
+ static {
11818
+ __name(this, "ReferralAdminReferral");
11819
+ }
11820
+ _name;
11821
+ _email;
11822
+ _referrerName;
11823
+ _referrerEmail;
11824
+ _source;
11825
+ _status;
11826
+ _referredAt;
11827
+ _completedAt;
11828
+ _tokensAwarded;
11829
+ get name() {
11830
+ return this._name ?? "";
11831
+ }
11832
+ get email() {
11833
+ return this._email ?? "";
11834
+ }
11835
+ get referrerName() {
11836
+ return this._referrerName ?? "";
11837
+ }
11838
+ get referrerEmail() {
11839
+ return this._referrerEmail ?? "";
11840
+ }
11841
+ get source() {
11842
+ return this._source ?? "";
11843
+ }
11844
+ get status() {
11845
+ return this._status ?? "";
11846
+ }
11847
+ get referredAt() {
11848
+ return this._referredAt ?? /* @__PURE__ */ new Date(0);
11849
+ }
11850
+ get completedAt() {
11851
+ return this._completedAt;
11852
+ }
11853
+ get tokensAwarded() {
11854
+ return this._tokensAwarded;
11855
+ }
11856
+ rehydrate(data) {
11857
+ super.rehydrate(data);
11858
+ const attrs = data.jsonApi.attributes;
11859
+ this._name = attrs.name;
11860
+ this._email = attrs.email;
11861
+ this._referrerName = attrs.referrerName;
11862
+ this._referrerEmail = attrs.referrerEmail;
11863
+ this._source = attrs.source;
11864
+ this._status = attrs.status;
11865
+ this._referredAt = attrs.referredAt ? new Date(attrs.referredAt) : void 0;
11866
+ this._completedAt = attrs.completedAt ? new Date(attrs.completedAt) : void 0;
11867
+ this._tokensAwarded = attrs.tokensAwarded ?? void 0;
11868
+ return this;
11869
+ }
11870
+ /** The resource is read-only: there are no attributes to send. */
11871
+ createJsonApi(data) {
11872
+ return { data: { type: Modules.ReferralAdminReferral.name, id: data.id, attributes: {} } };
11873
+ }
11874
+ };
11875
+
11876
+ // src/features/referral/data/ReferralAdminService.ts
11877
+ var ReferralAdminService = class extends AbstractService {
11878
+ static {
11879
+ __name(this, "ReferralAdminService");
11880
+ }
11881
+ /** Headline tiles: one row per window (`current`, plus `previous` unless the period is `all`). */
11882
+ static async getSummary(params) {
11883
+ const endpoint = new EndpointCreator({ endpoint: Modules.ReferralAdminSummary });
11884
+ endpoint.addAdditionalParam("period", params.period);
11885
+ return this.callApi({
11886
+ type: Modules.ReferralAdminSummary,
11887
+ method: "GET" /* GET */,
11888
+ endpoint: endpoint.generate()
11889
+ });
11890
+ }
11891
+ /** The referrers ranking, ordered by the allowlisted sort. */
11892
+ static async getReferrers(params) {
11893
+ const endpoint = new EndpointCreator({ endpoint: Modules.ReferralAdminReferrer });
11894
+ endpoint.addAdditionalParam("period", params.period);
11895
+ endpoint.addAdditionalParam("sort", params.sort);
11896
+ return this.callApi({
11897
+ type: Modules.ReferralAdminReferrer,
11898
+ method: "GET" /* GET */,
11899
+ endpoint: endpoint.generate()
11900
+ });
11901
+ }
11902
+ /** Every referral in the period, newest first. */
11903
+ static async getReferrals(params) {
11904
+ const endpoint = new EndpointCreator({ endpoint: Modules.ReferralAdminReferral });
11905
+ endpoint.addAdditionalParam("period", params.period);
11906
+ return this.callApi({
11907
+ type: Modules.ReferralAdminReferral,
11908
+ method: "GET" /* GET */,
11909
+ endpoint: endpoint.generate()
11647
11910
  });
11648
11911
  }
11649
11912
  };
@@ -11662,6 +11925,27 @@ var ReferralStatsModule = /* @__PURE__ */ __name((factory) => factory({
11662
11925
  model: ReferralStats
11663
11926
  }), "ReferralStatsModule");
11664
11927
 
11928
+ // src/features/referral/referral-admin.modules.ts
11929
+ import { GiftIcon } from "lucide-react";
11930
+ var referralAdminModules = /* @__PURE__ */ __name((factory) => ({
11931
+ ReferralVisit: factory({ name: "referrals/visits", model: ReferralVisit }),
11932
+ ReferralAdminSummary: factory({
11933
+ name: "referrals/administration/summary",
11934
+ model: ReferralAdminSummary,
11935
+ icon: GiftIcon
11936
+ }),
11937
+ ReferralAdminReferrer: factory({
11938
+ name: "referrals/administration/referrers",
11939
+ model: ReferralAdminReferrer,
11940
+ icon: GiftIcon
11941
+ }),
11942
+ ReferralAdminReferral: factory({
11943
+ name: "referrals/administration/referrals",
11944
+ model: ReferralAdminReferral,
11945
+ icon: GiftIcon
11946
+ })
11947
+ }), "referralAdminModules");
11948
+
11665
11949
  // src/features/tokenusage/tokenusage-admin.module.ts
11666
11950
  import { CoinsIcon } from "lucide-react";
11667
11951
 
@@ -12966,8 +13250,14 @@ export {
12966
13250
  RbacMatrixModule,
12967
13251
  ReferralStats,
12968
13252
  ReferralService,
13253
+ ReferralVisit,
13254
+ ReferralAdminSummary,
13255
+ ReferralAdminReferrer,
13256
+ ReferralAdminReferral,
13257
+ ReferralAdminService,
12969
13258
  ReferralModule,
12970
13259
  ReferralStatsModule,
13260
+ referralAdminModules,
12971
13261
  TokenUsageAdminBreakdown,
12972
13262
  TokenUsageAdminSummary,
12973
13263
  TokenUsageAdminTimeline,
@@ -12991,4 +13281,4 @@ export {
12991
13281
  AuditLogService,
12992
13282
  AuditLogModule
12993
13283
  };
12994
- //# sourceMappingURL=chunk-6HFRXEF5.mjs.map
13284
+ //# sourceMappingURL=chunk-BGLOFZ3K.mjs.map