@ogcio/building-blocks-sdk 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +55 -0
  2. package/dist/client/auth/index.d.ts.map +1 -1
  3. package/dist/client/auth/index.js +3 -1
  4. package/dist/client/auth/index.js.map +1 -1
  5. package/dist/client/clients/featureFlags/const.d.ts +3 -0
  6. package/dist/client/clients/featureFlags/const.d.ts.map +1 -0
  7. package/dist/client/clients/featureFlags/const.js +3 -0
  8. package/dist/client/clients/featureFlags/const.js.map +1 -0
  9. package/dist/client/clients/featureFlags/index.d.ts +34 -0
  10. package/dist/client/clients/featureFlags/index.d.ts.map +1 -0
  11. package/dist/client/clients/featureFlags/index.js +55 -0
  12. package/dist/client/clients/featureFlags/index.js.map +1 -0
  13. package/dist/client/clients/featureFlags/index.test.d.ts +2 -0
  14. package/dist/client/clients/featureFlags/index.test.d.ts.map +1 -0
  15. package/dist/client/clients/featureFlags/index.test.js +47 -0
  16. package/dist/client/clients/featureFlags/index.test.js.map +1 -0
  17. package/dist/client/clients/featureFlags/schema.d.ts +33769 -0
  18. package/dist/client/clients/featureFlags/schema.d.ts.map +1 -0
  19. package/dist/client/clients/featureFlags/schema.js +2 -0
  20. package/dist/client/clients/featureFlags/schema.js.map +1 -0
  21. package/dist/client/clients/featureFlags/utils.d.ts +4 -0
  22. package/dist/client/clients/featureFlags/utils.d.ts.map +1 -0
  23. package/dist/client/clients/featureFlags/utils.js +28 -0
  24. package/dist/client/clients/featureFlags/utils.js.map +1 -0
  25. package/dist/client/clients/featureFlags/utils.test.d.ts +2 -0
  26. package/dist/client/clients/featureFlags/utils.test.d.ts.map +1 -0
  27. package/dist/client/clients/featureFlags/utils.test.js +37 -0
  28. package/dist/client/clients/featureFlags/utils.test.js.map +1 -0
  29. package/dist/clients-configurations/clients-configuration.json +8 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +5 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/types/index.d.ts +4 -1
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/index.js +1 -0
  36. package/dist/types/index.js.map +1 -1
  37. package/package.json +14 -3
  38. package/src/client/auth/index.ts +3 -1
  39. package/src/client/clients/featureFlags/const.ts +3 -0
  40. package/src/client/clients/featureFlags/index.test.ts +63 -0
  41. package/src/client/clients/featureFlags/index.ts +74 -0
  42. package/src/client/clients/featureFlags/open-api-definition.json +40422 -0
  43. package/src/client/clients/featureFlags/schema.ts +33768 -0
  44. package/src/client/clients/featureFlags/utils.test.ts +51 -0
  45. package/src/client/clients/featureFlags/utils.ts +42 -0
  46. package/src/clients-configurations/clients-configuration.json +8 -0
  47. package/src/index.ts +5 -0
  48. package/src/types/index.ts +5 -1
  49. package/tap.yml +14 -0
  50. package/tsconfig.json +1 -0
  51. package/vitest.config.cts +9 -0
package/README.md CHANGED
@@ -162,3 +162,58 @@ To fix the formatting and linting errors run:
162
162
  npm run fix:formatting
163
163
  npm run fix:linting
