@memberstack/dom 2.0.0 → 2.0.2-beta.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 (61) hide show
  1. package/README.md +356 -3
  2. package/lib/auth/index.d.mts +58 -4
  3. package/lib/auth/index.d.ts +58 -4
  4. package/lib/auth/index.js +5 -2
  5. package/lib/auth/index.mjs +4 -2
  6. package/lib/constants/endpoints.js +2 -1
  7. package/lib/constants/endpoints.mjs +1 -1
  8. package/lib/index.d.mts +1874 -61
  9. package/lib/index.d.ts +1874 -61
  10. package/lib/index.js +1548 -30626
  11. package/lib/index.mjs +1534 -30626
  12. package/lib/methods/dom/index.js +1 -0
  13. package/lib/methods/dom/main-dom.d.mts +1 -13
  14. package/lib/methods/dom/main-dom.d.ts +1 -13
  15. package/lib/methods/dom/main-dom.js +14545 -29552
  16. package/lib/methods/dom/main-dom.mjs +14544 -29552
  17. package/lib/methods/dom/methods.d.mts +88 -6
  18. package/lib/methods/dom/methods.d.ts +88 -6
  19. package/lib/methods/dom/methods.js +137 -30637
  20. package/lib/methods/dom/methods.mjs +135 -30639
  21. package/lib/methods/index.d.mts +111 -29
  22. package/lib/methods/index.d.ts +111 -29
  23. package/lib/methods/index.js +1024 -30617
  24. package/lib/methods/index.mjs +1023 -30617
  25. package/lib/methods/requests/index.d.mts +843 -23
  26. package/lib/methods/requests/index.d.ts +843 -23
  27. package/lib/methods/requests/index.js +867 -42
  28. package/lib/methods/requests/index.mjs +866 -42
  29. package/lib/methods/requests/requests.d.mts +9 -8
  30. package/lib/methods/requests/requests.d.ts +9 -8
  31. package/lib/methods/requests/requests.js +5 -3
  32. package/lib/methods/requests/requests.mjs +4 -3
  33. package/lib/models-BmZS-mc4.d.ts +193 -0
  34. package/lib/models-CTRKogoR.d.ts +487 -0
  35. package/lib/models-le7xaT4H.d.ts +193 -0
  36. package/lib/testing/index.d.mts +272 -0
  37. package/lib/testing/index.d.ts +272 -0
  38. package/lib/testing/index.js +313 -0
  39. package/lib/testing/index.mjs +284 -0
  40. package/lib/types/index.d.mts +1 -0
  41. package/lib/types/index.d.ts +1 -0
  42. package/lib/types/index.js +1 -0
  43. package/lib/types/params.d.mts +634 -10
  44. package/lib/types/params.d.ts +634 -10
  45. package/lib/types/params.js +1 -0
  46. package/lib/types/payloads.d.mts +200 -1
  47. package/lib/types/payloads.d.ts +200 -1
  48. package/lib/types/payloads.js +1 -0
  49. package/lib/types/translations.d.mts +58 -0
  50. package/lib/types/translations.d.ts +58 -0
  51. package/lib/types/translations.js +1 -0
  52. package/lib/types/utils/payloads.d.mts +1 -3
  53. package/lib/types/utils/payloads.d.ts +1 -3
  54. package/lib/types/utils/payloads.js +1 -0
  55. package/lib/utils/cookies.d.mts +5 -5
  56. package/lib/utils/cookies.d.ts +5 -5
  57. package/lib/utils/cookies.js +14 -3
  58. package/lib/utils/cookies.mjs +13 -3
  59. package/lib/utils/defaultMessageBox.js +1 -0
  60. package/package.json +23 -12
  61. package/lib/index.global.js +0 -46364
