Add book buttons per source, remove redundant manage icon
- Remove redundant "+" manage sources icon from sources view header (already accessible via bottom "Manage Contact Sources" button) - Add "Add book" icon butt...
Add edit mode, title field, and live status to source management
- ManageSourcesDialog now has edit button per source for editing title and credentials (CalDAV/CardDAV URL, username, password) - Add title field when adding ...
Add per-source sync status in WebSocket + displayName support
- WebSocket sync status now includes per-integration statuses in a 'sources' map keyed by integration ID - applyConfig now handles displayName field for user-...
Replace Add Source with Manage Contact Sources dialog
- Rename AddSourceDialog → ManageSourcesDialog with full CRUD (list existing sources with status + remove, plus inline add form) - Move "Manage Contact Source...
Додайте сучасні поля одержувача з чіпсами, автоматичним та контактним оферлом
Замініть основні текстові вводи в полях електронної пошти Compose To / CC / BCC компоненти одержувача: дисплей на основі чіпа з видаленням кнопок, відхилений ав...
Додавання синхронізації, керування джерелом та статусу WebSocket
- Overhaul Зв'язкиLeftPanel з 3 режимами відображення: org-only книги, джерела з в'язаними книгами (синхронізовано) та плоскими книгами (sync on) - Додати SyncF...
Include memberId in sync complete NATS messages
SyncCompletePublisher now accepts optional memberId parameter, and ContactSyncJob passes it from the integration's member reference. This enables EmailService t...
Add member-level sync toggle and WebSocket sync status
- Add PUT /member/sync-toggle endpoint to batch-toggle syncEnabled on all member integrations at once - Add ContactSyncWebSocketController broadcasting aggreg...
Додати діалогове вікно контактів з багатофункціональною формою
Додає повнофункціональне діалогове вікно, доступне через чіп "New" в панелі інструментів контактів. діалогове вікно підтримує всі контактні дані (телефони, теле...
Show actionable error when SIP credentials fail (missing VoipCalling permission)
Handle RC webhook validation token; make body optional for verification requests
Only show connection error after failed registration attempt; use overlay to avoid layout shift
Wire SoftphonePanel to useSoftphone hook; remove all mock state; add capability guards
Send and display image attachments in chat
- SmsChatTab: read file as base64 via FileReader, pass to API, render <img> in message bubble - voipApi: add attachment params to sendSms
Add MMS attachment support — multipart send, base64 storage, image display
- RingCentralProvider: override sendSms with multipart/form-data MMS path - VoipMessageService: accept attachment bytes, store base64 data URL in attachmentUrl ...
Add useSoftphone hook with WebPhone SDK, STOMP events, and REST data loading
Add call event webhook pipeline; branch SMS vs telephony events before processing
Add capabilities, SIP credentials, and call management REST controllers
Implement RingCentral call management methods (sip, history, voicemail, presence, queues)
Extend PhoneProvider interface with call management methods; update stubs
Explicitly stringify Long IDs in SmsController responses
**************** Long-as-string approach was not taking effect. Directly call .toString() on all Long IDs in the controller flat-map responses to guarantee no J...
Додати @JsonIgnore до VoipMessage.conversation для запобігання лази навантаження на послідовність
Use string conversationId throughout SMS tool to handle 64-bit IDs
Backend now serializes Long as string; update all conversationId types from number to string to match. Also enable send button when an attachment is present wit...
Serialize Long IDs as strings to prevent JS precision loss
CockroachDB unique_rowid() generates 64-bit integers larger than Number.MAX_SAFE_INTEGER (2^53-1). JS JSON.parse silently rounds them, causing conversation ID m...
Remove duplicate Back button from RingCentralConfig
Parent PhoneProviderSetup already renders an IconButton with ArrowLeft in the config view header, making the Back button inside RingCentralConfig a duplicate.
Return flat map from send endpoint to prevent LazyInitializationException
VoipMessage.conversation is FetchType.LAZY; after @Transactional commits, Jackson serializing the entity would throw LazyInitializationException causing a 500, ...
Fall back to org mainPhoneNumber when member has no VOIP config
Members without an individual MemberVoipConfig (or no fromPhoneNumber set) now use the org's mainPhoneNumber from VoipProviderConfig as the outbound number, ins...
Remove getJwtKey() from WebhookController after OAuth migration
Signature validation used jwtKey as HMAC secret which no longer exists on VoipProviderConfig. Skip validation for now consistent with ****************
Add OAuth callback forwarding with no-redirect RestTemplate
- Add noRedirectRestTemplate bean (HttpClient.Redirect.NEVER) so the 302 from VOIPService's OAuth callback is passed through to the browser instead of being...
Replace JWT config with OAuth connect UI for RingCentral
- RingCentralConfig: OAuth connect/disconnect button with status indicator, main phone number field, test connection (only when connected) - voipApi: add getO...
Refactor RingCentral to OAuth 2.0 Authorization Code flow
- New OAuthController: /oauth/start (returns authUrl), /oauth/callback (exchanges code, saves tokens), /oauth/status, DELETE /oauth/token - OTKValidationFilte...
Create KamoTokens schema and org_oauth_token table
- CREATE SCHEMA IF NOT EXISTS kamotokens - CREATE TABLE kamotokens.org_oauth_token with unique (org_id, provider) - DROP COLUMN jwt_key from voip_provider_confi...
Додати OrgOAuthToken суб'єкт для зберігання OAuth 2.0
- Додати OrgOAuthToken суб'єкт в KamoTokens schema (kamotokens.org oauth token) - Додати OrgOAuthTokenРепозиторію з FindByOrgIdAndProvider / removeByOrgIdAndPro...
Equal-height feature cards and Kazoo-aware provider descriptions
- Set height: 100% on FeatureCard motion wrapper so cards in the same row match the tallest card - Update KamoPBX description to highlight Kazoo as a carrier-gr...
Use plain img tags for local SVG provider logos
next/image does not reliably serve local SVGs without unoptimized flag. Plain img tags load /public assets directly with no issues.
Як ви бачите відправлення?
Все це прибуває в робочому просторі. Почати безкоштовно план і читати цю сторінку знову в місяць.
