@addn/sdk 1.0.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 (156) hide show
  1. package/dist/auth/storage.d.ts +25 -0
  2. package/dist/auth/storage.d.ts.map +1 -0
  3. package/dist/auth/storage.js +72 -0
  4. package/dist/auth/storage.js.map +1 -0
  5. package/dist/auth/token-manager.d.ts +39 -0
  6. package/dist/auth/token-manager.d.ts.map +1 -0
  7. package/dist/auth/token-manager.js +98 -0
  8. package/dist/auth/token-manager.js.map +1 -0
  9. package/dist/client.d.ts +31 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +39 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/http/errors.d.ts +51 -0
  14. package/dist/http/errors.d.ts.map +1 -0
  15. package/dist/http/errors.js +92 -0
  16. package/dist/http/errors.js.map +1 -0
  17. package/dist/http/http-client.d.ts +18 -0
  18. package/dist/http/http-client.d.ts.map +1 -0
  19. package/dist/http/http-client.js +221 -0
  20. package/dist/http/http-client.js.map +1 -0
  21. package/dist/http/types.d.ts +27 -0
  22. package/dist/http/types.d.ts.map +1 -0
  23. package/dist/http/types.js +3 -0
  24. package/dist/http/types.js.map +1 -0
  25. package/dist/index.d.ts +18 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +36 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/modules/accounts.module.d.ts +15 -0
  30. package/dist/modules/accounts.module.d.ts.map +1 -0
  31. package/dist/modules/accounts.module.js +57 -0
  32. package/dist/modules/accounts.module.js.map +1 -0
  33. package/dist/modules/analytics.module.d.ts +14 -0
  34. package/dist/modules/analytics.module.d.ts.map +1 -0
  35. package/dist/modules/analytics.module.js +24 -0
  36. package/dist/modules/analytics.module.js.map +1 -0
  37. package/dist/modules/auth.module.d.ts +18 -0
  38. package/dist/modules/auth.module.d.ts.map +1 -0
  39. package/dist/modules/auth.module.js +113 -0
  40. package/dist/modules/auth.module.js.map +1 -0
  41. package/dist/modules/content-plans.module.d.ts +58 -0
  42. package/dist/modules/content-plans.module.d.ts.map +1 -0
  43. package/dist/modules/content-plans.module.js +125 -0
  44. package/dist/modules/content-plans.module.js.map +1 -0
  45. package/dist/modules/customers.module.d.ts +12 -0
  46. package/dist/modules/customers.module.d.ts.map +1 -0
  47. package/dist/modules/customers.module.js +43 -0
  48. package/dist/modules/customers.module.js.map +1 -0
  49. package/dist/modules/notifications.module.d.ts +20 -0
  50. package/dist/modules/notifications.module.d.ts.map +1 -0
  51. package/dist/modules/notifications.module.js +37 -0
  52. package/dist/modules/notifications.module.js.map +1 -0
  53. package/dist/modules/orgs.module.d.ts +23 -0
  54. package/dist/modules/orgs.module.d.ts.map +1 -0
  55. package/dist/modules/orgs.module.js +112 -0
  56. package/dist/modules/orgs.module.js.map +1 -0
  57. package/dist/modules/projects.module.d.ts +26 -0
  58. package/dist/modules/projects.module.d.ts.map +1 -0
  59. package/dist/modules/projects.module.js +88 -0
  60. package/dist/modules/projects.module.js.map +1 -0
  61. package/dist/modules/scheduling.module.d.ts +13 -0
  62. package/dist/modules/scheduling.module.d.ts.map +1 -0
  63. package/dist/modules/scheduling.module.js +32 -0
  64. package/dist/modules/scheduling.module.js.map +1 -0
  65. package/dist/modules/storage.module.d.ts +36 -0
  66. package/dist/modules/storage.module.d.ts.map +1 -0
  67. package/dist/modules/storage.module.js +100 -0
  68. package/dist/modules/storage.module.js.map +1 -0
  69. package/dist/modules/subscriptions.module.d.ts +25 -0
  70. package/dist/modules/subscriptions.module.d.ts.map +1 -0
  71. package/dist/modules/subscriptions.module.js +62 -0
  72. package/dist/modules/subscriptions.module.js.map +1 -0
  73. package/dist/types/account.types.d.ts +17 -0
  74. package/dist/types/account.types.d.ts.map +1 -0
  75. package/dist/types/account.types.js +3 -0
  76. package/dist/types/account.types.js.map +1 -0
  77. package/dist/types/analytics.types.d.ts +15 -0
  78. package/dist/types/analytics.types.d.ts.map +1 -0
  79. package/dist/types/analytics.types.js +3 -0
  80. package/dist/types/analytics.types.js.map +1 -0
  81. package/dist/types/api.types.d.ts +20 -0
  82. package/dist/types/api.types.d.ts.map +1 -0
  83. package/dist/types/api.types.js +3 -0
  84. package/dist/types/api.types.js.map +1 -0
  85. package/dist/types/auth.types.d.ts +40 -0
  86. package/dist/types/auth.types.d.ts.map +1 -0
  87. package/dist/types/auth.types.js +3 -0
  88. package/dist/types/auth.types.js.map +1 -0
  89. package/dist/types/content-plan.types.d.ts +27 -0
  90. package/dist/types/content-plan.types.d.ts.map +1 -0
  91. package/dist/types/content-plan.types.js +3 -0
  92. package/dist/types/content-plan.types.js.map +1 -0
  93. package/dist/types/customer.types.d.ts +25 -0
  94. package/dist/types/customer.types.d.ts.map +1 -0
  95. package/dist/types/customer.types.js +3 -0
  96. package/dist/types/customer.types.js.map +1 -0
  97. package/dist/types/index.d.ts +585 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +6 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/types/notification.types.d.ts +11 -0
  102. package/dist/types/notification.types.d.ts.map +1 -0
  103. package/dist/types/notification.types.js +3 -0
  104. package/dist/types/notification.types.js.map +1 -0
  105. package/dist/types/org.types.d.ts +25 -0
  106. package/dist/types/org.types.d.ts.map +1 -0
  107. package/dist/types/org.types.js +3 -0
  108. package/dist/types/org.types.js.map +1 -0
  109. package/dist/types/project.types.d.ts +20 -0
  110. package/dist/types/project.types.d.ts.map +1 -0
  111. package/dist/types/project.types.js +3 -0
  112. package/dist/types/project.types.js.map +1 -0
  113. package/dist/types/scheduling.types.d.ts +31 -0
  114. package/dist/types/scheduling.types.d.ts.map +1 -0
  115. package/dist/types/scheduling.types.js +3 -0
  116. package/dist/types/scheduling.types.js.map +1 -0
  117. package/dist/types/storage.types.d.ts +8 -0
  118. package/dist/types/storage.types.d.ts.map +1 -0
  119. package/dist/types/storage.types.js +3 -0
  120. package/dist/types/storage.types.js.map +1 -0
  121. package/dist/types/subscription.types.d.ts +19 -0
  122. package/dist/types/subscription.types.d.ts.map +1 -0
  123. package/dist/types/subscription.types.js +3 -0
  124. package/dist/types/subscription.types.js.map +1 -0
  125. package/package.json +27 -0
  126. package/src/auth/storage.ts +75 -0
  127. package/src/auth/token-manager.ts +107 -0
  128. package/src/client.ts +51 -0
  129. package/src/http/errors.ts +97 -0
  130. package/src/http/http-client.ts +263 -0
  131. package/src/http/types.ts +32 -0
  132. package/src/index.ts +17 -0
  133. package/src/modules/accounts.module.ts +61 -0
  134. package/src/modules/analytics.module.ts +26 -0
  135. package/src/modules/auth.module.ts +129 -0
  136. package/src/modules/content-plans.module.ts +170 -0
  137. package/src/modules/customers.module.ts +48 -0
  138. package/src/modules/notifications.module.ts +41 -0
  139. package/src/modules/orgs.module.ts +122 -0
  140. package/src/modules/projects.module.ts +97 -0
  141. package/src/modules/scheduling.module.ts +35 -0
  142. package/src/modules/storage.module.ts +121 -0
  143. package/src/modules/subscriptions.module.ts +82 -0
  144. package/src/types/account.types.ts +17 -0
  145. package/src/types/analytics.types.ts +15 -0
  146. package/src/types/api.types.ts +21 -0
  147. package/src/types/auth.types.ts +45 -0
  148. package/src/types/content-plan.types.ts +28 -0
  149. package/src/types/customer.types.ts +25 -0
  150. package/src/types/index.ts +682 -0
  151. package/src/types/notification.types.ts +10 -0
  152. package/src/types/org.types.ts +27 -0
  153. package/src/types/project.types.ts +21 -0
  154. package/src/types/scheduling.types.ts +32 -0
  155. package/src/types/storage.types.ts +7 -0
  156. package/src/types/subscription.types.ts +19 -0
