@dk122809_org/procurement-chat
v0.1.0
Published
Reusable RFQ and line-item chat package for customer and supplier portals.
Maintainers
Readme
@svstack/procurement-chat
Reusable procurement chat package for RFQ-level and product line-item-level conversations.
What it supports
- One-to-one chat between customer and supplier
- Historical chat records stored in PostgreSQL
- RFQ-level rooms and line-item-level rooms
- Dynamic side modules such as RFQ info, line item info, customer info, supplier info, and actions
- Plug-and-play UI that can be embedded in customer portal now and supplier portal later
- Socket transport supplied by the host application
Room id rules
- RFQ level:
RFQ + supplier_route_code - Line item level:
RFQ + supplier_route_code + line_number
Use the helper buildProcurementChatRoomId(...) so both portals generate the same value.
Package shape
@svstack/procurement-chat/client- React UI
- fetch client helpers
@svstack/procurement-chat/server- PostgreSQL repository
- schema bootstrap helper
- RFQ and line-item context loader
@svstack/procurement-chat/shared- shared types and room helpers
Recommended integration
Do not pass raw database credentials to the browser. Use the server adapter from this package inside your backend or Next.js route handlers, then pass a loadConversation function to the React component.
Client example
import {
ProcurementChat,
createProcurementChatHttpClient,
} from "@svstack/procurement-chat/client";
import { getSocket } from "@/app/utils/socket";
const client = createProcurementChatHttpClient({
baseUrl: "/api/procurement-chat",
});
<ProcurementChat
scope="rfq"
roomId="RFQ001SUP-ROUTE"
rfqNumber="RFQ001"
supplierRouteCode="SUP-ROUTE"
currentUser={{
id: "[email protected]",
type: "CUSTOMER",
name: "Buyer User",
}}
socket={getSocket(token)}
loadConversation={(params) => client.getConversation(params)}
onPersistMessage={(message) => client.createMessage(message)}
/>;Server example
import {
bootstrapProcurementChatSchema,
createPostgresProcurementChatRepository,
} from "@svstack/procurement-chat/server";
const repository = createPostgresProcurementChatRepository({
host: process.env.DB_HOST!,
port: Number(process.env.DB_PORT!),
user: process.env.DB_USER!,
password: process.env.DB_PASSWORD!,
database: process.env.DB_NAME!,
schema: "bidding_mgmt",
});
await bootstrapProcurementChatSchema(repository);Database objects created by this package
bidding_mgmt.procurement_chat_roomsbidding_mgmt.procurement_chat_messages
These are independent from the legacy rfqcomments table so the package can support room-based chat cleanly for both RFQ and line-item conversations.