164
164
  ```
165
+
166
+ ### Testing
167
+
168
+ The project uses `vitest` for testing. To run the tests:
169
+
170
+ ```bash
171
+ npm test
172
+ ```
173
+
174
+ ## Feature Flags
175
+
176
+ ### Pre-requisites
177
+ For local development, you should have the Feature Flags service running.
178
+ Refer to the [unleash](https://github.com/ogcio/unleash) repository for instructions on how to run the service.
179
+ You can also find examples on how to run Unleash with different auth strategies in the [unleash-examples](https://github.com/ogcio/unleash-examples/tree/feat/oidc-auth) repository.
180
+
181
+ ### Usage
182
+
183
+ To use the Feature Flags service you will need:
184
+
185
+ - `baseUrl` A valid `Feature Flags` service URL. Use `http://localhost:4242` for local development.
186
+ - `token` A valid `Feature Flags` service token. Refer to [Client Tokens](https://docs.getunleash.io/reference/api-tokens-and-client-keys#client-tokens)
187
+ for instructions on how to generate a token.
188
+
189
+ Initialize the SDK with the `featureFlags` service:
190
+
191
+ ```typescript
192
+ const sdk = getBuildingBlockSDK({
193
+ services: {
194
+ featureFlags: {
195
+ baseUrl,
196
+ },
197
+ },
198
+ getTokenFn: () => token,
199
+ });
200
+ ```
201
+
202
+ Use the `featureFlags` service to check if a feature is enabled (without any context):
203
+
204
+ ```typescript
205
+ const isEnabled = await sdk.featureFlags.isFlagEnabled("feature-name");
206
+ ```
207
+
208
+ Use the `featureFlags` service to check if a feature is enabled with context:
209
+
210
+ ```typescript
211
+ const isEnabled = await sdk.featureFlags.isFlagEnabled("feature-name", {
212
+ userId: "userId",
213
+ sessionId: "sessionId",
214
+ });
215
+ ```
216
+
217
+ *Note*: The `isFlagEnabled` is asynchronous because if the client is not connected yet,
218
+ it will wait for the connection to be established before checking the flag.
219
+ Once the client is connected, the flag will be checked synchronously.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,gBAAgB,EAEhB,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAmF9B,eAAO,MAAM,aAAa,mBACR,gBAAgB,KAC/B,aAqCF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,gBAAgB,EAEhB,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAmF9B,eAAO,MAAM,aAAa,mBACR,gBAAgB,KAC/B,aAqCF,CAAC"}
@@ -1,4 +1,6 @@
1
- import configFile from "../../clients-configurations/clients-configuration.json";
1
+ import configFile from "../../clients-configurations/clients-configuration.json" with {
2
+ type: "json"
3
+ };
2
4
  const fetchToken = async (params) => {
3
5
  const body = {
4
6
  ...params.specificBodyFields,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const DEFAULT_PROJECT_ID = "default";
2
+ export { DEFAULT_PROJECT_ID };
3
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/const.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB,YAAY,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ const DEFAULT_PROJECT_ID = "default";
2
+ export { DEFAULT_PROJECT_ID };
3
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/const.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type createClient from "openapi-fetch";
2
+ import { type Context } from "unleash-client";
3
+ import type { BaseApiClientParams } from "../../../types/index.js";
4
+ import BaseClient from "../../base-client.js";
5
+ import type { components, paths } from "./schema.js";
6
+ declare class FeatureFlags extends BaseClient<paths> {
7
+ client: ReturnType<typeof createClient<paths>>;
8
+ protected serviceName: "featureFlags";
9
+ private unleashClient;
10
+ isConnected: boolean;
11
+ constructor({ baseUrl, getTokenFn }: BaseApiClientParams);
12
+ isFlagEnabled(name: string, context?: Context): Promise<boolean>;
13
+ getFeatureFlags(projectId?: string): Promise<{
14
+ data: components["schemas"]["projectFeatureSchema"][];
15
+ metadata: any;
16
+ error: {
17
+ id?: string;
18
+ name?: string;
19
+ message?: string;
20
+ } | {
21
+ id?: string;
22
+ name?: string;
23
+ message?: string;
24
+ } | {
25
+ id?: string;
26
+ name?: string;
27
+ message?: string;
28
+ };
29
+ }>;
30
+ private waitForConnection;
31
+ }
32
+ export default FeatureFlags;
33
+ export type { Context as FeatureFlagsEvaluationContext };
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,KAAK,OAAO,EAIb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGrD,cAAM,YAAa,SAAQ,UAAU,CAAC,KAAK,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,SAAS,CAAC,WAAW,iBAAiB;IAEtC,OAAO,CAAC,aAAa,CAAwB;IACtC,WAAW,UAAS;gBAEf,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,mBAAmB;IAkBlD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAK7C,eAAe,CAAC,SAAS,SAAqB;cAclB,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,EAAE;;;;;;;;;;;;;;;;YASnE,iBAAiB;CAGhC;AAED,eAAe,YAAY,CAAC;AAC5B,YAAY,EAAE,OAAO,IAAI,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { InMemStorageProvider, initialize, } from "unleash-client";
2
+ import { FEATURE_FLAGS } from "../../../types/index.js";
3
+ import BaseClient from "../../base-client.js";
4
+ import { DEFAULT_PROJECT_ID } from "./const.js";
5
+ import { waitForConnection } from "./utils.js";
6
+ class FeatureFlags extends BaseClient {
7
+ serviceName = FEATURE_FLAGS;
8
+ unleashClient = null;
9
+ isConnected = false;
10
+ constructor({ baseUrl, getTokenFn }) {
11
+ super({ baseUrl, getTokenFn });
12
+ const token = getTokenFn ? getTokenFn(FEATURE_FLAGS) : "";
13
+ this.unleashClient = initialize({
14
+ appName: this.serviceName,
15
+ url: `${baseUrl}/api`,
16
+ refreshInterval: 1000,
17
+ customHeaders: {
18
+ Authorization: token,
19
+ },
20
+ storageProvider: new InMemStorageProvider(),
21
+ });
22
+ this.unleashClient.on("error", console.error);
23
+ this.unleashClient.on("synchronized", () => {
24
+ this.isConnected = true;
25
+ });
26
+ }
27
+ async isFlagEnabled(name, context) {
28
+ await this.waitForConnection();
29
+ return this.unleashClient?.isEnabled(name, context, () => false) ?? false;
30
+ }
31
+ async getFeatureFlags(projectId = DEFAULT_PROJECT_ID) {
32
+ return await this.client
33
+ .GET("/api/admin/projects/{projectId}/features", {
34
+ params: {
35
+ path: {
36
+ projectId,
37
+ },
38
+ },
39
+ })
40
+ .then((response) => {
41
+ // @ts-expect-error: TODO: fix me
42
+ const { data, metadata, error } = this.formatResponse(response);
43
+ return {
44
+ data: data?.features,
45
+ metadata,
46
+ error,
47
+ };
48
+ }, (reason) => this.formatError(reason));
49
+ }
50
+ async waitForConnection(everyMs = 10) {
51
+ return waitForConnection(this, everyMs);
52
+ }
53
+ }
54
+ export default FeatureFlags;
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,oBAAoB,EAEpB,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,YAAa,SAAQ,UAAiB;IAEhC,WAAW,GAAG,aAAa,CAAC;IAE9B,aAAa,GAAmB,IAAI,CAAC;IACtC,WAAW,GAAG,KAAK,CAAC;IAE3B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAuB;QACtD,KAAK,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,UAAU,CAAC,aAAa,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,GAAG,EAAE,GAAG,OAAO,MAAM;YACrB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE;gBACb,aAAa,EAAE,KAAK;aACrB;YACD,eAAe,EAAE,IAAI,oBAAoB,EAAE;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,OAAiB;QACjD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAS,GAAG,kBAAkB;QAClD,OAAO,MAAM,IAAI,CAAC,MAAM;aACrB,GAAG,CAAC,0CAA0C,EAAE;YAC/C,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,SAAS;iBACV;aACF;SACF,CAAC;aACD,IAAI,CACH,CAAC,QAAQ,EAAE,EAAE;YACX,iCAAiC;YACjC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO;gBACL,IAAI,EAAE,IAAI,EAAE,QAA2D;gBACvE,QAAQ;gBACR,KAAK;aACN,CAAC;QACJ,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CACrC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAO,GAAG,EAAE;QAC1C,OAAO,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import t from "tap";
2
+ import * as td from "testdouble";
3
+ import FeatureFlags from "./index.js";
4
+ let isEnabled = true;
5
+ await td.replaceEsm("unleash-client", {
6
+ initialize: td.func(),
7
+ InMemStorageProvider: td.func(),
8
+ });
9
+ let fetchResponse = {};
10
+ global.fetch = async () => ({
11
+ ok: true,
12
+ status: 200,
13
+ json: async () => fetchResponse,
14
+ headers: new Headers(),
15
+ });
16
+ t.test("FeatureFlags", async (t) => {
17
+ const baseUrl = "http://fakehost";
18
+ const getTokenFn = () => "test-token";
19
+ let featureFlags;
20
+ t.beforeEach(async () => {
21
+ featureFlags = new FeatureFlags({ baseUrl, getTokenFn });
22
+ });
23
+ t.test("should initialize unleash client with correct parameters", async (t) => {
24
+ t.ok(featureFlags.isConnected);
25
+ });
26
+ t.test("should return false if flag is not enabled", async (t) => {
27
+ isEnabled = false;
28
+ const result = await featureFlags.isFlagEnabled("test-flag");
29
+ t.equal(result, isEnabled);
30
+ });
31
+ t.test("should return true if flag is enabled", async (t) => {
32
+ isEnabled = true;
33
+ const result = await featureFlags.isFlagEnabled("test-flag");
34
+ t.equal(result, isEnabled);
35
+ });
36
+ t.test("should call GET method on client when getFeatureFlags is called", async () => {
37
+ fetchResponse = { data: { features: [] }, metadata: {} };
38
+ const result = await featureFlags.getFeatureFlags();
39
+ t.ok(result);
40
+ t.same(result, {
41
+ data: [],
42
+ metadata: {},
43
+ error: null,
44
+ });
45
+ });
46
+ });
47
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,YAAY,MAAM,YAAY,CAAC;AAEtC,IAAI,SAAS,GAAG,IAAI,CAAC;AAErB,MAAM,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE;IACpC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE;IACrB,oBAAoB,EAAE,EAAE,CAAC,IAAI,EAAE;CAChC,CAAC,CAAC;AAEH,IAAI,aAAa,GAAG,EAAE,CAAC;AAEvB,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CACxB,CAAC;IACC,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa;IAC/B,OAAO,EAAE,IAAI,OAAO,EAAE;CACvB,CAAa,CAAC;AAEjB,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAClC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;IACtC,IAAI,YAA0B,CAAC;IAE/B,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACtB,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CACJ,0DAA0D,EAC1D,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;IAEF,CAAC,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,SAAS,GAAG,KAAK,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CACJ,iEAAiE,EACjE,KAAK,IAAI,EAAE;QACT,aAAa,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACb,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}