@growth-labs/cms 0.5.2 → 0.5.3
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 +10 -2
- package/dist/providers/null.d.ts.map +1 -1
- package/dist/providers/null.js +20 -3
- package/dist/providers/null.js.map +1 -1
- package/dist/providers/types.d.ts +96 -6
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +20 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/routes/authz-matrix.d.ts.map +1 -1
- package/dist/routes/authz-matrix.js +4 -0
- package/dist/routes/authz-matrix.js.map +1 -1
- package/dist/routes/context.d.ts +1 -1
- package/dist/routes/context.d.ts.map +1 -1
- package/dist/routes/context.js.map +1 -1
- package/dist/routes/subscriptions.d.ts +9 -2
- package/dist/routes/subscriptions.d.ts.map +1 -1
- package/dist/routes/subscriptions.js +196 -21
- package/dist/routes/subscriptions.js.map +1 -1
- package/dist/ui/api/subscriptions.d.ts +1 -1
- package/dist/ui/api/subscriptions.d.ts.map +1 -1
- package/dist/ui/api/subscriptions.js +27 -5
- package/dist/ui/api/subscriptions.js.map +1 -1
- package/dist/ui/screens/SubscriptionsScreen.d.ts +44 -0
- package/dist/ui/screens/SubscriptionsScreen.d.ts.map +1 -1
- package/dist/ui/screens/SubscriptionsScreen.js +262 -54
- package/dist/ui/screens/SubscriptionsScreen.js.map +1 -1
- package/dist/ui/screens/subscriptions-data.d.ts +33 -0
- package/dist/ui/screens/subscriptions-data.d.ts.map +1 -0
- package/dist/ui/screens/subscriptions-data.js +143 -0
- package/dist/ui/screens/subscriptions-data.js.map +1 -0
- package/package.json +1 -1
- package/src/providers/null.ts +32 -3
- package/src/providers/types.ts +134 -4
- package/src/routes/authz-matrix.ts +4 -0
- package/src/routes/context.ts +3 -0
- package/src/routes/subscriptions.ts +249 -27
- package/src/ui/api/subscriptions.ts +27 -5
- package/src/ui/screens/SubscriptionsScreen.tsx +631 -116
- package/src/ui/screens/subscriptions-data.ts +193 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/routes/subscriptions.ts — Subscriptions route factory (P5 Task 6 + admin parity).
|
|
2
2
|
// All handlers are SubscriptionsProvider passthrough: member list+filters,
|
|
3
|
-
// KPI cards, plan-mix, CSV/JSON export,
|
|
3
|
+
// KPI cards, plan-mix, CSV/JSON export, complimentary access admin, plus the three
|
|
4
4
|
// admin-parity tools the legacy Fronts /admin had — duplicate-account detection,
|
|
5
5
|
// gift-order tracking, and the LemonSqueezy entitlement sync (a privileged WRITE).
|
|
6
6
|
// Each handler returns the ProviderResult {status, data} envelope unchanged —
|
|
@@ -13,8 +13,144 @@
|
|
|
13
13
|
// NOT editor), falling back to requirePublisher when the role seam is absent.
|
|
14
14
|
// importLsEntitlements is a privileged WRITE → requireRole('manage_settings')
|
|
15
15
|
// (owner-only), falling back to requireAdmin when the role seam is absent.
|
|
16
|
+
// complimentary access list/grant/revoke/retry → requireRole('manage_complimentary_access')
|
|
17
|
+
// (owner + senior_editor + editor). Mutations derive the actor from authz.getUser;
|
|
18
|
+
// actor-like fields in the browser body are rejected.
|
|
19
|
+
import { z } from 'zod';
|
|
16
20
|
import { nullProviders } from '../providers/null.js';
|
|
21
|
+
import { MAX_COMPLIMENTARY_UNIX_SECONDS, ProviderHttpError, } from '../providers/types.js';
|
|
17
22
|
import { json } from './context.js';
|
|
23
|
+
const providerStatusSchema = z.enum(['live', 'partial', 'empty']);
|
|
24
|
+
const deliveryStatusSchema = z.enum(['pending', 'sending', 'sent', 'failed', 'unknown']);
|
|
25
|
+
const emailStatusSchema = z.union([deliveryStatusSchema, z.literal('not_attempted')]);
|
|
26
|
+
const statusFilterSchema = z.enum(['active', 'revoked', 'all']);
|
|
27
|
+
const unixSecondsSchema = z.number().int().nonnegative().max(MAX_COMPLIMENTARY_UNIX_SECONDS);
|
|
28
|
+
const entitlementRowSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
id: z.string().uuid(),
|
|
31
|
+
userId: z.string().min(1),
|
|
32
|
+
email: z.string().email(),
|
|
33
|
+
grantReason: z.string().min(1),
|
|
34
|
+
grantedAt: unixSecondsSchema,
|
|
35
|
+
grantedBySubject: z.string().min(1),
|
|
36
|
+
revokedAt: unixSecondsSchema.nullable(),
|
|
37
|
+
revokedBySubject: z.string().min(1).nullable(),
|
|
38
|
+
revokeReason: z.string().min(1).nullable(),
|
|
39
|
+
emailStatus: emailStatusSchema,
|
|
40
|
+
emailAttemptCount: z.number().int().nonnegative(),
|
|
41
|
+
emailRetryable: z.boolean(),
|
|
42
|
+
emailNextEligibleAt: unixSecondsSchema.nullable(),
|
|
43
|
+
})
|
|
44
|
+
.strict();
|
|
45
|
+
const complimentaryPageSchema = z
|
|
46
|
+
.object({
|
|
47
|
+
rows: z.array(entitlementRowSchema),
|
|
48
|
+
total: z.number().int().nonnegative(),
|
|
49
|
+
page: z.number().int().positive(),
|
|
50
|
+
pageSize: z.number().int().min(1).max(100),
|
|
51
|
+
totalPages: z.number().int().nonnegative(),
|
|
52
|
+
summary: z
|
|
53
|
+
.object({
|
|
54
|
+
active: z.number().int().nonnegative(),
|
|
55
|
+
revoked: z.number().int().nonnegative(),
|
|
56
|
+
failedEmail: z.number().int().nonnegative(),
|
|
57
|
+
unknownEmail: z.number().int().nonnegative(),
|
|
58
|
+
notAttempted: z.number().int().nonnegative(),
|
|
59
|
+
})
|
|
60
|
+
.strict(),
|
|
61
|
+
})
|
|
62
|
+
.strict();
|
|
63
|
+
const emailResultSchema = z
|
|
64
|
+
.object({
|
|
65
|
+
status: emailStatusSchema,
|
|
66
|
+
retryable: z.boolean(),
|
|
67
|
+
nextEligibleAt: unixSecondsSchema.nullable(),
|
|
68
|
+
})
|
|
69
|
+
.strict();
|
|
70
|
+
const complimentaryGrantResultSchema = z
|
|
71
|
+
.object({
|
|
72
|
+
outcome: z.enum(['created', 'already_active']),
|
|
73
|
+
entitlement: entitlementRowSchema,
|
|
74
|
+
email: emailResultSchema,
|
|
75
|
+
})
|
|
76
|
+
.strict();
|
|
77
|
+
const complimentaryRevokeResultSchema = z
|
|
78
|
+
.object({
|
|
79
|
+
outcome: z.enum(['revoked', 'already_revoked']),
|
|
80
|
+
entitlement: entitlementRowSchema,
|
|
81
|
+
})
|
|
82
|
+
.strict();
|
|
83
|
+
const complimentaryRetryResultSchema = z
|
|
84
|
+
.object({
|
|
85
|
+
outcome: z.enum(['queued', 'sent', 'failed', 'unknown', 'throttled', 'conflict']),
|
|
86
|
+
entitlement: entitlementRowSchema,
|
|
87
|
+
email: emailResultSchema,
|
|
88
|
+
})
|
|
89
|
+
.strict();
|
|
90
|
+
const emailInputSchema = z.string().trim().toLowerCase().email().max(254);
|
|
91
|
+
const reasonSchema = z.string().trim().min(1).max(500);
|
|
92
|
+
const complimentaryQuerySchema = z.string().trim().max(254);
|
|
93
|
+
const entitlementIdSchema = z.string().trim().uuid();
|
|
94
|
+
const grantSchema = z
|
|
95
|
+
.object({
|
|
96
|
+
email: emailInputSchema,
|
|
97
|
+
reason: reasonSchema,
|
|
98
|
+
})
|
|
99
|
+
.strict();
|
|
100
|
+
const entitlementActionSchema = z
|
|
101
|
+
.object({
|
|
102
|
+
entitlementId: entitlementIdSchema,
|
|
103
|
+
reason: reasonSchema,
|
|
104
|
+
})
|
|
105
|
+
.strict();
|
|
106
|
+
function providerResultSchema(data) {
|
|
107
|
+
return z.object({ status: providerStatusSchema, data }).strict();
|
|
108
|
+
}
|
|
109
|
+
function parsePositiveInteger(value, fallback) {
|
|
110
|
+
if (value === null)
|
|
111
|
+
return fallback;
|
|
112
|
+
const parsed = Number(value);
|
|
113
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
|
|
114
|
+
}
|
|
115
|
+
async function readStrictJson(ctx, schema) {
|
|
116
|
+
let body;
|
|
117
|
+
try {
|
|
118
|
+
body = await ctx.request.json();
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return { ok: false, response: json({ error: 'Invalid JSON body' }, 400) };
|
|
122
|
+
}
|
|
123
|
+
const parsed = schema.safeParse(body);
|
|
124
|
+
if (!parsed.success)
|
|
125
|
+
return { ok: false, response: json({ error: 'Invalid request body' }, 400) };
|
|
126
|
+
return { ok: true, data: parsed.data };
|
|
127
|
+
}
|
|
128
|
+
async function requireComplimentaryAccess(config, ctx) {
|
|
129
|
+
if (!config.authz.requireRole) {
|
|
130
|
+
return json({ error: 'Role authorization is required' }, 500);
|
|
131
|
+
}
|
|
132
|
+
return config.authz.requireRole('manage_complimentary_access', ctx);
|
|
133
|
+
}
|
|
134
|
+
async function trustedActor(config, ctx) {
|
|
135
|
+
const user = config.authz.getUser ? await config.authz.getUser(ctx) : null;
|
|
136
|
+
if (!user?.subject)
|
|
137
|
+
return null;
|
|
138
|
+
return { subject: user.subject };
|
|
139
|
+
}
|
|
140
|
+
async function providerJson(call, schema) {
|
|
141
|
+
try {
|
|
142
|
+
const result = await call();
|
|
143
|
+
const parsed = schema.safeParse(result);
|
|
144
|
+
if (!parsed.success)
|
|
145
|
+
return json({ error: 'Invalid provider response' }, 502);
|
|
146
|
+
return json(parsed.data);
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
if (err instanceof ProviderHttpError)
|
|
150
|
+
return json(err.toBody(), err.status);
|
|
151
|
+
throw err;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
18
154
|
export function createSubscriptionsRoutes(config) {
|
|
19
155
|
const providers = { ...nullProviders, ...(config.providers ?? {}) };
|
|
20
156
|
return {
|
|
@@ -62,26 +198,6 @@ export function createSubscriptionsRoutes(config) {
|
|
|
62
198
|
// The screen may choose to trigger a file download for the data string.
|
|
63
199
|
return json(await providers.subscriptions.exportMembers(fmt));
|
|
64
200
|
},
|
|
65
|
-
async gift(ctx) {
|
|
66
|
-
const denied = await config.authz.requirePublisher(ctx);
|
|
67
|
-
if (denied)
|
|
68
|
-
return denied;
|
|
69
|
-
let body;
|
|
70
|
-
try {
|
|
71
|
-
body = await ctx.request.json();
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
return json({ error: 'Invalid JSON body' }, 400);
|
|
75
|
-
}
|
|
76
|
-
const { email, planVariantId } = typeof body === 'object' && body !== null ? body : {};
|
|
77
|
-
if (typeof email !== 'string' || !email) {
|
|
78
|
-
return json({ error: 'email is required' }, 400);
|
|
79
|
-
}
|
|
80
|
-
if (typeof planVariantId !== 'string' || !planVariantId) {
|
|
81
|
-
return json({ error: 'planVariantId is required' }, 400);
|
|
82
|
-
}
|
|
83
|
-
return json(await providers.subscriptions.createGift({ email, planVariantId }));
|
|
84
|
-
},
|
|
85
201
|
// READ — duplicate-account detection. Same publisher gate as the other
|
|
86
202
|
// read surfaces; the ProviderResult (conflict groups + summary) passes
|
|
87
203
|
// straight through, empty states preserved.
|
|
@@ -105,6 +221,65 @@ export function createSubscriptionsRoutes(config) {
|
|
|
105
221
|
const pageSize = Math.min(Math.max(1, rawPageSize), 100);
|
|
106
222
|
return json(await providers.subscriptions.listGifts({ q, status, page, pageSize }));
|
|
107
223
|
},
|
|
224
|
+
async listComplimentaryAccess(ctx) {
|
|
225
|
+
const denied = await requireComplimentaryAccess(config, ctx);
|
|
226
|
+
if (denied)
|
|
227
|
+
return denied;
|
|
228
|
+
const u = new URL(ctx.request.url);
|
|
229
|
+
const qParsed = complimentaryQuerySchema.safeParse(u.searchParams.get('q') ?? '');
|
|
230
|
+
if (!qParsed.success)
|
|
231
|
+
return json({ error: 'Invalid search query' }, 400);
|
|
232
|
+
const q = qParsed.data || undefined;
|
|
233
|
+
const rawStatus = u.searchParams.get('status') ?? 'all';
|
|
234
|
+
const statusParsed = statusFilterSchema.safeParse(rawStatus);
|
|
235
|
+
if (!statusParsed.success)
|
|
236
|
+
return json({ error: 'Invalid status filter' }, 400);
|
|
237
|
+
const page = parsePositiveInteger(u.searchParams.get('page'), 1);
|
|
238
|
+
const pageSize = Math.min(parsePositiveInteger(u.searchParams.get('pageSize'), 25), 100);
|
|
239
|
+
const query = {
|
|
240
|
+
q,
|
|
241
|
+
status: statusParsed.data,
|
|
242
|
+
page,
|
|
243
|
+
pageSize,
|
|
244
|
+
};
|
|
245
|
+
return providerJson(() => providers.subscriptions.listComplimentaryAccess(query), providerResultSchema(complimentaryPageSchema));
|
|
246
|
+
},
|
|
247
|
+
async grantComplimentaryAccess(ctx) {
|
|
248
|
+
const denied = await requireComplimentaryAccess(config, ctx);
|
|
249
|
+
if (denied)
|
|
250
|
+
return denied;
|
|
251
|
+
const actor = await trustedActor(config, ctx);
|
|
252
|
+
if (!actor)
|
|
253
|
+
return json({ error: 'Trusted actor context is required' }, 500);
|
|
254
|
+
const parsed = await readStrictJson(ctx, grantSchema);
|
|
255
|
+
if (!parsed.ok)
|
|
256
|
+
return parsed.response;
|
|
257
|
+
return providerJson(() => providers.subscriptions.grantComplimentaryAccess(parsed.data, actor), providerResultSchema(complimentaryGrantResultSchema));
|
|
258
|
+
},
|
|
259
|
+
async revokeComplimentaryAccess(ctx) {
|
|
260
|
+
const denied = await requireComplimentaryAccess(config, ctx);
|
|
261
|
+
if (denied)
|
|
262
|
+
return denied;
|
|
263
|
+
const actor = await trustedActor(config, ctx);
|
|
264
|
+
if (!actor)
|
|
265
|
+
return json({ error: 'Trusted actor context is required' }, 500);
|
|
266
|
+
const parsed = await readStrictJson(ctx, entitlementActionSchema);
|
|
267
|
+
if (!parsed.ok)
|
|
268
|
+
return parsed.response;
|
|
269
|
+
return providerJson(() => providers.subscriptions.revokeComplimentaryAccess(parsed.data, actor), providerResultSchema(complimentaryRevokeResultSchema));
|
|
270
|
+
},
|
|
271
|
+
async retryComplimentaryAccessEmail(ctx) {
|
|
272
|
+
const denied = await requireComplimentaryAccess(config, ctx);
|
|
273
|
+
if (denied)
|
|
274
|
+
return denied;
|
|
275
|
+
const actor = await trustedActor(config, ctx);
|
|
276
|
+
if (!actor)
|
|
277
|
+
return json({ error: 'Trusted actor context is required' }, 500);
|
|
278
|
+
const parsed = await readStrictJson(ctx, entitlementActionSchema);
|
|
279
|
+
if (!parsed.ok)
|
|
280
|
+
return parsed.response;
|
|
281
|
+
return providerJson(() => providers.subscriptions.retryComplimentaryAccessEmail(parsed.data, actor), providerResultSchema(complimentaryRetryResultSchema));
|
|
282
|
+
},
|
|
108
283
|
// WRITE (privileged) — trigger the LemonSqueezy entitlement sync. This
|
|
109
284
|
// mutates host state (creates/updates users + subscriptions), so it gates
|
|
110
285
|
// on requireRole('manage_settings') (owner-only per the capability matrix)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/routes/subscriptions.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,2EAA2E;AAC3E,0EAA0E;AAC1E,iFAAiF;AACjF,mFAAmF;AACnF,8EAA8E;AAC9E,+DAA+D;AAC/D,sEAAsE;AACtE,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAChF,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAqBnC,MAAM,UAAU,yBAAyB,CACxC,MAAgC;IAEhC,MAAM,SAAS,GAAiB,EAAE,GAAG,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAA;IAEjF,OAAO;QACN,KAAK,CAAC,OAAO,CAAC,GAAiB;YAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClC,gFAAgF;YAChF,MAAM,MAAM,GAAuC,EAAE,CAAA;YACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;gBACrD,IAAI,GAAG,KAAK,MAAM;oBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACxC,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;YAE3D,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;QACrE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAiB;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,0EAA0E;YAC1E,+EAA+E;YAC/E,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACrD,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAiB;YAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAA;QACxD,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,GAAiB;YACpC,sEAAsE;YACtE,yEAAyE;YACzE,+DAA+D;YAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW;gBACtC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAyC,EAAE,GAAG,CAAC;gBAChF,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClC,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxC,MAAM,GAAG,GAAmB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;YAE9D,yEAAyE;YACzE,wEAAwE;YACxE,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAiB;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,IAAI,IAAa,CAAA;YACjB,IAAI,CAAC;gBACJ,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YAChC,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAA;YACjD,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAC7B,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAA;YAEnF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAA;YACjD,CAAC;YACD,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,GAAG,CAAC,CAAA;YACzD,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;QAChF,CAAC;QAED,uEAAuE;QACvE,uEAAuE;QACvE,4CAA4C;QAC5C,KAAK,CAAC,gBAAgB,CAAC,GAAiB;YACvC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAA;QAC9D,CAAC;QAED,2EAA2E;QAC3E,KAAK,CAAC,SAAS,CAAC,GAAiB;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YAEzB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;YACtD,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;YAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;YACxE,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;YAExD,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QACpF,CAAC;QAED,uEAAuE;QACvE,0EAA0E;QAC1E,2EAA2E;QAC3E,qEAAqE;QACrE,gFAAgF;QAChF,KAAK,CAAC,oBAAoB,CAAC,GAAiB;YAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW;gBACpC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAsC,EAAE,GAAG,CAAC;gBAC7E,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACvC,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAA;YAErB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClC,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAA;YACtD,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,MAAM,CAAA;YAChE,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;YAElE,OAAO,IAAI,CACV,MAAM,SAAS,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CACpF,CAAA;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/routes/subscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { APIContext } from 'astro';
|
|
2
2
|
export declare const GET: (c: APIContext) => Promise<Response>;
|
|
3
|
-
export declare const POST: (c: APIContext) => Promise<Response>;
|
|
3
|
+
export declare const POST: (c: APIContext) => Response | Promise<Response>;
|
|
4
4
|
//# sourceMappingURL=subscriptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../src/ui/api/subscriptions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAsBvC,eAAO,MAAM,GAAG,GAAI,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../src/ui/api/subscriptions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAsBvC,eAAO,MAAM,GAAG,GAAI,GAAG,UAAU,sBAoBhC,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,UAAU,iCA0BjC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/ui/api/subscriptions.ts — Astro endpoint adapter for /admin/api/subscriptions.
|
|
2
|
-
// GET dispatches to members / kpis / planMix / exportMembers / duplicates / gifts
|
|
3
|
-
// based on ?type=. POST routes
|
|
4
|
-
// (?type=import-ls)
|
|
2
|
+
// GET dispatches to members / kpis / planMix / exportMembers / duplicates / gifts /
|
|
3
|
+
// complimentary based on ?type=. POST routes LemonSqueezy import sync
|
|
4
|
+
// (?type=import-ls) or complimentary grant/revoke/retry actions.
|
|
5
5
|
// Providers (SubscriptionsProvider) are read from c.locals.cmsProviders — the host
|
|
6
6
|
// injects real impls at cutover (P8); null impl (empty states) is the default.
|
|
7
7
|
import { createSubscriptionsRoutes, } from '../../routes/subscriptions.js';
|
|
@@ -32,6 +32,8 @@ export const GET = (c) => {
|
|
|
32
32
|
return routes.detectDuplicates(ctx);
|
|
33
33
|
case 'gifts':
|
|
34
34
|
return routes.listGifts(ctx);
|
|
35
|
+
case 'complimentary':
|
|
36
|
+
return routes.listComplimentaryAccess(ctx);
|
|
35
37
|
default:
|
|
36
38
|
return routes.members(ctx);
|
|
37
39
|
}
|
|
@@ -39,9 +41,29 @@ export const GET = (c) => {
|
|
|
39
41
|
export const POST = (c) => {
|
|
40
42
|
const routes = createSubscriptionsRoutes(subscriptionsConfig(c));
|
|
41
43
|
const ctx = toCtx(c);
|
|
42
|
-
const
|
|
44
|
+
const url = new URL(c.request.url);
|
|
45
|
+
const type = url.searchParams.get('type');
|
|
43
46
|
if (type === 'import-ls')
|
|
44
47
|
return routes.importLsEntitlements(ctx);
|
|
45
|
-
|
|
48
|
+
if (type === 'complimentary') {
|
|
49
|
+
const action = url.searchParams.get('action');
|
|
50
|
+
switch (action) {
|
|
51
|
+
case 'grant':
|
|
52
|
+
return routes.grantComplimentaryAccess(ctx);
|
|
53
|
+
case 'revoke':
|
|
54
|
+
return routes.revokeComplimentaryAccess(ctx);
|
|
55
|
+
case 'retry-email':
|
|
56
|
+
return routes.retryComplimentaryAccessEmail(ctx);
|
|
57
|
+
default:
|
|
58
|
+
return new Response(JSON.stringify({ error: 'Invalid complimentary action' }), {
|
|
59
|
+
status: 400,
|
|
60
|
+
headers: { 'Content-Type': 'application/json' },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return new Response(JSON.stringify({ error: 'Invalid subscription action' }), {
|
|
65
|
+
status: 400,
|
|
66
|
+
headers: { 'Content-Type': 'application/json' },
|
|
67
|
+
});
|
|
46
68
|
};
|
|
47
69
|
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../src/ui/api/subscriptions.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../src/ui/api/subscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,46 @@
|
|
|
1
|
+
import type { ComplimentaryAccessPage, ComplimentaryEntitlementRow, DuplicateAccountsReport, GiftOrdersPage, ProviderResult, SubscriptionMember } from '../../providers/types.js';
|
|
2
|
+
import { type PlanMixBucket } from './render-state.js';
|
|
3
|
+
import { type ResultCopy } from './subscriptions-data.js';
|
|
4
|
+
type FilterOption = 'all' | 'paid' | 'past_due' | 'canceled';
|
|
5
|
+
export type ComplimentaryStatusFilter = 'active' | 'revoked' | 'all';
|
|
6
|
+
export interface ComplimentaryQuery {
|
|
7
|
+
q: string;
|
|
8
|
+
status: ComplimentaryStatusFilter;
|
|
9
|
+
}
|
|
10
|
+
export declare function buildComplimentaryListUrl(query: ComplimentaryQuery, page: number): string;
|
|
11
|
+
export type ComplimentaryPanelState = {
|
|
12
|
+
kind: 'available';
|
|
13
|
+
result: ProviderResult<ComplimentaryAccessPage>;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'unavailable';
|
|
16
|
+
reason: 'forbidden';
|
|
17
|
+
} | {
|
|
18
|
+
kind: 'error';
|
|
19
|
+
reason: 'request_failed';
|
|
20
|
+
};
|
|
21
|
+
export interface SubscriptionsData {
|
|
22
|
+
members: ProviderResult<SubscriptionMember[]>;
|
|
23
|
+
kpis: ProviderResult<Record<string, number | null>>;
|
|
24
|
+
planMix: ProviderResult<PlanMixBucket[]>;
|
|
25
|
+
duplicates: ProviderResult<DuplicateAccountsReport>;
|
|
26
|
+
gifts: ProviderResult<GiftOrdersPage>;
|
|
27
|
+
complimentary: ComplimentaryPanelState;
|
|
28
|
+
}
|
|
1
29
|
export declare function SubscriptionsScreen(): import("react").JSX.Element;
|
|
30
|
+
export declare function SubscriptionsBody({ data, isPartial, filter, onFilterChange, page, onPageChange, complimentaryNotice, complimentaryQuery, onComplimentaryQueryChange, complimentaryPage, onComplimentaryPageChange, onComplimentaryRevoke, onComplimentaryRetry, }: {
|
|
31
|
+
data: SubscriptionsData;
|
|
32
|
+
isPartial: boolean;
|
|
33
|
+
filter: FilterOption;
|
|
34
|
+
onFilterChange: (f: FilterOption) => void;
|
|
35
|
+
page: number;
|
|
36
|
+
onPageChange: (p: number) => void;
|
|
37
|
+
complimentaryNotice: ResultCopy | null;
|
|
38
|
+
complimentaryQuery: ComplimentaryQuery;
|
|
39
|
+
onComplimentaryQueryChange: (query: ComplimentaryQuery) => void;
|
|
40
|
+
complimentaryPage: number;
|
|
41
|
+
onComplimentaryPageChange: (p: number) => void;
|
|
42
|
+
onComplimentaryRevoke: (row: ComplimentaryEntitlementRow) => void;
|
|
43
|
+
onComplimentaryRetry: (row: ComplimentaryEntitlementRow) => void;
|
|
44
|
+
}): import("react").JSX.Element;
|
|
45
|
+
export {};
|
|
2
46
|
//# sourceMappingURL=SubscriptionsScreen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionsScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/SubscriptionsScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SubscriptionsScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/SubscriptionsScreen.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACX,uBAAuB,EAEvB,2BAA2B,EAG3B,uBAAuB,EACvB,cAAc,EAEd,cAAc,EACd,kBAAkB,EAClB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAGN,KAAK,aAAa,EAGlB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAWN,KAAK,UAAU,EACf,MAAM,yBAAyB,CAAA;AAMhC,KAAK,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAA;AAC5D,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;AAEpE,MAAM,WAAW,kBAAkB;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,yBAAyB,CAAA;CACjC;AASD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzF;AAMD,MAAM,MAAM,uBAAuB,GAChC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAA;AAE9C,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAA;IAC7C,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,UAAU,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAA;IACnD,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;IACrC,aAAa,EAAE,uBAAuB,CAAA;CACtC;AA0DD,wBAAgB,mBAAmB,gCAqQlC;AAMD,wBAAgB,iBAAiB,CAAC,EACjC,IAAI,EACJ,SAAS,EACT,MAAM,EACN,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,GACpB,EAAE;IACF,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,cAAc,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,mBAAmB,EAAE,UAAU,GAAG,IAAI,CAAA;IACtC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,0BAA0B,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC/D,iBAAiB,EAAE,MAAM,CAAA;IACzB,yBAAyB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,qBAAqB,EAAE,CAAC,GAAG,EAAE,2BAA2B,KAAK,IAAI,CAAA;IACjE,oBAAoB,EAAE,CAAC,GAAG,EAAE,2BAA2B,KAAK,IAAI,CAAA;CAChE,+BAyEA"}
|