@raba7ni/raba7ni 1.0.2 → 1.0.4

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/dist/index.d.ts CHANGED
@@ -26,6 +26,7 @@ interface ApiResponse<T = any> {
26
26
  success: boolean;
27
27
  data?: T;
28
28
  message?: string;
29
+ error?: string;
29
30
  }
30
31
  /**
31
32
  * API error response structure
@@ -34,6 +35,8 @@ interface ApiError {
34
35
  error: string;
35
36
  message: string;
36
37
  errors?: Record<string, string[]>;
38
+ remaining_attempts?: number;
39
+ retry_after_minutes?: number;
37
40
  }
38
41
  /**
39
42
  * Rate limit information from response headers
@@ -45,13 +48,23 @@ interface RateLimitInfo {
45
48
  dailyRemaining: number;
46
49
  resetTime?: string;
47
50
  }
51
+ /**
52
+ * Member information
53
+ */
54
+ interface Member {
55
+ id: number;
56
+ name: string;
57
+ email?: string;
58
+ phone?: string;
59
+ created_at: string;
60
+ }
48
61
  /**
49
62
  * Member validation request
50
63
  */
51
64
  interface ValidateMemberRequest {
52
65
  card_id: number;
53
66
  phone_number: string;
54
- include_member_data?: boolean | undefined;
67
+ include_member_data?: boolean;
55
68
  }
56
69
  /**
57
70
  * Member validation response
@@ -70,12 +83,38 @@ interface MemberDetailsRequest {
70
83
  card_id: number;
71
84
  phone_number: string;
72
85
  }
86
+ /**
87
+ * Card relationship information
88
+ */
89
+ interface CardRelationship {
90
+ card_id: number;
91
+ points: number;
92
+ joined_at: string | null;
93
+ last_updated: string | null;
94
+ }
73
95
  /**
74
96
  * Member details response
75
97
  */
76
98
  interface MemberDetailsResponse {
77
99
  member: Member;
78
100
  card_relationship: CardRelationship;
101
+ validated_at: string;
102
+ }
103
+ /**
104
+ * Request OTP request
105
+ */
106
+ interface RequestOTPRequest {
107
+ email: string;
108
+ card_id: number;
109
+ }
110
+ /**
111
+ * Request OTP response
112
+ */
113
+ interface RequestOTPResponse {
114
+ expires_at?: string;
115
+ expires_in_minutes?: number;
116
+ member_exists?: boolean;
117
+ message?: string;
79
118
  }
80
119
  /**
81
120
  * Find or create member request
@@ -85,6 +124,7 @@ interface FindOrCreateMemberRequest {
85
124
  name: string;
86
125
  email: string;
87
126
  phone_number: string;
127
+ verification_code?: string;
88
128
  create_order?: boolean;
89
129
  order?: Order;
90
130
  }
@@ -94,7 +134,6 @@ interface FindOrCreateMemberRequest {
94
134
  interface Order {
95
135
  award_points?: boolean;
96
136
  total_amount: number;
97
- delivery_cost?: number;
98
137
  items?: OrderItem[];
99
138
  }
100
139
  /**
@@ -105,6 +144,27 @@ interface OrderItem {
105
144
  amount: number;
106
145
  metadata?: Record<string, any>;
107
146
  }
147
+ /**
148
+ * Order response
149
+ */
150
+ interface OrderResponse {
151
+ id: number;
152
+ total_amount: number;
153
+ items?: OrderItem[];
154
+ points_awarded: boolean;
155
+ status: string;
156
+ created_at: string;
157
+ }
158
+ /**
159
+ * Transaction information
160
+ */
161
+ interface Transaction {
162
+ id: number;
163
+ points?: number;
164
+ stamps?: number;
165
+ event: string;
166
+ created_at: string;
167
+ }
108
168
  /**
109
169
  * Find or create member response
110
170
  */
@@ -117,62 +177,199 @@ interface FindOrCreateMemberResponse {
117
177
  transaction?: Transaction;
118
178
  }
