@softure-ai/billing 0.1.6 → 0.1.8

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 (102) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +75 -16
  3. package/dist/contract.d.ts +19 -0
  4. package/dist/contract.d.ts.map +1 -1
  5. package/dist/contract.js +1 -0
  6. package/dist/contract.js.map +1 -1
  7. package/dist/fields.d.ts +2 -0
  8. package/dist/fields.d.ts.map +1 -1
  9. package/dist/fields.js +2 -0
  10. package/dist/fields.js.map +1 -1
  11. package/dist/index.d.ts +19 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +4 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/mailing/reminder-mail.d.ts +8 -2
  16. package/dist/mailing/reminder-mail.d.ts.map +1 -1
  17. package/dist/mailing/reminder-mail.js +6 -1
  18. package/dist/mailing/reminder-mail.js.map +1 -1
  19. package/dist/messages/en.d.ts +17 -0
  20. package/dist/messages/en.d.ts.map +1 -1
  21. package/dist/messages/en.js +17 -0
  22. package/dist/messages/en.js.map +1 -1
  23. package/dist/messages/index.d.ts +36 -2
  24. package/dist/messages/index.d.ts.map +1 -1
  25. package/dist/messages/index.js.map +1 -1
  26. package/dist/messages/pl.d.ts.map +1 -1
  27. package/dist/messages/pl.js +17 -0
  28. package/dist/messages/pl.js.map +1 -1
  29. package/dist/next/actions.d.ts +8 -1
  30. package/dist/next/actions.d.ts.map +1 -1
  31. package/dist/next/actions.js +37 -1
  32. package/dist/next/actions.js.map +1 -1
  33. package/dist/next/index.d.ts +1 -1
  34. package/dist/next/index.d.ts.map +1 -1
  35. package/dist/next/index.js +1 -1
  36. package/dist/next/index.js.map +1 -1
  37. package/dist/next/pages.d.ts +13 -3
  38. package/dist/next/pages.d.ts.map +1 -1
  39. package/dist/next/pages.js +25 -8
  40. package/dist/next/pages.js.map +1 -1
  41. package/dist/schema.d.ts +109 -0
  42. package/dist/schema.d.ts.map +1 -1
  43. package/dist/schema.js +10 -2
  44. package/dist/schema.js.map +1 -1
  45. package/dist/scripts/entitlement-scripts.d.ts +2 -0
  46. package/dist/scripts/entitlement-scripts.d.ts.map +1 -1
  47. package/dist/scripts/entitlement-scripts.js +17 -5
  48. package/dist/scripts/entitlement-scripts.js.map +1 -1
  49. package/dist/server/entitlements.d.ts +23 -6
  50. package/dist/server/entitlements.d.ts.map +1 -1
  51. package/dist/server/entitlements.js +37 -6
  52. package/dist/server/entitlements.js.map +1 -1
  53. package/dist/server/grants.d.ts +13 -2
  54. package/dist/server/grants.d.ts.map +1 -1
  55. package/dist/server/grants.js +11 -2
  56. package/dist/server/grants.js.map +1 -1
  57. package/dist/server/health.d.ts.map +1 -1
  58. package/dist/server/health.js +2 -1
  59. package/dist/server/health.js.map +1 -1
  60. package/dist/server/index.d.ts +3 -2
  61. package/dist/server/index.d.ts.map +1 -1
  62. package/dist/server/index.js +1 -0
  63. package/dist/server/index.js.map +1 -1
  64. package/dist/server/privacy.d.ts +9 -0
  65. package/dist/server/privacy.d.ts.map +1 -1
  66. package/dist/server/privacy.js +19 -6
  67. package/dist/server/privacy.js.map +1 -1
  68. package/dist/server/trials.d.ts +22 -0
  69. package/dist/server/trials.d.ts.map +1 -0
  70. package/dist/server/trials.js +60 -0
  71. package/dist/server/trials.js.map +1 -0
  72. package/dist/ui/index.d.ts +1 -0
  73. package/dist/ui/index.d.ts.map +1 -1
  74. package/dist/ui/index.js +1 -0
  75. package/dist/ui/index.js.map +1 -1
  76. package/dist/ui/trial-form.d.ts +16 -0
  77. package/dist/ui/trial-form.d.ts.map +1 -0
  78. package/dist/ui/trial-form.js +25 -0
  79. package/dist/ui/trial-form.js.map +1 -0
  80. package/migrations/0010_record_trial_extensions_and_index_foreign_keys.sql +27 -0
  81. package/module.json +2 -2
  82. package/package.json +1 -1
  83. package/src/contract.ts +28 -0
  84. package/src/fields.ts +2 -0
  85. package/src/index.ts +7 -3
  86. package/src/mailing/reminder-mail.ts +14 -3
  87. package/src/messages/en.ts +17 -0
  88. package/src/messages/index.ts +2 -2
  89. package/src/messages/pl.ts +17 -0
  90. package/src/next/actions.ts +35 -2
  91. package/src/next/index.ts +9 -1
  92. package/src/next/pages.tsx +41 -6
  93. package/src/schema.ts +11 -2
  94. package/src/scripts/entitlement-scripts.ts +18 -5
  95. package/src/server/entitlements.ts +60 -6
  96. package/src/server/grants.ts +24 -3
  97. package/src/server/health.ts +2 -1
  98. package/src/server/index.ts +3 -0
  99. package/src/server/privacy.ts +29 -6
  100. package/src/server/trials.ts +70 -0
  101. package/src/ui/index.ts +1 -0
  102. package/src/ui/trial-form.tsx +80 -0
@@ -46,6 +46,7 @@ export const en = {
46
46
  empty: "No plans are available yet.",
47
47
  },
48
48
  payment: {
49
+ heading: "Payment",
49
50
  title: "Choose a plan",
50
51
  lead: "Pick the plan that suits you. Paid access starts when your current access ends.",
51
52
  plansLabel: "Plans",
@@ -67,6 +68,7 @@ export const en = {
67
68
  lifetime: "You have lifetime access: there is nothing left to pay for.",
68
69
  },
69
70
  admin: {
71
+ heading: "Billing",
70
72
  title: "Grant access",
71
73
  lead: "Grant a plan to an account once its payment has arrived. A paid period starts when the account's current access ends.",
72
74
  email: "Account email",
@@ -76,6 +78,15 @@ export const en = {
76
78
  granted: "{email} now has {plan}.",
77
79
  grantedUntil: "{email} now has {plan}, with access until {date}.",
78
80
  noPlans: "There are no plans to grant: add them to billing({ plans }).",
81
+ trial: {
82
+ title: "Extend a trial",
83
+ lead: "Give an account a longer trial for free, e.g. an invited user. It is not paid access: the account keeps its paid periods, and the trial lasts through the day you choose.",
84
+ email: "Email of the account to extend",
85
+ lastDay: "Last day of the trial",
86
+ submit: "Extend trial",
87
+ pending: "Extending…",
88
+ extended: "{email} now has a trial until {date}.",
89
+ },
79
90
  requests: {
80
91
  title: "Invoice requests",
81
92
  lead: "Requests sent from the payment page. Grant the plan once the invoice is paid, or dismiss the request.",
@@ -119,6 +130,10 @@ export const en = {
119
130
  revoke: "Revoke",
120
131
  revoking: "Revoking…",
121
132
  revokeLabel: "Revoke {plan} granted on {date}",
133
+ trialExtended: "Trial extended",
134
+ trialUntil: "Trial until {date}",
135
+ extendedOn: "Extended on {date}",
136
+ trialWasUntil: "The trial was until {date}",
122
137
  },
123
138
  },
124
139
  errors: {
@@ -135,6 +150,8 @@ export const en = {
135
150
  lifetime_active: "This account already has lifetime access: there is nothing to pay for or grant.",
136
151
  request_closed: "This request was granted or dismissed already.",
137
152
  grant_revoked: "This grant was revoked already.",
153
+ trial_not_extended: "The trial already lasts through this day or longer.",
154
+ day_invalid: "Enter a date, e.g. 2026-11-30.",
138
155
  },
139
156
  security: {
140
157
  rate_limited: "Too many attempts. Try again later.",
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;QACtH,KAAK,EAAE,cAAc;KACtB;IACD,MAAM,EAAE;QACN,WAAW,EAAE,sEAAsE;QACnF,UAAU,EAAE,kEAAkE;QAC9E,UAAU,EAAE,kGAAkG;QAC9G,SAAS,EAAE,8FAA8F;QACzG,UAAU,EAAE,eAAe;QAC3B,KAAK,EAAE,cAAc;KACtB;IACD,YAAY,EAAE;QACZ,WAAW,EAAE;YACX,OAAO,EAAE,2BAA2B;YACpC,IAAI,EAAE,uGAAuG;SAC9G;QACD,UAAU,EAAE;YACV,OAAO,EAAE,4BAA4B;YACrC,IAAI,EAAE,mGAAmG;SAC1G;QACD,UAAU,EAAE;YACV,OAAO,EAAE,sBAAsB;YAC/B,IAAI,EAAE,kGAAkG;SACzG;QACD,SAAS,EAAE;YACT,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE,8FAA8F;SACrG;KACF;IACD,OAAO,EAAE;QACP,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;YACrG,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;YAC1G,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;YAC/G,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;YAC1G,QAAQ,EAAE,kBAAkB;SAC7B;QACD,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,6BAA6B;KACrC;IACD,OAAO,EAAE;QACP,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,iFAAiF;QACvF,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,0BAA0B;QACrC,UAAU,EAAE,qBAAqB;QACjC,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE;YACN,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,iBAAiB;SAC3B;QACD,cAAc,EAAE,oBAAoB;QACpC,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,qIAAqI;QAChJ,eAAe,EAAE,kHAAkH;QACnI,iBAAiB,EAAE,8FAA8F;QACjH,QAAQ,EAAE,6DAA6D;KACxE;IACD,KAAK,EAAE;QACL,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,uHAAuH;QAC7H,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,yBAAyB;QAClC,YAAY,EAAE,mDAAmD;QACjE,OAAO,EAAE,8DAA8D;QACvE,QAAQ,EAAE;YACR,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,uGAAuG;YAC7G,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,qBAAqB;YAClC,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,+BAA+B;YACxC,KAAK,EAAE,iBAAiB;YACxB,SAAS,EAAE,oBAAoB;YAC/B,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,yBAAyB;YACrC,YAAY,EAAE,2CAA2C;SAC1D;QACD,OAAO,EAAE;YACP,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,sFAAsF;YAC5F,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,oBAAoB;YAClC,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE,yBAAyB;YACjC,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,8BAA8B;YACxC,SAAS,EAAE,mBAAmB;YAC9B,UAAU,EAAE,gCAAgC;YAC5C,MAAM,EAAE,yBAAyB;YACjC,MAAM,EAAE,4BAA4B;YACpC,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,oCAAoC;YAC7C,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,mBAAmB;YAC9B,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,oBAAoB;YAChC,cAAc,EAAE,yBAAyB;YACzC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE,iCAAiC;SAC/C;KACF;IACD,MAAM,EAAE;QACN,OAAO,EAAE;YACP,SAAS,EAAE,2DAA2D;YACtE,eAAe,EAAE,oCAAoC;YACrD,iBAAiB,EAAE,qCAAqC;YACxD,YAAY,EAAE,uDAAuD;YACrE,uBAAuB,EAAE,kCAAkC;YAC3D,sBAAsB,EAAE,qBAAqB;YAC7C,sBAAsB,EAAE,+BAA+B;YACvD,gCAAgC,EAAE,wDAAwD;YAC1F,cAAc,EAAE,0DAA0D;YAC1E,eAAe,EAAE,iFAAiF;YAClG,cAAc,EAAE,gDAAgD;YAChE,aAAa,EAAE,iCAAiC;SACjD;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,qCAAqC;SACpD;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,iCAAiC;SAC7C;QACD,IAAI,EAAE;YACJ,eAAe,EAAE,0DAA0D;YAC3E,UAAU,EAAE,0DAA0D;SACvE;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AdminActionErrorCode, BillingFormErrorCode, GrantFormErrorCode, PaymentFormErrorCode } from "../contract.js";
1
+ import type { AdminActionErrorCode, BillingFormErrorCode, GrantFormErrorCode, PaymentFormErrorCode, TrialFormErrorCode } from "../contract.js";
2
2
  import { en } from "./en.js";
3
3
  export type BillingMessages = typeof en;
4
4
  /** Complete default dictionaries; apps pass partial overrides per locale. */
@@ -76,6 +76,7 @@ export declare const billingMessages: {
76
76
  empty: string;
77
77
  };
78
78
  payment: {
79
+ heading: string;
79
80
  title: string;
80
81
  lead: string;
81
82
  plansLabel: string;
@@ -97,6 +98,7 @@ export declare const billingMessages: {
97
98
  lifetime: string;
98
99
  };
99
100
  admin: {
101
+ heading: string;
100
102
  title: string;
101
103
  lead: string;
102
104
  email: string;
@@ -106,6 +108,15 @@ export declare const billingMessages: {
106
108
  granted: string;
107
109
  grantedUntil: string;
108
110
  noPlans: string;
111
+ trial: {
112
+ title: string;
113
+ lead: string;
114
+ email: string;
115
+ lastDay: string;
116
+ submit: string;
117
+ pending: string;
118
+ extended: string;
119
+ };
109
120
  requests: {
110
121
  title: string;
111
122
  lead: string;
@@ -149,6 +160,10 @@ export declare const billingMessages: {
149
160
  revoke: string;
150
161
  revoking: string;
151
162
  revokeLabel: string;
163
+ trialExtended: string;
164
+ trialUntil: string;
165
+ extendedOn: string;
166
+ trialWasUntil: string;
152
167
  };
153
168
  };
154
169
  errors: {
@@ -165,6 +180,8 @@ export declare const billingMessages: {
165
180
  lifetime_active: string;
166
181
  request_closed: string;
167
182
  grant_revoked: string;
183
+ trial_not_extended: string;
184
+ day_invalid: string;
168
185
  };
169
186
  security: {
170
187
  rate_limited: string;
@@ -251,6 +268,7 @@ export declare const billingMessages: {
251
268
  empty: string;
252
269
  };
253
270
  payment: {
271
+ heading: string;
254
272
  title: string;
255
273
  lead: string;
256
274
  plansLabel: string;
@@ -272,6 +290,7 @@ export declare const billingMessages: {
272
290
  lifetime: string;
273
291
  };
274
292
  admin: {
293
+ heading: string;
275
294
  title: string;
276
295
  lead: string;
277
296
  email: string;
@@ -281,6 +300,15 @@ export declare const billingMessages: {
281
300
  granted: string;
282
301
  grantedUntil: string;
283
302
  noPlans: string;
303
+ trial: {
304
+ title: string;
305
+ lead: string;
306
+ email: string;
307
+ lastDay: string;
308
+ submit: string;
309
+ pending: string;
310
+ extended: string;
311
+ };
284
312
  requests: {
285
313
  title: string;
286
314
  lead: string;
@@ -324,6 +352,10 @@ export declare const billingMessages: {
324
352
  revoke: string;
325
353
  revoking: string;
326
354
  revokeLabel: string;
355
+ trialExtended: string;
356
+ trialUntil: string;
357
+ extendedOn: string;
358
+ trialWasUntil: string;
327
359
  };
328
360
  };
329
361
  errors: {
@@ -340,6 +372,8 @@ export declare const billingMessages: {
340
372
  lifetime_active: string;
341
373
  request_closed: string;
342
374
  grant_revoked: string;
375
+ trial_not_extended: string;
376
+ day_invalid: string;
343
377
  };
344
378
  security: {
345
379
  rate_limited: string;
@@ -355,5 +389,5 @@ export declare const billingMessages: {
355
389
  };
356
390
  };
357
391
  /** The copy for an error code; an unknown code gets the generic failure. */
358
- export declare function getBillingErrorMessage(messages: BillingMessages, code: BillingFormErrorCode | PaymentFormErrorCode | GrantFormErrorCode | AdminActionErrorCode): string;
392
+ export declare function getBillingErrorMessage(messages: BillingMessages, code: BillingFormErrorCode | PaymentFormErrorCode | GrantFormErrorCode | TrialFormErrorCode | AdminActionErrorCode): string;
359
393
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3H,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,MAAM,MAAM,eAAe,GAAG,OAAO,EAAE,CAAC;AAExC,6EAA6E;AAC7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC;AAE1C,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,MAAM,CAOvK"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/I,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,MAAM,MAAM,eAAe,GAAG,OAAO,EAAE,CAAC;AAExC,6EAA6E;AAC7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC;AAE1C,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,MAAM,CAO5L"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE1C,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,QAAyB,EAAE,IAA6F;IAC7J,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAoE,CAAC;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1H,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE1C,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,QAAyB,EAAE,IAAkH;IAClL,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAoE,CAAC;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1H,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,EAAE,EAAE,OAAO,EAqJvB,CAAC"}
1
+ {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,EAAE,EAAE,OAAO,EAsKvB,CAAC"}
@@ -46,6 +46,7 @@ export const pl = {
46
46
  empty: "Nie ma jeszcze dostępnych planów.",
47
47
  },
48
48
  payment: {
49
+ heading: "Płatność",
49
50
  title: "Wybierz plan",
50
51
  lead: "Wybierz plan dla siebie. Płatny dostęp zaczyna się, gdy skończy się obecny.",
51
52
  plansLabel: "Plany",
@@ -67,6 +68,7 @@ export const pl = {
67
68
  lifetime: "Masz dostęp dożywotni: nie ma już za co płacić.",
68
69
  },
69
70
  admin: {
71
+ heading: "Rozliczenia",
70
72
  title: "Nadaj dostęp",
71
73
  lead: "Nadaj plan kontu, gdy wpłynie płatność. Płatny okres zaczyna się, gdy skończy się obecny dostęp konta.",
72
74
  email: "E-mail konta",
@@ -76,6 +78,15 @@ export const pl = {
76
78
  granted: "{email} ma teraz {plan}.",
77
79
  grantedUntil: "{email} ma teraz {plan}, z dostępem do {date}.",
78
80
  noPlans: "Nie ma planów do nadania: dodaj je w billing({ plans }).",
81
+ trial: {
82
+ title: "Przedłuż okres próbny",
83
+ lead: "Daj kontu dłuższy okres próbny za darmo, np. zaproszonej osobie. To nie jest płatny dostęp: konto zachowuje opłacone okresy, a okres próbny trwa do końca wybranego dnia.",
84
+ email: "E-mail konta do przedłużenia",
85
+ lastDay: "Ostatni dzień okresu próbnego",
86
+ submit: "Przedłuż okres próbny",
87
+ pending: "Przedłużanie…",
88
+ extended: "{email} ma teraz okres próbny do {date}.",
89
+ },
79
90
  requests: {
80
91
  title: "Prośby o fakturę",
81
92
  lead: "Prośby wysłane ze strony płatności. Nadaj plan, gdy faktura zostanie opłacona, albo odrzuć prośbę.",
@@ -119,6 +130,10 @@ export const pl = {
119
130
  revoke: "Cofnij",
120
131
  revoking: "Cofanie…",
121
132
  revokeLabel: "Cofnij {plan} nadany {date}",
133
+ trialExtended: "Przedłużony okres próbny",
134
+ trialUntil: "Okres próbny do {date}",
135
+ extendedOn: "Przedłużono {date}",
136
+ trialWasUntil: "Wcześniej okres próbny do {date}",
122
137
  },
123
138
  },
124
139
  errors: {
@@ -135,6 +150,8 @@ export const pl = {
135
150
  lifetime_active: "To konto ma już dostęp dożywotni: nie ma za co płacić ani czego nadawać.",
136
151
  request_closed: "Ta prośba została już obsłużona lub odrzucona.",
137
152
  grant_revoked: "Ten dostęp został już cofnięty.",
153
+ trial_not_extended: "Okres próbny trwa już do tego dnia albo dłużej.",
154
+ day_invalid: "Wpisz datę, np. 2026-11-30.",
138
155
  },
139
156
  security: {
140
157
  rate_limited: "Zbyt wiele prób. Spróbuj później.",
@@ -1 +1 @@
1
- {"version":3,"file":"pl.js","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pl.js","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AdminActionState, GrantFormState, PaymentFormState } from "../contract.js";
1
+ import type { AdminActionState, GrantFormState, PaymentFormState, TrialFormState } from "../contract.js";
2
2
  /**
3
3
  * Starts paying for the plan of the form. Without a session it redirects to the login page and
4
4
  * back to the payment page. A hosted checkout is a redirect; a manual request answers `requested`.
@@ -10,6 +10,13 @@ export declare function startPaymentAction(_previous: PaymentFormState, formData
10
10
  * before the form is read. An account with lifetime access is refused.
11
11
  */
12
12
  export declare function grantPlanAction(_previous: GrantFormState, formData: FormData): Promise<GrantFormState>;
13
+ /**
14
+ * Extends the trial of the account with the form's email through the form's last day (the trial
15
+ * ends at the start of the next day in the app's time zone) and records it in the account's history.
16
+ * Only for the role of `billing({ adminRole })`, checked from the session before the form is read.
17
+ * Never writes paid access.
18
+ */
19
+ export declare function extendTrialAction(_previous: TrialFormState, formData: FormData): Promise<TrialFormState>;
13
20
  /** Grants the plan of the form's open request and closes it (admin role). */
14
21
  export declare function grantRequestAction(_previous: AdminActionState, formData: FormData): Promise<AdminActionState>;
15
22
  /** Closes the form's open request without a grant (admin role). */
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAwB,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwB/G;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBnH;AAWD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC5G;AAyBD,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMnH;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAErH;AAED,oFAAoF;AACpF,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMlH;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAelH"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAwB,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyB/H;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBnH;AAWD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC5G;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAuB9G;AAyBD,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMnH;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAErH;AAED,oFAAoF;AACpF,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMlH;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAelH"}
@@ -4,12 +4,14 @@ import { errorLogLabel, formatMessage, safeError } from "@softure-ai/core";
4
4
  import { getSoftureConfig } from "@softure-ai/core/next";
5
5
  import { revalidatePath } from "next/cache";
6
6
  import { redirect } from "next/navigation";
7
- import { ACCOUNT_PARAM, EMAIL_FIELD, GRANT_FIELD, INVOICE_FIELDS, PLAN_FIELD, REQUEST_FIELD } from "../fields.js";
7
+ import { getStartOfDay, parseDay } from "../calendar.js";
8
+ import { ACCOUNT_PARAM, EMAIL_FIELD, GRANT_FIELD, INVOICE_FIELDS, PLAN_FIELD, REQUEST_FIELD, TRIAL_LAST_DAY_FIELD } from "../fields.js";
8
9
  import { findPlan, getLocalizedText } from "../plans.js";
9
10
  import { grantPaymentRequest, grantPlanManually, revokeManualGrant } from "../server/grants.js";
10
11
  import { getBillingMessages, getBillingOptions, getBillingRoutes } from "../server/options.js";
11
12
  import { findAccountByEmail, getBillingPlans, startPayment } from "../server/plans.js";
12
13
  import { dismissPaymentRequest } from "../server/requests.js";
14
+ import { extendTrialManually } from "../server/trials.js";
13
15
  import { formatLastDay } from "../ui/format.js";
14
16
  import { getBillingContext } from "./context.js";
15
17
  /** Longer values are cut: the server functions refuse them anyway, and nothing huge is echoed back. */
@@ -94,6 +96,40 @@ export async function grantPlanAction(_previous, formData) {
94
96
  const error = result.error === "billing.request_closed" ? "billing.account_unknown" : result.error;
95
97
  return { status: "error", error, ...echo };
96
98
  }
99
+ /**
100
+ * Extends the trial of the account with the form's email through the form's last day (the trial
101
+ * ends at the start of the next day in the app's time zone) and records it in the account's history.
102
+ * Only for the role of `billing({ adminRole })`, checked from the session before the form is read.
103
+ * Never writes paid access.
104
+ */
105
+ export async function extendTrialAction(_previous, formData) {
106
+ const config = getSoftureConfig();
107
+ const admin = await authorizeAdmin(config);
108
+ if (!admin.ok)
109
+ return { status: "error", error: admin.error };
110
+ const email = readText(formData, EMAIL_FIELD).trim();
111
+ const lastDay = readText(formData, TRIAL_LAST_DAY_FIELD).trim();
112
+ const echo = { email, lastDay };
113
+ const day = parseDay(lastDay);
114
+ if (day === null)
115
+ return { status: "error", error: "billing.day_invalid", ...echo };
116
+ const until = getStartOfDay(day + 1, config.timezone);
117
+ try {
118
+ const ctx = await getBillingContext(config);
119
+ const account = await findAccountByEmail(ctx, email);
120
+ if (account === null)
121
+ return { status: "error", error: "billing.account_unknown", ...echo };
122
+ const result = await extendTrialManually(ctx, { userId: account.id, until, adminId: admin.value.id });
123
+ if (!result.ok)
124
+ return { status: "error", error: result.error, ...echo };
125
+ refreshAdminPage(config);
126
+ const notice = formatMessage(getBillingMessages(config).admin.trial.extended, { email: account.email, date: formatLastDay(until, config.locale, config.timezone) });
127
+ return { status: "extended", notice };
128
+ }
129
+ catch (error) {
130
+ return { status: "error", error: reportFailure("extending a trial", error), ...echo };
131
+ }
132
+ }
97
133
  /** Runs one admin change on the row the form names: role first, then the change, then a refresh. */
98
134
  async function runAdminChange(formData, { operation, field, change }) {
99
135
  const config = getSoftureConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export { CurrentAccessBadge, type CurrentAccessBadgeProps, CurrentAccessNotice, type CurrentAccessNoticeProps } from "./access.js";
2
- export { dismissRequestAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
2
+ export { dismissRequestAction, extendTrialAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction, } from "./actions.js";
3
3
  export { getBillingContext } from "./context.js";
4
4
  export { getCurrentEntitlement, requireWriteAccess, type WriteAccess } from "./current-entitlement.js";
5
5
  export { BillingAdminPage, type BillingAdminPageProps, PaymentPage, type PaymentPageProps } from "./pages.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACnI,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACnI,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // their actions, and the Stripe webhook route, wired to the registered configuration
4
4
  // (docs/02-module-standard.md §8).
5
5
  export { CurrentAccessBadge, CurrentAccessNotice } from "./access.js";
6
- export { dismissRequestAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
6
+ export { dismissRequestAction, extendTrialAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction, } from "./actions.js";
7
7
  export { getBillingContext } from "./context.js";
8
8
  export { getCurrentEntitlement, requireWriteAccess } from "./current-entitlement.js";
9
9
  export { BillingAdminPage, PaymentPage } from "./pages.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,+FAA+F;AAC/F,qFAAqF;AACrF,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAgC,mBAAmB,EAAiC,MAAM,aAAa,CAAC;AACnI,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAA8B,WAAW,EAAyB,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,+FAA+F;AAC/F,qFAAqF;AACrF,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAgC,mBAAmB,EAAiC,MAAM,aAAa,CAAC;AACnI,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAA8B,WAAW,EAAyB,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,6 +1,11 @@
1
1
  type SearchParams = Promise<Record<string, string | string[] | undefined>>;
2
2
  export interface PaymentPageProps {
3
3
  readonly searchParams?: SearchParams;
4
+ /**
5
+ * The page's `<h1>`, first in `<main>`: `payment.heading` of the messages by default, this text
6
+ * instead, or none with `null` (for an app whose frame renders the page heading).
7
+ */
8
+ readonly heading?: string | null;
4
9
  }
5
10
  /**
6
11
  * The plans and, with `?plan=<id>`, the order: the plan's price and the provider's form (the
@@ -9,16 +14,21 @@ export interface PaymentPageProps {
9
14
  * A hosted checkout comes back with `?checkout=success` or `?checkout=cancelled`, shown as a notice
10
15
  * (the access itself changes when the provider's webhook confirms the payment).
11
16
  */
12
- export declare function PaymentPage({ searchParams }: PaymentPageProps): Promise<import("react").JSX.Element>;
17
+ export declare function PaymentPage({ searchParams, heading }: PaymentPageProps): Promise<import("react").JSX.Element>;
13
18
  export interface BillingAdminPageProps {
14
19
  readonly searchParams?: SearchParams;
20
+ /**
21
+ * The page's `<h1>`, first in `<main>`: `admin.heading` of the messages by default, this text
22
+ * instead, or none with `null` (for an app whose frame renders the page heading).
23
+ */
24
+ readonly heading?: string | null;
15
25
  }
16
26
  /**
17
27
  * The admin page of manual payments: the open invoice requests (grant or dismiss each), the grant
18
- * form, and an account's history (`?account=<id>`, reached by the email lookup or a request's
28
+ * form, the trial form (a free, longer trial), and an account's history (`?account=<id>`, reached by the email lookup or a request's
19
29
  * link) with its access and a revoke button on each active manual grant. Anyone without the role
20
30
  * of `billing({ adminRole })`, signed in or not, gets Next's "not found".
21
31
  */
22
- export declare function BillingAdminPage({ searchParams }: BillingAdminPageProps): Promise<import("react").JSX.Element>;
32
+ export declare function BillingAdminPage({ searchParams, heading }: BillingAdminPageProps): Promise<import("react").JSX.Element>;
23
33
  export {};
24
34
  //# sourceMappingURL=pages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"AA+BA,KAAK,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAiBD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,EAAE,YAAY,EAAE,EAAE,gBAAgB,wCAqEnE;AAqFD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,YAAY,EAAE,EAAE,qBAAqB,wCA2C7E"}
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"AAgCA,KAAK,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAkBD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,gBAAgB,wCAsE5E;AAuGD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,qBAAqB,wCA+CtF"}
@@ -22,13 +22,15 @@ import { AccountLookup, GrantHistory } from "../ui/grant-history.js";
22
22
  import { PaymentForm } from "../ui/payment-form.js";
23
23
  import { PaymentRequestList } from "../ui/payment-requests.js";
24
24
  import { PricingTiles } from "../ui/pricing-tiles.js";
25
+ import { TrialForm } from "../ui/trial-form.js";
25
26
  import { CurrentAccessBadge } from "./access.js";
26
- import { dismissRequestAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
27
+ import { dismissRequestAction, extendTrialAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
27
28
  import { getBillingContext } from "./context.js";
28
29
  import { getCurrentEntitlement } from "./current-entitlement.js";
29
30
  import { getPlanPaymentHref } from "./pricing.js";
30
31
  const LAYOUT_CLASS = "sft:mx-auto sft:box-border sft:flex sft:w-full sft:flex-col sft:gap-4 sft:sm:max-w-md sft:px-4 sft:py-4";
31
32
  const STACK_CLASS = "sft:flex sft:flex-col sft:gap-4";
33
+ const HEADING_CLASS = "sft:m-0 sft:font-heading sft:text-2xl sft:font-bold sft:text-foreground";
32
34
  const LEAD_CLASS = "sft:m-0 sft:font-sans sft:text-sm sft:text-muted";
33
35
  const NOTICE_CLASS = "sft:m-0 sft:rounded-control sft:border sft:border-border-strong sft:bg-surface-raised sft:px-4 sft:py-2.5 sft:font-sans sft:text-sm sft:text-foreground";
34
36
  async function readParam(searchParams, name) {
@@ -45,7 +47,7 @@ function isCheckoutResult(value) {
45
47
  * A hosted checkout comes back with `?checkout=success` or `?checkout=cancelled`, shown as a notice
46
48
  * (the access itself changes when the provider's webhook confirms the payment).
47
49
  */
48
- export async function PaymentPage({ searchParams }) {
50
+ export async function PaymentPage({ searchParams, heading }) {
49
51
  const config = getSoftureConfig();
50
52
  const route = getBillingRoutes(config).payment;
51
53
  const planId = await readParam(searchParams, PLAN_FIELD);
@@ -61,7 +63,11 @@ export async function PaymentPage({ searchParams }) {
61
63
  const entitlement = await getCurrentEntitlement();
62
64
  // Lifetime access leaves nothing to pay for: no order form (startPayment refuses it too).
63
65
  const hasLifetime = entitlement?.status === "paid" && entitlement.endsAt === null;
64
- return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(Card, { title: copy.title, subtitle: copy.lead, children: _jsxs("div", { className: STACK_CLASS, children: [checkoutNotice === null ? null : (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-checkout": checkout, children: checkoutNotice })), _jsx("div", { children: _jsx(CurrentAccessBadge, {}) }), hasLifetime ? (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-lifetime": "true", children: copy.lifetime })) : null, _jsx(PricingTiles, { plans: plans, messages: messages, locale: config.locale, getPlanHref: (candidate) => getPlanPaymentHref(route, candidate.id), selectedPlanId: plan?.id, label: copy.plansLabel })] }) }), plan === undefined || hasLifetime ? null : (_jsx(Card, { title: copy.orderTitle, subtitle: formatMessage(copy.orderLead, { plan: planName, price: formatPrice(plan.price, config.locale), period: formatPeriod(plan.period, config.locale, messages) }), children: _jsxs("div", { className: STACK_CLASS, children: [provider.collectsInvoiceDetails ? _jsx("p", { className: LEAD_CLASS, children: formatMessage(copy.invoiceLead, { email: user.email }) }) : null, _jsx(PaymentForm, { action: startPaymentAction, planId: plan.id, planName: planName, email: user.email, collectsInvoiceDetails: provider.collectsInvoiceDetails, messages: messages, locale: config.locale }), _jsx("div", { children: _jsx(ButtonLink, { href: route, variant: "ghost", size: "sm", children: copy.changePlan }) })] }) }))] }));
66
+ return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(PageHeading, { text: heading === undefined ? copy.heading : heading }), _jsx(Card, { title: copy.title, subtitle: copy.lead, children: _jsxs("div", { className: STACK_CLASS, children: [checkoutNotice === null ? null : (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-checkout": checkout, children: checkoutNotice })), _jsx("div", { children: _jsx(CurrentAccessBadge, {}) }), hasLifetime ? (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-lifetime": "true", children: copy.lifetime })) : null, _jsx(PricingTiles, { plans: plans, messages: messages, locale: config.locale, getPlanHref: (candidate) => getPlanPaymentHref(route, candidate.id), selectedPlanId: plan?.id, label: copy.plansLabel })] }) }), plan === undefined || hasLifetime ? null : (_jsx(Card, { title: copy.orderTitle, subtitle: formatMessage(copy.orderLead, { plan: planName, price: formatPrice(plan.price, config.locale), period: formatPeriod(plan.period, config.locale, messages) }), children: _jsxs("div", { className: STACK_CLASS, children: [provider.collectsInvoiceDetails ? _jsx("p", { className: LEAD_CLASS, children: formatMessage(copy.invoiceLead, { email: user.email }) }) : null, _jsx(PaymentForm, { action: startPaymentAction, planId: plan.id, planName: planName, email: user.email, collectsInvoiceDetails: provider.collectsInvoiceDetails, messages: messages, locale: config.locale }), _jsx("div", { children: _jsx(ButtonLink, { href: route, variant: "ghost", size: "sm", children: copy.changePlan }) })] }) }))] }));
67
+ }
68
+ /** The page's `<h1>`, or nothing for `null`. */
69
+ function PageHeading({ text }) {
70
+ return text === null ? null : _jsx("h1", { className: HEADING_CLASS, children: text });
65
71
  }
66
72
  /** The plan's name in the app's locale, or its id when the config no longer has it. */
67
73
  function getPlanName(plans, planId, locale) {
@@ -105,8 +111,19 @@ function describeGrant(grant, { config, messages }) {
105
111
  function toHistoryRow(entry, context) {
106
112
  const { config, messages, plans } = context;
107
113
  const copy = messages.admin.history;
108
- const plan = getPlanName(plans, entry.planId, config.locale);
109
114
  const formatDate = (date) => formatDay(date, config.locale, config.timezone);
115
+ if (entry.source === "trial") {
116
+ const formatEnd = (end) => formatLastDay(end, config.locale, config.timezone);
117
+ return {
118
+ id: entry.id,
119
+ title: copy.trialExtended,
120
+ statusText: formatMessage(copy.trialUntil, { date: formatEnd(entry.endsAt) }),
121
+ isCurrent: entry.endsAt > context.now,
122
+ details: [formatMessage(copy.extendedOn, { date: formatDate(entry.at) }), formatMessage(copy.trialWasUntil, { date: formatEnd(entry.previousEndsAt) })],
123
+ revokeLabel: null,
124
+ };
125
+ }
126
+ const plan = getPlanName(plans, entry.planId, config.locale);
110
127
  if (entry.source === "manual") {
111
128
  const isActive = entry.status === "active";
112
129
  return {
@@ -144,23 +161,23 @@ function toHistoryRow(entry, context) {
144
161
  }
145
162
  /**
146
163
  * The admin page of manual payments: the open invoice requests (grant or dismiss each), the grant
147
- * form, and an account's history (`?account=<id>`, reached by the email lookup or a request's
164
+ * form, the trial form (a free, longer trial), and an account's history (`?account=<id>`, reached by the email lookup or a request's
148
165
  * link) with its access and a revoke button on each active manual grant. Anyone without the role
149
166
  * of `billing({ adminRole })`, signed in or not, gets Next's "not found".
150
167
  */
151
- export async function BillingAdminPage({ searchParams }) {
168
+ export async function BillingAdminPage({ searchParams, heading }) {
152
169
  const config = getSoftureConfig();
153
170
  await requireRole(getBillingOptions(config).adminRole);
154
171
  const messages = getBillingMessages(config);
155
172
  const plans = getBillingPlans(config);
156
- const context = { config, messages, plans };
157
173
  const ctx = await getBillingContext(config);
174
+ const context = { config, messages, plans, now: ctx.clock.now() };
158
175
  const requests = (await listOpenRequests(ctx)).map((request) => toRequestRow(request, context));
159
176
  const accountId = await readParam(searchParams, ACCOUNT_PARAM);
160
177
  const account = accountId === undefined ? null : await findAccountById(ctx, accountId);
161
178
  const entitlement = account === null ? null : await getEntitlement(ctx, account.id);
162
179
  const history = account === null ? [] : (await getAccountHistory(ctx, account.id)).map((entry) => toHistoryRow(entry, context));
163
180
  const planOptions = plans.map((plan) => ({ value: plan.id, label: getLocalizedText(plan.name, config.locale) }));
164
- return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(Card, { title: messages.admin.requests.title, subtitle: messages.admin.requests.lead, children: _jsx(PaymentRequestList, { requests: requests, grantAction: grantRequestAction, dismissAction: dismissRequestAction, messages: messages }) }), _jsx(Card, { title: messages.admin.title, subtitle: messages.admin.lead, children: planOptions.length === 0 ? (_jsx(EmptyState, { title: messages.admin.noPlans })) : (_jsx(GrantForm, { action: grantPlanAction, plans: planOptions, messages: messages, locale: config.locale })) }), _jsx(Card, { title: messages.admin.history.title, subtitle: messages.admin.history.lead, children: _jsxs("div", { className: STACK_CLASS, children: [_jsx(AccountLookup, { action: findAccountAction, messages: messages, locale: config.locale }), account === null ? null : (_jsxs("section", { className: STACK_CLASS, "aria-label": formatMessage(messages.admin.history.accountTitle, { email: account.email }), children: [_jsx("p", { className: LEAD_CLASS, children: formatMessage(messages.admin.history.accountTitle, { email: account.email }) }), entitlement === null ? null : (_jsx("div", { children: _jsx(AccessBadge, { entitlement: entitlement, messages: messages, locale: config.locale, timezone: config.timezone }) })), _jsx(GrantHistory, { rows: history, revokeAction: revokeGrantAction, messages: messages })] }))] }) })] }));
181
+ return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(PageHeading, { text: heading === undefined ? messages.admin.heading : heading }), _jsx(Card, { title: messages.admin.requests.title, subtitle: messages.admin.requests.lead, children: _jsx(PaymentRequestList, { requests: requests, grantAction: grantRequestAction, dismissAction: dismissRequestAction, messages: messages }) }), _jsx(Card, { title: messages.admin.title, subtitle: messages.admin.lead, children: planOptions.length === 0 ? (_jsx(EmptyState, { title: messages.admin.noPlans })) : (_jsx(GrantForm, { action: grantPlanAction, plans: planOptions, messages: messages, locale: config.locale })) }), _jsx(Card, { title: messages.admin.trial.title, subtitle: messages.admin.trial.lead, children: _jsx(TrialForm, { action: extendTrialAction, messages: messages, locale: config.locale }) }), _jsx(Card, { title: messages.admin.history.title, subtitle: messages.admin.history.lead, children: _jsxs("div", { className: STACK_CLASS, children: [_jsx(AccountLookup, { action: findAccountAction, messages: messages, locale: config.locale }), account === null ? null : (_jsxs("section", { className: STACK_CLASS, "aria-label": formatMessage(messages.admin.history.accountTitle, { email: account.email }), children: [_jsx("p", { className: LEAD_CLASS, children: formatMessage(messages.admin.history.accountTitle, { email: account.email }) }), entitlement === null ? null : (_jsx("div", { children: _jsx(AccessBadge, { entitlement: entitlement, messages: messages, locale: config.locale, timezone: config.timezone }) })), _jsx(GrantHistory, { rows: history, revokeAction: revokeGrantAction, messages: messages })] }))] }) })] }));
165
182
  }
166
183
  //# sourceMappingURL=pages.js.map