KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

15,120
Total Changes
5,169
Features
4,935
Fixes
30
Projects
Filter by project
All Projects15,120AIService197APIService161BillingService143ConversionService107DaemonService129DocsService215ESigService88EmailService518InitializerService318KBService105KlusterServices697MCPGatewayService85MediaService546RAGService71SecurityService1,658TranslateService55VOIPService205VectorService11kamo-apps25kamo-asterisk-support24kamo-capcha17kamo-capcha-widget4kamo-internal6,937kamo-login330kamo-marketing625kamo-nowww20kamo-register213kamo-shared-library1,455kamo-signer-monorepo53kamolos108
Filter by type
All TypesBuild11CI523Chore738Docs2,167Feature5,169Fix4,935Other986Performance157Refactor274Revert23Style42Test94Upgrade1
August 3, 2026
FixVOIPService

Harden the kubectl download against flaky egress [skip ci]

dl.k8s.io over the runner's egress intermittently drops mid-transfer: curl: (56) OpenSSL SSL_read: decryption failed or bad record mac which fails the deploy ...

Kamo·1mo ago
July 22, 2026
FixVOIPService

Stop pinning the expired wildcard-kamocrm-com secret

wildcard-kamocrm-com was a legacy multi-SAN secret that cert-manager orphaned when its Certificate was repointed at a per-host secret. Nothing renewed it and it...

Kamo·2mo ago
July 11, 2026
FixVOIPService

Guard /internal/voip with InternalAuthFilter as documented — it 401'd on session auth

VoipInternalSyncController always documented InternalAuthFilter as its guard, but /internal/voip was never in PROTECTED_PREFIXES nor excluded from the OTK sessi...

Kamo·2mo ago
July 8, 2026
FixVOIPService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·2mo ago
July 7, 2026
FixVOIPService

Return 200 allFalse for unconfigured org capabilities

GET /api/voip/capabilities threw ProviderNotConfiguredException (422) when an org had no phone provider, logging a red console error on every page load for phon...

Kamo·2mo ago
July 3, 2026
FixVOIPService

Exclude /api/voip/sms/templates from OTK session filter

The doc-07 SMS template endpoints are session-less internal calls guarded by InternalAuthFilter (X-Internal-Auth), but OTKValidationFilter still ran on them and...

Sage·2mo ago
July 2, 2026
FixVOIPService

Implement POST /api/bulktext/send internal transactional SMS

SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) has always POSTed **************** to /api/bulktext/send, but the controller was ...

Sage·2mo ago
April 29, 2026
FixVOIPService

Build recording MinIO object key like imaging stream

Omit the extension when FILE_EXT is null/empty so the object name matches RecordingImagingService and ImagingController. Java string concat with null produced {...

Kamo·5mo ago
FixVOIPService

Resolve call history extension from member_voip_config, not phone_extension

**************** was NULL for some extensions even when member_voip_config correctly mapped the member to their extension. Using member_voip_config (same source...

Kamo·5mo ago
FixVOIPService

Surface imaging fallback when provider has no call history

KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...

Kamo·5mo ago
April 28, 2026
FixVOIPService

Resolve member→extension before VM/CDR provider lookup

CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number — voicemail listing returned empty because no PBX e...

Kamo·5mo ago
April 27, 2026
FixVOIPService

Capture newExtNumber as final for lambda capture in MemberVoipConfigController

newExtNumber is conditionally reassigned inside the if (isVoipEnabled && ...) block, which makes it not effectively final. The TeamMember sync block reads it fr...

Kamo·5mo ago
April 26, 2026
FixVOIPService

Don't wipe member assignment on sync from providers that lack metadata

**************** unconditionally overwrote PhoneExtension.assignedMemberId with whatever the provider returned. FreePBX (and any provider that doesn't track whi...

Kamo·5mo ago
FixVOIPService

Use extensionId as external ID, not Relay node id

FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...

Kamo·5mo ago
FixVOIPService

Rewrite all GQL queries/mutations against live schema introspection

Verified every field name and type against the actual FreePBX 17 schema. Full set of corrections: Queries: - fetchAllExtensions: remove non-existent 'voicemail...

Kamo·5mo ago
FixVOIPService

Correct GraphQL field name to fetchAsteriskDetails

FreePBX API returns "Did you mean fetchAsteriskDetails?" — rename the health check query and its data path accessor accordingly.

Kamo·5mo ago
FixVOIPService

Add XHR/Accept headers and String response parsing to GraphQL client

Same pattern as FreePBXTokenCache: add X-Requested-With + Accept: application/json to suppress FreePBX's HTML redirect responses, and switch all three call site...

Kamo·5mo ago
FixVOIPService

Add Accept+XHR headers and raw-string response parsing for token endpoint

FreePBX was returning text/html when called via cluster DNS because the Host header didn't match the configured PBX_HOSTNAME. Adding Accept: application/json an...

Kamo·5mo ago
FixVOIPService

Correct OAuth2 scope strings for FreePBX API

FreePBX scopes are top-level identifiers: 'gql' (all GraphQL) and 'rest' (all REST). The format 'gql:read' means GQL for a module named 'read', which doesn't ex...

Kamo·5mo ago
April 24, 2026
FixVOIPService

Include com.kamo.z.shared.commerce in repository scan

Latest kamo-shared-library propagates **************** (donotmodify.dao.services) which has a constructor dependency on **************** **************** The se...

Kamo·5mo ago
April 18, 2026
FixVOIPService

Bump kamo-shared-library to 1.4.0

Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...

Kamo·5mo ago
March 20, 2026
FixVOIPService

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...

Kamo·6mo ago
March 19, 2026
FixVOIPService

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...

Kamo·6mo ago
FixVOIPService

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, ...

Kamo·6mo ago
FixVOIPService

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...

Kamo·6mo ago
FixVOIPService

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 ****************

Kamo·6mo ago
FixVOIPService

Use correct session key casing for orgID and memberID

KSessionService stores keys as orgID and memberID (capital D). Both controllers were calling .get("orgId") and .get("memberId") which always returns null, causi...

Kamo·6mo ago

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing