Repository navigation
feat!: support DIDWW API 2026-10-22 - #68
Conversation
Authentication - Every request carries a short-lived bearer token minted from the API key with POST /token on the token service of the environment. The API key is sent only to the token service; X-DIDWW-API-Version is no longer sent, the version is requested in the token. - One token per audience (api, api-vin, api-vout, api-sms), minted on first use and cached in a TokenStore (one MemoryTokenStore per process by default); concurrent callers of a client share one mint. - A 401 re-mints once and retries the request once; a 403 is returned as is. - Token service errors throw DidwwAuthException with an AuthErrorKind; 429 opens a Retry-After window, 5xx and timeouts back off with jitter, TLS failures are not retried. - DidwwClient.Builder gains apiVersion, scope, tokenStore, logger (java.lang.System.Logger, silent by default), authUrl and the three prices URLs. Prices - voiceInPrices(), voiceOutPrices(), smsOutA2pPrices(), smsOutP2pPrices(), smsOutOtpPrices() and smsInPrices() with lookup(), head(), download(), downloadToFile() and fetch(), typed rows with BigDecimal money, DidwwPricesException with a PricesErrorKind, and PriceFileReader to read a downloaded file. Price files are written gzipped as served. Resources - New: SmsTrunk (five configuration types, Generic for unknown ones), SmsTrunkGroup, SmsTrunkRegenerateCredential, SenderIdVerification. - Did: sms_trunk and sms_trunk_group relationships. - DidGroup, AddressRequirement, EmergencyRequirement, EmergencyCallingService: number_type replaces the did_group_type relationship; DidGroup#getIsDemo(). - VoiceInTrunk pop is an enum attribute; Identity company_website; export types sms_in and sms_out with their filters. - Read-only relationships are not sent back on update. - Removed: Pop and DidGroupType resources. Behaviour changes - build() validates the API key, API version (2026-10-22 or later), scope and service URLs and throws IllegalArgumentException on invalid values. - HTTP defaults: connect 10 s, read and write 60 s, no call timeout, no redirects, no cookies; the cache and Authenticator of a user builder are not used. - Decimal numbers in untyped maps are read as BigDecimal. - Export downloads stream to the destination, accept only 200, follow no redirects and only reach the origin of the base URL or of the environment; a Path destination is replaced only once the file is complete. uploadEncryptedFile() goes through the configured client. - DidwwException is the new base of DidwwApiException, DidwwClientException, DidwwAuthException and DidwwPricesException. The SDK's exceptions carry neither the API key nor a token. CI also compiles the examples.
|
@coderabbitai review |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
|
There was a problem hiding this comment.
🟡 Changes recommended
The unresolved moderate gzip-validation issue can silently truncate pricing data and decompressed exports.
1 open issue
What changed in this PR
Migrates the SDK to DIDWW API 2026-10-22 and SDK 5.0.0, introducing breaking authentication and resource-model changes.
Changes:
- Adds bearer-token authentication, token caching, service URLs, and structured errors.
- Adds pricing and SMS support; updates DID number types, voice POPs, exports, and identity attributes.
- Updates fixtures, tests, examples, build settings, and CI example compilation.
Unresolved issue — moderate: src/main/java/com/didww/sdk/internal/MultiMemberGzipInputStream.java:32 silently accepts a truncated header in a later gzip member. This can omit price rows or replace an existing decompressed export with incomplete output, even when the HTTP body is complete. Subsequent member headers must be validated and incomplete headers rejected.
| File | Description |
|---|---|
src/test/resources/fixtures/voice_in_trunks/update_sip.json |
Moves POP into attributes. |
src/test/resources/fixtures/voice_in_trunks/update_pstn.json |
Moves POP into attributes. |
src/test/resources/fixtures/voice_in_trunks/update_clear_pop_request.json |
Covers explicit POP clearing. |
src/test/resources/fixtures/voice_in_trunks/index.json |
Uses enum-valued POP attributes. |
src/test/resources/fixtures/voice_in_trunks/create.json |
Updates POP response shape. |
src/test/resources/fixtures/voice_in_trunks/create_with_pop.json |
Adds explicit POP response. |
src/test/resources/fixtures/voice_in_trunks/create_with_pop_request.json |
Adds explicit POP request. |
src/test/resources/fixtures/voice_in_trunks/create_sip_with_rerouting.json |
Updates POP response shape. |
src/test/resources/fixtures/voice_in_trunk_groups/index.json |
Updates included trunk POPs. |
src/test/resources/fixtures/voice_in_trunk_groups/create.json |
Updates included trunk POPs. |
src/test/resources/fixtures/token/server_error.json |
Adds token-service failure response. |
src/test/resources/fixtures/token/rate_limit_exceeded.json |
Adds token rate-limit response. |
src/test/resources/fixtures/token/invalid_scope.json |
Adds invalid-scope response. |
src/test/resources/fixtures/token/invalid_client.json |
Adds authentication rejection response. |
src/test/resources/fixtures/token/create.json |
Adds bearer-token grant response. |
src/test/resources/fixtures/token/create_request.json |
Adds audience/version request. |
src/test/resources/fixtures/token/create_request_read_scope.json |
Adds read-scope request. |
src/test/resources/fixtures/sms_trunks/update_unknown_configuration_request.json |
Covers unknown configuration updates. |
src/test/resources/fixtures/sms_trunks/update_http_out.json |
Adds HTTP OUT update response. |
src/test/resources/fixtures/sms_trunks/update_http_out_request.json |
Omits generated HTTP credentials. |
src/test/resources/fixtures/sms_trunks/update_http_in.json |
Adds HTTP IN update response. |
src/test/resources/fixtures/sms_trunks/update_http_in_request.json |
Covers partial configuration updates. |
src/test/resources/fixtures/sms_trunks/update_generic_nulls_request.json |
Covers explicit configuration nulls. |
src/test/resources/fixtures/sms_trunks/update_clear_relationships_request.json |
Covers clearing SMS relationships. |
src/test/resources/fixtures/sms_trunks/show.json |
Adds HTTP OUT resource response. |
src/test/resources/fixtures/sms_trunks/show_with_outgoing_dids.json |
Adds included outgoing DIDs. |
src/test/resources/fixtures/sms_trunks/show_unknown_configuration.json |
Covers unknown types and exact numbers. |
src/test/resources/fixtures/sms_trunks/show_allow_any_did_as_source.json |
Covers unrestricted DID sources. |
src/test/resources/fixtures/sms_trunks/not_found.json |
Adds missing-trunk error. |
src/test/resources/fixtures/sms_trunks/delete_error.json |
Adds in-use deletion error. |
src/test/resources/fixtures/sms_trunks/create_with_relationships_request.json |
Adds trunk creation relationships. |
src/test/resources/fixtures/sms_trunks/create_sms_to_email.json |
Adds email configuration response. |
src/test/resources/fixtures/sms_trunks/create_sms_to_email_request.json |
Adds email configuration request. |
src/test/resources/fixtures/sms_trunks/create_smpp_smsc.json |
Adds SMPP SMSC response. |
src/test/resources/fixtures/sms_trunks/create_smpp_smsc_request.json |
Adds SMPP SMSC request. |
src/test/resources/fixtures/sms_trunks/create_smpp_esme.json |
Adds generated ESME credentials. |
src/test/resources/fixtures/sms_trunks/create_smpp_esme_request.json |
Omits generated ESME credentials. |
src/test/resources/fixtures/sms_trunks/create_http_out.json |
Adds HTTP OUT creation response. |
src/test/resources/fixtures/sms_trunks/create_http_out_request.json |
Adds HTTP OUT creation request. |
src/test/resources/fixtures/sms_trunks/create_http_in.json |
Adds HTTP IN creation response. |
src/test/resources/fixtures/sms_trunks/create_http_in_request.json |
Adds webhook configuration request. |
src/test/resources/fixtures/sms_trunks/create_error.json |
Adds configuration validation error. |
src/test/resources/fixtures/sms_trunks/create_error_request.json |
Adds invalid creation request. |
src/test/resources/fixtures/sms_trunk_regenerate_credentials/create.json |
Adds credential-rotation response. |
src/test/resources/fixtures/sms_trunk_regenerate_credentials/create_request.json |
Adds credential-rotation request. |
src/test/resources/fixtures/sms_trunk_regenerate_credentials/create_error.json |
Adds unsupported-rotation error. |
src/test/resources/fixtures/sms_trunk_groups/update_sms_trunks.json |
Adds membership update response. |
src/test/resources/fixtures/sms_trunk_groups/update_sms_trunks_request.json |
Adds membership replacement request. |
src/test/resources/fixtures/sms_trunk_groups/update_external_reference_id.json |
Adds reference update response. |
src/test/resources/fixtures/sms_trunk_groups/update_external_reference_id_request.json |
Adds reference update request. |
src/test/resources/fixtures/sms_trunk_groups/update_clear_sms_trunks_request.json |
Covers clearing group membership. |
src/test/resources/fixtures/sms_trunk_groups/not_found.json |
Adds missing-group error. |
src/test/resources/fixtures/sms_trunk_groups/index.json |
Adds group listing response. |
src/test/resources/fixtures/sms_trunk_groups/delete_error.json |
Adds in-use group error. |
src/test/resources/fixtures/sms_trunk_groups/create.json |
Adds group creation response. |
src/test/resources/fixtures/sms_trunk_groups/create_request.json |
Adds group creation request. |
src/test/resources/fixtures/sender_id_verifications/update_name.json |
Adds verification update response. |
src/test/resources/fixtures/sender_id_verifications/update_name_request.json |
Adds verification rename request. |
src/test/resources/fixtures/sender_id_verifications/update_closed_error.json |
Adds closed-verification error. |
src/test/resources/fixtures/sender_id_verifications/unassign_sms_trunk_request.json |
Covers trunk unassignment. |
src/test/resources/fixtures/sender_id_verifications/assign_sms_trunk_request.json |
Covers trunk assignment. |
src/test/resources/fixtures/prices/voice_out/lookup/200.json |
Adds outbound voice pricing rows. |
src/test/resources/fixtures/prices/voice_in/lookup/200.json |
Adds inbound voice pricing rows. |
src/test/resources/fixtures/prices/sms_out/lookup/200.json |
Adds outbound SMS pricing rows. |
src/test/resources/fixtures/prices/sms_in/lookup/200.json |
Adds inbound SMS pricing rows. |
src/test/resources/fixtures/prices/errors/serving_failure.json |
Adds unavailable-price-file error. |
src/test/resources/fixtures/prices/errors/price_plan_not_assigned.json |
Adds missing-plan error. |
src/test/resources/fixtures/prices/errors/price_not_found.json |
Adds unmatched-price error. |
src/test/resources/fixtures/prices/errors/filter_not_allowed.json |
Adds rejected-filter error. |
src/test/resources/fixtures/pops/index.json |
Removes obsolete POP fixture. |
src/test/resources/fixtures/identities/update_company_website.json |
Adds company-website response. |
src/test/resources/fixtures/identities/update_company_website_request.json |
Adds company-website request. |
src/test/resources/fixtures/exports/create_sms_out.json |
Adds outbound SMS export response. |
src/test/resources/fixtures/exports/create_sms_out_request.json |
Adds outbound SMS export filters. |
src/test/resources/fixtures/exports/create_sms_in.json |
Adds inbound SMS export response. |
src/test/resources/fixtures/exports/create_sms_in_request.json |
Adds inbound SMS export filters. |
src/test/resources/fixtures/emergency_requirements/show.json |
Replaces group type with number type. |
src/test/resources/fixtures/emergency_requirements/index.json |
Migrates requirement number types. |
src/test/resources/fixtures/emergency_calling_services/show.json |
Migrates service number type. |
src/test/resources/fixtures/emergency_calling_services/index.json |
Migrates listed service number types. |
src/test/resources/fixtures/dids/update_unassign_sms_trunk_request.json |
Covers SMS trunk clearing. |
src/test/resources/fixtures/dids/update_unassign_sms_trunk_group_request.json |
Covers SMS group clearing. |
src/test/resources/fixtures/dids/update_unassign_sms_request.json |
Covers clearing both SMS routes. |
src/test/resources/fixtures/dids/update_success.json |
Adds DID update response. |
src/test/resources/fixtures/dids/update_assign_sms_trunk_request.json |
Covers direct SMS routing. |
src/test/resources/fixtures/dids/update_assign_sms_trunk_group_request.json |
Covers grouped SMS routing. |
src/test/resources/fixtures/dids/show_with_address_verification_and_did_group.json |
Migrates included DID-group attributes. |
src/test/resources/fixtures/did_reservations/show.json |
Migrates reserved DID-group attributes. |
src/test/resources/fixtures/did_groups/show.json |
Adds number type and demo flag. |
src/test/resources/fixtures/did_groups/show_with_requirement.json |
Migrates group and requirement schemas. |
src/test/resources/fixtures/did_groups/index.json |
Migrates listed DID groups. |
src/test/resources/fixtures/did_group_types/show.json |
Removes obsolete type fixture. |
src/test/resources/fixtures/did_group_types/index.json |
Removes obsolete type listing. |
src/test/resources/fixtures/available_dids/show.json |
Migrates included DID-group metadata. |
src/test/resources/fixtures/address_requirements/show.json |
Replaces group-type relationship. |
src/test/java/com/didww/sdk/support/InterruptingBody.java |
Adds interrupted-download test helper. |
src/test/java/com/didww/sdk/resource/VoiceInTrunkTest.java |
Tests enum POP creation and clearing. |
src/test/java/com/didww/sdk/resource/SmsTrunkRegenerateCredentialTest.java |
Tests credential rotation and errors. |
src/test/java/com/didww/sdk/resource/PublicKeyTest.java |
Verifies unauthenticated public-key requests. |
src/test/java/com/didww/sdk/resource/PopTest.java |
Removes obsolete POP tests. |
src/test/java/com/didww/sdk/resource/IdentityTest.java |
Tests company-website serialization. |
src/test/java/com/didww/sdk/resource/EmergencyRequirementTest.java |
Verifies requirement number types. |
src/test/java/com/didww/sdk/resource/EmergencyCallingServiceTest.java |
Verifies service number types. |
src/test/java/com/didww/sdk/resource/DidGroupTypeTest.java |
Removes obsolete group-type tests. |
src/test/java/com/didww/sdk/resource/DidGroupTest.java |
Tests number type and demo flag. |
src/test/java/com/didww/sdk/resource/AddressRequirementTest.java |
Tests replacement number-type attribute. |
src/test/java/com/didww/sdk/repository/RepositoryTest.java |
Tests bounded error-body reads. |
src/test/java/com/didww/sdk/prices/PriceFileUmaskTest.java |
Tests downloaded-file permissions. |
src/test/java/com/didww/sdk/prices/HttpDatesTest.java |
Tests strict HTTP-date handling. |
src/test/java/com/didww/sdk/http/ApiKeyInterceptorTest.java |
Removes legacy interceptor tests. |
src/test/java/com/didww/sdk/auth/RecordingLogger.java |
Adds synchronized logging test helper. |
src/test/java/com/didww/sdk/auth/MemoryTokenStoreTest.java |
Tests token expiry and masking. |
src/main/java/com/didww/sdk/resource/VoiceInTrunk.java |
Converts POP relationship to attribute. |
src/main/java/com/didww/sdk/resource/SmsTrunkRegenerateCredential.java |
Adds credential-rotation resource. |
src/main/java/com/didww/sdk/resource/SmsTrunkGroup.java |
Adds SMS group resource. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/SmsTrunkConfiguration.java |
Defines SMS configuration base type. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/SmsToEmailConfiguration.java |
Adds email delivery configuration. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/SmppSmscConfiguration.java |
Adds customer SMSC configuration. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/SmppEsmeConfiguration.java |
Adds ESME configuration and credentials. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/package-info.java |
Documents update and null semantics. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/HttpOutConfiguration.java |
Adds outbound HTTP configuration. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/HttpInConfiguration.java |
Adds inbound webhook configuration. |
src/main/java/com/didww/sdk/resource/smstrunkconfiguration/GenericSmsTrunkConfiguration.java |
Preserves arbitrary configuration attributes. |
src/main/java/com/didww/sdk/resource/Pop.java |
Removes legacy POP resource. |
src/main/java/com/didww/sdk/resource/Identity.java |
Adds company-website attribute. |
src/main/java/com/didww/sdk/resource/Export.java |
Documents expanded export filters. |
src/main/java/com/didww/sdk/resource/enums/SmsServerLocation.java |
Defines SMPP server locations. |
src/main/java/com/didww/sdk/resource/enums/SmsHttpMethod.java |
Defines webhook HTTP methods. |
src/main/java/com/didww/sdk/resource/enums/SmsBodyType.java |
Defines webhook body encodings. |
src/main/java/com/didww/sdk/resource/enums/SenderType.java |
Defines sender categories. |
src/main/java/com/didww/sdk/resource/enums/SenderIdVerificationStatus.java |
Defines verification lifecycle states. |
src/main/java/com/didww/sdk/resource/enums/Pop.java |
Defines POP attribute values. |
src/main/java/com/didww/sdk/resource/enums/NumberType.java |
Defines replacement number types. |
src/main/java/com/didww/sdk/resource/enums/ExportType.java |
Adds SMS export types. |
src/main/java/com/didww/sdk/resource/enums/ExportTrunkType.java |
Defines inbound SMS export filters. |
src/main/java/com/didww/sdk/resource/EmergencyRequirement.java |
Replaces group type with number type. |
src/main/java/com/didww/sdk/resource/EmergencyCallingService.java |
Adds read-only number type. |
src/main/java/com/didww/sdk/resource/DidGroupType.java |
Removes obsolete resource type. |
src/main/java/com/didww/sdk/resource/DidGroup.java |
Adds number type and demo flag. |
src/main/java/com/didww/sdk/resource/Did.java |
Adds mutually exclusive SMS routes. |
src/main/java/com/didww/sdk/resource/AddressRequirement.java |
Replaces group-type relationship. |
src/main/java/com/didww/sdk/repository/ReadOnlyRepository.java |
Bounds error-body size and duration. |
src/main/java/com/didww/sdk/prices/VoiceOutPriceCategory.java |
Defines outbound voice price categories. |
src/main/java/com/didww/sdk/prices/VoiceOutPrice.java |
Models outbound voice pricing. |
src/main/java/com/didww/sdk/prices/VoiceInPrice.java |
Models inbound voice pricing. |
src/main/java/com/didww/sdk/prices/SmsOutPrice.java |
Models outbound SMS pricing. |
src/main/java/com/didww/sdk/prices/SmsInPrice.java |
Models inbound SMS pricing. |
src/main/java/com/didww/sdk/prices/PriceLookup.java |
Wraps typed lookup results. |
src/main/java/com/didww/sdk/prices/PriceFile.java |
Exposes downloaded-file metadata. |
src/main/java/com/didww/sdk/prices/HttpDates.java |
Formats and parses IMF-fixdate. |
src/main/java/com/didww/sdk/internal/Urls.java |
Adds service-URL and origin helpers. |
src/main/java/com/didww/sdk/internal/Streams.java |
Separates read and write failures. |
src/main/java/com/didww/sdk/internal/Sleeper.java |
Abstracts retry waiting. |
src/main/java/com/didww/sdk/internal/ProbingInputStream.java |
Probes for later gzip members. |
src/main/java/com/didww/sdk/internal/MultiMemberGzipInputStream.java |
Adds multi-member gzip handling; truncated-header issue remains. |
src/main/java/com/didww/sdk/internal/Jitter.java |
Adds randomized retry delays. |
src/main/java/com/didww/sdk/internal/Hex.java |
Adds hexadecimal and digest helpers. |
src/main/java/com/didww/sdk/internal/Bodies.java |
Adds bounded response-body reads. |
src/main/java/com/didww/sdk/http/ApiKeyInterceptor.java |
Removes legacy authentication interceptor. |
src/main/java/com/didww/sdk/exception/PricesErrorKind.java |
Classifies pricing failures. |
src/main/java/com/didww/sdk/exception/DidwwException.java |
Introduces common exception base. |
src/main/java/com/didww/sdk/exception/DidwwClientException.java |
Adopts common exception base. |
src/main/java/com/didww/sdk/exception/DidwwAuthException.java |
Exposes token-service failure details. |
src/main/java/com/didww/sdk/exception/DidwwApiException.java |
Adopts common exception base. |
src/main/java/com/didww/sdk/exception/AuthErrorKind.java |
Classifies authentication failures. |
src/main/java/com/didww/sdk/DidwwEnvironment.java |
Adds authentication and pricing URLs. |
src/main/java/com/didww/sdk/DidwwCredentials.java |
Masks API keys in string output. |
src/main/java/com/didww/sdk/converter/SmsTrunkConfigurationSerializer.java |
Serializes configurations and omits generated credentials. |
src/main/java/com/didww/sdk/converter/SmsTrunkConfigurationDeserializer.java |
Dispatches known and generic configurations. |
src/main/java/com/didww/sdk/converter/DidwwResourceConverter.java |
Registers resources and preserves decimals. |
src/main/java/com/didww/sdk/auth/TokenStore.java |
Defines concurrent token-cache contract. |
src/main/java/com/didww/sdk/auth/MemoryTokenStore.java |
Adds expiring in-memory token storage. |
src/main/java/com/didww/sdk/auth/DidwwScope.java |
Defines read and full scopes. |
src/main/java/com/didww/sdk/auth/BearerTokenInterceptor.java |
Adds audience authentication and 401 retry. |
src/main/java/com/didww/sdk/auth/Audience.java |
Defines service authentication audiences. |
examples/src/main/java/com/didww/examples/ExportsExample.java |
Calculates export bounds in UTC. |
examples/src/main/java/com/didww/examples/EnumWire.java |
Converts enums to filter wire values. |
examples/src/main/java/com/didww/examples/EmergencyRequirementValidationsExample.java |
Removes obsolete relationship include. |
examples/src/main/java/com/didww/examples/EmergencyRequirementsExample.java |
Demonstrates number-type filtering. |
examples/src/main/java/com/didww/examples/EmergencyCallingServicesExample.java |
Displays replacement number type. |
examples/src/main/java/com/didww/examples/DidGroupsExample.java |
Displays number type and demo flag. |
build.gradle.kts |
Sets version 5.0.0 and UTF-8 encoding. |
.github/workflows/ci.yml |
Adds example compilation to CI. |
Review effort: Balanced
- MultiMemberGzipInputStream raises an EOFException (ZipException for a corrupt header) when the data after the last member starts another gzip member that is cut short; other trailing data is still ignored. Covers PriceFileReader and downloadAndDecompressExport. - The SMS export example reads the export in memory instead of a temp file. - Long methods split into helpers, repeated literals as constants, ProbingInputStream overrides read(byte[], int, int), the errors of DidwwApiException and DidwwPricesException are transient.
|




