@intelligo-dev/core 1.0.0-beta.1

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 (254) hide show
  1. package/LICENSE +201 -0
  2. package/dist/conversations/errors.d.ts +31 -0
  3. package/dist/conversations/errors.d.ts.map +1 -0
  4. package/dist/conversations/errors.js +25 -0
  5. package/dist/conversations/errors.js.map +1 -0
  6. package/dist/conversations/index.d.ts +13 -0
  7. package/dist/conversations/index.d.ts.map +1 -0
  8. package/dist/conversations/index.js +12 -0
  9. package/dist/conversations/index.js.map +1 -0
  10. package/dist/conversations/service.d.ts +132 -0
  11. package/dist/conversations/service.d.ts.map +1 -0
  12. package/dist/conversations/service.js +347 -0
  13. package/dist/conversations/service.js.map +1 -0
  14. package/dist/conversations/types.d.ts +10 -0
  15. package/dist/conversations/types.d.ts.map +1 -0
  16. package/dist/conversations/types.js +5 -0
  17. package/dist/conversations/types.js.map +1 -0
  18. package/dist/db/client.d.ts +19 -0
  19. package/dist/db/client.d.ts.map +1 -0
  20. package/dist/db/client.js +52 -0
  21. package/dist/db/client.js.map +1 -0
  22. package/dist/db/index.d.ts +4 -0
  23. package/dist/db/index.d.ts.map +1 -0
  24. package/dist/db/index.js +8 -0
  25. package/dist/db/index.js.map +1 -0
  26. package/dist/db/schema/agents.d.ts +400 -0
  27. package/dist/db/schema/agents.d.ts.map +1 -0
  28. package/dist/db/schema/agents.js +39 -0
  29. package/dist/db/schema/agents.js.map +1 -0
  30. package/dist/db/schema/ai.d.ts +2222 -0
  31. package/dist/db/schema/ai.d.ts.map +1 -0
  32. package/dist/db/schema/ai.js +313 -0
  33. package/dist/db/schema/ai.js.map +1 -0
  34. package/dist/db/schema/auth.d.ts +1222 -0
  35. package/dist/db/schema/auth.d.ts.map +1 -0
  36. package/dist/db/schema/auth.js +162 -0
  37. package/dist/db/schema/auth.js.map +1 -0
  38. package/dist/db/schema/billing.d.ts +1199 -0
  39. package/dist/db/schema/billing.d.ts.map +1 -0
  40. package/dist/db/schema/billing.js +150 -0
  41. package/dist/db/schema/billing.js.map +1 -0
  42. package/dist/db/schema/feature-flags.d.ts +143 -0
  43. package/dist/db/schema/feature-flags.d.ts.map +1 -0
  44. package/dist/db/schema/feature-flags.js +25 -0
  45. package/dist/db/schema/feature-flags.js.map +1 -0
  46. package/dist/db/schema/identity.d.ts +1295 -0
  47. package/dist/db/schema/identity.d.ts.map +1 -0
  48. package/dist/db/schema/identity.js +258 -0
  49. package/dist/db/schema/identity.js.map +1 -0
  50. package/dist/db/schema/index.d.ts +16 -0
  51. package/dist/db/schema/index.d.ts.map +1 -0
  52. package/dist/db/schema/index.js +43 -0
  53. package/dist/db/schema/index.js.map +1 -0
  54. package/dist/db/schema/notifications.d.ts +182 -0
  55. package/dist/db/schema/notifications.d.ts.map +1 -0
  56. package/dist/db/schema/notifications.js +38 -0
  57. package/dist/db/schema/notifications.js.map +1 -0
  58. package/dist/db/schema/rag.d.ts +171 -0
  59. package/dist/db/schema/rag.d.ts.map +1 -0
  60. package/dist/db/schema/rag.js +42 -0
  61. package/dist/db/schema/rag.js.map +1 -0
  62. package/dist/db/schema/usage.d.ts +1193 -0
  63. package/dist/db/schema/usage.d.ts.map +1 -0
  64. package/dist/db/schema/usage.js +224 -0
  65. package/dist/db/schema/usage.js.map +1 -0
  66. package/dist/db/validate.d.ts +19 -0
  67. package/dist/db/validate.d.ts.map +1 -0
  68. package/dist/db/validate.js +58 -0
  69. package/dist/db/validate.js.map +1 -0
  70. package/dist/db/workspace-queries.d.ts +75 -0
  71. package/dist/db/workspace-queries.d.ts.map +1 -0
  72. package/dist/db/workspace-queries.js +78 -0
  73. package/dist/db/workspace-queries.js.map +1 -0
  74. package/dist/documents/classifier.d.ts +31 -0
  75. package/dist/documents/classifier.d.ts.map +1 -0
  76. package/dist/documents/classifier.js +41 -0
  77. package/dist/documents/classifier.js.map +1 -0
  78. package/dist/documents/errors.d.ts +32 -0
  79. package/dist/documents/errors.d.ts.map +1 -0
  80. package/dist/documents/errors.js +27 -0
  81. package/dist/documents/errors.js.map +1 -0
  82. package/dist/documents/index.d.ts +14 -0
  83. package/dist/documents/index.d.ts.map +1 -0
  84. package/dist/documents/index.js +13 -0
  85. package/dist/documents/index.js.map +1 -0
  86. package/dist/documents/service.d.ts +54 -0
  87. package/dist/documents/service.d.ts.map +1 -0
  88. package/dist/documents/service.js +146 -0
  89. package/dist/documents/service.js.map +1 -0
  90. package/dist/documents/types.d.ts +27 -0
  91. package/dist/documents/types.d.ts.map +1 -0
  92. package/dist/documents/types.js +5 -0
  93. package/dist/documents/types.js.map +1 -0
  94. package/dist/email/index.d.ts +5 -0
  95. package/dist/email/index.d.ts.map +1 -0
  96. package/dist/email/index.js +5 -0
  97. package/dist/email/index.js.map +1 -0
  98. package/dist/email/provider.d.ts +68 -0
  99. package/dist/email/provider.d.ts.map +1 -0
  100. package/dist/email/provider.js +199 -0
  101. package/dist/email/provider.js.map +1 -0
  102. package/dist/email/send.d.ts +47 -0
  103. package/dist/email/send.d.ts.map +1 -0
  104. package/dist/email/send.js +110 -0
  105. package/dist/email/send.js.map +1 -0
  106. package/dist/email/senders.d.ts +93 -0
  107. package/dist/email/senders.d.ts.map +1 -0
  108. package/dist/email/senders.js +232 -0
  109. package/dist/email/senders.js.map +1 -0
  110. package/dist/email/templates/base-layout.d.ts +7 -0
  111. package/dist/email/templates/base-layout.d.ts.map +1 -0
  112. package/dist/email/templates/base-layout.js +69 -0
  113. package/dist/email/templates/base-layout.js.map +1 -0
  114. package/dist/email/templates/index.d.ts +11 -0
  115. package/dist/email/templates/index.d.ts.map +1 -0
  116. package/dist/email/templates/index.js +17 -0
  117. package/dist/email/templates/index.js.map +1 -0
  118. package/dist/email/templates/password-reset.d.ts +7 -0
  119. package/dist/email/templates/password-reset.d.ts.map +1 -0
  120. package/dist/email/templates/password-reset.js +59 -0
  121. package/dist/email/templates/password-reset.js.map +1 -0
  122. package/dist/email/templates/payment-failed.d.ts +8 -0
  123. package/dist/email/templates/payment-failed.d.ts.map +1 -0
  124. package/dist/email/templates/payment-failed.js +62 -0
  125. package/dist/email/templates/payment-failed.js.map +1 -0
  126. package/dist/email/templates/quota-warning.d.ts +11 -0
  127. package/dist/email/templates/quota-warning.d.ts.map +1 -0
  128. package/dist/email/templates/quota-warning.js +82 -0
  129. package/dist/email/templates/quota-warning.js.map +1 -0
  130. package/dist/email/templates/subscription-confirmed.d.ts +9 -0
  131. package/dist/email/templates/subscription-confirmed.d.ts.map +1 -0
  132. package/dist/email/templates/subscription-confirmed.js +72 -0
  133. package/dist/email/templates/subscription-confirmed.js.map +1 -0
  134. package/dist/email/templates/trial-expiry.d.ts +9 -0
  135. package/dist/email/templates/trial-expiry.d.ts.map +1 -0
  136. package/dist/email/templates/trial-expiry.js +86 -0
  137. package/dist/email/templates/trial-expiry.js.map +1 -0
  138. package/dist/email/templates/trial-warning.d.ts +11 -0
  139. package/dist/email/templates/trial-warning.d.ts.map +1 -0
  140. package/dist/email/templates/trial-warning.js +70 -0
  141. package/dist/email/templates/trial-warning.js.map +1 -0
  142. package/dist/email/templates/verify-email.d.ts +7 -0
  143. package/dist/email/templates/verify-email.d.ts.map +1 -0
  144. package/dist/email/templates/verify-email.js +59 -0
  145. package/dist/email/templates/verify-email.js.map +1 -0
  146. package/dist/email/templates/welcome.d.ts +7 -0
  147. package/dist/email/templates/welcome.d.ts.map +1 -0
  148. package/dist/email/templates/welcome.js +51 -0
  149. package/dist/email/templates/welcome.js.map +1 -0
  150. package/dist/email/templates/workspace-invitation.d.ts +10 -0
  151. package/dist/email/templates/workspace-invitation.d.ts.map +1 -0
  152. package/dist/email/templates/workspace-invitation.js +79 -0
  153. package/dist/email/templates/workspace-invitation.js.map +1 -0
  154. package/dist/env.d.ts +21 -0
  155. package/dist/env.d.ts.map +1 -0
  156. package/dist/env.js +129 -0
  157. package/dist/env.js.map +1 -0
  158. package/dist/identity/audit.d.ts +39 -0
  159. package/dist/identity/audit.d.ts.map +1 -0
  160. package/dist/identity/audit.js +51 -0
  161. package/dist/identity/audit.js.map +1 -0
  162. package/dist/identity/errors.d.ts +32 -0
  163. package/dist/identity/errors.d.ts.map +1 -0
  164. package/dist/identity/errors.js +25 -0
  165. package/dist/identity/errors.js.map +1 -0
  166. package/dist/identity/index.d.ts +16 -0
  167. package/dist/identity/index.d.ts.map +1 -0
  168. package/dist/identity/index.js +15 -0
  169. package/dist/identity/index.js.map +1 -0
  170. package/dist/identity/service.d.ts +70 -0
  171. package/dist/identity/service.d.ts.map +1 -0
  172. package/dist/identity/service.js +179 -0
  173. package/dist/identity/service.js.map +1 -0
  174. package/dist/identity/types.d.ts +27 -0
  175. package/dist/identity/types.d.ts.map +1 -0
  176. package/dist/identity/types.js +5 -0
  177. package/dist/identity/types.js.map +1 -0
  178. package/dist/index.d.ts +3 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +11 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/logger.d.ts +50 -0
  183. package/dist/logger.d.ts.map +1 -0
  184. package/dist/logger.js +183 -0
  185. package/dist/logger.js.map +1 -0
  186. package/dist/notifications/index.d.ts +86 -0
  187. package/dist/notifications/index.d.ts.map +1 -0
  188. package/dist/notifications/index.js +112 -0
  189. package/dist/notifications/index.js.map +1 -0
  190. package/dist/notifications/triggers.d.ts +68 -0
  191. package/dist/notifications/triggers.d.ts.map +1 -0
  192. package/dist/notifications/triggers.js +145 -0
  193. package/dist/notifications/triggers.js.map +1 -0
  194. package/dist/notifications/types.d.ts +19 -0
  195. package/dist/notifications/types.d.ts.map +1 -0
  196. package/dist/notifications/types.js +11 -0
  197. package/dist/notifications/types.js.map +1 -0
  198. package/package.json +101 -0
  199. package/src/db/migrations/0000_sharp_night_nurse.sql +52 -0
  200. package/src/db/migrations/0001_hesitant_vapor.sql +40 -0
  201. package/src/db/migrations/0002_numerous_lady_vermin.sql +235 -0
  202. package/src/db/migrations/0003_mighty_jean_grey.sql +37 -0
  203. package/src/db/migrations/0004_cynical_grandmaster.sql +2 -0
  204. package/src/db/migrations/0005_careful_switch.sql +8 -0
  205. package/src/db/migrations/0006_tense_blue_marvel.sql +16 -0
  206. package/src/db/migrations/0007_next_squadron_sinister.sql +1 -0
  207. package/src/db/migrations/0008_powerful_scream.sql +39 -0
  208. package/src/db/migrations/0009_sad_ink.sql +1 -0
  209. package/src/db/migrations/0010_shocking_omega_flight.sql +2 -0
  210. package/src/db/migrations/0011_ambiguous_otto_octavius.sql +151 -0
  211. package/src/db/migrations/0011_hnsw_vector_index.sql +17 -0
  212. package/src/db/migrations/0012_user_profiles.sql +30 -0
  213. package/src/db/migrations/0013_trending_seasonal_columns.sql +9 -0
  214. package/src/db/migrations/0014_add_product_type_to_agents.sql +6 -0
  215. package/src/db/migrations/0015_new_v1_tables.sql +149 -0
  216. package/src/db/migrations/0016_document_types.sql +30 -0
  217. package/src/db/migrations/0017_document_metadata.sql +2 -0
  218. package/src/db/migrations/0018_identity_graph.sql +200 -0
  219. package/src/db/migrations/0019_db_driven_prompts.sql +20 -0
  220. package/src/db/migrations/0020_pending_extractions.sql +35 -0
  221. package/src/db/migrations/0021_rag_documents.sql +39 -0
  222. package/src/db/migrations/0022_user_quotas_usage_jsonb.sql +70 -0
  223. package/src/db/migrations/0023_user_facts_user_scoped_unique.sql +17 -0
  224. package/src/db/migrations/0024_user_memories_hnsw.sql +23 -0
  225. package/src/db/migrations/0025_audit_trigger_errcode.sql +21 -0
  226. package/src/db/migrations/0026_user_profile_snapshots_composite_pk.sql +17 -0
  227. package/src/db/migrations/0027_billing_settings_mnt_columns.sql +54 -0
  228. package/src/db/migrations/0028_trial_credits_normalized_email.sql +37 -0
  229. package/src/db/migrations/0029_usage_records_conversation_idx.sql +13 -0
  230. package/src/db/migrations/0030_pending_extractions_composite_idx.sql +11 -0
  231. package/src/db/migrations/0031_rag_documents_hnsw.sql +16 -0
  232. package/src/db/migrations/0032_rate_limit_unique_idx.sql +16 -0
  233. package/src/db/migrations/0033_pending_extractions_partial_idx.sql +18 -0
  234. package/src/db/migrations/0034_rate_limit_count.sql +9 -0
  235. package/src/db/migrations/0035_credit_reservations.sql +24 -0
  236. package/src/db/migrations/0036_executions_audit_jobs.sql +96 -0
  237. package/src/db/migrations/0037_rate_limit_minute_bucket.sql +46 -0
  238. package/src/db/migrations/0038_user_quotas_generic_usage.sql +25 -0
  239. package/src/db/migrations/0039_platform_admin_impersonation.sql +27 -0
  240. package/src/db/migrations/0040_ee_audit_chain.sql +23 -0
  241. package/src/db/migrations/README.md +57 -0
  242. package/src/db/migrations/meta/0000_snapshot.json +348 -0
  243. package/src/db/migrations/meta/0001_snapshot.json +631 -0
  244. package/src/db/migrations/meta/0002_snapshot.json +2269 -0
  245. package/src/db/migrations/meta/0003_snapshot.json +2488 -0
  246. package/src/db/migrations/meta/0004_snapshot.json +2500 -0
  247. package/src/db/migrations/meta/0005_snapshot.json +2548 -0
  248. package/src/db/migrations/meta/0006_snapshot.json +2650 -0
  249. package/src/db/migrations/meta/0007_snapshot.json +2657 -0
  250. package/src/db/migrations/meta/0008_snapshot.json +2719 -0
  251. package/src/db/migrations/meta/0009_snapshot.json +2726 -0
  252. package/src/db/migrations/meta/0010_snapshot.json +2739 -0
  253. package/src/db/migrations/meta/0011_snapshot.json +3886 -0
  254. package/src/db/migrations/meta/_journal.json +300 -0
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Notifications Module
3
+ *
4
+ * CRUD operations for user notifications. These are used by server actions
5
+ * in the consumer application to power the notification bell, list, and
6
+ * mark-as-read functionality.
7
+ *
8
+ * Notifications are user-scoped (not workspace-scoped) so a user can see
9
+ * all their notifications across workspaces.
10
+ */
11
+ import { db } from "../db";
12
+ import { notifications } from "../db/schema";
13
+ import { eq, and, desc, count } from "drizzle-orm";
14
+ // Re-export trigger functions
15
+ export { triggerQuotaNotification, triggerTrialNotification, triggerPaymentFailedNotification, triggerTeamMemberJoinedNotification, } from "./triggers";
16
+ /**
17
+ * Create a new notification for a user
18
+ *
19
+ * Serializes metadata to JSON string if provided.
20
+ * Returns the created notification.
21
+ */
22
+ export async function createNotification(params) {
23
+ const [notification] = await db
24
+ .insert(notifications)
25
+ .values({
26
+ userId: params.userId,
27
+ workspaceId: params.workspaceId,
28
+ type: params.type,
29
+ title: params.title,
30
+ message: params.message,
31
+ metadata: params.metadata ? JSON.stringify(params.metadata) : null,
32
+ })
33
+ .returning();
34
+ return notification;
35
+ }
36
+ /**
37
+ * Get unread notifications for a user
38
+ *
39
+ * Returns notifications where isRead is false, ordered by newest first.
40
+ * Parses metadata JSON string back to object.
41
+ */
42
+ export async function getUnreadNotifications(userId, limit = 20) {
43
+ const rows = await db
44
+ .select()
45
+ .from(notifications)
46
+ .where(and(eq(notifications.userId, userId), eq(notifications.isRead, false)))
47
+ .orderBy(desc(notifications.createdAt))
48
+ .limit(limit);
49
+ return rows.map(parseMetadata);
50
+ }
51
+ /**
52
+ * Get all notifications for a user (read and unread)
53
+ *
54
+ * Returns notifications ordered by newest first.
55
+ * Parses metadata JSON string back to object.
56
+ */
57
+ export async function getNotifications(userId, limit = 50) {
58
+ const rows = await db
59
+ .select()
60
+ .from(notifications)
61
+ .where(eq(notifications.userId, userId))
62
+ .orderBy(desc(notifications.createdAt))
63
+ .limit(limit);
64
+ return rows.map(parseMetadata);
65
+ }
66
+ /**
67
+ * Get count of unread notifications for a user
68
+ *
69
+ * Used for the notification bell badge number.
70
+ */
71
+ export async function getNotificationCount(userId) {
72
+ const [result] = await db
73
+ .select({ count: count() })
74
+ .from(notifications)
75
+ .where(and(eq(notifications.userId, userId), eq(notifications.isRead, false)));
76
+ return result?.count ?? 0;
77
+ }
78
+ /**
79
+ * Mark a single notification as read
80
+ *
81
+ * Security: requires both notificationId and userId to ensure
82
+ * users can only mark their own notifications.
83
+ */
84
+ export async function markAsRead(notificationId, userId) {
85
+ await db
86
+ .update(notifications)
87
+ .set({ isRead: true })
88
+ .where(and(eq(notifications.id, notificationId), eq(notifications.userId, userId)));
89
+ }
90
+ /**
91
+ * Mark all unread notifications as read for a user
92
+ */
93
+ export async function markAllAsRead(userId) {
94
+ await db
95
+ .update(notifications)
96
+ .set({ isRead: true })
97
+ .where(and(eq(notifications.userId, userId), eq(notifications.isRead, false)));
98
+ }
99
+ /**
100
+ * Parse metadata JSON string back to object
101
+ *
102
+ * Returns notification with metadata as parsed object (or null if no metadata).
103
+ */
104
+ function parseMetadata(notification) {
105
+ return {
106
+ ...notification,
107
+ metadata: notification.metadata
108
+ ? JSON.parse(notification.metadata)
109
+ : null,
110
+ };
111
+ }
112
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Notification Trigger Functions
3
+ *
4
+ * These functions create BOTH in-app notifications (via createNotification)
5
+ * AND send emails (via email senders). They are the integration points that
6
+ * connect application events to the notification + email infrastructure.
7
+ *
8
+ * Design:
9
+ * - In-app notifications are awaited (fast DB inserts)
10
+ * - Email sends are fire-and-forget (non-blocking, errors logged)
11
+ * - These do NOT handle deduplication -- that's handled by notification_history
12
+ * table from Phase 12's checkNotificationTriggers()
13
+ *
14
+ * Usage:
15
+ * - Quota/trial triggers are called by Phase 12 notification system
16
+ * - Payment failed trigger is called by billing email triggers
17
+ * - Team member joined trigger is called by server actions
18
+ */
19
+ /**
20
+ * Trigger a quota warning or exceeded notification.
21
+ * Creates an in-app notification and sends an email.
22
+ */
23
+ export declare function triggerQuotaNotification(params: {
24
+ userId: string;
25
+ userEmail: string;
26
+ workspaceId: string;
27
+ workspaceName: string;
28
+ percentageUsed: number;
29
+ tokensUsed: number;
30
+ tokensLimit: number;
31
+ isExceeded: boolean;
32
+ }): Promise<void>;
33
+ /**
34
+ * Trigger a trial credits warning or depleted notification.
35
+ * Creates an in-app notification and sends an email.
36
+ */
37
+ export declare function triggerTrialNotification(params: {
38
+ userId: string;
39
+ userEmail: string;
40
+ workspaceId: string;
41
+ workspaceName: string;
42
+ creditsRemaining: number;
43
+ totalCredits: number;
44
+ percentageRemaining: number;
45
+ isDepleted: boolean;
46
+ }): Promise<void>;
47
+ /**
48
+ * Trigger a payment failed notification.
49
+ * Creates an in-app notification and sends an email.
50
+ */
51
+ export declare function triggerPaymentFailedNotification(params: {
52
+ userId: string;
53
+ userEmail: string;
54
+ workspaceId: string;
55
+ workspaceName: string;
56
+ amount: string;
57
+ }): Promise<void>;
58
+ /**
59
+ * Trigger a team member joined notification.
60
+ * Creates an in-app notification ONLY (no email for this event).
61
+ */
62
+ export declare function triggerTeamMemberJoinedNotification(params: {
63
+ userId: string;
64
+ workspaceId: string;
65
+ memberName: string;
66
+ memberEmail: string;
67
+ }): Promise<void>;
68
+ //# sourceMappingURL=triggers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../src/notifications/triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChB;AAMD;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChB;AAMD;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,MAAM,EAAE;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB;AAMD;;;GAGG;AACH,wBAAsB,mCAAmC,CAAC,MAAM,EAAE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAahB"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Notification Trigger Functions
3
+ *
4
+ * These functions create BOTH in-app notifications (via createNotification)
5
+ * AND send emails (via email senders). They are the integration points that
6
+ * connect application events to the notification + email infrastructure.
7
+ *
8
+ * Design:
9
+ * - In-app notifications are awaited (fast DB inserts)
10
+ * - Email sends are fire-and-forget (non-blocking, errors logged)
11
+ * - These do NOT handle deduplication -- that's handled by notification_history
12
+ * table from Phase 12's checkNotificationTriggers()
13
+ *
14
+ * Usage:
15
+ * - Quota/trial triggers are called by Phase 12 notification system
16
+ * - Payment failed trigger is called by billing email triggers
17
+ * - Team member joined trigger is called by server actions
18
+ */
19
+ import { createNotification } from "./index";
20
+ import { sendQuotaWarningEmail, sendTrialWarningEmail, sendPaymentFailedEmail, } from "../email/senders";
21
+ // ---------------------------------------------------------------------------
22
+ // Quota Notifications (QUOTA-08, QUOTA-09)
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Trigger a quota warning or exceeded notification.
26
+ * Creates an in-app notification and sends an email.
27
+ */
28
+ export async function triggerQuotaNotification(params) {
29
+ const upgradeUrl = `${process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000"}/settings/billing`;
30
+ // Create in-app notification (awaited -- fast DB insert)
31
+ await createNotification({
32
+ userId: params.userId,
33
+ workspaceId: params.workspaceId,
34
+ type: params.isExceeded ? "quota_warning_100" : "quota_warning_80",
35
+ title: params.isExceeded ? "Quota Exceeded" : "Quota Warning",
36
+ message: params.isExceeded
37
+ ? `Your workspace "${params.workspaceName}" has used all ${params.tokensLimit.toLocaleString()} tokens this month. Upgrade your plan for more tokens.`
38
+ : `Your workspace "${params.workspaceName}" has used ${params.percentageUsed}% of its monthly token quota.`,
39
+ metadata: {
40
+ workspaceName: params.workspaceName,
41
+ percentageUsed: params.percentageUsed,
42
+ tokensUsed: params.tokensUsed,
43
+ tokensLimit: params.tokensLimit,
44
+ },
45
+ });
46
+ // Send email (fire-and-forget -- non-blocking)
47
+ sendQuotaWarningEmail({
48
+ to: params.userEmail,
49
+ workspaceName: params.workspaceName,
50
+ percentageUsed: params.percentageUsed,
51
+ tokensUsed: params.tokensUsed,
52
+ tokensLimit: params.tokensLimit,
53
+ upgradeUrl,
54
+ isExceeded: params.isExceeded,
55
+ }).catch((err) => console.error("[Email] Failed to send quota warning:", err));
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Trial Notifications (TRIAL-04, TRIAL-05)
59
+ // ---------------------------------------------------------------------------
60
+ /**
61
+ * Trigger a trial credits warning or depleted notification.
62
+ * Creates an in-app notification and sends an email.
63
+ */
64
+ export async function triggerTrialNotification(params) {
65
+ const upgradeUrl = `${process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000"}/settings/billing`;
66
+ // Create in-app notification (awaited -- fast DB insert)
67
+ await createNotification({
68
+ userId: params.userId,
69
+ workspaceId: params.workspaceId,
70
+ type: params.isDepleted ? "trial_depleted" : "trial_warning_20",
71
+ title: params.isDepleted
72
+ ? "Trial Credits Depleted"
73
+ : "Trial Credits Running Low",
74
+ message: params.isDepleted
75
+ ? `Your workspace "${params.workspaceName}" has used all trial credits. Subscribe to a plan to continue using AI features.`
76
+ : `Your workspace "${params.workspaceName}" has ${params.creditsRemaining.toLocaleString()} of ${params.totalCredits.toLocaleString()} trial credits remaining (${params.percentageRemaining}%).`,
77
+ metadata: {
78
+ workspaceName: params.workspaceName,
79
+ creditsRemaining: params.creditsRemaining,
80
+ totalCredits: params.totalCredits,
81
+ percentageRemaining: params.percentageRemaining,
82
+ },
83
+ });
84
+ // Send email (fire-and-forget -- non-blocking)
85
+ sendTrialWarningEmail({
86
+ to: params.userEmail,
87
+ workspaceName: params.workspaceName,
88
+ creditsRemaining: params.creditsRemaining,
89
+ totalCredits: params.totalCredits,
90
+ percentageRemaining: params.percentageRemaining,
91
+ upgradeUrl,
92
+ isDepleted: params.isDepleted,
93
+ }).catch((err) => console.error("[Email] Failed to send trial warning:", err));
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Payment Failed Notification
97
+ // ---------------------------------------------------------------------------
98
+ /**
99
+ * Trigger a payment failed notification.
100
+ * Creates an in-app notification and sends an email.
101
+ */
102
+ export async function triggerPaymentFailedNotification(params) {
103
+ const updatePaymentUrl = `${process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000"}/settings/billing`;
104
+ // Create in-app notification (awaited -- fast DB insert)
105
+ await createNotification({
106
+ userId: params.userId,
107
+ workspaceId: params.workspaceId,
108
+ type: "payment_failed",
109
+ title: "Payment Failed",
110
+ message: `Payment of ${params.amount} failed for ${params.workspaceName}. Update your payment method.`,
111
+ metadata: {
112
+ workspaceName: params.workspaceName,
113
+ amount: params.amount,
114
+ },
115
+ });
116
+ // Send email (fire-and-forget -- non-blocking)
117
+ sendPaymentFailedEmail({
118
+ to: params.userEmail,
119
+ workspaceName: params.workspaceName,
120
+ amount: params.amount,
121
+ updatePaymentUrl,
122
+ }).catch((err) => console.error("[Email] Failed to send payment failed:", err));
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // Team Member Joined Notification
126
+ // ---------------------------------------------------------------------------
127
+ /**
128
+ * Trigger a team member joined notification.
129
+ * Creates an in-app notification ONLY (no email for this event).
130
+ */
131
+ export async function triggerTeamMemberJoinedNotification(params) {
132
+ // Create in-app notification only (no email for team member joined events)
133
+ await createNotification({
134
+ userId: params.userId,
135
+ workspaceId: params.workspaceId,
136
+ type: "team_member_joined",
137
+ title: "New Team Member",
138
+ message: `${params.memberName} (${params.memberEmail}) joined the workspace.`,
139
+ metadata: {
140
+ memberName: params.memberName,
141
+ memberEmail: params.memberEmail,
142
+ },
143
+ });
144
+ }
145
+ //# sourceMappingURL=triggers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../src/notifications/triggers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Notification Type Definitions (NOTIF-07)
3
+ *
4
+ * Types covering all notification events:
5
+ * - Quota/usage warnings (80%, 100%)
6
+ * - Trial credit alerts (20% remaining, depleted)
7
+ * - Payment events (failed, confirmed)
8
+ * - Team events (member joined, invitation)
9
+ */
10
+ export type NotificationType = "quota_warning_80" | "quota_warning_100" | "trial_warning_20" | "trial_depleted" | "payment_failed" | "team_member_joined" | "subscription_confirmed" | "workspace_invitation" | "referral_signup" | "referral_upgrade";
11
+ export interface CreateNotificationParams {
12
+ userId: string;
13
+ workspaceId?: string;
14
+ type: NotificationType;
15
+ title: string;
16
+ message: string;
17
+ metadata?: Record<string, unknown>;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/notifications/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,gBAAgB,GACxB,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,wBAAwB,GACxB,sBAAsB,GACtB,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Notification Type Definitions (NOTIF-07)
3
+ *
4
+ * Types covering all notification events:
5
+ * - Quota/usage warnings (80%, 100%)
6
+ * - Trial credit alerts (20% remaining, depleted)
7
+ * - Payment events (failed, confirmed)
8
+ * - Team events (member joined, invitation)
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/notifications/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
package/package.json ADDED
@@ -0,0 +1,101 @@
1
+ {
2
+ "name": "@intelligo-dev/core",
3
+ "version": "1.0.0-beta.1",
4
+ "license": "Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/intelligo-mn/framework.git",
8
+ "directory": "packages/core"
9
+ },
10
+ "homepage": "https://github.com/intelligo-mn/framework#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/intelligo-mn/framework/issues"
13
+ },
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./db": {
21
+ "types": "./dist/db/index.d.ts",
22
+ "default": "./dist/db/index.js"
23
+ },
24
+ "./db/schema": {
25
+ "types": "./dist/db/schema/index.d.ts",
26
+ "default": "./dist/db/schema/index.js"
27
+ },
28
+ "./email": {
29
+ "types": "./dist/email/index.d.ts",
30
+ "default": "./dist/email/index.js"
31
+ },
32
+ "./notifications": {
33
+ "types": "./dist/notifications/index.d.ts",
34
+ "default": "./dist/notifications/index.js"
35
+ },
36
+ "./conversations": {
37
+ "types": "./dist/conversations/index.d.ts",
38
+ "default": "./dist/conversations/index.js"
39
+ },
40
+ "./documents": {
41
+ "types": "./dist/documents/index.d.ts",
42
+ "default": "./dist/documents/index.js"
43
+ },
44
+ "./identity": {
45
+ "types": "./dist/identity/index.d.ts",
46
+ "default": "./dist/identity/index.js"
47
+ },
48
+ "./env": {
49
+ "types": "./dist/env.d.ts",
50
+ "default": "./dist/env.js"
51
+ },
52
+ "./logger": {
53
+ "types": "./dist/logger.d.ts",
54
+ "import": "./dist/logger.js",
55
+ "default": "./dist/logger.js"
56
+ }
57
+ },
58
+ "dependencies": {
59
+ "@neondatabase/serverless": "^0.10.4",
60
+ "@react-email/components": "^1.0.7",
61
+ "dotenv": "^16.4.7",
62
+ "drizzle-orm": "^0.45.1",
63
+ "pg": "^8.18.0",
64
+ "pino": "^10.3.1",
65
+ "react": "^19.0.0",
66
+ "resend": "^6.9.1",
67
+ "server-only": "^0.0.1",
68
+ "zod": "^3.24.1"
69
+ },
70
+ "peerDependencies": {
71
+ "next": "^15.0.0 || ^16.0.0"
72
+ },
73
+ "devDependencies": {
74
+ "@types/bcryptjs": "^3.0.0",
75
+ "@types/pg": "^8.16.0",
76
+ "@types/react": "^19.0.10",
77
+ "bcryptjs": "^3.0.3",
78
+ "drizzle-kit": "^0.31.8",
79
+ "next": "^16.0.7",
80
+ "pino-pretty": "^13.1.3",
81
+ "tsx": "^4.21.0",
82
+ "typescript": "^5.7.2"
83
+ },
84
+ "files": [
85
+ "dist",
86
+ "src/db/migrations"
87
+ ],
88
+ "publishConfig": {
89
+ "access": "public"
90
+ },
91
+ "scripts": {
92
+ "type-check": "tsc --noEmit",
93
+ "lint": "eslint .",
94
+ "db:generate": "drizzle-kit generate",
95
+ "db:migrate": "drizzle-kit migrate",
96
+ "db:studio": "drizzle-kit studio",
97
+ "db:push": "drizzle-kit push",
98
+ "db:check": "tsx scripts/check-db.ts",
99
+ "build": "tsc -p tsconfig.build.json"
100
+ }
101
+ }
@@ -0,0 +1,52 @@
1
+ CREATE TABLE "accounts" (
2
+ "id" text PRIMARY KEY NOT NULL,
3
+ "user_id" text NOT NULL,
4
+ "account_id" text NOT NULL,
5
+ "provider_id" text NOT NULL,
6
+ "access_token" text,
7
+ "refresh_token" text,
8
+ "access_token_expires_at" timestamp,
9
+ "refresh_token_expires_at" timestamp,
10
+ "scope" text,
11
+ "id_token" text,
12
+ "password" text,
13
+ "created_at" timestamp DEFAULT now() NOT NULL,
14
+ "updated_at" timestamp DEFAULT now() NOT NULL
15
+ );
16
+ --> statement-breakpoint
17
+ CREATE TABLE "sessions" (
18
+ "id" text PRIMARY KEY NOT NULL,
19
+ "user_id" text NOT NULL,
20
+ "token" text NOT NULL,
21
+ "expires_at" timestamp NOT NULL,
22
+ "ip_address" text,
23
+ "user_agent" text,
24
+ "created_at" timestamp DEFAULT now() NOT NULL,
25
+ "updated_at" timestamp DEFAULT now() NOT NULL,
26
+ CONSTRAINT "sessions_token_unique" UNIQUE("token")
27
+ );
28
+ --> statement-breakpoint
29
+ CREATE TABLE "users" (
30
+ "id" text PRIMARY KEY NOT NULL,
31
+ "name" text NOT NULL,
32
+ "email" text NOT NULL,
33
+ "email_verified" boolean DEFAULT false NOT NULL,
34
+ "image" text,
35
+ "created_at" timestamp DEFAULT now() NOT NULL,
36
+ "updated_at" timestamp DEFAULT now() NOT NULL,
37
+ CONSTRAINT "users_email_unique" UNIQUE("email")
38
+ );
39
+ --> statement-breakpoint
40
+ CREATE TABLE "verifications" (
41
+ "id" text PRIMARY KEY NOT NULL,
42
+ "identifier" text NOT NULL,
43
+ "value" text NOT NULL,
44
+ "expires_at" timestamp NOT NULL,
45
+ "created_at" timestamp DEFAULT now() NOT NULL,
46
+ "updated_at" timestamp DEFAULT now() NOT NULL
47
+ );
48
+ --> statement-breakpoint
49
+ ALTER TABLE "accounts" ADD CONSTRAINT "accounts_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
50
+ ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
51
+ CREATE INDEX "accounts_user_id_idx" ON "accounts" USING btree ("user_id");--> statement-breakpoint
52
+ CREATE INDEX "sessions_user_id_idx" ON "sessions" USING btree ("user_id");
@@ -0,0 +1,40 @@
1
+ CREATE TABLE "invitation" (
2
+ "id" text PRIMARY KEY NOT NULL,
3
+ "organization_id" text NOT NULL,
4
+ "email" text NOT NULL,
5
+ "role" text NOT NULL,
6
+ "status" text NOT NULL,
7
+ "expires_at" timestamp NOT NULL,
8
+ "inviter_id" text NOT NULL,
9
+ "created_at" timestamp DEFAULT now() NOT NULL,
10
+ "updated_at" timestamp DEFAULT now() NOT NULL
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE TABLE "member" (
14
+ "id" text PRIMARY KEY NOT NULL,
15
+ "organization_id" text NOT NULL,
16
+ "user_id" text NOT NULL,
17
+ "role" text NOT NULL,
18
+ "created_at" timestamp DEFAULT now() NOT NULL,
19
+ "updated_at" timestamp DEFAULT now() NOT NULL
20
+ );
21
+ --> statement-breakpoint
22
+ CREATE TABLE "organization" (
23
+ "id" text PRIMARY KEY NOT NULL,
24
+ "name" text NOT NULL,
25
+ "slug" text,
26
+ "logo" text,
27
+ "metadata" text,
28
+ "created_at" timestamp DEFAULT now() NOT NULL,
29
+ "updated_at" timestamp DEFAULT now() NOT NULL,
30
+ CONSTRAINT "organization_slug_unique" UNIQUE("slug")
31
+ );
32
+ --> statement-breakpoint
33
+ ALTER TABLE "invitation" ADD CONSTRAINT "invitation_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
34
+ ALTER TABLE "invitation" ADD CONSTRAINT "invitation_inviter_id_users_id_fk" FOREIGN KEY ("inviter_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
35
+ ALTER TABLE "member" ADD CONSTRAINT "member_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
36
+ ALTER TABLE "member" ADD CONSTRAINT "member_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
37
+ CREATE INDEX "invitation_organization_id_idx" ON "invitation" USING btree ("organization_id");--> statement-breakpoint
38
+ CREATE INDEX "invitation_email_idx" ON "invitation" USING btree ("email");--> statement-breakpoint
39
+ CREATE INDEX "member_organization_id_idx" ON "member" USING btree ("organization_id");--> statement-breakpoint
40
+ CREATE INDEX "member_user_id_idx" ON "member" USING btree ("user_id");