Commit c677c3d
authored
feat: Centralize platform credential handling in CredentialConfig (#300)
## What this changes
Platform credential variance moves into the per-platform
`CredentialConfig`, the same way the per-platform path templates already
absorb endpoint differences. The consumers lose their inline
credential-type switches:
- **`baseHeaders(credential, userAgent)`** — io sends the user agent
under `user-agent` and carries the credential in the `authorization`
header; web sends the user agent under `x-launchdarkly-user-agent` and
carries no authorization header. A browser only delivers the
authorization header when the target service's CORS pre-flight response
lists it as allowed, so a missed allow-list entry on any endpoint
silently breaks authentication; web therefore authenticates with the
`auth` query parameter, which is not subject to that allow-list (FDv1
client-side authentication is already URL-based). `_makeHttpProperties`
becomes a single `addAll`.
- **`environmentIdFallback(credential)`** — a client-side ID identifies
the environment directly, so it serves as the environment ID when a
connection exposes no response headers; a mobile key does not. Both the
FDv1 streaming data source and the polling requestor consume this
instead of checking the credential type inline.
- **`authQueryParameters(credential)`** — authentication for every data
acquisition request in the browser: `auth=<credential>` on web, empty on
io (every io transport authenticates via the base headers). No consumer
yet; the FDv2 sources (a later PR) use it for both streaming and
polling, since the FDv2 endpoint paths do not embed the credential the
way the FDv1 client-side paths do.
The unconsumed `common_client` copy of `NetworkConfig` is removed: the
restricted-header filter that actually executes reads the
`launchdarkly_dart_common` configuration, and keeping a dead duplicate
invites divergence.
Behavior is unchanged on every platform: io requests carry the same
headers as before, web requests carry the same headers as before, and
the environment ID fallback produces the same values.
## Testing
New tests cover the `CredentialConfig` methods for both platform
variants directly (header construction, auth query parameters,
environment ID fallback), and the streaming data source's environment ID
selection: taken from the `x-ld-envid` response header when present, and
from the platform fallback when the connection exposes no headers. The
streaming test harness now forwards the environment ID to the event
handler the way the production pipeline does. The remaining paths are
covered by the existing suite, which passes unchanged.
SDK-2188
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Touches authentication headers and environment ID resolution on every
HTTP/SSE path; behavior is intended to be unchanged but mistakes would
break SDK connectivity.
>
> **Overview**
> Platform-specific credential behavior moves into per-platform
**`CredentialConfig`** (io, js, stub), replacing scattered
`CredentialType` switches in the client and data sources.
>
> **`baseHeaders`**, **`authQueryParameters`**, and
**`environmentIdFallback`** encode how each platform sends user agent,
authenticates (header vs `auth` query on web), and resolves environment
ID when response headers are missing.
**`LDCommonClient._makeHttpProperties`**, **`Requestor`**, and
**`StreamingDataSource`** now call these APIs instead of inline
credential-type checks.
>
> The unused **`NetworkConfig`** / `restrictedHeaders` duplicate in
`common_client` is removed. **`authQueryParameters`** is defined for
upcoming FDv2 consumers; FDv1 paths are unchanged in behavior.
>
> Tests add direct **`CredentialConfig`** coverage for io and web, plus
streaming tests for environment ID from `x-ld-envid` vs platform
fallback.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
5a4c9b4. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->1 parent 17f7b4e commit c677c3d
8 files changed
Lines changed: 159 additions & 41 deletions
File tree
- packages/common_client
- lib/src
- config/defaults
- data_sources
- test
- config
- data_sources
Lines changed: 13 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | 34 | | |
39 | 35 | | |
40 | 36 | | |
| |||
43 | 39 | | |
44 | 40 | | |
45 | 41 | | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
46 | 55 | | |
47 | 56 | | |
48 | 57 | | |
| |||
Lines changed: 22 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | 34 | | |
39 | 35 | | |
40 | 36 | | |
| |||
43 | 39 | | |
44 | 40 | | |
45 | 41 | | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
46 | 64 | | |
47 | 65 | | |
48 | 66 | | |
| |||
Lines changed: 9 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | 34 | | |
39 | 35 | | |
40 | 36 | | |
| |||
47 | 43 | | |
48 | 44 | | |
49 | 45 | | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
| |||
Lines changed: 2 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | 7 | | |
9 | 8 | | |
10 | 9 | | |
| |||
96 | 95 | | |
97 | 96 | | |
98 | 97 | | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 98 | + | |
| 99 | + | |
108 | 100 | | |
109 | 101 | | |
110 | 102 | | |
| |||
Lines changed: 3 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
9 | 8 | | |
10 | 9 | | |
11 | 10 | | |
| |||
184 | 183 | | |
185 | 184 | | |
186 | 185 | | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
191 | | - | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
192 | 189 | | |
193 | 190 | | |
194 | 191 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
314 | 314 | | |
315 | 315 | | |
316 | 316 | | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
| 317 | + | |
| 318 | + | |
326 | 319 | | |
327 | 320 | | |
328 | 321 | | |
| |||
Lines changed: 57 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
Lines changed: 51 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | | - | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
32 | | - | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
42 | | - | |
| 43 | + | |
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
| |||
85 | 86 | | |
86 | 87 | | |
87 | 88 | | |
88 | | - | |
| 89 | + | |
| 90 | + | |
89 | 91 | | |
90 | 92 | | |
91 | 93 | | |
| |||
498 | 500 | | |
499 | 501 | | |
500 | 502 | | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
501 | 548 | | |
0 commit comments