Support for DIDWW API version 2026-10-22. This release of the SDK becomes 5.0.0; applications on API
2026-04-16stay on 4.x (release-4.1).This PR targets
prerelease, which collects the work for the new API version until it is released.prereleaseis merged intomainand tagged on the release day of the API.What changed
Authorization: Bearer <token>. The SDK mints the token from the API key withPOST /tokenonauth.didww.com(sandboxauth-sandbox.didww.com): one token per audience, minted on first use, cached in aTokenStore(oneMemoryTokenStoreper process by default; implementTokenStoreto share tokens between processes). Concurrent callers share one mint. A 401 replaces the token once and retries the request once; a 403 is returned as is; a 429 holds further mints untilRetry-After; 5xx answers, connection failures and timeouts are retried with jittered exponential backoff; a TLS failure is raised at once.Api-Keyis sent only to the token service, andX-DIDWW-API-Versionis no longer sent.DidwwClient.BuildergainsapiVersion,scope,tokenStore,logger(java.lang.System.Logger, silent by default),authUrland the three prices URLs.voiceInPrices(),voiceOutPrices(),smsOutA2pPrices(),smsOutP2pPrices(),smsOutOtpPrices()andsmsInPrices(), on theapi-vin,api-voutandapi-smshosts: lookups with filters checked before the request and typed rows (BigDecimalmoney), and the gzipped price files written unchanged, dated withLast-Modifiedand fetched withIf-Modified-Since;PriceFileReaderreads a downloaded file as aStreamof rows.SmsTrunk(configurationssms_to_email,http_in,http_out,smpp_esme,smpp_smsc, plusGenericSmsTrunkConfiguration),SmsTrunkGroup,SmsTrunkRegenerateCredential, thesms_trunk/sms_trunk_grouprelationships ofDid,sms_in/sms_outexports with their filters, andSenderIdVerification(list, read, and update of the name and the SMS trunk).number_typeon DID groups, requirements and emergency calling services,DidGroup#getIsDemo(),IdentitycompanyWebsite.DidGroupTypeandPopresources are removed;VoiceInTrunkpopis an enum attribute. Read-only relationships are not sent back on update.DidwwExceptionis the base ofDidwwApiException,DidwwClientException, and the newDidwwAuthException/AuthErrorKindandDidwwPricesException/PricesErrorKind. The SDK's own exceptions andtoString()output carry neither the API key nor a token.Pathdestination is replaced only once the file is complete;uploadEncryptedFilegoes through the configured client with the token; error bodies are bounded in size and time;GenericSMS configurations andSmsTrunkmask their values intoString(); the wait after a price file 503 and the token 429 window add a small random delay.Compatibility
Breaking:
2026-10-22, and API keys or service URLs that cannot be used, are rejected bybuild();Authenticatorof your builder are not used;ApiResponse#getMeta(), errorsource/meta,Export#getFilters(), generic attributes) areBigDecimal;DidwwApiException, an unwritable destination file throwsUncheckedIOException;Pop,DidGroupType,client.pops(),client.didGroupTypes()and the publicApiKeyInterceptorare removed.No new dependencies.
Checks
./gradlew clean test javadoc compileExamplesJavapasses locally on JDK 11 (642 tests).