@@ -0,0 +1,487 @@
1
+ declare namespace Payload {
2
+ interface PaginatedResponse<T> {
3
+ hasNext: boolean;
4
+ endCursor: string | null;
5
+ totalCount: number;
6
+ data: T[];
7
+ }
8
+ interface Transforms {
9
+ Pagination: {
10
+ hasNext: boolean;
11
+ endCursor: string | null;
12
+ totalCount: number;
13
+ };
14
+ RemovePlan: {
15
+ member: Transforms["Member"];
16
+ };
17
+ SendMemberVerificationEmail: {
18
+ success: boolean;
19
+ };
20
+ ResetMemberPassword: {
21
+ success: boolean;
22
+ };
23
+ GetAppAndMember: {
24
+ app: Transforms["App"];
25
+ member: Transforms["Member"] | null;
26
+ };
27
+ SecureContent: {
28
+ content: string;
29
+ type: "HTML" | "CSS" | "LINK" | "JS" | "JSON" | "TEXT" | "IMAGE" | "FILE";
30
+ };
31
+ Post: {
32
+ id: string;
33
+ internalOrder: string;
34
+ createdAt: string;
35
+ content: string;
36
+ member: {
37
+ id: string;
38
+ customFields: object;
39
+ profileImage: string;
40
+ };
41
+ _count: {
42
+ Threads: number;
43
+ likedBy: number;
44
+ dislikedBy: number;
45
+ };
46
+ };
47
+ DeletedMember: {
48
+ id: string;
49
+ };
50
+ Posts: {
51
+ posts: Transforms["Post"][];
52
+ totalCount: number;
53
+ };
54
+ Thread: {
55
+ id: string;
56
+ internalOrder: string;
57
+ createdAt: string;
58
+ content: string;
59
+ member: {
60
+ id: string;
61
+ customFields: object;
62
+ profileImage: string;
63
+ };
64
+ _count: {
65
+ Threads: number;
66
+ likedBy: number;
67
+ };
68
+ };
69
+ Threads: {
70
+ threads: Transforms["Thread"][];
71
+ };
72
+ App: {
73
+ id: string;
74
+ name: string;
75
+ mode: "live" | "sandbox";
76
+ plans: Transforms["Plan"][];
77
+ contentGroups: Transforms["RestrictedUrlGroup"][];
78
+ emailVerificationEnabled: boolean;
79
+ requireEmailVerification: boolean;
80
+ customField: Transforms["CustomField"][];
81
+ branding: Transforms["Branding"];
82
+ authProviders: Transforms["AuthProvider"][];
83
+ };
84
+ Branding: {
85
+ logo: string;
86
+ colors: {
87
+ lightMode: {
88
+ primaryButton: string;
89
+ };
90
+ };
91
+ };
92
+ RestrictedUrlGroup: {
93
+ id: string;
94
+ name: string;
95
+ key: string;
96
+ allowAllMembers: boolean;
97
+ activeMemberHasAccess?: boolean;
98
+ redirect: string;
99
+ urls: {
100
+ url: string;
101
+ filter: string;
102
+ }[];
103
+ plans: {
104
+ id: string;
105
+ }[];
106
+ };
107
+ MemberAuth: {
108
+ tokens: {
109
+ accessToken: string;
110
+ expires: number;
111
+ type: "bearer";
112
+ };
113
+ member: Transforms["Member"];
114
+ redirect: string;
115
+ contentGroups?: Transforms["RestrictedUrlGroup"][];
116
+ };
117
+ MemberJSON: object;
118
+ AuthProviders: {
119
+ providers: {
120
+ provider: string;
121
+ }[];
122
+ message?: string;
123
+ };
124
+ Member: {
125
+ id: string;
126
+ verified: boolean;
127
+ profileImage: string;
128
+ auth: {
129
+ email: string;
130
+ hasPassword: boolean;
131
+ providers: {
132
+ provider: string;
133
+ }[];
134
+ };
135
+ loginRedirect: string;
136
+ stripeCustomerId: string;
137
+ createdAt: string;
138
+ metaData: object;
139
+ customFields: object;
140
+ permissions: string[] | [];
141
+ planConnections: Transforms["MemberPlanConnection"][];
142
+ };
143
+ MemberReceipt: {
144
+ id: string;
145
+ amount: number;
146
+ url: string;
147
+ stripe?: {
148
+ url: string;
149
+ };
150
+ number: string;
151
+ purchase: string;
152
+ invoice: string;
153
+ createdAt: string;
154
+ currency: string;
155
+ };
156
+ MemberInvoices: PaginatedResponse<{
157
+ id: string;
158
+ status: string;
159
+ amount: number;
160
+ url: string;
161
+ description: string;
162
+ number: string;
163
+ purchase: string;
164
+ }>;
165
+ MemberReceipts: PaginatedResponse<{
166
+ id: string;
167
+ amount: string;
168
+ url: string;
169
+ number: string;
170
+ planConnection: string;
171
+ invoice: Transforms["MemberInvoice"];
172
+ }>;
173
+ MemberCard: {
174
+ id: string;
175
+ brand: string;
176
+ expMonth: string;
177
+ expYear: string;
178
+ last4: string;
179
+ default: boolean;
180
+ };
181
+ MemberInvoice: {
182
+ id: string;
183
+ status: string;
184
+ amount: number;
185
+ url: string;
186
+ description: string;
187
+ number: string;
188
+ planConnection: string;
189
+ createdAt: string;
190
+ currency: string;
191
+ };
192
+ Plan: {
193
+ id: string;
194
+ name: string;
195
+ description: string;
196
+ status: string;
197
+ redirects: {
198
+ afterLogin: string;
199
+ afterLogout: string;
200
+ afterSignup: string;
201
+ };
202
+ prices?: Transforms["Price"][] | [];
203
+ };
204
+ Price: {
205
+ id: string;
206
+ amount: string;
207
+ interval: {
208
+ type: string;
209
+ count: number;
210
+ };
211
+ name: string;
212
+ type: string;
213
+ status: string;
214
+ currency: string;
215
+ };
216
+ Permission: {
217
+ id: string;
218
+ name: string;
219
+ description: string;
220
+ };
221
+ PermissionGroup: {
222
+ id: string;
223
+ name: string;
224
+ permissions: Transforms["Permission"][];
225
+ };
226
+ CustomField: {
227
+ order: number;
228
+ key: string;
229
+ label: string;
230
+ hidden: boolean;
231
+ };
232
+ MemberPlanConnection: {
233
+ id: string;
234
+ active: boolean;
235
+ status: string;
236
+ planId: string;
237
+ type: string;
238
+ payment: {
239
+ amount: number;
240
+ currency: string;
241
+ status: string;
242
+ lastBillingDate: number | null;
243
+ nextBillingDate: number | null;
244
+ cancelAtDate: number | null;
245
+ priceId: string;
246
+ } | null;
247
+ };
248
+ Purchase: {
249
+ plan: string;
250
+ payment: {
251
+ requiresPayment: boolean;
252
+ requiresAuthentication: boolean;
253
+ };
254
+ };
255
+ AddPlan: {
256
+ redirect: string;
257
+ member: Transforms["Member"];
258
+ };
259
+ PurchaseWithCheckout: {
260
+ url: string;
261
+ };
262
+ LaunchStripeCustomerPortal: {
263
+ url: string;
264
+ };
265
+ OpenStripeCustomerPortal: {
266
+ url: string;
267
+ };
268
+ AuthenticationClientSecret: string;
269
+ AuthProvider: {
270
+ clientId: string;
271
+ provider: string;
272
+ providerType: string;
273
+ icon: string;
274
+ };
275
+ TotalCheckoutAmount: {
276
+ total: number;
277
+ subTotal: number;
278
+ currency: string;
279
+ setupFee?: {
280
+ enabled: boolean;
281
+ amount: number;
282
+ name: string;
283
+ };
284
+ freeTrial?: {
285
+ days: number;
286
+ enabled: boolean;
287
+ };
288
+ tax?: {
289
+ name: string;
290
+ percent: number;
291
+ description: string;
292
+ }[];
293
+ };
294
+ }
295
+ }
296
+
297
+ /**
298
+ * @fileoverview Convenience type exports for Memberstack SDK.
299
+ * These types provide direct access to core data models without needing
300
+ * to navigate the Payload.Transforms namespace.
301
+ *
302
+ * @example
303
+ * ```typescript
304
+ * import type { Member, Plan, PlanConnection } from '@memberstack/dom';
305
+ *
306
+ * function displayMember(member: Member) {
307
+ * console.log(member.auth.email);
308
+ * }
309
+ * ```
310
+ */
311
+
312
+ /**
313
+ * A Memberstack member (authenticated user).
314
+ *
315
+ * @example
316
+ * ```typescript
317
+ * const { data: member } = await memberstack.getCurrentMember();
318
+ * if (member) {
319
+ * console.log('Email:', member.auth.email);
320
+ * console.log('Verified:', member.verified);
321
+ * console.log('Plans:', member.planConnections.map(p => p.planId));
322
+ * }
323
+ * ```
324
+ */
325
+ type Member = Payload.Transforms["Member"];
326
+ /**
327
+ * A membership plan in your Memberstack app.
328
+ *
329
+ * @example
330
+ * ```typescript
331
+ * const { data: plans } = await memberstack.getPlans();
332
+ * plans.forEach((plan: Plan) => {
333
+ * console.log(`${plan.name}: ${plan.prices?.[0]?.amount}`);
334
+ * });
335
+ * ```
336
+ */
337
+ type Plan = Payload.Transforms["Plan"];
338
+ /**
339
+ * A price option for a plan (monthly, yearly, etc.).
340
+ *
341
+ * @example
342
+ * ```typescript
343
+ * const plan = plans[0];
344
+ * plan.prices?.forEach((price: Price) => {
345
+ * console.log(`${price.name}: ${price.amount} ${price.currency}/${price.interval.type}`);
346
+ * });
347
+ * ```
348
+ */
349
+ type Price = Payload.Transforms["Price"];
350
+ /**
351
+ * A member's connection to a plan (subscription or one-time purchase).
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * const activePlans = member.planConnections.filter(
356
+ * (conn: PlanConnection) => conn.active
357
+ * );
358
+ * ```
359
+ */
360
+ type PlanConnection = Payload.Transforms["MemberPlanConnection"];
361
+ /**
362
+ * A content group that restricts access to URLs.
363
+ *
364
+ * @example
365
+ * ```typescript
366
+ * const { data: groups } = await memberstack.getRestrictedUrlGroups();
367
+ * const accessibleGroups = groups.filter(
368
+ * (g: ContentGroup) => g.activeMemberHasAccess
369
+ * );
370
+ * ```
371
+ */
372
+ type ContentGroup = Payload.Transforms["RestrictedUrlGroup"];
373
+ /**
374
+ * App configuration and settings.
375
+ *
376
+ * @example
377
+ * ```typescript
378
+ * const { data: app } = await memberstack.getApp();
379
+ * console.log('App:', app.name);
380
+ * console.log('Mode:', app.mode); // 'live' or 'sandbox'
381
+ * ```
382
+ */
383
+ type App = Payload.Transforms["App"];
384
+ /**
385
+ * Authentication provider configuration (Google, Facebook, etc.).
386
+ */
387
+ type AuthProvider = Payload.Transforms["AuthProvider"];
388
+ /**
389
+ * Authentication response with tokens and member data.
390
+ */
391
+ type MemberAuth = Payload.Transforms["MemberAuth"];
392
+ /**
393
+ * Auth tokens returned after login/signup.
394
+ */
395
+ type AuthTokens = MemberAuth["tokens"];
396
+ /**
397
+ * A saved payment card for a member.
398
+ *
399
+ * @example
400
+ * ```typescript
401
+ * const { data: cards } = await memberstack.getMemberCards();
402
+ * const defaultCard = cards.find((card: MemberCard) => card.default);
403
+ * ```
404
+ */
405
+ type MemberCard = Payload.Transforms["MemberCard"];
406
+ /**
407
+ * An invoice for a member's subscription.
408
+ */
409
+ type MemberInvoice = Payload.Transforms["MemberInvoice"];
410
+ /**
411
+ * A payment receipt.
412
+ */
413
+ type MemberReceipt = Payload.Transforms["MemberReceipt"];
414
+ /**
415
+ * Checkout total calculation including taxes and fees.
416
+ */
417
+ type CheckoutTotal = Payload.Transforms["TotalCheckoutAmount"];
418
+ /**
419
+ * Gated content returned by getSecureContent().
420
+ */
421
+ type SecureContent = Payload.Transforms["SecureContent"];
422
+ /**
423
+ * A custom field defined in your Memberstack app.
424
+ */
425
+ type CustomField = Payload.Transforms["CustomField"];
426
+ /**
427
+ * App branding configuration.
428
+ */
429
+ type Branding = Payload.Transforms["Branding"];
430
+ /**
431
+ * A community post.
432
+ */
433
+ type Post = Payload.Transforms["Post"];
434
+ /**
435
+ * A thread/reply on a post.
436
+ */
437
+ type Thread = Payload.Transforms["Thread"];
438
+ /**
439
+ * Extract the data type from a Memberstack SDK response.
440
+ *
441
+ * @example
442
+ * ```typescript
443
+ * import type { ExtractData, GetCurrentMemberPayload } from '@memberstack/dom';
444
+ *
445
+ * // Get the member type from the response
446
+ * type MemberData = ExtractData<GetCurrentMemberPayload>;
447
+ * // MemberData = Member | null
448
+ * ```
449
+ */
450
+ type ExtractData<T> = T extends {
451
+ data: infer D;
452
+ } ? D : never;
453
+ /**
454
+ * Generic paginated response shape.
455
+ *
456
+ * @example
457
+ * ```typescript
458
+ * type InvoicesPage = PaginatedData<MemberInvoice>;
459
+ * // { data: MemberInvoice[], hasNext: boolean, endCursor: string | null, totalCount: number }
460
+ * ```
461
+ */
462
+ type PaginatedData<T> = {
463
+ data: T[];
464
+ hasNext: boolean;
465
+ endCursor: string | null;
466
+ totalCount: number;
467
+ };
468
+ /**
469
+ * Common member fields for display purposes.
470
+ *
471
+ * @example
472
+ * ```typescript
473
+ * function getMemberDisplayInfo(member: Member): MemberDisplayInfo {
474
+ * return {
475
+ * id: member.id,
476
+ * email: member.auth.email,
477
+ * profileImage: member.profileImage,
478
+ * verified: member.verified,
479
+ * };
480
+ * }
481
+ * ```
482
+ */
483
+ type MemberDisplayInfo = Pick<Member, 'id' | 'profileImage' | 'verified'> & {
484
+ email: string;
485
+ };
486
+
487
+ export { type App as A, type Branding as B, type ContentGroup as C, type ExtractData as E, type Member as M, Payload as P, type SecureContent as S, type Thread as T, type Plan as a, type Price as b, type PlanConnection as c, type AuthProvider as d, type MemberAuth as e, type AuthTokens as f, type MemberCard as g, type MemberInvoice as h, type MemberReceipt as i, type CheckoutTotal as j, type CustomField as k, type Post as l, type PaginatedData as m, type MemberDisplayInfo as n };
@@ -0,0 +1,193 @@
1
+ import { Payload } from './types/utils/payloads.mjs';
2
+
3
+ /**
4
+ * @fileoverview Convenience type exports for Memberstack SDK.
5
+ * These types provide direct access to core data models without needing
6
+ * to navigate the Payload.Transforms namespace.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import type { Member, Plan, PlanConnection } from '@memberstack/dom';
11
+ *
12
+ * function displayMember(member: Member) {
13
+ * console.log(member.auth.email);
14
+ * }
15
+ * ```
16
+ */
17
+
18
+ /**
19
+ * A Memberstack member (authenticated user).
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const { data: member } = await memberstack.getCurrentMember();
24
+ * if (member) {
25
+ * console.log('Email:', member.auth.email);
26
+ * console.log('Verified:', member.verified);
27
+ * console.log('Plans:', member.planConnections.map(p => p.planId));
28
+ * }
29
+ * ```
30
+ */
31
+ type Member = Payload.Transforms["Member"];
32
+ /**
33
+ * A membership plan in your Memberstack app.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const { data: plans } = await memberstack.getPlans();
38
+ * plans.forEach((plan: Plan) => {
39
+ * console.log(`${plan.name}: ${plan.prices?.[0]?.amount}`);
40
+ * });
41
+ * ```
42
+ */
43
+ type Plan = Payload.Transforms["Plan"];
44
+ /**
45
+ * A price option for a plan (monthly, yearly, etc.).
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const plan = plans[0];
50
+ * plan.prices?.forEach((price: Price) => {
51
+ * console.log(`${price.name}: ${price.amount} ${price.currency}/${price.interval.type}`);
52
+ * });
53
+ * ```
54
+ */
55
+ type Price = Payload.Transforms["Price"];
56
+ /**
57
+ * A member's connection to a plan (subscription or one-time purchase).
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const activePlans = member.planConnections.filter(
62
+ * (conn: PlanConnection) => conn.active
63
+ * );
64
+ * ```
65
+ */
66
+ type PlanConnection = Payload.Transforms["MemberPlanConnection"];
67
+ /**
68
+ * A content group that restricts access to URLs.
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const { data: groups } = await memberstack.getRestrictedUrlGroups();
73
+ * const accessibleGroups = groups.filter(
74
+ * (g: ContentGroup) => g.activeMemberHasAccess
75
+ * );
76
+ * ```
77
+ */
78
+ type ContentGroup = Payload.Transforms["RestrictedUrlGroup"];
79
+ /**
80
+ * App configuration and settings.
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * const { data: app } = await memberstack.getApp();
85
+ * console.log('App:', app.name);
86
+ * console.log('Mode:', app.mode); // 'live' or 'sandbox'
87
+ * ```
88
+ */
89
+ type App = Payload.Transforms["App"];
90
+ /**
91
+ * Authentication provider configuration (Google, Facebook, etc.).
92
+ */
93
+ type AuthProvider = Payload.Transforms["AuthProvider"];
94
+ /**
95
+ * Authentication response with tokens and member data.
96
+ */
97
+ type MemberAuth = Payload.Transforms["MemberAuth"];
98
+ /**
99
+ * Auth tokens returned after login/signup.
100
+ */
101
+ type AuthTokens = MemberAuth["tokens"];
102
+ /**
103
+ * A saved payment card for a member.
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const { data: cards } = await memberstack.getMemberCards();
108
+ * const defaultCard = cards.find((card: MemberCard) => card.default);
109
+ * ```
110
+ */
111
+ type MemberCard = Payload.Transforms["MemberCard"];
112
+ /**
113
+ * An invoice for a member's subscription.
114
+ */
115
+ type MemberInvoice = Payload.Transforms["MemberInvoice"];
116
+ /**
117
+ * A payment receipt.
118
+ */
119
+ type MemberReceipt = Payload.Transforms["MemberReceipt"];
120
+ /**
121
+ * Checkout total calculation including taxes and fees.
122
+ */
123
+ type CheckoutTotal = Payload.Transforms["TotalCheckoutAmount"];
124
+ /**
125
+ * Gated content returned by getSecureContent().
126
+ */
127
+ type SecureContent = Payload.Transforms["SecureContent"];
128
+ /**
129
+ * A custom field defined in your Memberstack app.
130
+ */
131
+ type CustomField = Payload.Transforms["CustomField"];
132
+ /**
133
+ * App branding configuration.
134
+ */
135
+ type Branding = Payload.Transforms["Branding"];
136
+ /**
137
+ * A community post.
138
+ */
139
+ type Post = Payload.Transforms["Post"];
140
+ /**
141
+ * A thread/reply on a post.
142
+ */
143
+ type Thread = Payload.Transforms["Thread"];
144
+ /**
145
+ * Extract the data type from a Memberstack SDK response.
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * import type { ExtractData, GetCurrentMemberPayload } from '@memberstack/dom';
150
+ *
151
+ * // Get the member type from the response
152
+ * type MemberData = ExtractData<GetCurrentMemberPayload>;
153
+ * // MemberData = Member | null
154
+ * ```
155
+ */
156
+ type ExtractData<T> = T extends {
157
+ data: infer D;
158
+ } ? D : never;
159
+ /**
160
+ * Generic paginated response shape.
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * type InvoicesPage = PaginatedData<MemberInvoice>;
165
+ * // { data: MemberInvoice[], hasNext: boolean, endCursor: string | null, totalCount: number }
166
+ * ```
167
+ */
168
+ type PaginatedData<T> = {
169
+ data: T[];
170
+ hasNext: boolean;
171
+ endCursor: string | null;
172
+ totalCount: number;
173
+ };
174
+ /**
175
+ * Common member fields for display purposes.
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * function getMemberDisplayInfo(member: Member): MemberDisplayInfo {
180
+ * return {
181
+ * id: member.id,
182
+ * email: member.auth.email,
183
+ * profileImage: member.profileImage,
184
+ * verified: member.verified,
185
+ * };
186
+ * }
187
+ * ```
188
+ */
189
+ type MemberDisplayInfo = Pick<Member, 'id' | 'profileImage' | 'verified'> & {
190
+ email: string;
191
+ };
192
+
193
+ export type { App as A, Branding as B, ContentGroup as C, ExtractData as E, Member as M, Plan as P, SecureContent as S, Thread as T, Price as a, PlanConnection as b, AuthProvider as c, MemberAuth as d, AuthTokens as e, MemberCard as f, MemberInvoice as g, MemberReceipt as h, CheckoutTotal as i, CustomField as j, Post as k, PaginatedData as l, MemberDisplayInfo as m };