flutter_cloudflare_dns 0.3.0
flutter_cloudflare_dns: ^0.3.0 copied to clipboard
Flutter toolkit for diagnosing and managing Cloudflare DNS: DoH health checks, safe API gateways, and Material 3 widgets.
0.3.0 #
Breaking:
- Proxied records whose TTL is not automatic (
1) fail validation withproxied_ttl, and TTLs above 86,400 seconds withinvalid_ttl. Cloudflare always uses automatic TTL for proxied records. DnsDiagnostics.lookupreturns only answers of the queried type; a CNAME the resolver followed is inDnsDiagnostics.resolve'scnames. Answers of types this package does not support, such as RRSIG and DNAME, are dropped.DnsDiagnostics.compareResolverslists a resolver that answers NXDOMAIN in the newDnsResolverComparison.nxdomainResolversinstead offailedResolvers, so two resolvers that both say the name is gone are consistent.DnsZoneFile.parsegives proxied records automatic TTL and reads the trailing comment intocommentandtags.
Added and changed:
DnsRecord.copyWithtakesclear, a set ofDnsRecordFields to reset to null, for examplecopyWith(clear: {DnsRecordField.comment}). Other arguments keep their meaning: null or omitted keeps the old value.DnsRecordPolicysets plan limits for validation: TTLs of 60 to 86,400 seconds by default, 30 withDnsRecordPolicy.enterprise. Pass it aspolicytoDnsRecordValidator.validate, asrecordPolicyto both gateways and the dashboard, and aspolicyto the editor and import sheets.- Validate TXT content against Cloudflare's 4,096-byte record limit
(
txt_too_long) and HTTPS/SVCB parameters against RFC 9460 (invalid_svc_params,DnsRecordValidator.svcParamsError). - Accept null MX records (
0 ., RFC 7505) and SRV targets of.with port 0. DnsRecordValidator.validateZoneandvalidateInZonecheck rules across records: a CNAME next to other records with the same name (cname_conflict), identical records (duplicate_record), a null MX beside other MX records (null_mx_conflict), record sets over 8,192 characters (record_set_too_long), and apex CNAMEs (cname_flattened, info). The editor (newexistingRecordsparameter) and the import preview use them.- Internationalized names:
DnsName.toAsciiandDnsName.toUnicodeconvert between Unicode and Punycode. Names and targets are validated, sent, and exported in Punycode, and the record list shows them in Unicode. - Zone files carry record comments and tags in Cloudflare's
; comment cf_tags=a,b:cform, both ways. DnsDiagnostics.resolvereturns aDnsLookupResultwith the answers, the CNAME chain, NXDOMAIN, and the DNSSECADflag.DnsResolverComparison.cnamesshows the chain per resolver.DnsHealthReport.dnssecValidatedreports whether every lookup was DNSSEC-validated, and the health card shows it.watchPropagation(record, removal: true)waits for a deleted record to disappear, using the newDnsResolverComparison.lacks. The dashboard watches deleted DNS-only records and lists them under "Deleted records".- The dashboard imports zone files in batches of
importBatchSize(200, Cloudflare's Free plan limit) and lists every record that was not created with the reason. Imports split into several batches are not atomic. - The editor locks TTL to automatic while the Cloudflare proxy is on.
Retry-Aftergiven as an HTTP date is honored.- MX records without a priority no longer send
"priority": null. - Right-to-left layouts: padding, alignment, corners, and the add button follow the text direction.
- Fix the health card header and long record labels overflowing with large text.
- CI runs the tests on macOS, Windows, and Chrome too, and widget tests cover RTL, text scale 2, and dark mode.
0.2.1 #
- Fix long TXT values such as DKIM keys never matching across resolvers.
Cloudflare answers with several quoted strings and Google with the joined
value; health checks,
compareResolvers, andwatchPropagationnow compare the joined value, so these records no longer stay "Propagating" or reportcontent_mismatch. - Fix TXT values and CAA
iodefURLs being compared without case. Only host names and CAA issuer domains ignore case now, and IPv6 addresses compare by value (2001:DB8::1matches2001:db8:0:0:0:0:0:1). - Fix requests that never answer hanging forever. DoH lookups and gateway
requests time out after
requestTimeout(10 seconds by default, a new option onDnsDiagnostics,DirectCloudflareGateway, andProxyCloudflareGateway), andwatchPropagationcloses attimeouteven while a lookup is still running. - Fix wildcard records (
*.example.com) failing validation and zone file import. - Fix clearing all tags through
ProxyCloudflareGateway(PATCH) and batch patches: writes now always sendtags, empty or not. - Fix the dashboard sending one DoH request per record at once. Lookups run
at most
maxConcurrentLookups(8) at a time, and the automatic health check covers at mostmaxHealthCheckRecords(100) records, apex first, with acheck_limitedinfo issue for larger zones. - Fix the zone picker overflowing with many zones. It scrolls, and shows a search field above eight zones.
- Fix A and AAAA validation accepting
+1.2.3.4,01.2.3.4, and:::::and rejecting::ffff:1.2.3.4; addresses are now parsed. - Fix zone file export splitting non-ASCII TXT values by characters, which produced strings over the 255-byte limit. They are split by UTF-8 bytes.
- Fix zone file
\DDDescapes not decoding as UTF-8, so\240\159\152\128reads as 😀. - Fix an apex CNAME always failing the health check and propagation
tracking. Cloudflare flattens it, so it is reported as
cname_flattened(info) and not tracked. - Fix slow rendering of large zones.
DnsRecordListbuilds only visible tiles when its height is bounded, the newDnsRecordList.sliverdoes the same in aCustomScrollView, and the dashboard uses it. Dashboard search waits 250 ms after typing. - Fix
DnsRecord.fromJsonthrowing aTypeErrorwhen a proxy sendsproxiedor a number as a string. Such values are accepted; anything else is aFormatException, which gateways report as aCloudflareDnsExceptionwith codeinvalid_record.
0.2.0 #
Breaking: DnsRecordType gains https, svcb, and ptr. Exhaustive
switch statements over the enum need the new cases.
- Add HTTPS, SVCB, and PTR records to the model, validator, DoH diagnostics,
record list, editor sheet, dashboard filters, and zone files. HTTPS and SVCB
records carry
priority,target, andsvcParams; seeDnsRecord.httpsandDnsRecord.svcb. - Export and import BIND zone files with
DnsZoneFile.encodeandDnsZoneFile.parse, compatible with Cloudflare's DNS export. The dashboard's zone file menu copies the zone or imports a pasted file throughDnsZoneImportSheet, which previews validation errors and skips existing records. - Watch a change propagate with
DnsDiagnostics.watchPropagationandDnsResolverComparison.matches. The dashboard tracks every saved record that is not proxied and shows its state inDnsRecordListthrough the newpropagationmap (DnsPropagationStatus). - Add
BatchCapableGatewaywithbatch, implemented byDirectCloudflareGateway(Cloudflare'sdns_records/batch) andProxyCloudflareGateway(POST /dns-records/batch?zoneId=...). Zone file imports use it when available.CloudflareDnsGatewayis unchanged. - README: link the related
rdap,mail_dns_check, andtls_inspectorpackages.
0.1.2 #
- Search records by name or value from the dashboard.
- Compare public answers from Cloudflare and Google DNS-over-HTTPS resolvers
with
DnsDiagnostics.compareResolversand the dashboard's "Compare resolvers" sheet to see whether a change has propagated. - Copy a record value or duplicate a record from the record menu. The editor
treats a record without an
idas a new record. - Retry Cloudflare API requests that return HTTP 429, honoring
Retry-After. - Replace the
minecraftpub.dev topic withmaterial-designandui.
0.1.1 #
- Fix
CloudflareDnsDashboardcreating a new HTTP client for every health check without closing it. It now reuses one and closes it on dispose. - Add
close()toDnsDiagnostics,DirectCloudflareGateway, andProxyCloudflareGateway. Only clients they created are closed. - Edit record comments and tags in the editor sheet. Clearing a comment now sends an empty value so proxies using PATCH remove it.
- Validate Cloudflare limits: comments up to 500 characters, up to 20 tags,
tag names of letters, digits,
-, or_up to 32 characters, values up to 100 characters. - Publish releases to pub.dev from GitHub Actions when a
v*tag is pushed.
0.1.0 #
Breaking: DnsRecordType gains mx, caa, and ns. Exhaustive switch
statements over the enum need the new cases.
- Fix zone and record listing silently stopping after the first page. Both
gateways now follow
result_info.total_pages; proxies that return a bare list keep working. - Add MX, CAA, and NS records to the model, validator, DoH diagnostics, record list, editor sheet, and dashboard filters.
- Add Cloudflare record
tags, preserved when editing a record. - Accept
@for the zone apex and underscore labels such as_dmarcfor TXT and CNAME names. - Declare iOS, web, Windows, macOS, and Linux support.
DirectCloudflareGatewaycannot call the Cloudflare API from web browsers because of CORS; use the proxy gateway there. - Keep the record type selector usable on narrow screens by scrolling instead of shrinking buttons.
- Document the remaining public REST gateway members and the library.
- Lower the Dart SDK constraint to
^3.12.0so the documented Flutter 3.44.0 minimum (which ships Dart 3.12.0) can actually resolve the package. - Require
http1.6.0 and verify against Flutter 3.47. - Add GitHub Actions CI for formatting, analysis, tests, pana, and example builds.
0.0.5 #
- Expand the two-panel demo to 1920x2160 so both Android screens remain full height.
- Keep the complete status bar, editor form, live preview, and save controls visible.
- Publish a matching 960x1080 animated WebP for GitHub and pub.dev.
0.0.4 #
- Rebuild the demo as a space-efficient two-panel 1920x1080 Android presentation.
- Preserve real dashboard, editor, scrolling, and health-check animations.
- Upgrade the pub.dev animation to 960x540 at 12 fps while staying below the image limit.
- Correct label and chip text alignment throughout the package artwork.
0.0.3 #
- Replace the package hero and screenshot gallery with polished high-resolution artwork.
- Upgrade the Android demo to a crisp 1080x2340, 30 fps presentation.
- Use absolute GitHub media URLs so README visuals render reliably on pub.dev.
0.0.2 #
- Add branded package artwork and an animated Android demo.
- Link the public GitHub repository and issue tracker.
- Refresh the package screenshots with real Android UI.
0.0.1 #
- Add Cloudflare DoH diagnostics for A, AAAA, CNAME, TXT, and SRV records.
- Add direct and backend-proxy Cloudflare DNS gateways.
- Add a Material 3 DNS dashboard, health card, record list, and editor.
- Add safe SRV editing for services such as Minecraft Java Edition.
- Declare Android as the officially supported platform for the initial release.
