@companyio/notifications
v0.1.4
Published
Universal in-app notifications for multi-tenant CompanyIO products
Readme
@companyio/notifications
Universal in-app notifications for CompanyIO products. Fuel, POS, school, HR, sales, and accounting can all create notifications. None of them own a second inbox.
Notifications owns the recipient inbox: type, title, body, read state, metadata, and a delivery record for a later channel. Contacts, HR, sales, and fuel stay outside this package. Pass opaque type, sourceModule, sourceType, and sourceId.
The host owns PostgreSQL, DATABASE_URL, Prisma Client, and migrations. This package does not create a database or a Prisma Client. Tenant columns are main_business_id and branch_id. They are not Prisma relations to Business or Branch.
The existing host model Notification belongs to Fuel. This package uses NotificationsNotification and does not replace that table.
pnpm exec notifications init --schema apps/api/prisma/schema.prisma
pnpm exec notifications status
pnpm --filter @companyio/api exec prisma migrate deploy --config prisma7.config.tsnotifications init appends prisma/notifications.prisma between // @companyio/notifications:begin and // @companyio/notifications:end when NotificationsNotification is missing. It copies prisma/migrations/0001_notifications_baseline into the host migrations folder only when no host folder name already contains notifications. It does not connect to PostgreSQL and it does not run migrate.
Fastify
attachNotifications(app, {
store: createPrismaNotificationsStore(prisma),
prefix: '/api/v1/notifications',
authenticate: async (request) => getUser(request),
getContext: (_request, user) => ({
main_business_id: user.main_business_id,
branch_id: user.branch_id,
user_id: user.id,
}),
});Inbox reads use user_id from that context. A caller cannot list another user's notifications by sending a recipient id.