@@ -0,0 +1,25 @@
1
+ export interface Customer {
2
+ id: string;
3
+ organization_id: string;
4
+ name: string;
5
+ brand_name?: string;
6
+ email?: string;
7
+ phone?: string;
8
+ website?: string;
9
+ logo_url?: string;
10
+ notes?: string;
11
+ created_at: string;
12
+ updated_at: string;
13
+ }
14
+
15
+ export interface CreateCustomerPayload {
16
+ name: string;
17
+ brand_name?: string;
18
+ email?: string;
19
+ phone?: string;
20
+ website?: string;
21
+ logo_url?: string;
22
+ notes?: string;
23
+ }
24
+
25
+ export interface UpdateCustomerPayload extends Partial<CreateCustomerPayload> {}
@@ -0,0 +1,682 @@
1
+ // ============================================================================
2
+ // ADDN SDK - Centralized Domain Interfaces & Data Transfer Objects (DTOs)
3
+ // ============================================================================
4
+
5
+ // ----------------------------------------------------------------------------
6
+ // 1. Core API Envelopes & Utility Types
7
+ // ----------------------------------------------------------------------------
8
+ export interface ApiResponse<T = any> {
9
+ success: boolean;
10
+ message?: string;
11
+ data: T;
12
+ code?: string;
13
+ details?: any;
14
+ }
15
+
16
+ export interface PaginatedMeta {
17
+ total: number;
18
+ page: number;
19
+ limit: number;
20
+ pages: number;
21
+ }
22
+
23
+ export interface PaginatedResponse<T = any> {
24
+ success: boolean;
25
+ message?: string;
26
+ data: T[];
27
+ meta: PaginatedMeta;
28
+ }
29
+
30
+ export interface ValidationErrorDetail {
31
+ field: string;
32
+ message: string;
33
+ type?: string;
34
+ }
35
+
36
+ // ----------------------------------------------------------------------------
37
+ // 2. Authentication & User Profile Domain
38
+ // ----------------------------------------------------------------------------
39
+ export interface UserProfile {
40
+ id: string;
41
+ _id?: string;
42
+ email: string;
43
+ full_name: string;
44
+ role?: "admin" | "org_admin" | "member" | "viewer" | string;
45
+ avatar_url?: string | null;
46
+ is_active: boolean;
47
+ is_superuser?: boolean;
48
+ organization_id?: string | null;
49
+ org_id?: string | null;
50
+ org_name?: string | null;
51
+ organization?: any;
52
+ organization_role?: 'owner' | 'admin' | 'member' | string;
53
+ has_pending_join_request?: boolean;
54
+ onboarding_completed: boolean;
55
+ created_at?: string;
56
+ updated_at?: string;
57
+ }
58
+
59
+ export interface LoginPayload {
60
+ email?: string;
61
+ username?: string;
62
+ password: string;
63
+ }
64
+
65
+ export interface RegisterPayload {
66
+ email: string;
67
+ password: string;
68
+ full_name: string;
69
+ organization_name?: string;
70
+ }
71
+
72
+ export type SignUpPayload = RegisterPayload;
73
+
74
+ export interface ResetPasswordPayload {
75
+ token: string;
76
+ new_password: string;
77
+ }
78
+
79
+ export interface AuthTokenResponse {
80
+ access_token: string;
81
+ refresh_token: string;
82
+ token_type: string;
83
+ expires_in?: number;
84
+ user: UserProfile;
85
+ }
86
+
87
+ export interface AuthResponse {
88
+ success: boolean;
89
+ message?: string;
90
+ data?: {
91
+ access_token: string;
92
+ refresh_token: string;
93
+ token_type: string;
94
+ user: UserProfile;
95
+ };
96
+ access_token?: string;
97
+ refresh_token?: string;
98
+ user?: UserProfile;
99
+ }
100
+
101
+ export interface PasswordResetRequestPayload {
102
+ email: string;
103
+ }
104
+
105
+ export interface PasswordResetConfirmPayload {
106
+ token: string;
107
+ new_password: string;
108
+ }
109
+
110
+ export interface MetaLoginPayload {
111
+ code: string;
112
+ redirect_uri: string;
113
+ }
114
+
115
+ // ----------------------------------------------------------------------------
116
+ // 3. Organization & Workspace Domain
117
+ // ----------------------------------------------------------------------------
118
+ export interface Organization {
119
+ id: string;
120
+ _id?: string;
121
+ name: string;
122
+ slug?: string;
123
+ invite_code?: string;
124
+ join_code?: string;
125
+ logo_url?: string | null;
126
+ owner_id?: string;
127
+ created_by?: string;
128
+ member_count?: number;
129
+ created_at: string;
130
+ updated_at: string;
131
+ }
132
+
133
+ export interface OrganizationMember {
134
+ id?: string;
135
+ user_id: string;
136
+ email: string;
137
+ full_name: string;
138
+ role: 'owner' | 'admin' | 'member' | 'org_admin' | 'viewer' | string;
139
+ designation?: string;
140
+ joined_at: string;
141
+ is_active?: boolean;
142
+ }
143
+
144
+ export type Member = OrganizationMember;
145
+
146
+ export interface OrgJoinRequest {
147
+ id: string;
148
+ user_id: string;
149
+ user_email?: string;
150
+ user_full_name?: string;
151
+ email?: string;
152
+ full_name?: string;
153
+ organization_id: string;
154
+ org_name?: string;
155
+ status: 'pending' | 'approved' | 'rejected';
156
+ created_at: string;
157
+ }
158
+
159
+ export interface CreateOrgPayload {
160
+ name: string;
161
+ }
162
+
163
+ export interface InviteMemberPayload {
164
+ email: string;
165
+ role: "org_admin" | "member" | "viewer";
166
+ }
167
+
168
+ // ----------------------------------------------------------------------------
169
+ // 4. Customer CRM Domain
170
+ // ----------------------------------------------------------------------------
171
+ export interface Customer {
172
+ id: string;
173
+ _id?: string;
174
+ organization_id: string;
175
+ name: string;
176
+ brand_name?: string;
177
+ email?: string;
178
+ phone?: string;
179
+ website?: string;
180
+ logo_url?: string;
181
+ notes?: string;
182
+ created_at: string;
183
+ updated_at: string;
184
+ }
185
+
186
+ export interface CreateCustomerPayload {
187
+ name: string;
188
+ brand_name?: string;
189
+ email?: string;
190
+ phone?: string;
191
+ website?: string;
192
+ logo_url?: string;
193
+ notes?: string;
194
+ }
195
+
196
+ export interface UpdateCustomerPayload extends Partial<CreateCustomerPayload> {}
197
+
198
+ // ----------------------------------------------------------------------------
199
+ // 5. Projects Domain
200
+ // ----------------------------------------------------------------------------
201
+ export interface ProjectMember {
202
+ user_id: string;
203
+ full_name: string;
204
+ email: string;
205
+ role: 'editor' | 'viewer' | 'commenter' | string;
206
+ designation?: string;
207
+ }
208
+
209
+ export interface ProjectAccount {
210
+ account_id: string;
211
+ username: string;
212
+ platform: string;
213
+ account_name?: string;
214
+ profile_picture_url?: string;
215
+ }
216
+
217
+ export interface Project {
218
+ id: string;
219
+ _id?: string;
220
+ organization_id: string;
221
+ customer_id?: string | null;
222
+ name: string;
223
+ description?: string;
224
+ client_email?: string;
225
+ client_phone?: string;
226
+ brand_details?: string;
227
+ niche?: string;
228
+ target_audience?: string;
229
+ status: 'draft' | 'active' | 'completed' | 'archived' | 'cancelled';
230
+ start_date?: string;
231
+ end_date?: string;
232
+ members?: ProjectMember[];
233
+ accounts?: ProjectAccount[];
234
+ plans_count?: number;
235
+ posts_count?: number;
236
+ created_by: string;
237
+ created_at: string;
238
+ updated_at: string;
239
+ }
240
+
241
+ export interface CreateProjectPayload {
242
+ name: string;
243
+ customer_id?: string;
244
+ description?: string;
245
+ client_email?: string;
246
+ client_phone?: string;
247
+ brand_details?: string;
248
+ niche?: string;
249
+ target_audience?: string;
250
+ start_date?: string;
251
+ end_date?: string;
252
+ }
253
+
254
+ export interface UpdateProjectPayload extends Partial<CreateProjectPayload> {
255
+ status?: 'draft' | 'active' | 'completed' | 'archived' | 'cancelled';
256
+ }
257
+
258
+ // ----------------------------------------------------------------------------
259
+ // 6. Content Plans & AI Generator Domain
260
+ // ----------------------------------------------------------------------------
261
+ export type ContentPlanStatus = 'draft' | 'in_review' | 'changes_requested' | 'approved' | 'cancelled' | 'already_scheduled';
262
+ export type ContentFormat = 'post' | 'reel' | 'story' | 'carousel' | 'video' | 'other';
263
+ export type AclRole = 'editor' | 'viewer' | 'commenter';
264
+
265
+ export interface AccessControlEntry {
266
+ user_id: string;
267
+ role: AclRole;
268
+ is_locked?: boolean;
269
+ }
270
+
271
+ export interface ApproverEntry {
272
+ user_id: string;
273
+ status: string;
274
+ note?: string;
275
+ decided_at?: string;
276
+ }
277
+
278
+ export interface PostItem {
279
+ id: string;
280
+ title: string;
281
+ caption?: string;
282
+ media_urls?: string[];
283
+ post_type: "reel" | "carousel" | "single_image" | "story" | string;
284
+ scheduled_at?: string;
285
+ status: "draft" | "pending_approval" | "approved" | "rejected" | "published" | string;
286
+ rejection_reason?: string;
287
+ }
288
+
289
+ export interface ContentPlan {
290
+ _id: string;
291
+ id: string;
292
+ organization_id: string;
293
+ project_id: string | null;
294
+ created_by: string;
295
+ title: string;
296
+ status: ContentPlanStatus;
297
+ content_type: ContentFormat;
298
+ platform: string;
299
+ objective?: string;
300
+ target_audience?: string;
301
+ content_pillar?: string;
302
+ core_idea?: string;
303
+ hook?: string;
304
+ key_message?: string;
305
+ call_to_action?: string;
306
+ visual_direction?: string;
307
+ script?: string;
308
+ caption?: string;
309
+ hashtags?: string;
310
+ reference_links?: string[];
311
+ asset_links?: string[];
312
+ instagram_account_id?: string;
313
+ due_date?: string;
314
+ require_client_approval: boolean;
315
+ access_control: AccessControlEntry[];
316
+ approvers: ApproverEntry[];
317
+ computed_user_role?: AclRole;
318
+ permissions?: {
319
+ can_edit?: boolean;
320
+ can_review?: boolean;
321
+ can_handoff?: boolean;
322
+ can_approve_directly?: boolean;
323
+ };
324
+ scheduling_item_id?: string | null;
325
+ internal_notes?: string;
326
+ posts?: PostItem[];
327
+ created_at: string;
328
+ updated_at: string;
329
+ }
330
+
331
+ export interface CreateContentPlanPayload {
332
+ title?: string;
333
+ project_id?: string;
334
+ content_type?: ContentFormat;
335
+ platform?: string;
336
+ objective?: string;
337
+ core_idea?: string;
338
+ target_audience?: string;
339
+ content_pillar?: string;
340
+ hook?: string;
341
+ key_message?: string;
342
+ call_to_action?: string;
343
+ script?: string;
344
+ caption?: string;
345
+ hashtags?: string;
346
+ visual_direction?: string;
347
+ instagram_account_id?: string;
348
+ access_control?: AccessControlEntry[];
349
+ internal_notes?: string;
350
+ posts?: Partial<PostItem>[];
351
+ }
352
+
353
+ export interface UpdateContentPlanPayload extends Partial<CreateContentPlanPayload> {
354
+ status?: ContentPlanStatus;
355
+ }
356
+
357
+ // ----------------------------------------------------------------------------
358
+ // 7. Post Scheduling & Public Approval Domain
359
+ // ----------------------------------------------------------------------------
360
+ export interface ScheduledPost {
361
+ id: string;
362
+ post_id: string;
363
+ account_id: string;
364
+ platform: "instagram" | "facebook" | "linkedin" | string;
365
+ caption: string;
366
+ media_urls: string[];
367
+ scheduled_time: string;
368
+ status: "scheduled" | "processing" | "published" | "failed";
369
+ error_message?: string;
370
+ approval_token?: string;
371
+ }
372
+
373
+ export interface PublicApprovalView {
374
+ token: string;
375
+ project_name: string;
376
+ posts: Array<{
377
+ id: string;
378
+ title: string;
379
+ caption: string;
380
+ media_urls: string[];
381
+ post_type: string;
382
+ status: string;
383
+ }>;
384
+ }
385
+
386
+ export interface SubmitApprovalPayload {
387
+ token: string;
388
+ post_id: string;
389
+ action: "approve" | "reject";
390
+ comment?: string;
391
+ }
392
+
393
+ // ----------------------------------------------------------------------------
394
+ // 8. Social Media Accounts Domain
395
+ // ----------------------------------------------------------------------------
396
+ export interface ConnectedAccount {
397
+ id: string;
398
+ _id?: string;
399
+ organization_id: string;
400
+ platform: 'instagram' | 'facebook' | 'linkedin' | string;
401
+ account_name?: string;
402
+ username: string;
403
+ name?: string;
404
+ account_id?: string;
405
+ profile_picture_url?: string;
406
+ status?: 'active' | 'token_expired' | 'error' | string;
407
+ is_active?: boolean;
408
+ token_expires_at?: string;
409
+ connected_at?: string;
410
+ created_at?: string;
411
+ }
412
+
413
+ export type SocialAccount = ConnectedAccount;
414
+
415
+ export interface ConnectAccountPayload {
416
+ access_token?: string;
417
+ auth_code?: string;
418
+ redirect_uri?: string;
419
+ platform: 'instagram' | 'facebook' | 'linkedin' | string;
420
+ }
421
+
422
+ export interface DevConnectPayload {
423
+ username: string;
424
+ account_id?: string;
425
+ instagram_account_id?: string;
426
+ facebook_page_id?: string;
427
+ access_token?: string;
428
+ platform?: string;
429
+ }
430
+
431
+ // ----------------------------------------------------------------------------
432
+ // 9. Analytics & Insights Domain
433
+ // ----------------------------------------------------------------------------
434
+ export interface InsightValue {
435
+ value: number;
436
+ end_time?: string;
437
+ }
438
+
439
+ export interface InsightMetric {
440
+ name: string;
441
+ period: string;
442
+ total_value?: { value: number };
443
+ values?: InsightValue[];
444
+ }
445
+
446
+ export interface WeeklyBestTime {
447
+ day: string;
448
+ full_day: string;
449
+ best_time_slot: string;
450
+ level: 'PEAK' | 'HIGH' | 'MODERATE';
451
+ is_best_overall: boolean;
452
+ }
453
+
454
+ export interface MediaMetrics {
455
+ id: string;
456
+ media_type: string;
457
+ like_count: number;
458
+ comments_count: number;
459
+ engagement_score: number;
460
+ timestamp: string;
461
+ thumbnail_url?: string;
462
+ permalink: string;
463
+ }
464
+
465
+ export interface TopComment {
466
+ id: string;
467
+ text: string;
468
+ username: string;
469
+ like_count: number;
470
+ timestamp: string;
471
+ }
472
+
473
+ export interface InstagramAnalyticsData {
474
+ profile: {
475
+ id: string;
476
+ username: string;
477
+ name: string;
478
+ profile_picture_url: string;
479
+ followers_count: number;
480
+ follows_count: number;
481
+ media_count: number;
482
+ };
483
+ insights: InsightMetric[];
484
+ historical_trend: {
485
+ day: string;
486
+ reach: number;
487
+ impressions: number;
488
+ engagement: number;
489
+ followers: number;
490
+ follower_growth: number;
491
+ }[];
492
+ real_media_metrics: {
493
+ total_likes: number;
494
+ total_comments: number;
495
+ total_shares: number;
496
+ total_saves: number;
497
+ recent_posts_analyzed: number;
498
+ real_engagement: number;
499
+ };
500
+ smart_scheduling_insights: {
501
+ best_day: string;
502
+ best_time_slot: string;
503
+ confidence_score: number;
504
+ recommendation: string;
505
+ weekly_best_times: WeeklyBestTime[];
506
+ };
507
+ top_content: {
508
+ top_posts: MediaMetrics[];
509
+ top_reel?: MediaMetrics;
510
+ top_carousel?: MediaMetrics;
511
+ top_comments: TopComment[];
512
+ };
513
+ }
514
+
515
+ export interface AnalyticsSummary {
516
+ total_posts: number;
517
+ total_reach: number;
518
+ total_engagement: number;
519
+ average_engagement_rate: number;
520
+ metrics: InsightMetric[];
521
+ }
522
+
523
+ // ----------------------------------------------------------------------------
524
+ // 10. Notifications Domain
525
+ // ----------------------------------------------------------------------------
526
+ export interface NotificationItem {
527
+ id: string;
528
+ _id?: string;
529
+ user_id: string;
530
+ title: string;
531
+ message: string;
532
+ type: "info" | "success" | "warning" | "error" | "approval_request" | string;
533
+ is_read: boolean;
534
+ link?: string;
535
+ created_at: string;
536
+ }
537
+
538
+ export interface NotificationListResponse {
539
+ notifications: NotificationItem[];
540
+ unread_count: number;
541
+ }
542
+
543
+ // ----------------------------------------------------------------------------
544
+ // 11. Storage & Media Asset Domain
545
+ // ----------------------------------------------------------------------------
546
+ export interface MediaAsset {
547
+ id: string;
548
+ asset_id: string;
549
+ filename: string;
550
+ original_name: string;
551
+ mime_type: string;
552
+ media_type: 'image' | 'video' | 'audio' | 'other';
553
+ file_size: number;
554
+ storage_path: string;
555
+ url: string;
556
+ organization_id: string;
557
+ project_id?: string;
558
+ uploaded_by: string;
559
+ created_at: string;
560
+ }
561
+
562
+ export interface UploadFileResponse {
563
+ file_id: string;
564
+ url: string;
565
+ filename: string;
566
+ size_bytes: number;
567
+ mime_type: string;
568
+ }
569
+
570
+ export interface PresignedUploadResponse {
571
+ upload_url: string;
572
+ presigned_url: string;
573
+ asset_id: string;
574
+ storage_path: string;
575
+ download_url: string;
576
+ url: string;
577
+ }
578
+
579
+ // ----------------------------------------------------------------------------
580
+ // 12. Subscriptions & Billing Domain
581
+ // ----------------------------------------------------------------------------
582
+ export interface PlanLimits {
583
+ schedules_per_day: number | null;
584
+ schedules_total: number | null;
585
+ upload_bytes_per_day: number;
586
+ content_plans_per_day: number | null;
587
+ ai_plans_per_day: number;
588
+ captions_per_day: number;
589
+ campaigns_total: number | null;
590
+ connected_accounts: number;
591
+ }
592
+
593
+ export interface SubscriptionPlan {
594
+ id: string;
595
+ tier: string;
596
+ name: string;
597
+ billing_cycle: "monthly" | "yearly";
598
+ price_inr: number;
599
+ price_display: string;
600
+ price_monthly?: number;
601
+ price_yearly?: number;
602
+ features?: string[];
603
+ max_projects?: number;
604
+ max_members?: number;
605
+ max_social_accounts?: number;
606
+ limits: PlanLimits;
607
+ razorpay_plan_id?: string;
608
+ is_active: boolean;
609
+ sort_order: number;
610
+ }
611
+
612
+ export interface PaymentRecord {
613
+ provider_payment_id: string;
614
+ amount_inr: number;
615
+ provider?: string;
616
+ status: string;
617
+ paid_at: string;
618
+ }
619
+
620
+ export interface CurrentSubscription {
621
+ id: string;
622
+ organization_id: string;
623
+ organization_name?: string;
624
+ user_id: string;
625
+ plan_id: string;
626
+ tier: string;
627
+ status: "active" | "trial" | "past_due" | "expired" | "cancelled" | "pending_payment";
628
+ payment_provider: string;
629
+ provider_subscription_id: string | null;
630
+ trial_started_at: string | null;
631
+ trial_ends_at: string | null;
632
+ current_period_start: string | null;
633
+ current_period_end: string | null;
634
+ cancel_at_period_end: boolean;
635
+ cancelled_at: string | null;
636
+ payment_history?: PaymentRecord[];
637
+ created_at: string;
638
+ updated_at: string;
639
+ }
640
+
641
+ export interface UsageStats {
642
+ schedules_today: number;
643
+ schedules_total: number;
644
+ content_plans_today: number;
645
+ ai_plans_today: number;
646
+ captions_today: number;
647
+ upload_bytes_today: number;
648
+ campaigns_total: number;
649
+ connected_accounts: number;
650
+ }
651
+
652
+ export interface QuotaStatus {
653
+ tier: string;
654
+ status: string;
655
+ trial_ends_at: string | null;
656
+ current_period_end: string | null;
657
+ limits: PlanLimits;
658
+ usage: UsageStats;
659
+ projects_used?: number;
660
+ projects_limit?: number;
661
+ members_used?: number;
662
+ members_limit?: number;
663
+ accounts_used?: number;
664
+ accounts_limit?: number;
665
+ can_create_project?: boolean;
666
+ can_invite_member?: boolean;
667
+ can_connect_account?: boolean;
668
+ }
669
+
670
+ export interface UserSubscription extends CurrentSubscription {}
671
+
672
+ export interface RazorpayCreateResult {
673
+ subscription_id: string;
674
+ razorpay_subscription_id: string;
675
+ razorpay_key_id: string;
676
+ }
677
+
678
+ export interface RazorpayVerifyResult {
679
+ status: string;
680
+ message: string;
681
+ subscription_id: string;
682
+ }
@@ -0,0 +1,10 @@
1
+ export interface NotificationItem {
2
+ id: string;
3
+ user_id: string;
4
+ title: string;
5
+ message: string;
6
+ type: "info" | "success" | "warning" | "error" | "approval_request";
7
+ is_read: boolean;
8
+ link?: string;
9
+ created_at: string;
10
+ }