Skip to content

Commit e30c884

Browse files
committed
feat(remote-config): make remote config version available through api
1 parent 56fbe52 commit e30c884

File tree

6 files changed

+34
-6
lines changed

6 files changed

+34
-6
lines changed

.changeset/selfish-jokes-applaud.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@firebase/remote-config': patch
3+
---
4+
5+
Make remote config version available through API

common/api-review/remote-config.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export interface FetchResponse {
2929
config?: FirebaseRemoteConfigObject;
3030
eTag?: string;
3131
status: number;
32+
version?: string;
3233
}
3334

3435
// @public

docs-devsite/remote-config.fetchresponse.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Defines a successful response (200 or 304).
1717
<b>Signature:</b>
1818

1919
```typescript
20-
export interface FetchResponse
20+
export interface FetchResponse
2121
```
2222

2323
## Properties
@@ -27,6 +27,7 @@ export interface FetchResponse
2727
| [config](./remote-config.fetchresponse.md#fetchresponseconfig) | [FirebaseRemoteConfigObject](./remote-config.firebaseremoteconfigobject.md#firebaseremoteconfigobject_interface) | Defines the map of parameters returned as "entries" in the fetch response body.<p>Only defined for 200 responses. |
2828
| [eTag](./remote-config.fetchresponse.md#fetchresponseetag) | string | Defines the ETag response header value.<p>Only defined for 200 and 304 responses. |
2929
| [status](./remote-config.fetchresponse.md#fetchresponsestatus) | number | The HTTP status, which is useful for differentiating success responses with data from those without.<p>The Remote Config client is modeled after the native <code>Fetch</code> interface, so HTTP status is first-class.<p>Disambiguation: the fetch response returns a legacy "state" value that is redundant with the HTTP status code. The former is normalized into the latter. |
30+
| [version](./remote-config.fetchresponse.md#version) | string | Remote config version. |
3031

3132
## FetchResponse.config
3233

@@ -65,3 +66,13 @@ The HTTP status, which is useful for differentiating success responses with data
6566
```typescript
6667
status: number;
6768
```
69+
70+
## FetchResponse.version
71+
72+
Remote config version.
73+
74+
<b>Signature:</b>
75+
76+
```typescript
77+
version?: string;
78+
```

packages/remote-config/src/client/rest_client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ export class RestClient implements RemoteConfigFetchClient {
140140

141141
let config: FirebaseRemoteConfigObject | undefined;
142142
let state: string | undefined;
143+
let version: string | undefined;
143144

144145
// JSON parsing throws SyntaxError if the response body isn't a JSON string.
145146
// Requesting application/json and checking for a 200 ensures there's JSON data.
@@ -154,6 +155,7 @@ export class RestClient implements RemoteConfigFetchClient {
154155
}
155156
config = responseBody['entries'];
156157
state = responseBody['state'];
158+
version = responseBody['templateVersion'];
157159
}
158160

159161
// Normalizes based on legacy state.
@@ -176,6 +178,6 @@ export class RestClient implements RemoteConfigFetchClient {
176178
});
177179
}
178180

179-
return { status, eTag: responseEtag, config };
181+
return { status, eTag: responseEtag, config, version } as FetchResponse;
180182
}
181183
}

packages/remote-config/src/public_types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ export interface FetchResponse {
9090
*/
9191
config?: FirebaseRemoteConfigObject;
9292

93+
/**
94+
* Defines remote config version.
95+
*/
96+
version?: string;
97+
9398
// Note: we're not extracting experiment metadata until
9499
// ABT and Analytics have Web SDKs.
95100
}

packages/remote-config/test/client/rest_client.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ describe('RestClient', () => {
9595
expect(response).to.deep.eq({
9696
status: expectedResponse.status,
9797
eTag: expectedResponse.eTag,
98-
config: expectedResponse.entries
98+
config: expectedResponse.entries,
99+
version: undefined
99100
});
100101
});
101102

@@ -184,7 +185,8 @@ describe('RestClient', () => {
184185
expect(response).to.deep.eq({
185186
status: 304,
186187
eTag: 'response-etag',
187-
config: undefined
188+
config: undefined,
189+
version: undefined
188190
});
189191
});
190192

@@ -222,7 +224,8 @@ describe('RestClient', () => {
222224
expect(response).to.deep.eq({
223225
status: 304,
224226
eTag: 'etag',
225-
config: undefined
227+
config: undefined,
228+
version: undefined
226229
});
227230
});
228231

@@ -239,7 +242,8 @@ describe('RestClient', () => {
239242
await expect(client.fetch(DEFAULT_REQUEST)).to.eventually.be.deep.eq({
240243
status: 200,
241244
eTag: 'etag',
242-
config: {}
245+
config: {},
246+
version: undefined
243247
});
244248
}
245249
});

0 commit comments

Comments
 (0)