119
179
  /**
120
- * Order response
180
+ * Card information (summary for list)
121
181
  */
122
- interface OrderResponse {
182
+ interface CardSummary {
123
183
  id: number;
124
- total_amount: string;
125
- delivery_cost?: string;
126
- items?: OrderItem[];
127
- points_awarded: boolean;
128
- status: string;
129
- created_at: string;
184
+ unique_identifier: string;
185
+ name: string;
186
+ head: string;
187
+ is_active: boolean;
188
+ initial_bonus_points?: number;
189
+ points_per_currency?: number;
190
+ currency_unit_amount?: number;
191
+ min_points_per_purchase?: number;
192
+ max_points_per_purchase?: number;
193
+ points_expiration_months?: number;
194
+ club_id: number;
130
195
  }
131
196
  /**
132
- * Card information
197
+ * Card information (detailed)
133
198
  */
134
199
  interface Card {
135
200
  id: number;
201
+ unique_identifier: string;
136
202
  name: string;
203
+ head?: string;
137
204
  description?: string;
138
205
  club_id: number;
139
- club_name: string;
140
- reward_type: 'points' | 'stamps';
206
+ club_name?: string;
207
+ reward_type?: 'points' | 'stamps';
141
208
  is_active: boolean;
142
- created_at: string;
209
+ initial_bonus_points?: number;
210
+ points_per_currency?: number;
211
+ currency_unit_amount?: number;
212
+ created_at?: string;
143
213
  }
144
214
  /**
145
- * Member information
215
+ * List cards response
146
216
  */
147
- interface Member {
217
+ interface ListCardsResponse {
218
+ cards: CardSummary[];
219
+ total: number;
220
+ }
221
+ /**
222
+ * Reward information
223
+ */
224
+ interface Reward {
148
225
  id: number;
149
- first_name?: string;
150
- last_name?: string;
151
- name?: string;
152
- email?: string;
153
- phone?: string;
226
+ name: string;
227
+ title?: Record<string, string>;
228
+ description?: Record<string, string>;
229
+ points?: number;
230
+ stamps_required?: number;
231
+ reward_type?: string;
232
+ is_active: boolean;
233
+ active_from?: string;
234
+ expiration_date?: string;
235
+ images?: any;
236
+ }
237
+ /**
238
+ * List rewards response
239
+ */
240
+ interface ListRewardsResponse {
241
+ card_id: number;
242
+ rewards: Reward[];
243
+ total: number;
244
+ }
245
+ /**
246
+ * Claim request status
247
+ */
248
+ type ClaimRequestStatus = 'pending' | 'approved' | 'rejected' | 'expired';
249
+ /**
250
+ * Claim request
251
+ */
252
+ interface ClaimRequest {
253
+ id: number;
254
+ code?: string;
255
+ unique_code?: string;
256
+ status: ClaimRequestStatus;
257
+ member?: Member;
258
+ reward?: Reward;
259
+ card_id?: number;
260
+ member_note?: string;
261
+ staff_note?: string;
262
+ expires_at?: string;
154
263
  created_at: string;
264
+ processed_at?: string;
155
265
  }
156
266
  /**
157
- * Card relationship information
267
+ * List claim requests response
158
268
  */
159
- interface CardRelationship {
269
+ interface ListClaimRequestsResponse {
270
+ claim_requests: ClaimRequest[];
271
+ total: number;
272
+ }
273
+ /**
274
+ * Request claim OTP request
275
+ */
276
+ interface RequestClaimOTPRequest {
277
+ member_email: string;
160
278
  card_id: number;
161
- points: number;
162
- stamps: number;
163
- joined_at: string;
164
- last_updated: string;
279
+ reward_id?: number;
165
280
  }
166
281
  /**
167
- * Transaction information
282
+ * Create claim request
168
283
  */
169
- interface Transaction {
284
+ interface CreateClaimRequestRequest {
285
+ member_email: string;
286
+ card_id: number;
287
+ reward_id: number;
288
+ verification_code: string;
289
+ member_note?: string;
290
+ fulfillment_details?: Record<string, any>;
291
+ }
292
+ /**
293
+ * Approve/Reject claim request
294
+ */
295
+ interface ProcessClaimRequestRequest {
296
+ staff_note?: string;
297
+ }
298
+ /**
299
+ * Referral stats response
300
+ */
301
+ interface ReferralStatsResponse {
302
+ total_referrals: number;
303
+ successful_referrals: number;
304
+ pending_referrals: number;
305
+ top_referrers: Referrer[];
306
+ }
307
+ /**
308
+ * Referrer info
309
+ */
310
+ interface Referrer {
311
+ member_id: number;
312
+ member_name: string;
313
+ referral_count: number;
314
+ successful_count: number;
315
+ }
316
+ /**
317
+ * List referrers response
318
+ */
319
+ interface ListReferrersResponse {
320
+ referrers: Referrer[];
321
+ total: number;
322
+ }
323
+ /**
324
+ * Referral info
325
+ */
326
+ interface Referral {
170
327
  id: number;
171
- points?: number;
172
- stamps?: number;
173
- event: string;
328
+ referrer_id: number;
329
+ referee_id?: number;
330
+ referee_email?: string;
331
+ status: string;
332
+ bonus_awarded?: number;
174
333
  created_at: string;
175
334
  }
335
+ /**
336
+ * List referrals response
337
+ */
338
+ interface ListReferralsResponse {
339
+ referrals: Referral[];
340
+ total: number;
341
+ }
342
+ /**
343
+ * Validate referral code request
344
+ */
345
+ interface ValidateReferralCodeRequest {
346
+ referral_code: string;
347
+ card_id: number;
348
+ }
349
+ /**
350
+ * Validate referral code response
351
+ */
352
+ interface ValidateReferralCodeResponse {
353
+ is_valid: boolean;
354
+ referrer?: {
355
+ id: number;
356
+ name: string;
357
+ };
358
+ }
359
+ /**
360
+ * Apply referral request
361
+ */
362
+ interface ApplyReferralRequest {
363
+ referral_code: string;
364
+ card_id: number;
365
+ referee_email: string;
366
+ }
367
+ /**
368
+ * Apply referral response
369
+ */
370
+ interface ApplyReferralResponse {
371
+ referral: Referral;
372
+ }
176
373
  /**
177
374
  * Available API scope
178
375
  */
@@ -181,6 +378,16 @@ interface Scope {
181
378
  name: string;
182
379
  description: string;
183
380
  }
381
+ /**
382
+ * Scopes response
383
+ */
384
+ interface ScopesResponse {
385
+ scopes: string[];
386
+ application: {
387
+ id: string;
388
+ name: string;
389
+ };
390
+ }
184
391
  /**
185
392
  * Available webhook event
186
393
  */
@@ -214,31 +421,27 @@ interface MemberLeftWebhookData {
214
421
  card: Card;
215
422
  }
216
423
  /**
217
- * Points earned webhook data
424
+ * Claim request created webhook data
218
425
  */
219
- interface PointsEarnedWebhookData {
426
+ interface ClaimRequestCreatedWebhookData {
427
+ claim_request: ClaimRequest;
220
428
  member: Member;
221
429
  card: Card;
222
- transaction: Transaction;
430
+ reward: Reward;
223
431
  }
224
432
  /**
225
- * Points redeemed webhook data
433
+ * Claim request processed webhook data
226
434
  */
227
- interface PointsRedeemedWebhookData {
435
+ interface ClaimRequestProcessedWebhookData {
436
+ claim_request: ClaimRequest;
228
437
  member: Member;
229
438
  card: Card;
230
- transaction: Transaction;
439
+ reward: Reward;
440
+ status: 'approved' | 'rejected';
441
+ processed_at: string;
231
442
  }
232
443
  /**
233
- * Transaction created webhook data
234
- */
235
- interface TransactionCreatedWebhookData {
236
- transaction: Transaction;
237
- member: Member;
238
- card: Card;
239
- }
240
- /**
241
- * SDK initialization error
444
+ * SDK error base class
242
445
  */
243
446
  declare class Raba7niError extends Error {
244
447
  code?: string | undefined;
@@ -276,10 +479,24 @@ declare class NetworkError extends Raba7niError {
276
479
 
277
480
  /**
278
481
  * Main Raba7ni SDK class
482
+ *
483
+ * Provides methods for all Developer API endpoints.
279
484
  */
280
485
  declare class Raba7niSDK {
281
486
  private client;
282
487
  constructor(config: Raba7niConfig);
488
+ /**
489
+ * Test API connection and get available scopes
490
+ */
491
+ testConnection(): Promise<ScopesResponse>;
492
+ /**
493
+ * Alias for testConnection - Get available API scopes
494
+ */
495
+ getScopes(): Promise<ScopesResponse>;
496
+ /**
497
+ * Get available webhook events
498
+ */
499
+ getWebhookEvents(): Promise<WebhookEvent[]>;
283
500
  /**
284
501
  * Validate if a phone number is a member of a specific card
285
502
  */
@@ -290,23 +507,92 @@ declare class Raba7niSDK {
290
507
  * Get detailed information about a member for a specific card
291
508
  */
292
509
  getMemberDetails(cardId: number | string, phoneNumber: string): Promise<MemberDetailsResponse>;
510
+ /**
511
+ * Request OTP for new member registration
512
+ *
513
+ * @param email - Email address to send OTP to
514
+ * @param cardId - The loyalty card ID
515
+ * @returns OTP info or member_exists flag if already registered
516
+ */
517
+ requestMemberOTP(email: string, cardId: number | string): Promise<RequestOTPResponse>;
293
518
  /**
294
519
  * Find an existing member by email/phone, or create a new account.
295
520
  * Optionally create an online order and/or award points.
296
521
  */
297
522
  findOrCreateMember(request: FindOrCreateMemberRequest): Promise<FindOrCreateMemberResponse>;
298
523
  /**
299
- * Get card information
524
+ * Get all loyalty cards available for your API key
525
+ */
526
+ listCards(): Promise<ListCardsResponse>;
527
+ /**
528
+ * Get details about a specific loyalty card
300
529
  */
301
530
  getCardInfo(cardId: number | string): Promise<Card>;
302
531
  /**
303
- * Get available API scopes
532
+ * Get all rewards available for a specific card
304
533
  */
305
- getScopes(): Promise<Scope[]>;
534
+ listCardRewards(cardId: number | string): Promise<ListRewardsResponse>;
306
535
  /**
307
- * Get available webhook events
536
+ * Get all claim requests for a card
537
+ *
538
+ * @param cardId - The loyalty card ID
539
+ * @param status - Optional filter by status
308
540
  */
309
- getWebhookEvents(): Promise<WebhookEvent[]>;
541
+ listClaimRequests(cardId: number | string, status?: ClaimRequestStatus): Promise<ListClaimRequestsResponse>;
542
+ /**
543
+ * Request OTP for claiming a reward
544
+ *
545
+ * @param memberEmail - Member's email address
546
+ * @param cardId - The loyalty card ID
547
+ * @param rewardId - Optional specific reward ID
548
+ */
549
+ requestClaimOTP(memberEmail: string, cardId: number | string, rewardId?: number): Promise<RequestOTPResponse>;
550
+ /**
551
+ * Create a new claim request for a reward
552
+ *
553
+ * @param request - Claim request details including OTP verification
554
+ */
555
+ createClaimRequest(request: CreateClaimRequestRequest): Promise<{
556
+ claim_request: ClaimRequest;
557
+ }>;
558
+ /**
559
+ * Get details of a specific claim request
560
+ */
561
+ getClaimRequest(requestId: number): Promise<{
562
+ claim_request: ClaimRequest;
563
+ }>;
564
+ /**
565
+ * Approve a pending claim request
566
+ */
567
+ approveClaimRequest(requestId: number, staffNote?: string): Promise<{
568
+ claim_request: ClaimRequest;
569
+ }>;
570
+ /**
571
+ * Reject a pending claim request
572
+ */
573
+ rejectClaimRequest(requestId: number, staffNote?: string): Promise<{
574
+ claim_request: ClaimRequest;
575
+ }>;
576
+ /**
577
+ * Get referral statistics for a card
578
+ */
579
+ getReferralStats(cardId: number | string): Promise<ReferralStatsResponse>;
580
+ /**
581
+ * Get list of top referrers for a card
582
+ */
583
+ listReferrers(cardId: number | string): Promise<ListReferrersResponse>;
584
+ /**
585
+ * Get all referrals made by a specific member
586
+ */
587
+ listReferrerReferrals(cardId: number | string, memberId: number): Promise<ListReferralsResponse>;
588
+ /**
589
+ * Validate a referral code
590
+ */
591
+ validateReferralCode(referralCode: string, cardId: number | string): Promise<ValidateReferralCodeResponse>;
592
+ /**
593
+ * Apply a referral code to a new member
594
+ */
595
+ applyReferral(referralCode: string, cardId: number | string, refereeEmail: string): Promise<ApplyReferralResponse>;
310
596
  /**
311
597
  * Get current rate limit information
312
598
  */
@@ -386,26 +672,6 @@ declare function verifyWebhookSignature(payload: string, signature: string, secr
386
672
  * Parse webhook payload with type safety
387
673
  */
388
674
  declare function parseWebhookPayload<T = any>(payload: string): WebhookPayload<T>;
389
- /**
390
- * Type guard for member joined webhook
391
- */
392
- declare function isMemberJoinedWebhook(payload: WebhookPayload): payload is WebhookPayload<MemberJoinedWebhookData>;
393
- /**
394
- * Type guard for member left webhook
395
- */
396
- declare function isMemberLeftWebhook(payload: WebhookPayload): payload is WebhookPayload<MemberLeftWebhookData>;
397
- /**
398
- * Type guard for points earned webhook
399
- */
400
- declare function isPointsEarnedWebhook(payload: WebhookPayload): payload is WebhookPayload<PointsEarnedWebhookData>;
401
- /**
402
- * Type guard for points redeemed webhook
403
- */
404
- declare function isPointsRedeemedWebhook(payload: WebhookPayload): payload is WebhookPayload<PointsRedeemedWebhookData>;
405
- /**
406
- * Type guard for transaction created webhook
407
- */
408
- declare function isTransactionCreatedWebhook(payload: WebhookPayload): payload is WebhookPayload<TransactionCreatedWebhookData>;
409
675
  /**
410
676
  * Webhook handler class
411
677
  */
@@ -430,9 +696,8 @@ declare class WebhookHandler {
430
696
  handleWebhook(payload: string, signature: string, handlers: {
431
697
  onMemberJoined?: (data: MemberJoinedWebhookData) => Promise<void> | void;
432
698
  onMemberLeft?: (data: MemberLeftWebhookData) => Promise<void> | void;
433
- onPointsEarned?: (data: PointsEarnedWebhookData) => Promise<void> | void;
434
- onPointsRedeemed?: (data: PointsRedeemedWebhookData) => Promise<void> | void;
435
- onTransactionCreated?: (data: TransactionCreatedWebhookData) => Promise<void> | void;
699
+ onClaimRequestCreated?: (data: ClaimRequestCreatedWebhookData) => Promise<void> | void;
700
+ onClaimRequestProcessed?: (data: ClaimRequestProcessedWebhookData) => Promise<void> | void;
436
701
  onUnknownEvent?: (event: string, data: any) => Promise<void> | void;
437
702
  }): Promise<void>;
438
703
  /**
@@ -472,26 +737,6 @@ declare function sanitizeString(input: string, maxLength?: number): string;
472
737
  * Validate name field
473
738
  */
474
739
  declare function validateName(name: string): string;
475
- /**
476
- * Deep clone object
477
- */
478
- declare function deepClone<T>(obj: T): T;
479
- /**
480
- * Retry delay calculation with exponential backoff
481
- */
482
- declare function calculateRetryDelay(attempt: number, baseDelay?: number): number;
483
- /**
484
- * Generate random string for request tracking
485
- */
486
- declare function generateRequestId(): string;
487
- /**
488
- * Check if a value is a valid ISO date string
489
- */
490
- declare function isValidISODate(dateString: string): boolean;
491
- /**
492
- * Format date to ISO string
493
- */
494
- declare function formatDate(date: Date | string): string;
495
740
 
496
- export { AuthenticationError, NetworkError, Raba7niClient, Raba7niError, Raba7niSDK, RateLimitError, ValidationError, WebhookHandler, calculateRetryDelay, deepClone, Raba7niSDK as default, formatDate, generateRequestId, isMemberJoinedWebhook, isMemberLeftWebhook, isPointsEarnedWebhook, isPointsRedeemedWebhook, isTransactionCreatedWebhook, isValidISODate, normalizePhoneNumber, parseWebhookPayload, sanitizeString, validateAmount, validateCardId, validateEmail, validateName, verifyWebhookSignature };
497
- export type { ApiError, ApiResponse, Card, CardRelationship, FindOrCreateMemberRequest, FindOrCreateMemberResponse, Member, MemberDetailsRequest, MemberDetailsResponse, MemberJoinedWebhookData, MemberLeftWebhookData, Order, OrderItem, OrderResponse, PointsEarnedWebhookData, PointsRedeemedWebhookData, Raba7niConfig, RateLimitInfo, Scope, Transaction, TransactionCreatedWebhookData, ValidateMemberRequest, ValidateMemberResponse, WebhookEvent, WebhookPayload };
741
+ export { AuthenticationError, NetworkError, Raba7niClient, Raba7niError, Raba7niSDK, RateLimitError, ValidationError, WebhookHandler, normalizePhoneNumber, parseWebhookPayload, sanitizeString, validateAmount, validateCardId, validateEmail, validateName, verifyWebhookSignature };
742
+ export type { ApiError, ApiResponse, ApplyReferralRequest, ApplyReferralResponse, Card, CardRelationship, CardSummary, ClaimRequest, ClaimRequestCreatedWebhookData, ClaimRequestProcessedWebhookData, ClaimRequestStatus, CreateClaimRequestRequest, FindOrCreateMemberRequest, FindOrCreateMemberResponse, ListCardsResponse, ListClaimRequestsResponse, ListReferralsResponse, ListReferrersResponse, ListRewardsResponse, Member, MemberDetailsRequest, MemberDetailsResponse, MemberJoinedWebhookData, MemberLeftWebhookData, Order, OrderItem, OrderResponse, ProcessClaimRequestRequest, Raba7niConfig, RateLimitInfo, Referral, ReferralStatsResponse, Referrer, RequestClaimOTPRequest, RequestOTPRequest, RequestOTPResponse, Reward, Scope, ScopesResponse, Transaction, ValidateMemberRequest, ValidateMemberResponse, ValidateReferralCodeRequest, ValidateReferralCodeResponse, WebhookEvent, WebhookPayload };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,aAAa,EACb,WAAW,EACX,QAAQ,EACR,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,KAAK,EACL,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGzF,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAGjB,YAAY,EAEV,aAAa,EACb,WAAW,EACX,QAAQ,EACR,aAAa,EAGb,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,EACL,SAAS,EACT,aAAa,EACb,WAAW,EAGX,IAAI,EACJ,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,mBAAmB,EAGnB,YAAY,EACZ,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAG1B,qBAAqB,EACrB,QAAQ,EACR,qBAAqB,EACrB,QAAQ,EACR,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EAGrB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EAGd,uBAAuB,EACvB,qBAAqB,EACrB,8BAA8B,EAC9B,gCAAgC,EACjC,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC"}