Compare commits

...

1031 Commits

Author SHA1 Message Date
Jonathan Norris 91ba360d36
feat(multi-provider): Add Track Method Support to Multi-Provider (#1323)
Signed-off-by: Jonathan Norris <jonathan@taplytics.com>
2025-07-11 13:39:13 -04:00
github-actions[bot] 0ff5c88135
chore(main): release config-cat-provider 0.7.6 (#1349)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-08 00:22:29 +02:00
renovate[bot] 601e7de199
fix(security): update dependency configcat-common to v9.4.0 (#1348)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 15:44:05 -04:00
renovate[bot] fca83c925c
fix(security): update vulnerability-updates (#1342)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 14:53:58 -04:00
Todd Baert e2404a480f
Update renovate.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 14:34:13 -04:00
Todd Baert 6776e9735a
Update renovate.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 14:29:19 -04:00
Todd Baert 0a6e44302d
Update renovate.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 14:24:19 -04:00
Todd Baert d6c4817948
Update renovate.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 13:55:54 -04:00
Todd Baert 1a913b8dba
chore: Update renovate.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 13:53:23 -04:00
Todd Baert 1b5ecc0959
chore: fix renovate.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 13:50:31 -04:00
Todd Baert 18268f8a21
chore: more renovate troubleshooting
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 13:34:15 -04:00
renovate[bot] ddbde614e9
fix(deps): update dependency @flipt-io/flipt-client-js to v0.2.0 (#1331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 13:27:33 -04:00
renovate[bot] e501475536
fix(deps): update dependency axios to v1.10.0 (#1332)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 17:18:48 +00:00
renovate[bot] ea14c71e4d
chore(deps): update libs/shared/flagd-core/spec digest to a367871 (#1328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 17:09:12 +00:00
Todd Baert 6a6d23ba32
chore: troubleshooting
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 13:01:52 -04:00
Todd Baert 82fbf1e042 chore: fix dep version
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 13:00:24 -04:00
renovate[bot] 375193081a
fix(deps): update dependency @aws-sdk/client-ssm to v3.840.0 (#1329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 16:44:03 +00:00
renovate[bot] fbc5023097
chore(config): migrate renovate config (#1327)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 11:33:51 -04:00
github-actions[bot] e6766c07e5
chore(main): release flagd-core 1.1.0 (#1156)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-04 11:19:27 -04:00
renovate[bot] 9c0f895af5
chore(deps): update libs/providers/flagd/spec digest to a367871 (#1326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 11:16:50 -04:00
Todd Baert cf9fe09cc1 chore: use dep dashboard
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 11:12:33 -04:00
github-actions[bot] 4e1202982e
chore(main): release ofrep-web-provider 0.3.3 (#1320)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-06-23 12:38:38 -04:00
Todd Baert 6ab7f1abfc
fix: remove incorrect undici dep (#1319)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-06-23 12:17:32 -04:00
renovate[bot] 1ffe54af81
fix(deps): update dependency axios to v1.9.0 (#1314)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-08 00:58:04 +00:00
renovate[bot] ec5309a0a9
fix(deps): update dependency @aws-sdk/client-ssm to v3.826.0 (#1313)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 20:52:22 +00:00
renovate[bot] 02a671ca7c
chore(deps): update swc monorepo (#1312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 16:52:28 +00:00
renovate[bot] 4f30cda7a3
chore(deps): update dependency testcontainers to v10.28.0 (#1311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 12:38:51 +00:00
renovate[bot] 141a37df58
chore(deps): update dependency @smithy/types to v4.3.1 (#1310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 10:33:14 +00:00
renovate[bot] d3ad93e3a9
fix(deps): update dependency @flipt-io/flipt-client-js to v0.0.6 (#1309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 10:30:01 +00:00
renovate[bot] d495ee346f
chore(deps): update dependency ts-jest to v29.3.4 (#1308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 05:59:41 +00:00
renovate[bot] b9ff7e1448
chore(deps): update libs/providers/flagd/spec digest to bb2dc2c (#1305)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 01:44:58 +00:00
renovate[bot] 70518ac4c1
chore(deps): update libs/shared/flagd-core/spec digest to bb2dc2c (#1306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-06 23:58:24 +00:00
github-actions[bot] 6edf52e7c2
chore(main): release flipt-web-provider 0.1.5 (#1304)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-06-06 14:52:36 +00:00
renovate[bot] 61b46c9687
chore(deps): update dependency libs/shared/flagd-core/test-harness to v2 (#1218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-06 14:52:14 +00:00
Philipp Jardas 9e8496a384
feat(flipt-web): update types to match flipt-client-js (#1303)
Signed-off-by: Philipp Jardas <philipp@jardas.de>
2025-06-06 10:48:46 -04:00
renovate[bot] 6dd71ac73a
chore(deps): update libs/shared/flagd-core/flagd-schemas digest to 2852d77 (#1301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 16:11:27 +00:00
renovate[bot] 8cdd5b4524
chore(deps): update libs/providers/flagd/spec digest to f014806 (#1300)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 11:49:40 +00:00
renovate[bot] 4fe9c7e232
chore(deps): update libs/providers/flagd/schemas digest to 2852d77 (#1299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 05:07:23 +00:00
renovate[bot] e83fa88790
chore(deps): update libs/providers/flagd-web/schemas digest to 2852d77 (#1298)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 02:26:46 +00:00
renovate[bot] 771dcd522b
chore(deps): update actions/setup-node digest to 49933ea (#1297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 02:23:16 +00:00
renovate[bot] 182077cf32
chore(deps): update libs/shared/flagd-core/spec digest to f014806 (#1206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-04 21:50:07 +00:00
Simon Schrottner fbd9f9155d
test(flagd): rework e2e tests to new format (#1129)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-06-04 15:59:55 -04:00
github-actions[bot] 24a7e0e3bb
chore(main): release flipt-web-provider 0.1.4 (#1295)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-06-04 14:54:27 -04:00
github-actions[bot] c1b00f69ee
chore(main): release aws-ssm-provider 0.1.3 (#1296)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-06-04 14:51:07 -04:00
Todd Baert 3045e0cac8
chore: remove non-feat-fix release config
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-06-04 14:23:49 -04:00
Todd Baert 4dbcbf1870
chore: add "type" import enforcement lint rule and apply (#1292)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-05-30 13:06:18 -04:00
Todd Baert 8d2fd484db
chore: update ci to node 20+ (#1291)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-05-29 15:36:27 -04:00
github-actions[bot] a0cdef59fd
chore(main): release go-feature-flag-web-provider 0.2.6 (#1262)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-28 08:56:07 +02:00
Thomas Poignant d9ffcec165
feat(goff web): Support tracking events (#1268)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2025-05-26 22:35:44 +02:00
github-actions[bot] 136b1c9858
chore(main): release go-feature-flag-provider 0.7.8 (#1285)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-26 20:38:01 +02:00
simas.usas 7083655c78
feat(gofeatureflag): added cache option (#1284)
Signed-off-by: Simas Usas <simas.usas@vinted.com>
2025-05-26 08:17:38 +02:00
Todd Baert df1ec47c3f
chore: use publish env
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-16 12:31:06 -04:00
renovate[bot] de161ad178
fix(deps): update swc monorepo (#1280)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-12 10:57:06 +00:00
renovate[bot] a80f5ce3d7
fix(deps): update dependency lru-cache to v11.1.0 (#1279)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-12 01:42:00 +00:00
renovate[bot] afae82c1a1
fix(deps): update dependency @aws-sdk/client-ssm to v3.787.0 (#1278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-12 01:38:56 +00:00
renovate[bot] b9231018c4
chore(deps): update dependency typescript to v5.8.3 (#1277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-12 01:35:38 +00:00
renovate[bot] 4a48caa78a
chore(deps): update dependency ts-jest to v29.3.1 (#1276)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 22:24:37 +00:00
renovate[bot] 92c67281c8
chore(deps): update dependency testcontainers to v10.24.2 (#1275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 18:11:16 +00:00
github-actions[bot] 358a04f3f0
chore(main): release go-feature-flag-provider 0.7.7 (#1265)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-11 15:32:00 +02:00
Christian Bilevits ce6a8e1a80
fix(gofeatureflag): Error for configurationHasChanged when slash was missing in endpoint (#1229)
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2025-04-11 15:30:13 +02:00
renovate[bot] ee676d8495
chore(deps): update dependency @smithy/types to v4.2.0 (#1274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 12:46:31 +00:00
renovate[bot] 18a0cb906a
fix(deps): update dependency axios to v1.8.4 (#1273)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 12:43:06 +00:00
renovate[bot] d7f8746434
fix(deps): update dependency @flipt-io/flipt-client-js to v0.0.2 (#1272)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 06:52:29 +00:00
renovate[bot] fbe9adc832
chore(deps): update libs/shared/flagd-core/flagd-schemas digest to c707f56 (#1271)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 02:57:41 +00:00
renovate[bot] 29f8b84685
chore(deps): update libs/providers/flagd/spec digest to 27e4461 (#1270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 02:54:31 +00:00
renovate[bot] ca98f7c6dc
chore(deps): update libs/providers/flagd/schemas digest to c707f56 (#1269)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-10 23:43:45 +00:00
renovate[bot] 241e36edf6
chore(deps): update libs/providers/flagd-web/schemas digest to c707f56 (#1254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-10 15:16:48 +00:00
renovate[bot] e6d3e9902f
chore(deps): update actions/setup-node digest to cdca736 (#1248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-10 15:13:43 +00:00
github-actions[bot] 7be62ae45f
chore(main): release flipt-web-provider 0.1.3 (#1253)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-10 17:13:41 +02:00
github-actions[bot] a4fa64ec24
chore(main): release flipt-web-provider 0.1.3 (#1250)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2025-04-10 17:10:25 +02:00
github-actions[bot] 9323b14968
chore(main): release flipt-provider 0.1.3 (#1249)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-10 17:09:42 +02:00
Mark Phelps dba2a28001
chore(flipt): swap underlying flipt web sdk (#1244)
Signed-off-by: Mark Phelps <209477+markphelps@users.noreply.github.com>
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: adams85 <31276480+adams85@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-10 17:07:05 +02:00
Simon Schrottner 4180281715
chore: update codeownership for global maintainers (#1245)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-10 10:47:06 +02:00
github-actions[bot] e8774fdd8c
chore(main): release config-cat-provider 0.7.5 (#1246)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-09 20:51:01 +02:00
github-actions[bot] 650a598dbd
chore(main): release config-cat-web-provider 0.1.6 (#1247) 2025-04-09 19:57:59 +02:00
adams85 04256197bf
fix(config-cat): Rework error reporting (#1242) 2025-04-09 19:37:35 +02:00
github-actions[bot] a164bcaa2f
chore(main): release aws-ssm-provider 0.1.2 (#1243)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-27 15:41:45 -04:00
Giovanni De Giorgio 043be44de1
feat(aws-ssm): add decryption support for `SecureString` parameters (#1241)
Signed-off-by: Giovanni De Giorgio <giovannidegiorgio1999@gmail.com>
2025-03-27 13:22:52 -04:00
Giovanni De Giorgio ea9e62a8aa
fix(generator): update generated path `project.json`, `jest.config.ts`, `.eslintrc.json` (#1236)
Signed-off-by: Giovanni De Giorgio <giovannidegiorgio1999@gmail.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-25 13:54:10 -04:00
github-actions[bot] d81ef890f3
chore(main): release aws-ssm-provider 0.1.1 (#1239)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-21 09:38:22 -04:00
Giovanni De Giorgio 819a247c41
feat(aws-ssm): implement AWS SSM provider (#1221)
Signed-off-by: Giovanni De Giorgio <giovannidegiorgio1999@gmail.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-20 15:47:47 -04:00
Todd Baert 80ec86b938 chore: fix lint
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-20 15:18:30 -04:00
github-actions[bot] 7a145e3084
chore(main): release flagd-web-provider 0.7.3 (#998)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-20 14:10:59 -04:00
Giovanni De Giorgio 852257c31b
chore: add `.verdaccio` inside `.gitignore` (#1235)
Signed-off-by: Giovanni De Giorgio <giovannidegiorgio1999@gmail.com>
2025-03-19 08:13:10 -04:00
github-actions[bot] 7c0b6f10b2
chore(main): release flagsmith-client-provider 0.1.3 (#993)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-18 15:55:47 -04:00
Michael Beemer 84abd328a4
chore: add 1.13.0 as a valid grpc-js peer version (#1234)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-03-17 15:27:03 -04:00
github-actions[bot] 6609f5897c
chore(main): release config-cat-web-provider 0.1.5 (#1228)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-14 20:21:09 +00:00
github-actions[bot] 5394a70adb
chore(main): release config-cat-provider 0.7.4 (#1227)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-14 16:19:08 -04:00
Michael Beemer d8fc42f5d2
chore: bump the required core version
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-03-14 16:17:52 -04:00
Michael Beemer 140839777b
chore: bump the required core version
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-03-14 16:17:30 -04:00
github-actions[bot] 49cdbf7b7c
chore(main): release config-cat-core 0.1.1 (#1144)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 13:05:40 -04:00
github-actions[bot] ca4db10189
chore(main): release go-feature-flag-provider 0.7.6 (#1224)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-12 15:20:04 -04:00
github-actions[bot] 86f8d7cf8c
chore(main): release ofrep-core 1.0.1 (#1223)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-12 15:12:36 -04:00
renovate[bot] ed504968d9
fix(deps): update dependency axios to v1.8.2 [security] (#1222)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-12 15:08:26 -04:00
Todd Baert f5e3f1f3ce
fix: improper inclusion of test deps (#1220)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-12 14:58:49 -04:00
github-actions[bot] b6acc163ed
chore(main): release launchdarkly-client-provider 0.3.2 (#1174)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-12 13:46:05 -04:00
Tommy Josépovic e888d03fca
feat(launchdarkly-client-provider): Add tracking API (#1219)
Signed-off-by: Tommy Josépovic <44372776+tjosepo@users.noreply.github.com>
2025-03-12 11:30:43 -04:00
github-actions[bot] 0a87fd694b
chore(main): release config-cat-provider 0.7.3 (#1171)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2025-03-04 11:09:43 +01:00
github-actions[bot] 55115118fc
chore(main): release config-cat-web-provider 0.1.4 (#1175)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-04 10:04:07 +01:00
adams85 9d14173cf0
fix(config-cat): Forward default value to underlying client (#1214)
Signed-off-by: Adam Simon <adam@configcat.com>
Co-authored-by: Adam Simon <adam@configcat.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-03-04 10:01:14 +01:00
renovate[bot] 3dd1232330
chore(deps): update dependency testcontainers to v10.18.0 (#1217)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-20 06:27:00 +00:00
renovate[bot] 1fdb6c60a1
chore(deps): update dependency @swc/core to v1.10.18 (#1216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-20 03:26:31 +00:00
renovate[bot] 8f08c48adf
chore(deps): update libs/providers/flagd/spec digest to a69f748 (#1215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 23:28:54 +00:00
github-actions[bot] 3e1295c33a
chore(main): release ofrep-provider 0.2.1 (#1176)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-02-13 15:31:58 -05:00
github-actions[bot] 3fa006de6e
chore(main): release ofrep-web-provider 0.3.2 (#1123)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-13 15:28:57 -05:00
Todd Baert b3abb3551c
chore: update ofrep peer (#1211)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-02-13 15:25:23 -05:00
github-actions[bot] afa91affc2
chore(main): release ofrep-core 1.0.0 (#1180)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-13 15:16:58 -05:00
Todd Baert ce37b6adcd
feat: support metadata in errors in OFREP (#1203)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-02-13 15:12:11 -05:00
github-actions[bot] 68585ae9d9
chore(main): release flipt-web-provider 0.1.2 (#1181)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-11 17:44:13 -05:00
Lucas Botingnon dbd23264e4
fix: Removed incorrect string case format from the options.authentica… (#1209)
Signed-off-by: lucasbotingnon <lucas.botingnon@gmail.com>
2025-02-11 17:40:49 -05:00
github-actions[bot] 38def1d65d
chore(main): release go-feature-flag-provider 0.7.5 (#1204)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-02-10 09:27:30 +01:00
Michael Beemer 9753545cd9
fix: correct openfeature core peer version
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-02-07 16:49:30 -05:00
renovate[bot] 7af11c3bd4
chore(deps): update libs/providers/flagd/spec digest to 95fe981 (#1205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 21:26:45 +00:00
renovate[bot] 5de7f8e04e
chore(deps): pin dependencies (#1130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 16:23:53 -05:00
github-actions[bot] de63252239
chore(main): release flagd-provider 0.13.3 (#1191)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-07 16:20:41 -05:00
faisal.rafi 4e0db2abda
feat: support proxy routing via gRPC default_authority (#1202)
Signed-off-by: raflFaisal <faisal.rafi.mca@gmail.com>
2025-02-07 09:40:41 -05:00
Thomas Poignant 0dfffdc316
feat(go-feature-flag): Support exporter metadata during evaluation (#1186)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2025-02-07 10:36:52 +01:00
Michael Beemer 9de707ac37
chore: add node 22 to test matrix (#1201)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-02-03 12:43:15 -05:00
Michael Beemer d88c5fe11f
feat(ofrep-core): add abort timeout to fetch call (#1200)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-02-03 12:38:00 -05:00
renovate[bot] 92c2bbe43f
chore(deps): update dependency testcontainers to v10.17.2 (#1198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 00:30:21 +00:00
renovate[bot] 0f59028bd5
chore(deps): update bufbuild/buf-setup-action action to v1.50.0 (#1196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 21:19:41 +00:00
renovate[bot] 8de214132d
fix(deps): update dependency json-logic-engine to v4.0.6 (#1195)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 17:39:03 +00:00
renovate[bot] 5b295d0368
chore(deps): update dependency @swc/core to v1.10.11 (#1194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 13:56:22 +00:00
renovate[bot] 3555c50b51
chore(deps): update libs/shared/flagd-core/test-harness digest to 8931c86 (#1193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 09:43:09 +00:00
renovate[bot] 0a910bc742
chore(deps): update libs/shared/flagd-core/spec digest to 5b07065 (#1192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 09:40:17 +00:00
renovate[bot] 758d2678ff
chore(deps): update libs/shared/flagd-core/flagd-schemas digest to bb76343 (#1190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 01:08:41 +00:00
renovate[bot] 215c983d7c
chore(deps): update libs/providers/flagd/spec digest to 5b07065 (#1189)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 01:06:10 +00:00
renovate[bot] 2304efebe4
chore(deps): update libs/providers/flagd/schemas digest to bb76343 (#1168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 01:03:36 +00:00
renovate[bot] cb7bdb12a1
chore(deps): update libs/providers/flagd-web/schemas digest to bb76343 (#1167)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 01:00:56 +00:00
github-actions[bot] 95026ae20d
chore(main): release go-feature-flag-web-provider 0.2.5 (#1185)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-23 10:42:15 +01:00
Chris Price 928e43764a
fix(go-feature-flag): Support endpoint paths in data collector goff-api.ts (#1184)
Signed-off-by: Chris Price <6090660+crprice@users.noreply.github.com>
2025-01-23 10:37:13 +01:00
github-actions[bot] 62da1cb76a
chore(main): release go-feature-flag-provider 0.7.4 (#1169)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2025-01-16 19:33:26 +01:00
github-actions[bot] 6602f52850
chore(main): release go-feature-flag-web-provider 0.2.4 (#1173)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-16 18:45:07 +01:00
Thomas Poignant 0edf3f5516
feat(go-feature-flag): Support exporter metadata in web and server providers (#1183)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2025-01-16 18:37:26 +01:00
github-actions[bot] 6d5309b118
chore(main): release unleash-web-provider 0.1.1 (#1166)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-01-10 12:16:52 -05:00
github-actions[bot] d489924cfa
chore(main): release growthbook-provider 0.1.2 (#1157)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-01-10 12:11:46 -05:00
github-actions[bot] d9e84cd244
chore(main): release flagd-provider 0.13.2 (#999)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-10 11:52:50 -05:00
Michael Beemer 995b13f368
chore: remove workspace plugin
This plugin is no longer necessary with the latest version of NX. NX verifies dependencies with a lint rule.

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-01-10 11:47:52 -05:00
Todd Baert 7f310fe871
chore: update nx packages (#1147)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-01-10 11:36:17 -05:00
jarebudev 19accf8387
feat: add unleash web provider (#1105)
Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2025-01-10 10:51:16 -05:00
Michael Beemer b1c6d23556
feat(flagd): add flag metadata (#1151)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-01-10 10:40:36 -05:00
renovate[bot] 5b2ac49e96
chore(deps): update dependency @swc/cli to ~0.6.0 (#1163)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 18:53:49 +00:00
renovate[bot] cd483ea93a
chore(deps): update bufbuild/buf-setup-action action to v1.49.0 (#1162)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 13:45:36 +00:00
renovate[bot] 337ae640a7
fix(deps): update dependency json-logic-engine to v4.0.5 (#1161)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 11:18:39 +00:00
renovate[bot] 45a9b030e1
chore(deps): update ghcr.io/open-feature/sync-testbed docker tag to v0.5.21 (#1160)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 05:45:26 +00:00
renovate[bot] 4e0c9839cc
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.5.21 (#1159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 05:42:43 +00:00
renovate[bot] 5b09d51be2
chore(deps): update dependency typescript to v5.7.3 (#1158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 02:14:27 +00:00
renovate[bot] 1150c9b818
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.5.21 (#1155)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 23:59:52 +00:00
Michael Samper 0e6a486136
feat: Create a Growthbook server side provider (#938)
Signed-off-by: Michael Samper <msamper@growthbook.io>
2025-01-08 18:57:29 -05:00
Todd Baert b4da066118
chore: fix manifest
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-01-08 15:01:53 -05:00
renovate[bot] 63adf97c0f
chore(deps): update dependency libs/shared/flagd-core/test-harness to v0.5.21 (#1154)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 19:06:39 +00:00
renovate[bot] f675664abd
chore(deps): update dependency @types/node to v20.17.12 (#1153)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 17:33:11 +00:00
renovate[bot] 40b7b0a4dd
chore(deps): update libs/shared/flagd-core/spec digest to d261f68 (#1152)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 15:04:55 +00:00
renovate[bot] 43667107c1
chore(deps): update libs/providers/flagd/spec digest to d261f68 (#1150)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 22:10:37 +00:00
renovate[bot] f3c2c8efc3
chore(deps): update libs/providers/flagd/schemas digest to 37baa2c (#1149)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 22:08:15 +00:00
renovate[bot] 36ec82a558
chore(deps): update libs/providers/flagd-web/schemas digest to 37baa2c (#1148)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 20:42:29 +00:00
renovate[bot] a18550e601
fix(deps): update swc monorepo (#1113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 20:39:30 +00:00
Todd Baert f1a189b87d
chore: remove release-as for flagd core
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-01-07 14:17:03 -05:00
github-actions[bot] 14405a704b
chore(main): release flagd-core 1.0.0 (#1058)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-07 13:50:24 -05:00
Michael Beemer f1ed82acba
feat!: improve eval performance, restructure lib, support flag metadata (#1120)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2025-01-07 13:42:38 -05:00
renovate[bot] 1f8679e77f
chore(deps): update dependency flagsmith to v4.1.4 (#1124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 18:49:11 +00:00
renovate[bot] d11f30649d
chore(deps): update dependency @openfeature/core to <=1.6.0 (#1126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 18:46:21 +00:00
renovate[bot] a75886f667
fix(deps): update dependency tslib to v2.8.1 (#1099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 16:31:39 +00:00
renovate[bot] 401b3102ff
chore(deps): update ghcr.io/open-feature/sync-testbed docker tag to v0.5.20 (#1139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 13:01:58 +00:00
renovate[bot] d54c9a938c
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.5.20 (#1138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 12:59:18 +00:00
renovate[bot] a0bc98034a
fix(deps): update dependency json-logic-engine to v1.3.9 (#1076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 09:02:01 +00:00
renovate[bot] f5f110c1ac
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.5.20 (#1137)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 07:38:15 +00:00
renovate[bot] c69590d9c2
chore(deps): update dependency libs/shared/flagd-core/test-harness to v0.5.20 (#1136)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 07:35:56 +00:00
renovate[bot] 225a46532b
chore(deps): update libs/shared/flagd-core/spec digest to ed0f9ef (#1135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 07:33:34 +00:00
renovate[bot] 7e40edda9f
chore(deps): update libs/shared/flagd-core/flagd-schemas digest to b81a56e (#1134)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 07:31:06 +00:00
renovate[bot] 535aba7d50
fix(deps): update dependency axios to v1.7.9 (#1110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 03:41:27 +00:00
renovate[bot] 938d3a1084
chore(deps): update libs/providers/flagd/spec digest to ed0f9ef (#1133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 01:43:10 +00:00
renovate[bot] cd069da13a
chore(deps): update libs/providers/flagd/schemas digest to b81a56e (#1132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 01:40:33 +00:00
renovate[bot] 828145a89d
chore(deps): update libs/providers/flagd-web/schemas digest to b81a56e (#1131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 01:37:57 +00:00
renovate[bot] f9dbde2e15
chore(deps): update dependency @types/node to v20.17.10 (#1125)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-29 21:20:50 +00:00
renovate[bot] dcd65dd9a6
chore(deps): update bufbuild/buf-setup-action action to v1.48.0 (#1094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-29 19:54:23 +00:00
Simon Schrottner 232d9dd879
build(renovate): Utilize default OpenFeature Renovate configuration (#1128)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2024-12-29 14:51:19 -05:00
github-actions[bot] 55f19b5da6
chore(main): release multi-provider-web 0.0.3 (#1121)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-24 09:37:34 -05:00
github-actions[bot] 06ffd65fb3
chore(main): release multi-provider 0.1.2 (#1122)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-24 09:29:22 -05:00
Todd Baert 456be7c815
chore: update sdks, absorb changes (#1119)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-12-23 10:22:20 -05:00
github-actions[bot] 929ff6de5f
chore(main): release launchdarkly-client-provider 0.3.1 (#935)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-17 12:24:49 -05:00
Nicholas Thomson be7851ce59
feat: Accept timeout for LD waitForInitialization (#1117)
Signed-off-by: Nicholas Thomson <RedbackThomson@users.noreply.github.com>
2024-12-17 12:22:41 -05:00
github-actions[bot] e773416a4a
chore(main): release go-feature-flag-web-provider 0.2.3 (#1116)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-13 11:55:13 -05:00
Thomas Poignant 2cc7483ea0
fix(go-feature-flag-web): avoid infinite loop in waitWebsocketFinalSt… (#1104)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-12-13 17:20:30 +01:00
renovate[bot] 8069e410e9
chore(deps): update dependency typescript to v5.7.2 (#1112)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 09:00:22 +00:00
renovate[bot] 79bd064cde
chore(deps): update dependency testcontainers to v10.16.0 (#1111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 03:37:18 +00:00
renovate[bot] 26fdcef8b3
chore(deps): update dependency @types/node to v20.17.9 (#1108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 02:24:01 +00:00
github-actions[bot] 647ec79e0c
chore(main): release go-feature-flag-web-provider 0.2.2 (#1102)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-04 09:22:14 +01:00
Thomas Poignant 34fcecd78b
feat(go-feature-flag-web): Add support for data collection (#1101)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-12-03 21:32:11 +01:00
github-actions[bot] 775a7c88d2
chore(main): release flipt-web-provider 0.1.1 (#1098)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-02 11:11:22 -05:00
Michael Beemer 54e782cdd3
ci: remove release add config from flipt web
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-12-02 11:08:55 -05:00
Simon Schrottner 8a62ea8b17
ci(flagd): remove sync server as it is part of flagd by now (#1100)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2024-11-26 13:09:52 -05:00
Simon Schrottner 40abd8eca7
chore: various gherkin improvements for e2e tests (#1008)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-11-06 13:49:22 -05:00
renovate[bot] 9a4395b206
chore(deps): update dependency @types/node to v20.17.6 (#1097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 04:53:28 +00:00
github-actions[bot] d47da7852f
chore(main): release flipt-web-provider 0.1.0 (#1066)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-11-04 20:37:40 -05:00
renovate[bot] d08f41dbe2
chore(deps): update dependency @types/node to v20.17.3 (#1092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-29 22:33:55 +00:00
renovate[bot] 5a5f7629c4
chore(deps): update dependency @types/node to v20.17.2 (#1090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-29 01:26:27 +00:00
renovate[bot] 1cbb4a861f
chore(deps): update dependency @swc/core to v1.7.40 (#1089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-26 15:42:27 +00:00
renovate[bot] 27e1194a2d
chore(deps): update dependency @types/node to v20.17.1 (#1088)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-25 17:07:03 +00:00
github-actions[bot] 94057831a4
chore(main): release flipt-provider 0.1.2 (#1087)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-23 19:40:04 -04:00
Mark Phelps 9bbd1eb3f0
chore: update flipt-node provider (#1071)
Signed-off-by: Mark Phelps <209477+markphelps@users.noreply.github.com>
2024-10-23 18:00:41 -04:00
renovate[bot] e56f78b07d
chore(deps): update bufbuild/buf-setup-action action to v1.45.0 (#1077)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 15:28:09 -04:00
renovate[bot] ca6088b918
chore(deps): update dependency @types/node to v20.17.0 (#1086)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 19:05:21 +00:00
renovate[bot] 79477b1aff
chore(deps): update types (#1085)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 11:25:09 +00:00
renovate[bot] 1642905456
chore(deps): update dependency @swc/core to v1.7.39 (#1084)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 09:45:09 +00:00
renovate[bot] a53a668f8c
chore(deps): update dependency @types/node to v20.16.14 (#1083)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 06:31:58 +00:00
renovate[bot] 13a20ae720
chore(deps): update dependency typescript to v5.6.3 (#1079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 10:33:32 +00:00
renovate[bot] 9df06855e3
chore(deps): update dependency @types/node to v20.16.13 (#1080)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 07:47:51 +00:00
renovate[bot] fba9db2fbd
chore(deps): update dependency testcontainers to v10.13.2 (#1078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 04:39:02 +00:00
renovate[bot] 6f631464b9
fix(deps): update dependency lru-cache to v11 (#995)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:35:14 -04:00
renovate[bot] 376749dc19
chore(deps): update swc monorepo (#1009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:34:59 -04:00
renovate[bot] 8809afb43d
chore(deps): update dependency @types/node to v20.16.12 (#1072)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:34:32 -04:00
renovate[bot] d600e72b6f
fix(deps): update dependency axios to v1.7.7 (#1063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:33:24 -04:00
renovate[bot] 3a97b36bf7
chore(deps): update ghcr.io/open-feature/sync-testbed-unstable docker tag to v0.5.13 (#1075)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:24:25 -04:00
renovate[bot] 194bafbabc
chore(deps): update ghcr.io/open-feature/sync-testbed docker tag to v0.5.13 (#1074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:20:43 -04:00
renovate[bot] bfadf65eeb
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.5.13 (#1073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 15:18:31 -04:00
renovate[bot] 75c5b10fee
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.5.13 (#1068)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-18 15:18:04 -04:00
renovate[bot] 6a84d050cc
chore(deps): update dependency axios-mock-adapter to v2 (#1044)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 14:41:34 -04:00
renovate[bot] 838fa52fc4
fix(deps): update dependency tslib to v2.8.0 (#927)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 14:39:29 -04:00
Mark Phelps 2d2f70d56f
chore: upgrade flipt-client-browser dep (#1070)
Signed-off-by: Mark Phelps <209477+markphelps@users.noreply.github.com>
2024-10-18 12:17:57 -04:00
renovate[bot] 768007f17a
chore(deps): update dependency @types/node to v20.16.11 (#1067)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 20:30:26 +00:00
renovate[bot] 1e8eca8409
chore(deps): update dependency @grpc/grpc-js to ~1.8.0 || ~1.9.0 || ~1.10.0 || ~1.11.0 || ~1.12.0 (#1064)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 15:18:11 +00:00
github-actions[bot] b0a3619496
chore(main): release flipt-web-provider 0.1.0 (#1018)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-10-16 11:14:45 -04:00
renovate[bot] ba90956a00
chore(deps): update types (#1062)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 03:09:37 +00:00
renovate[bot] c0d26971ee
chore(deps): update dependency ts-jest to v29.2.5 (#1061)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 01:41:58 +00:00
renovate[bot] 66f4805937
chore(deps): update dependency eslint to v8.57.1 (#1060)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 22:31:33 +00:00
renovate[bot] 14cc0516d5
chore(deps): update bufbuild/buf-setup-action action to v1.44.0 (#1039)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 14:06:42 -04:00
github-actions[bot] e2f0e7b903
chore(main): release growthbook-client-provider 0.1.2 (#1035)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-27 21:37:26 +02:00
github-actions[bot] 0267275f56
chore(main): release config-cat-provider 0.7.2 (#1056)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-09-27 21:34:26 +02:00
github-actions[bot] 974d07a667
chore(main): release config-cat-web-provider 0.1.3 (#1051)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-27 21:33:58 +02:00
Michael Beemer 4e21b836b6
fix(flagd-core): use injected logger (#1057)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-09-20 15:14:17 -04:00
adams85 7e1dd72a14
fix(config-cat): Revise readme (#1054)
Signed-off-by: Adam Simon <adamo@configcat.com>
Signed-off-by: Adam Simon <adam@configcat.com>
Co-authored-by: Adam Simon <adamo@configcat.com>
Co-authored-by: Adam Simon <adam@configcat.com>
2024-09-18 15:09:04 +02:00
Michael 29c3669676
docs: fix README.md for flipt-web provider (#1053)
Signed-off-by: Michael <kidzki@users.noreply.github.com>
2024-09-16 15:04:20 -04:00
github-actions[bot] a4adca4a7c
chore(main): release flipt-provider 0.1.1 (#1047)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-04 14:37:56 -04:00
Roman Dmytrenko 28bffa5f91
fix(flipt): return the correct default value when provided in Flipt (#1052)
Signed-off-by: Roman Dmytrenko <rdmytrenko@gmail.com>
2024-09-04 14:31:01 -04:00
adams85 0b6179b9cb
fix(config-cat-web): Fix code examples in README.md (#1050) 2024-09-02 11:26:33 +02:00
github-actions[bot] f992e34a24
chore(main): release flagd-core 0.2.5 (#1049)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-30 09:08:33 -04:00
Michael Beemer 7d8264994b
fix(flagd): improve targeting key check in fractional operator (#1048)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-08-30 08:53:13 -04:00
Giovani Brollo Cunha 00c9e87398
docs: update flipt-io peer dependency (#1046)
Signed-off-by: Giovani Brollo Cunha <giovanibrollo@gmail.com>
2024-08-26 12:09:41 -04:00
renovate[bot] 46a06da4d0
chore(deps): update dependency @types/node to v20.16.1 (#1043)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 18:59:53 +00:00
renovate[bot] 46f69d3ccb
fix(deps): update dependency @flipt-io/flipt-client-browser to ^0.0.19 (#1038)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 17:55:42 +02:00
renovate[bot] 3a8090e43d
chore(deps): update dependency testcontainers to v10.11.0 (#1040)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 12:15:28 +00:00
github-actions[bot] 4bd2c1e19d
chore(main): release config-cat-web-provider 0.1.2 (#1042)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-22 14:06:35 +02:00
adams85 55e554d9fc
fix(config-cat-web): Update dependency configcat-js-ssr to v8.4.2 (#1041) 2024-08-22 13:19:22 +02:00
renovate[bot] f2247d3adf
chore(deps): update dependency @grpc/grpc-js to ~1.8.0 || ~1.9.0 || ~1.10.0 || ~1.11.0 (#1023)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-15 09:26:57 -04:00
renovate[bot] 93f602e3c4
fix(deps): update dependency json-logic-engine to v1.3.6 (#1022)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-15 09:26:06 -04:00
renovate[bot] 89c45a348a
chore(deps): update dependency ts-jest to v29.2.4 (#1037)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-14 21:03:29 +00:00
renovate[bot] 1292ba765a
chore(deps): update dependency @types/node to v20.14.15 (#1036)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-14 18:30:05 +00:00
renovate[bot] fa611fd92e
fix(deps): update dependency axios to v1.7.4 (#910)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-14 13:30:18 -04:00
Todd Baert 013251b7f4
fix: missing lodash dep (and tooling fix) (#1034)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-08-14 08:43:32 -04:00
Peter Csajtai 62f7db8742
ci: add adams85 from ConfigCat as component owner (#1033)
Signed-off-by: Peter Csajtai <peter.csajtai@outlook.com>
2024-08-09 13:05:53 +02:00
github-actions[bot] 7ffff2d563
chore(main): release go-feature-flag-web-provider 0.2.1 (#1031)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-05 21:38:34 +02:00
Thomas Poignant 31a8adbedb
fix(go-feature-flag-web): Set API Key in headers (#1030)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-08-05 21:35:58 +02:00
github-actions[bot] 533e21795f
chore(main): release flagd-core 0.2.4 (#997)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-02 17:09:15 -04:00
Michael Beemer 52aebedc00
feat(flagd-core): add bulk evaluation method (#1010)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-08-02 17:07:37 -04:00
github-actions[bot] a6768a0fad
chore(main): release config-cat-web-provider 0.1.1 (#1016) 2024-07-28 04:29:24 +02:00
github-actions[bot] 88515fcbe5
chore(main): release ofrep-web-provider 0.3.1 (#1028) 2024-07-28 04:28:26 +02:00
Roman Dmytrenko 23fa0a01ae
chore: fix readme examples (#1027) 2024-07-28 04:24:38 +02:00
renovate[bot] 7fbb2f042e
chore(deps): update dependency typescript to v5.5.4 (#1021)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 11:02:50 +00:00
renovate[bot] 273b2d3dc3
chore(deps): update dependency ts-jest to v29.2.3 (#1020)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 07:37:59 +00:00
renovate[bot] 4ab6cb8880
chore(deps): update dependency testcontainers to v10.10.4 (#1019)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 04:50:41 +00:00
renovate[bot] 6566302e2f
chore(deps): update dependency @types/node to v20.14.12 (#1017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 02:02:33 +00:00
github-actions[bot] fc7163b98a
chore(main): release config-cat-provider 0.7.1 (#1015) 2024-07-24 00:12:00 +02:00
renovate[bot] 12184d834f
chore(deps): update bufbuild/buf-setup-action action to v1.35.0 (#912)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-23 14:46:25 -04:00
renovate[bot] 27af7fe2ab
fix(deps): update dependency @flipt-io/flipt-client-browser to ^0.0.18 (#1000)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-23 14:43:36 -04:00
renovate[bot] 3c8000ad16
chore(deps): update dyladan/component-owners digest to 58bd86e (#1004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-23 14:41:57 -04:00
adams85 3b24653854
docs: A few corrections to ConfigCat providers' README.md (#1014) 2024-07-22 11:48:05 +02:00
Lukas Reining 0d59be0dfd fix: missing comma in release-please manifest
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-07-21 02:55:07 +02:00
github-actions[bot] 020b42e466
chore(main): release config-cat-provider 0.7.0 (#1011)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-07-21 02:50:02 +02:00
github-actions[bot] c1244c7cd6
chore(main): release config-cat-web-provider 0.1.0 (#1013)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-07-21 02:48:54 +02:00
github-actions[bot] fe81b12764
chore(main): release config-cat-core 0.1.0 (#1012)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-07-21 02:43:50 +02:00
Lukas Reining e280014f89
feat!: implement config cat web provider (#918)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: adams85 <31276480+adams85@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-07-21 02:34:13 +02:00
github-actions[bot] c1092486b0
chore(main): release ofrep-provider 0.2.0 (#1005)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-11 13:13:26 -04:00
github-actions[bot] e882ab3672
chore(main): release ofrep-web-provider 0.3.0 (#1006)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-11 13:02:04 -04:00
github-actions[bot] 5495a254de
chore(main): release ofrep-core 0.2.0 (#1007)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-11 12:50:29 -04:00
Todd Baert 383f4f310d
feat!: use native headers, optional query params (#1003)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-11 12:37:11 -04:00
renovate[bot] 334fd84a8d
chore(deps): update dependency ts-jest to v29.2.2 (#1002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 19:18:08 +00:00
github-actions[bot] 58624decf0
chore(main): release env-var-provider 0.3.1 (#985)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-10 21:09:43 +02:00
renovate[bot] 8eee1c3843
chore(deps): update dependency ts-jest to v29.2.1 (#1001)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 13:41:41 +00:00
renovate[bot] 070851bdfa
chore(deps): update dependency testcontainers to v10.10.3 (#996)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-09 18:14:01 +00:00
Simon Schrottner 2d6433101b
chore: removing build dependencies and using testcontainers for container spin up (#982)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-07-09 18:05:47 +02:00
github-actions[bot] 6b09633773
chore(main): release flagd-web-provider 0.7.2 (#975)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-08 15:43:30 -04:00
github-actions[bot] 850b82731f
chore(main): release flagd-provider 0.13.1 (#890)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-08 15:38:12 -04:00
github-actions[bot] 139835e647
chore(main): release ofrep-web-provider 0.2.0 (#992)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-08 15:33:42 -04:00
renovate[bot] e8e44c3f07
chore(deps): update dependency ts-jest to v29.2.0 (#991)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-08 18:21:16 +00:00
github-actions[bot] 431bf21cce
chore(main): release flagd-core 0.2.3 (#976)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-08 14:04:33 -04:00
Todd Baert 95fc808964
chore: update flagd json schema (#994)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-08 13:59:17 -04:00
Rodrigo López Dato 1585b60672
docs(flagsmith): Show example traits and targeting key (#989)
Signed-off-by: Rodrigo López Dato <rodrigo.lopezdato@flagsmith.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-08 12:40:45 -04:00
Todd Baert deb67c15d0
feat!: resolver signatures changes for easier overrides, cache exposure (#990)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-08 12:15:20 -04:00
renovate[bot] 6311bab791
chore(deps): update dependency @swc/core to v1.6.13 (#988)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-06 23:10:12 +00:00
renovate[bot] 8b7f14b709
chore(deps): update dependency @types/node to v20.14.10 (#987)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-06 02:42:21 +00:00
Michael Beemer 919761d892
fix(env-var): set runs on property to server (#981)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-04 14:40:35 -04:00
Todd Baert 6a54935f3b
chore: fix fractional tests (#984)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-04 07:52:17 -04:00
renovate[bot] 925a20c98b
chore(deps): update dependency @swc/core to v1.6.7 (#983)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-03 19:14:07 +00:00
renovate[bot] 58f61fe52a
chore(deps): update swc monorepo (#979)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-03 01:07:44 +00:00
renovate[bot] 0e65ffa713
chore(deps): update dependency typescript to v5.5.3 (#978)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-02 21:32:55 +00:00
Todd Baert 29a673553f
chore: fix e2e test (#977)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-07-02 12:20:12 -04:00
Simon Schrottner 0e9bc842cf
feat: Change fractional custom op from percentage-based to relative weighting. #946 (#954)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2024-07-02 08:56:03 -04:00
github-actions[bot] 4c017d5a3e
chore(main): release go-feature-flag-provider 0.7.3 (#974)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-29 11:00:14 +02:00
Thomas Poignant e17b99ec73
fix(gofeatureflag): Error when receiving an empty string errorCode (#973)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-06-29 10:59:08 +02:00
renovate[bot] 6dcbdf7b5d
chore(deps): update dependency @swc-node/register to ~1.10.0 (#967)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-28 11:11:59 +00:00
github-actions[bot] d08f8d1f95
chore(main): release multi-provider-web 0.0.2 (#966)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-27 11:32:58 -04:00
Michael Beemer 6f61f71c27
chore: configure release please for the multi provider web (#965)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-06-27 11:27:57 -04:00
renovate[bot] 6d3f0d6943
fix(deps): update dependency json-logic-engine to v1.3.4 (#930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-27 07:44:11 -04:00
renovate[bot] 8cf99eb2ae
chore(deps): update dyladan/component-owners digest to a0a1a67 (#931)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-27 07:40:38 -04:00
github-actions[bot] 1801837ea8
chore(main): release go-feature-flag-provider 0.7.2 (#963)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-27 09:00:45 +02:00
Thomas Poignant e448577b6b
fix(gofeatureflag): remove NodeJS.timeout because it fails eslint (#961) 2024-06-27 05:19:27 +00:00
emmawillis b7c4419999
fix: correct multi-provider-web dependency (#962)
Signed-off-by: Emma Willis <ehenriks@uwo.ca>
2024-06-26 22:25:37 +02:00
github-actions[bot] 89bdf64930
chore(main): release go-feature-flag-provider 0.7.1 (#934)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-26 09:32:51 +02:00
Thomas Poignant 338123fadb
feat(gofeatureflag): Clear cache if configuration changes + provider refactoring (#947)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-06-26 09:12:43 +02:00
renovate[bot] 52d8445e28
chore(deps): update dependency @types/node to v20.14.9 (#960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-26 00:03:20 +00:00
renovate[bot] 95bfd1adfd
chore(deps): update dependency @types/node to v20.14.8 (#959)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 13:14:28 +00:00
renovate[bot] 8c86268307
chore(deps): update dependency @swc/core to v1.6.5 (#958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 06:03:31 +00:00
renovate[bot] ce0012bad9
chore(deps): update dependency @types/node to v20.14.7 (#957)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-21 05:22:03 +00:00
renovate[bot] aeb8be26db
chore(deps): update dependency typescript to v5.5.2 (#956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-20 21:06:06 +00:00
renovate[bot] 19a8549127
chore(deps): update dependency @types/node to v20.14.6 (#955)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-19 19:18:06 +00:00
renovate[bot] 232e24524b
chore(deps): update dependency @swc/core to v1.6.3 (#953)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-19 11:57:45 +00:00
github-actions[bot] 0a4a8df83a
chore(main): release ofrep-web-provider 0.1.5 (#952)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-18 15:54:01 -04:00
Todd Baert 896406afbf
fix: update ofrep-code
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-06-18 15:49:25 -04:00
github-actions[bot] 3927038f61
chore(main): release ofrep-core 0.1.5 (#951)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-06-18 15:45:48 -04:00
github-actions[bot] 166fcb15a1
chore(main): release ofrep-web-provider 0.1.4 (#892)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-18 14:41:31 -04:00
Todd Baert ceb42cb335
feat: support relative baseUrls (#950)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-06-18 14:39:23 -04:00
renovate[bot] 4aec2ef307
chore(deps): update dependency @types/node to v20.14.5 (#949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 09:25:55 +00:00
renovate[bot] dee6bf85f2
chore(deps): update dependency @types/node to v20.14.4 (#948)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 03:53:11 +00:00
emmawillis 06def3e8f8
feat: client-side multi-provider implementation (#942)
Signed-off-by: Emma Willis  <ehenriks@uwo.ca>
Signed-off-by: Emma Willis <ehenriks@uwo.ca>
2024-06-17 12:51:12 -04:00
renovate[bot] f37f9ba2da
chore(deps): update dependency ts-jest to v29.1.5 (#945)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 19:23:50 +00:00
renovate[bot] 6d541b92f1
chore(deps): update dependency @swc/core to v1.6.1 (#944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-16 09:41:41 +00:00
renovate[bot] 430635e7d9
chore(deps): update dependency @swc/core to v1.6.0 (#943)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-15 19:28:32 +00:00
Simon Schrottner 53c4077f84
feat: Default port to 8015 if in-process resolver is used. #936 (#937)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2024-06-14 09:29:42 -04:00
renovate[bot] c78987854b
chore(deps): update dependency @swc/core to v1.5.29 (#940)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-13 07:19:09 +00:00
renovate[bot] d0d71f460c
chore(deps): update dependency @swc/core to v1.5.27 (#939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-10 12:52:35 +00:00
github-actions[bot] c68695e532
chore(main): release multi-provider 0.1.1 (#932)
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-06-06 14:41:50 -04:00
renovate[bot] cab199eac4
chore(deps): update dependency @types/node to v20.14.2 (#926)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-06 18:23:38 +00:00
renovate[bot] 510c45b44e
chore(deps): update dependency @swc/core to v1.5.25 (#928)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-06 18:16:04 +00:00
Todd Baert 8def6072c5
chore: loosen some test assertions, fix e2e matcher (#933)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-06-06 14:01:16 -04:00
Adam Wootton 0bf2df06ef
feat: multi provider implementation for Node (#916)
Signed-off-by: Adam Wootton <adam@taplytics.com>
2024-06-06 11:36:38 -04:00
renovate[bot] f6c3f68370
chore(deps): update dependency @types/node to v20.14.0 (#925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-03 01:37:32 +00:00
renovate[bot] def23a484b
chore(deps): update dependency @types/node to v20.13.0 (#923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 00:35:06 +00:00
renovate[bot] 6ae77314d8
chore(deps): update dependency @swc/core to v1.5.24 (#922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 18:11:49 +00:00
renovate[bot] 0e836c5298
chore(deps): update dependency @swc/core to v1.5.22 (#921)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 11:14:28 +00:00
renovate[bot] 5f5dba108b
chore(deps): update dependency @types/node to v20.12.13 (#920)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-29 21:46:47 +00:00
renovate[bot] 3f0babae8d
chore(deps): update dependency ts-jest to v29.1.4 (#919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 11:43:49 +00:00
Todd Baert a8c0be1810
chore: remove explicit dep, use root (#917)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-05-24 15:56:45 -04:00
github-actions[bot] 3c742cbc2a
chore(main): release flagd-core 0.2.2 (#915)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-23 15:40:25 -04:00
Todd Baert 04f0dfd142
fix: update json logic engine and schema (#914)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-05-23 15:38:28 -04:00
renovate[bot] c2adbfb02b
chore(deps): update dependency ts-jest to v29.1.3 (#911)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 03:46:45 +00:00
renovate[bot] a389d4f858
chore(deps): update bufbuild/buf-setup-action action to v1.32.0 (#908)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-17 15:17:46 -04:00
github-actions[bot] c00f998227
chore(main): release growthbook-client-provider 0.1.1 (#909)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-17 17:29:24 +02:00
Michael Samper 62ef69b057
feat: Initial GrowthBook OpenFeature provider (#896)
Signed-off-by: Michael Samper <msamper@growthbook.io>
2024-05-17 16:55:39 +02:00
renovate[bot] c3b27e5fdf
chore(deps): update dependency @swc/core to v1.5.7 (#907)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-15 12:13:14 +00:00
renovate[bot] def503cf97
chore(deps): update dependency @types/node to v20.12.12 (#906)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-14 10:07:44 +00:00
renovate[bot] b70e5596ac
chore(deps): update dependency @swc/core to v1.5.6 (#904)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-14 07:26:21 +00:00
renovate[bot] 1025a2dfc5
chore(deps): update dependency @types/node to v20.12.11 (#903)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-08 15:32:08 +00:00
renovate[bot] 0409f833a3
chore(deps): update dependency @swc/core to v1.5.5 (#902)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-08 13:27:12 +00:00
Thomas Poignant 97c5b56a4f
fix(OFREP-Web): typo in the readme (#898) 2024-05-07 07:16:16 +02:00
renovate[bot] 3e72b0a15b
chore(deps): update dependency @types/node to v20.12.10 (#900)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-07 00:52:49 +00:00
renovate[bot] 02151d7b08
chore(deps): update dependency @swc/core to v1.5.3 (#901)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-06 15:54:32 -04:00
Michael Beemer 9a7f4fd59d
chore: bump openfeature core version (#899)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-05-06 15:43:15 -04:00
renovate[bot] c819fb356c
chore(deps): update dependency @types/node to v20.12.8 (#897)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-02 02:06:51 +00:00
renovate[bot] 26801dedf3
chore(deps): update dependency @openfeature/web-sdk to v1.0.3 (#839)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-01 22:05:35 -04:00
renovate[bot] 2682b472a7
chore(deps): update swc monorepo (#877)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 15:50:01 -04:00
renovate[bot] ea3d3da557
chore(deps): update bufbuild/buf-setup-action action to v1.31.0 (#842)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 15:45:07 -04:00
renovate[bot] f5efd68c19
chore(deps): update dependency jest-cucumber to v4 (#815)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 15:27:53 -04:00
Michael Beemer 20808ab728
docs: add show projects command to contrib docs (#876)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-30 15:09:33 -04:00
github-actions[bot] 927773ed49
chore(main): release flagd-web-provider 0.7.1 (#895)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-26 16:51:38 -04:00
Connor Hindley 878b7b6e11
feat: Add interceptors to flagd options. (#894)
Signed-off-by: Connor Hindley <connor.hindley@tanium.com>
2024-04-26 15:32:04 -04:00
Michael Beemer c89a4d8039
docs: update example in readme
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-04-22 18:22:07 -04:00
github-actions[bot] 24deab0de8
chore(main): release flagd-web-provider 0.7.0 (#874)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-18 12:45:51 -04:00
Michael Beemer df7b89d519
chore: migrate from bufbuild to connectrpc (#891)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-04-18 12:44:02 -04:00
renovate[bot] f15909ff6f
fix(deps): update dependency @openfeature/flagd-core to ~0.2.0 (#880)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-18 09:27:23 -04:00
github-actions[bot] 8781f23bba
chore(main): release flipt-web-provider 0.1.0 (#889)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-17 17:38:22 -04:00
Todd Baert 673cba4a09
chore: flipt web 0.1.0
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-17 17:22:38 -04:00
github-actions[bot] d10ea34cdd
chore(main): release flagd-provider 0.13.0 (#845)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-17 16:31:48 -04:00
Mark Phelps 1bd91ffb8a
feat: Add Flipt web provider (#879)
Signed-off-by: Mark Phelps <209477+markphelps@users.noreply.github.com>
2024-04-17 16:30:18 -04:00
github-actions[bot] d8e106470e
chore(main): release flagd-core 0.2.1 (#888)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-16 12:17:42 -04:00
Todd Baert 2a4dbcf0da
feat: add targeting validation/warning (#878)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-16 11:22:01 -04:00
github-actions[bot] 1830a1106a
chore(main): release ofrep-provider 0.1.3 (#886)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-16 12:55:03 +02:00
github-actions[bot] fef9ab8631
chore(main): release ofrep-web-provider 0.1.3 (#887)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-16 12:54:23 +02:00
Lukas Reining f663eae89f
chore: update ofrep-core (#884)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-16 12:51:53 +02:00
github-actions[bot] fbb8b42d69
chore(main): release ofrep-core 0.1.4 (#885)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-16 12:45:29 +02:00
Lukas Reining f0dcf93ce9 fix: OFREP http set headers
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-16 12:42:17 +02:00
github-actions[bot] 2a16e0e98e
chore(main): release ofrep-core 0.1.3 (#883)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-16 12:12:59 +02:00
Lukas Reining b3289e5083
fix: fixes an issue where OFREP does not send content type headers (#882)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-16 12:09:54 +02:00
github-actions[bot] 5c2214260f
chore(main): release flagd-core 0.2.0 (#875)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-15 12:21:45 -04:00
Michael Beemer 6c376b2f52
feat!: allow overrides for fractional seed (#870)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-15 11:41:06 -04:00
github-actions[bot] 0cddd6836d
chore(main): release ofrep-provider 0.1.2 (#872)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-14 15:05:44 +02:00
github-actions[bot] 9a2ba7f728
chore(main): release ofrep-web-provider 0.1.2 (#866)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-14 15:04:42 +02:00
Lukas Reining ce1c71c4a8
chore: bump ofrep-core to ^0.1.2 (#871) 2024-04-14 15:03:38 +02:00
github-actions[bot] 3c4c2714d7
chore(main): release ofrep-core 0.1.2 (#851)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-14 14:58:07 +02:00
Lukas Reining 72c6f67393 fix: OFREP web provider failing because of wrong fetch scope
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>

# Conflicts:
#	.release-please-manifest.json
2024-04-14 14:54:46 +02:00
renovate[bot] e90dbbe25a
chore(deps): update dependency typescript to v5.4.5 (#869)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-10 23:15:56 +00:00
renovate[bot] 63f23a54df
chore(deps): update dependency @types/node to v20.12.7 (#867)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-10 04:11:54 +00:00
Thomas Poignant 58ae6f409c
fix: typo in the OFREP web readme (#865)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-04-09 13:42:41 -04:00
renovate[bot] 6157783a02
chore(deps): update dependency @types/node to v20.12.6 (#864)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-09 07:24:20 +00:00
github-actions[bot] d968a5a847
chore(main): release flagsmith-client-provider 0.1.2 (#863)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-08 17:56:11 -04:00
Kyle Johnson d423647b43
fix: flagsmith project paths (#862)
Signed-off-by: kyle-ssg <kyle@solidstategroup.com>
2024-04-08 17:54:16 -04:00
github-actions[bot] 3d5083312e
chore(main): release flagsmith-client-provider 0.1.1 (#859)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-08 17:19:18 -04:00
Kyle Johnson dc6e77f777
feat: Add Flagsmith Provider (#836)
Signed-off-by: kyle-ssg <kyle@solidstategroup.com>
Signed-off-by: Kyle Johnson <kyle@solidstategroup.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-08 16:39:50 -04:00
renovate[bot] 1f1cb3c0e0
chore(deps): update dependency @types/node to v20.12.5 (#856)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-06 05:01:07 +00:00
Todd Baert c9a63f064d
chore: fix CI when running on main (#855)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-05 11:21:46 -04:00
github-actions[bot] 13c908a03a
chore(main): release ofrep-provider 0.1.1 (#854)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-05 16:12:29 +02:00
Lukas Reining 5d9f5ffa3c
feat: implement OFREP server provider (#817)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-05 16:10:56 +02:00
github-actions[bot] 85115779fc
chore(main): release ofrep-web-provider 0.1.1 (#852)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-05 10:04:55 -04:00
Thomas Poignant 9626ef43ae
feat: OFREP web provider (#776)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-04-05 15:56:19 +02:00
github-actions[bot] 14322d2e00
chore(main): release config-cat-provider 0.6.1 (#828) 2024-04-05 13:20:59 +02:00
github-actions[bot] eb919828df
chore(main): release ofrep-core 0.1.1 (#850) 2024-04-05 13:20:14 +02:00
Lukas Reining f935d08e82
feat(ofrep): release ofrep core as 0.1.0-experimental (#849) 2024-04-05 13:09:56 +02:00
renovate[bot] b982a4f3c2
chore(deps): update dependency typescript to v5.4.4 (#848)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-04 19:06:32 +00:00
github-actions[bot] 2a89869576
chore(main): release ofrep-core 0.0.7-experimental (#847)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-04 20:56:40 +02:00
Thomas Poignant ddc2c9042c
fix: Use request time to compute the retry after (#846) 2024-04-04 19:46:33 +02:00
Kyle Johnson 8c6c46b5f8
chore: Lint Fix Providers (#837)
Signed-off-by: kyle-ssg <kyle@solidstategroup.com>
2024-04-04 10:59:40 -04:00
github-actions[bot] 930aaaeec1
chore(main): release ofrep-core 0.0.6-experimental (#844)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-04 09:48:53 +02:00
Lukas Reining ba7aa3efbc
feat(ofrep): parse Retry-After header in OFREPApiTooManyRequestsError (#841)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-04 09:46:57 +02:00
renovate[bot] 92e903967a
chore(deps): update dependency @types/node to v20.12.4 (#843)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-04 00:46:32 +00:00
renovate[bot] b5b9cd656b
chore(deps): update dependency @types/node to v20.12.3 (#840)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-03 09:42:35 +00:00
github-actions[bot] 35942a20e8
chore(main): release ofrep-core 0.0.5-experimental (#838) 2024-04-02 21:45:29 +02:00
Lukas Reining 474059c207
feat(ofrep): moves base options to ofrep-core (#834) 2024-04-02 21:43:37 +02:00
github-actions[bot] a258d3d56f
chore(main): release ofrep-core 0.0.4-experimental (#833)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-02 12:08:04 +02:00
Lukas Reining c738d85764
chore(ofrep): add more errors to msw tests (#832)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-02 10:46:27 +02:00
Michael Beemer 57908f5997
ci: update nx change detection (#831)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-04-01 14:30:11 -04:00
Lukas Reining 1c76f63db0
fix(config-cat): remove event emitter type import from config-cat (#830)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-04-01 19:33:49 +02:00
renovate[bot] 9362f08484
chore(deps): update dependency @types/node to v20.12.2 (#826)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-01 14:09:59 +00:00
Todd Baert 28f25a25cf
chore: lock configcat dep (#827)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-01 15:40:43 +02:00
github-actions[bot] 9d6fe63e89
chore(main): release flipt-provider 0.1.0 (#808)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-29 16:46:48 -04:00
Michael Beemer 7687751863
chore: regenerate package lock (#825)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-03-29 16:35:30 -04:00
github-actions[bot] 71069c3ed8
chore(main): release ofrep-core 0.0.3-experimental (#823)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-27 15:15:10 +01:00
Lukas Reining 18e18fa5f1
feat(ofrep): move error handling and result mapping to ofrep-core (#822)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2024-03-27 15:14:16 +01:00
renovate[bot] 1e1663b36f
chore(deps): update dependency @swc/core to v1.4.11 (#821)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 13:53:27 +00:00
renovate[bot] 12e7484897
chore(deps): update dependency @openfeature/web-sdk to v1.0.1 (#819)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 17:25:25 +00:00
renovate[bot] eea0a3cb63
chore(deps): update bufbuild/buf-setup-action action to v1.30.0 (#737)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 10:29:08 -04:00
renovate[bot] 0ddbf93ce1
fix(deps): update dependency axios to v1.6.8 (#802)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 10:28:32 -04:00
github-actions[bot] 965976f7a5
chore(main): release go-feature-flag-web-provider 0.2.0 (#805)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2024-03-25 15:24:40 +01:00
renovate[bot] 2889a8fc29
chore(deps): update swc monorepo (#758)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 10:03:47 -04:00
renovate[bot] 7a41c07b50
chore(deps): update ghcr.io/open-feature/sync-testbed docker tag to v0.5.2 (#782)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 10:02:59 -04:00
github-actions[bot] c12d71f303
chore(main): release env-var-provider 0.3.0 (#647)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-25 09:58:31 -04:00
github-actions[bot] 6bf611f59a
chore(main): release open-telemetry-hooks 0.4.0 (#645)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-25 09:58:12 -04:00
github-actions[bot] 15d2ec5d45
chore(main): release go-feature-flag-provider 0.7.0 (#809)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-25 09:55:08 -04:00
github-actions[bot] 8bc10d113c
chore(main): release launchdarkly-client-provider 0.3.0 (#806)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-25 09:49:53 -04:00
renovate[bot] 5aa26fd849
fix(deps): update dependency json-logic-engine to v1.3.2 (#813)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 09:48:17 -04:00
renovate[bot] 54ffa8ad06
chore(deps): update dependency typescript to v5.4.3 (#814)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-21 02:45:51 +00:00
renovate[bot] 2652d33029
chore(deps): update dependency @types/node to v20.11.30 (#812)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 17:26:53 +00:00
github-actions[bot] 61af01f2b3
chore(main): release flagd-web-provider 0.6.0 (#807)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-19 14:38:42 +01:00
renovate[bot] 782226d524
chore(deps): update dependency @types/node to v20.11.29 (#811)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 01:09:44 +00:00
github-actions[bot] 5ef793d9ed
chore(main): release config-cat-provider 0.6.0 (#804)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-17 15:04:51 +01:00
github-actions[bot] 5f9fe4e899
chore(main): release flagd-provider 0.12.0 (#788)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-16 11:26:09 -04:00
Todd Baert ebd16b9630
feat!: update OpenFeature SDK peer (#798)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-16 11:22:56 -04:00
github-actions[bot] 029dfe9bdd
chore(main): release ofrep-core 0.0.2-experimental (#801)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-15 17:05:44 +01:00
Lukas Reining 17e6d57e43
feat(ofrep): ofrep core (#795)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-03-15 17:01:50 +01:00
Lukas Reining 1b1cfa7184
feat: remove node 16 (#797)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-15 15:59:19 +01:00
renovate[bot] f180dc3836
chore(deps): update dependency @types/node to v20.11.28 (#800)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 10:16:07 +00:00
github-actions[bot] 73041e50ea
chore(main): release config-cat-provider 0.5.0 (#644)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-14 18:15:40 +01:00
adams85 190946ff83
fix!: Allow ConfigCat provider to be used in server applications (#796)
Signed-off-by: Adam Simon <adam@configcat.com>
Co-authored-by: Adam Simon <adam@configcat.com>
2024-03-14 18:08:43 +01:00
renovate[bot] 5113e6feb1
chore(deps): update dependency @types/node to v20.11.27 (#793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-13 22:27:50 +00:00
renovate[bot] 7c5ffbabe2
chore(deps): update dependency @types/node to v20.11.26 (#792)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 00:37:18 +00:00
renovate[bot] 7fc1b8a10d
chore(deps): update dependency typescript to v5.4.2 (#791)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-07 00:57:02 +00:00
renovate[bot] eceaf0b762
chore(deps): update dependency @types/node to v20.11.25 (#790)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-06 21:03:32 +00:00
renovate[bot] 2124d7c11e
chore(deps): update dependency @types/node to v20 (#618)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-06 09:54:35 -05:00
Michael Beemer eaf7788e02
docs: fix resolve type environment variable
https://github.com/open-feature/js-sdk-contrib/blob/main/libs/providers/flagd/src/lib/configuration.ts#L93

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-02-29 20:47:04 -05:00
renovate[bot] d1f55342f8
chore(deps): update dependency @types/node to v18.19.21 (#786)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-29 17:22:07 +00:00
renovate[bot] d52187b8ff
chore(deps): update dependency @types/node to v18.19.20 (#785)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-28 21:15:25 +00:00
renovate[bot] de6c3abac4
chore(deps): update dependency eslint to v8.57.0 (#784)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 15:03:22 +00:00
renovate[bot] d478bfb4c4
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.5.2 (#781)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 08:14:30 -05:00
renovate[bot] 4d8c98c56f
chore(deps): update ghcr.io/open-feature/sync-testbed-unstable docker tag to v0.5.2 (#783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 08:14:17 -05:00
renovate[bot] 7efd800770
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.5.2 (#780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 08:13:59 -05:00
renovate[bot] 333e7010c9
chore(deps): update dependency @types/node to v18.19.18 (#779)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 09:37:49 +00:00
renovate[bot] 6fdf55256c
fix(deps): update dependency configcat-js to v9 (#664)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lukas Reining <lukas.reining@codecentric.de>
2024-02-20 22:06:22 +01:00
renovate[bot] a2a6171ab9
fix(deps): update dependency axios to v1.6.7 (#710)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 14:12:30 -05:00
github-actions[bot] 3be3380686
chore(main): release flagd-provider 0.11.1 (#771)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-15 13:54:49 -05:00
renovate[bot] ec835a7cee
chore(deps): update dependency @types/node to v18.19.17 (#772)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 18:51:47 +00:00
github-actions[bot] d319d7cc63
chore(main): release flagd-web-provider 0.5.1 (#774)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-15 13:48:45 -05:00
Todd Baert 437bbe4334
feat: use updated proto (#773)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-15 13:34:50 -05:00
Todd Baert 5405af57d0
feat: use updated proto (#770)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-15 13:08:12 -05:00
renovate[bot] 5ec5f26c12
chore(deps): update dependency @types/node to v18.19.16 (#769)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 13:29:32 +00:00
github-actions[bot] 79f1009f41
chore(main): release flagd-web-provider 0.5.0 (#766)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-14 13:56:20 -05:00
github-actions[bot] 52e2067cc5
chore(main): release flagd-provider 0.11.0 (#765)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-14 13:52:40 -05:00
renovate[bot] c05bf9d8b5
chore(deps): update dependency @grpc/grpc-js to ~1.8.0 || ~1.9.0 || ~1.10.0 (#764)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-14 13:50:23 -05:00
github-actions[bot] 8c56544bbf
chore(main): release flagd-core 0.1.11 (#768)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-14 13:45:18 -05:00
Todd Baert e9f9e74d66
fix: init in-process error, throw on invalid rules (#767)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-14 13:43:37 -05:00
renovate[bot] fe1f4f9d07
chore(deps): update dependency @types/node to v18.19.15 (#763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-13 22:24:53 +00:00
Todd Baert 4da9deb48c
feat!: use new eval/sync protos (requires flagd v0.7.3+) (#762)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-13 13:07:20 -05:00
github-actions[bot] 872b5ab0b4
chore(main): release launchdarkly-client-provider 0.2.1 (#567)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-05 10:40:24 -05:00
renovate[bot] 9a8ea93e43
chore(deps): update types (#756)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 22:57:27 +00:00
renovate[bot] ca96491aac
chore(deps): update dependency @swc-node/register to ~1.8.0 (#757)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 20:48:09 +00:00
renovate[bot] 293c26fd6a
chore(deps): update dependency @types/node to v18.19.12 (#755)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-31 23:15:37 +00:00
renovate[bot] e39bb9d7b1
chore(deps): update dependency @types/node to v18.19.11 (#754)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-31 09:27:35 +00:00
github-actions[bot] 67459b977a
chore(main): release flagd-provider 0.10.5 (#752)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-30 12:49:21 -05:00
Michael Beemer 4ff73e7876
feat: add offline mode file path env (#751)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-30 12:41:46 -05:00
renovate[bot] 35b81e0e14
chore(deps): update ghcr.io/open-feature/sync-testbed-unstable docker tag to v0.4.11 (#749)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 12:24:37 -05:00
github-actions[bot] 9728ea100f
chore(main): release flagd-core 0.1.10 (#747)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-30 16:54:08 +00:00
renovate[bot] 560244b452
chore(deps): update dependency @swc/core to v1.3.107 (#748)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 16:43:30 +00:00
renovate[bot] 006c7c56c5
chore(deps): update ghcr.io/open-feature/sync-testbed docker tag to v0.4.11 (#742)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 15:03:07 +00:00
renovate[bot] 5d287e54a1
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.4.11 (#741)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 10:00:02 -05:00
renovate[bot] 82d6b39baa
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.4.11 (#740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 09:52:33 -05:00
Michael Beemer 0772c90c10
fix: falsy boolean shorthand logic (#746)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-30 09:47:47 -05:00
github-actions[bot] f7229adf69
chore(main): release flagd-core 0.1.9 (#745)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-29 15:38:57 -05:00
Michael Beemer 3f6b4f43e7
fix: update disabled behavior to match spec (#744)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-29 15:28:06 -05:00
renovate[bot] ddcaa8095d
chore(deps): update dependency @types/node to v18.19.10 (#739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-26 11:08:14 +00:00
renovate[bot] 75623a70e4
chore(deps): update dependency @swc/core to v1.3.106 (#738)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-25 12:52:32 +00:00
renovate[bot] 32e08a18c0
chore(deps): update dependency @swc/cli to ~0.3.0 (#736)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 14:03:00 +00:00
renovate[bot] a030fcc03d
chore(deps): update dependency @types/node to v18.19.9 (#735)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 11:41:40 +00:00
renovate[bot] 844290b686
chore(deps): update dependency @swc/cli to ~0.2.0 (#734)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 08:07:34 +00:00
renovate[bot] 631de184c6
chore(deps): update dependency ts-jest to v29.1.2 (#732)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-22 16:49:52 +00:00
github-actions[bot] e85c198d65
chore(main): release go-feature-flag-web-provider 0.1.6 (#649)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-21 19:12:57 +01:00
renovate[bot] 5900d7a9ac
chore(deps): update dependency @swc/core to v1.3.105 (#731)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-21 07:15:42 +00:00
github-actions[bot] d7cee1d4ea
chore(main): release go-feature-flag-provider 0.6.2 (#717)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-20 15:52:49 +01:00
github-actions[bot] 23742ad12c
chore(main): release flipt-provider 0.0.2 (#730)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-20 09:34:51 -05:00
Yoofi Quansah 6ec1b0e7c7
feat(flipt): Add Flipt provider in openfeature-js (#724)
Signed-off-by: Yoofi Quansah <ybquansah@gmail.com>
Signed-off-by: Mark Phelps <209477+markphelps@users.noreply.github.com>
2024-01-19 17:27:12 -05:00
renovate[bot] 40bbaf6086
chore(deps): update dependency @swc/core to v1.3.104 (#728)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 17:11:52 +00:00
renovate[bot] 2f2281e486
chore(deps): update dependency @types/node to v18.19.8 (#727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 11:01:41 +00:00
renovate[bot] 9c8905d5f1
chore(deps): update dependency @swc/core to v1.3.103 (#726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-15 09:01:06 +00:00
renovate[bot] 0289181fca
chore(deps): update dependency @types/node to v18.19.7 (#725)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-15 06:37:49 +00:00
github-actions[bot] 10c9c532b5
chore(main): release flagd-provider 0.10.4 (#718)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-12 14:26:54 -05:00
Michael Beemer 2a4c50b967
feat: add flag metadata to in-process evaluator (#709)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-10 12:31:55 -05:00
renovate[bot] 890a70d96a
chore(deps): update dependency @types/node to v18.19.6 (#722)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 19:42:56 +00:00
Michael Beemer 3d5622594b
feat: add offline mode, fix in-process connection edge cases (#708)
Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2024-01-08 13:20:32 -05:00
github-actions[bot] 35ae7059a0
chore(main): release flagd-core 0.1.8 (#720)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-08 09:31:26 -05:00
Michael Beemer 837bf0887a
chore: throw ParseError on invalid flagd config (#714)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-01-08 09:29:00 -05:00
renovate[bot] f04381ac0b
chore(deps): update dependency @types/node to v18.19.5 (#719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-07 22:43:06 +00:00
Michael Beemer bd571770f3
chore: fix lint issues and bump server sdk version (#715)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-04 09:11:38 -05:00
renovate[bot] f6a39a2e82
chore(deps): update dependency @openfeature/core to ^0.0.21 (#716)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-03 19:23:01 +00:00
Michael Beemer bd6263efcd
chore: gitignore the nx cache
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-01-03 13:02:46 -05:00
renovate[bot] 9670b7d466
chore(deps): update dependency @swc/core to v1.3.102 (#712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-31 16:25:30 +00:00
renovate[bot] ac6f34a7d7
chore(deps): update dependency @types/node to v18.19.4 (#711)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-30 06:57:12 +00:00
renovate[bot] 946b9f83c6
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.4.10 (#699)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-22 09:57:51 -05:00
renovate[bot] 33ac576d38
chore(deps): update ghcr.io/open-feature/sync-testbed-unstable docker tag to v0.4.10 (#701)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-22 09:53:08 -05:00
github-actions[bot] 476137e61e
chore(main): release flagd-core 0.1.7 (#707)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-18 15:49:51 -05:00
Michael Beemer c262c66497
fix: re-add browser support (#706)
Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2023-12-18 15:28:26 -05:00
github-actions[bot] 8e8cfdd616
chore(main): release flagd-core 0.1.6 (#705)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-18 14:33:11 -05:00
Michael Beemer fa393a6c03
feat(flagd-core): add update config support, returns changed keys (#703)
Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2023-12-18 14:26:37 -05:00
renovate[bot] 82ac6e1a7c
chore(deps): update dependency @swc/core to v1.3.101 (#704)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 10:52:35 +00:00
renovate[bot] 0a4e03335f
chore(deps): update dependency eslint to v8.56.0 (#702)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-16 09:35:50 +00:00
github-actions[bot] b1eae300c3
chore(main): release flagd-web-provider 0.4.1 (#559)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-15 16:06:55 -05:00
Todd Baert 65e448ce85
fix: tsc issue with flagd-web proto output (#695)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-15 15:51:53 -05:00
github-actions[bot] c8dc40c925
chore(main): release flagd-core 0.1.5 (#697)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-15 15:40:08 -05:00
Michael Beemer 8bff89d023
fix: treat empty targeting rules as static (#696)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-12-15 15:34:48 -05:00
github-actions[bot] 1db63dca9a
chore(main): release flagd-provider 0.10.3 (#690)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-13 16:33:21 -05:00
Todd Baert 9afcc194e4
chore: update min flagd core to ~0.1.4
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-13 16:29:43 -05:00
github-actions[bot] 9ff3855834
chore(main): release flagd-core 0.1.4 (#687)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-13 16:22:45 -05:00
Michael Beemer fa0a238bc4
chore: improve logger, parsing and add helpers (#689)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-12-13 16:15:56 -05:00
Michael Beemer e0dbfdb2c7
fix: fixed issue with nested fractional evaluations (#686)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-12-13 12:24:23 -05:00
github-actions[bot] f8a0dfc1c6
chore(main): release flagd-provider 0.10.2 (#684)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-11 22:35:24 -05:00
Todd Baert 848d7ae844
fix: hanging grpc handles after shutdown (#683)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-11 22:30:41 -05:00
renovate[bot] 42fe06a774
chore(deps): update dependency ts-node to v10.9.2 (#681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 17:14:04 +00:00
github-actions[bot] 6efd12476c
chore(main): release go-feature-flag-provider 0.6.1 (#648)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-12-07 19:19:52 +01:00
renovate[bot] acd05f256c
chore(deps): update dependency @types/node to v18.19.3 (#680)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 12:14:54 +00:00
renovate[bot] 2222dd2036
chore(deps): update dependency eslint to v8.55.0 (#678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 09:31:49 +00:00
renovate[bot] d3a9361e01
chore(deps): update types (#677)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 07:07:03 +00:00
renovate[bot] 5ae6f9ab4d
chore(deps): update dependency @swc/core to v1.3.100 (#673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 03:11:09 +00:00
renovate[bot] 0414e1b875
chore(deps): update dependency @openfeature/core to ^0.0.20 (#666)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 00:20:08 +00:00
github-actions[bot] 7927eb7ae3
chore(main): release flagd-provider 0.10.1 (#676)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-06 17:26:41 -05:00
Todd Baert 69944a8117
fix: "in" op error, update core (#675)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-06 17:24:18 -05:00
renovate[bot] 3c81e4aeca
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.4.8 (#674)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 17:18:54 -05:00
renovate[bot] 34ec80b9d6
chore(deps): update bufbuild/buf-setup-action action to v1.28.1 (#653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 17:18:39 -05:00
renovate[bot] 0811a80b07
chore(deps): update ghcr.io/open-feature/sync-testbed-unstable docker tag to v0.4.8 (#670)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 17:16:41 -05:00
renovate[bot] 3823dd66c5
chore(deps): update ghcr.io/open-feature/flagd-testbed-unstable docker tag to v0.4.8 (#669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 17:16:29 -05:00
renovate[bot] 8a93d6cd6b
chore(deps): update ghcr.io/open-feature/sync-testbed docker tag to v0.4.8 (#658)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 17:16:13 -05:00
renovate[bot] 89d22e6ea0
fix(deps): update dependency axios to v1.6.2 (#637)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 17:13:57 -05:00
github-actions[bot] a673c7ede0
chore(main): release flagd-core 0.1.3 (#655)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-06 17:09:00 -05:00
Todd Baert 4b5e2fe5cf
fix: "in" op by using json-logic-js (#671)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-06 17:01:13 -05:00
Todd Baert 725baf3dea
chore: goff test env correction (#672)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-06 14:41:16 -05:00
github-actions[bot] 0d81ce2858
chore(main): release flagd-provider 0.10.0 (#643)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-05 15:53:24 -05:00
Juan Bernal 28d1e010ed
chore: update README.md to include client provider import (#668)
Signed-off-by: Juan Bernal <juanxwtf@gmail.com>
2023-11-28 10:23:01 -05:00
renovate[bot] e18311f953
chore(deps): update types (#593)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-27 20:31:02 +00:00
renovate[bot] 8b8c4fe219
chore(deps): update ghcr.io/open-feature/flagd-testbed docker tag to v0.4.7 (#657)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-27 15:24:45 -05:00
renovate[bot] 2b977c266c
chore(deps): update dependency @grpc/grpc-js to ~1.8.0 || ~1.9.0 (#662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-27 14:29:15 -05:00
renovate[bot] ccf8336e0f
chore(deps): update dependency @openfeature/core to ^0.0.19 (#663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-22 00:45:49 +00:00
Todd Baert 8489c2f47e
fix!: reconnect, missing and duped events, remove max reconnect (#660)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-11-21 14:02:22 -05:00
renovate[bot] ab754f514f
chore(deps): update dependency @swc/core to v1.3.99 (#661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-21 07:18:57 +00:00
renovate[bot] 0a284f807e
chore(deps): update dependency eslint to v8.54.0 (#656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-18 01:16:38 +00:00
Todd Baert 5afbea7549
fix: orphaned grpc connection, semver ~, change events (#654)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-11-16 16:23:12 -05:00
Michael Beemer a66f514ad0
test: add target value casting test (#652)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-11-14 18:06:06 -05:00
github-actions[bot] ca7efd3abf
chore(main): release flagd-core 0.1.2 (#646)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-14 15:21:17 -05:00
Michael Beemer 1c7dc660d1
fix: false positive of a falsy variant value check (#651)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-11-14 15:17:29 -05:00
Michael Beemer bbd9aee896
chore: address lint issues (#642)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-11-14 12:06:14 -05:00
Kavindu Dodanduwa 2213946d9a
feat: flagd in-process provider (#633)
Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-11-14 11:31:01 -05:00
renovate[bot] 9b622d8cfa
chore(deps): update bufbuild/buf-setup-action action to v1.28.0 (#639)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-13 11:07:35 -05:00
renovate[bot] ab5e758e75
chore(deps): update dependency @openfeature/core to ^0.0.18 (#638)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-09 18:57:11 +00:00
Juan Bernal 37fa182da2
chore: Update README.md launchdarkly-client typo (#636)
Signed-off-by: Juan Bernal <juanxwtf@gmail.com>
2023-11-09 07:32:51 -06:00
renovate[bot] ab962bc18a
chore(deps): update dependency @swc/core to v1.3.96 (#635)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-05 10:11:11 +00:00
renovate[bot] aec906b7d7
chore(deps): update dependency eslint to v8.53.0 (#634)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-04 04:55:15 +00:00
renovate[bot] 9134c0c999
chore(deps): update actions/setup-node action to v4 (#617)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-02 15:32:27 -04:00
renovate[bot] c6aef41b44
chore(deps): update bufbuild/buf-setup-action action to v1.27.2 (#604)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-02 15:30:31 -04:00
renovate[bot] 5820cf94c2
fix(deps): update dependency axios to v1.6.0 (#622)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-02 15:22:05 -04:00
github-actions[bot] c3b8431f76
chore(main): release flagd-core 0.1.1 (#630)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-02 13:58:13 -04:00
Todd Baert 3db7c0c739
chore: make @openfeature/core peer of flagd/core (#631)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-11-02 13:55:39 -04:00
Kavindu Dodanduwa 72eacd33ab
feat: flagd-core json logic evaluator (#623)
Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-11-02 13:12:08 -04:00
github-actions[bot] 583797c0b0
chore(main): release go-feature-flag-web-provider 0.1.5 (#628)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-01 14:50:14 +01:00
Thomas Poignant c77f8d874d
fix: GOFF Authorize connecting in a secure way to the websocket (#625) 2023-11-01 14:30:20 +01:00
Kavindu Dodanduwa 8fac8cb902
feat: Initial version of the flagd js core (#620)
Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Signed-off-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-26 14:52:20 -04:00
renovate[bot] ee41479afb
chore(deps): update dependency node to v20 (#619)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-25 15:22:25 -04:00
renovate[bot] c7752f5a3c
chore(deps): update swc monorepo (#606)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 16:40:13 -04:00
renovate[bot] 85526071eb
chore(deps): update dependency eslint to v8.52.0 (#616)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-21 02:02:08 +00:00
Todd Baert 308358e4d1
chore: remove in-memory provider (#612)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-18 15:14:01 -04:00
renovate[bot] 2d3f6014ba
chore(deps): update dependency prettier to v3.0.3 (#522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-12 09:01:48 -04:00
renovate[bot] 7ea58c605f
fix(deps): update dependency tslib to v2.6.2 (#485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-12 08:38:46 -04:00
github-actions[bot] 15f0725ec7
chore(main): release flagd-provider 0.9.0 (#540)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-11 15:53:33 -04:00
github-actions[bot] 058a47c226
chore(main): release open-telemetry-hooks 0.3.0 (#563)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-11 15:49:30 -04:00
github-actions[bot] 0af218c3c6
chore(main): release config-cat-provider 0.4.0 (#564)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-11 15:47:04 -04:00
github-actions[bot] 03d972125f
chore(main): release go-feature-flag-provider 0.6.0 (#601)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-11 15:42:28 -04:00
github-actions[bot] 509444802e
chore(main): release env-var-provider 0.2.0 (#374)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-11 15:32:01 -04:00
Todd Baert ae3732a906
chore!: use @openfeature/server-sdk peer (#608)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-11 15:28:53 -04:00
renovate[bot] c28c5d5b1b
chore(deps): update dependency eslint to v8.51.0 (#605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-07 02:27:57 +00:00
renovate[bot] a80217411c
chore(deps): update dependency @swc/core to v1.3.92 (#603)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-05 13:24:42 +00:00
renovate[bot] 3d1ad7cd11
chore(deps): update dependency @swc/core to v1.3.91 (#602)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-01 22:56:16 +00:00
renovate[bot] d8aa2f5224
fix(deps): update dependency axios to v1.5.1 (#594)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-30 08:33:41 +02:00
github-actions[bot] 60d0f55779
chore(main): release go-feature-flag-web-provider 0.1.4 (#599)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-09-29 16:45:51 -04:00
Todd Baert affd7af008 chore: revert bad goff release
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-09-29 16:41:26 -04:00
renovate[bot] 9732127d81
chore(deps): update dependency eslint to v8.50.0 (#600)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-29 20:36:02 +00:00
Todd Baert 0446eab5cf
fix: packaging issues impacting babel/react (#596)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-09-29 16:23:22 -04:00
Michael Beemer f4d7b8d2f7
chore: Disable NX update via Renovate (#595)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-09-28 13:06:23 -04:00
renovate[bot] fcfe261a80
chore(deps): update dependency @types/node to v18.17.19 (#592)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-24 02:07:24 +00:00
renovate[bot] 1ae5424171
chore(deps): update dependency eslint to ~8.50.0 (#589)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-23 01:17:42 +00:00
renovate[bot] 3107e44e67
chore(deps): update dependency @types/node to v18.17.18 (#588)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-20 06:31:09 +00:00
github-actions[bot] 00d4ab9ceb
chore(main): release go-feature-flag-web-provider 0.1.3 (#586)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-09-18 20:35:59 +02:00
github-actions[bot] 0ccb5b4c8e
chore(main): release go-feature-flag-provider 0.5.16 (#587)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-18 20:00:31 +02:00
Thomas Poignant 6ca64638c0
fix: GOFF fix issues in hook (#585) 2023-09-18 19:34:54 +02:00
Thomas Poignant 8666ecdb5d
fix: GO Feature Flag web provider was using js-sdk import (#583)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-09-18 14:24:14 +02:00
renovate[bot] 75c77f2085
chore(deps): update dependency @types/node to v18.17.17 (#584)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-16 09:35:51 +00:00
renovate[bot] d4eae318ac
chore(deps): update dependency @types/jest to v29.5.5 (#582)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-16 00:53:28 +00:00
renovate[bot] 597b18f3f6
chore(deps): update dependency @types/node to v18.17.16 (#581)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 14:36:22 +00:00
github-actions[bot] e578c47e05
chore(main): release go-feature-flag-provider 0.5.15 (#566)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-12 18:38:21 +02:00
Thomas Poignant c5dd7fcdd8
chore: GO Feature Flag move datacollector to hook + change cache key (#580)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-09-12 17:52:23 +02:00
renovate[bot] 1503859413
fix(deps): update dependency axios to v1.5.0 (#560)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 10:25:06 -04:00
renovate[bot] f24e1f37d3
chore(deps): update actions/checkout action to v4 (#571)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 09:30:37 -04:00
github-actions[bot] 07eb977405
chore(main): release go-feature-flag-web-provider 0.1.2 (#565)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-11 16:34:22 +02:00
renovate[bot] 8f824f974e
chore(deps): update dependency axios-mock-adapter to v1.22.0 (#579)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-11 13:56:04 +00:00
renovate[bot] 4a74fb89dc
chore(deps): update dependency eslint to ~8.49.0 (#578)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-09 03:59:42 +00:00
renovate[bot] 17f3da9985
chore(deps): update dependency @types/node to v18.17.15 (#577)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-09 00:35:46 +00:00
renovate[bot] 863f087b45
chore(deps): update nrwl monorepo to v16.8.1 (#576)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 06:22:43 +00:00
renovate[bot] 9e91f74594
chore(deps): update dependency nx to v16.8.1 (#575)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 05:04:16 +00:00
renovate[bot] 8aba5c1ac0
chore(deps): update nrwl monorepo to v16.8.0 (#573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 10:13:27 +00:00
renovate[bot] a7587f0459
chore(deps): update dependency nx to v16.8.0 (#572)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 08:37:57 +00:00
renovate[bot] e928ff9da4
chore(deps): update dependency @types/node to v18.17.14 (#570)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-03 00:47:34 +00:00
renovate[bot] f56c26f486
chore(deps): update dependency @types/node to v18.17.13 (#569)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-02 00:20:00 +00:00
Todd Baert 3feb18e0ff
chore: use spec submodule (#568)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-09-01 12:50:50 -04:00
Todd Baert a88d8fc097
chore: update nx, run migrations (#552)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-28 09:34:46 -04:00
renovate[bot] f2990032bd
chore(deps): update dependency @types/node to v18.17.12 (#561)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-28 05:24:11 +00:00
renovate[bot] f234f11963
chore(deps): update dependency eslint to ~8.48.0 (#558)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 22:18:29 +00:00
Todd Baert 9ecdcdf166
chore: add e2e tests for flagd (#554)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-25 16:09:49 -04:00
renovate[bot] efed4a55c7
chore(deps): update dependency @types/node to v18.17.11 (#557)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 01:14:32 +00:00
renovate[bot] 9fb37b0d7d
chore(deps): update nrwl monorepo to v16.7.4 (#548)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 04:53:58 +00:00
renovate[bot] fe7691057e
chore(deps): update dependency @types/node to v18.17.9 (#555)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 00:36:25 +00:00
renovate[bot] 16fa43f3a9
chore(deps): update dependency nx to v16.7.4 (#550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-23 16:33:40 +00:00
renovate[bot] ab389d7454
chore(deps): update bufbuild/buf-setup-action action to v1.26.1 (#521)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-23 12:24:29 -04:00
renovate[bot] 8b209c1b84
chore(deps): update types (#549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-22 22:03:26 +00:00
renovate[bot] 4d98ad0d30
chore(deps): update dependency nx to v16.7.3 (#547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-22 17:21:06 +00:00
renovate[bot] 99e9d506ab
chore(deps): update dependency @types/node to v18.17.7 (#546)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-22 14:29:50 +00:00
renovate[bot] c4a4ec890e
fix(deps): update dependency @bufbuild/connect-web to ^0.13.0 (#541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-21 11:37:24 -04:00
renovate[bot] e8c6832458
chore(deps): update dependency nx to v16.7.2 (#543)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-19 02:20:32 +00:00
renovate[bot] 265092cd59
chore(deps): update dependency @types/node to v18.17.6 (#542)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-18 21:26:25 +00:00
github-actions[bot] 3eedde4333
chore(main): release launchdarkly-client-provider 0.2.0 (#467)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-17 11:59:56 -04:00
Todd Baert 552be83038
chore: remove un-needed zero-value handling (#539)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-17 11:20:48 -04:00
renovate[bot] ee8d162afd
chore(deps): update dependency nx to v16.7.1 (#538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-17 03:15:42 +00:00
renovate[bot] 0e40b00744
chore(deps): update dependency nx to v16.7.0 (#536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-15 21:59:19 +00:00
github-actions[bot] 700828dd00
chore(main): release flagd-provider 0.8.3 (#518)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-14 12:12:41 -04:00
renovate[bot] 7c98b06a26
chore(deps): update dependency @types/node to v18.17.5 (#535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-12 01:04:00 +00:00
renovate[bot] 253d0c114f
chore(deps): update dependency eslint to ~8.47.0 (#532)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-11 18:29:04 +00:00
Todd Baert b24b580b20
fix: unhandled rejection on init (#534)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-11 13:44:17 -04:00
renovate[bot] 58da48663c
chore(deps): update dependency @types/node to v18.17.4 (#530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-09 00:34:45 +00:00
renovate[bot] 8e801eb822
chore(deps): update dependency @types/node to v18.17.3 (#528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-05 16:29:30 +00:00
renovate[bot] 487009b2ba
chore(deps): update dependency @types/node to v18.17.2 (#526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-04 03:30:30 +00:00
github-actions[bot] e1ad4f1e19
chore(main): release open-telemetry-hooks 0.2.4 (#524)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-03 22:22:25 -04:00
Todd Baert 28fbd12f20
feat: add custom attrs to traces (#520)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-08-03 11:10:41 -04:00
renovate[bot] e056b300da
chore(deps): update dependency eslint-config-prettier to v8.10.0 (#523)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-03 10:56:39 +00:00
renovate[bot] df9f2314de
fix(deps): update dependency @bufbuild/connect-web to ^0.12.0 (#486)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-01 09:44:59 -04:00
github-actions[bot] e104dccf09
chore(main): release go-feature-flag-web-provider 0.1.1 (#512)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-07-31 20:49:24 +02:00
github-actions[bot] 77c5803b8a
chore(main): release flagd-web-provider 0.4.0 (#511)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-31 13:58:47 -04:00
Todd Baert 8d45c02454
chore!: update required web-sdk peer (#514)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-31 13:55:38 -04:00
renovate[bot] 0b5e2e8182
chore(deps): update dependency nx to v16.6.0 (#506)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-31 16:52:08 +00:00
renovate[bot] d9eea2dee3
fix(deps): update dependency @openfeature/web-sdk to ^0.4.0 (#513)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-31 12:46:05 -04:00
Thomas Poignant d1ff1ecaf4
feat: Init web-sdk go-feature-flag (#474)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-07-31 18:16:26 +02:00
Todd Baert a427a0006a
chore: fix submodule race (#509)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-31 11:31:35 -04:00
github-actions[bot] 144799a8a5
chore(main): release go-feature-flag-provider 0.5.14 (#507)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-31 16:17:49 +02:00
Thomas Poignant adc2c5a0c3
fix: [GO Feature Flag server] handle PROVIDER_NOT_READY from the spec (#505)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-07-31 15:52:41 +02:00
github-actions[bot] 6cea8530c4
chore(main): release flagd-provider 0.8.2 (#503)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-28 16:33:11 -04:00
Todd Baert c8a80c6317
feat: add flag metadata (#502)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-28 16:30:37 -04:00
renovate[bot] 25639497d2
chore(deps): update dependency eslint to ~8.46.0 (#500)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-28 19:38:32 +00:00
github-actions[bot] 3ca96ebeff
chore(main): release open-telemetry-hooks 0.2.3 (#501)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-28 13:16:49 -04:00
Todd Baert c2deddf288
feat: custom attribute support (#499)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-28 13:11:36 -04:00
github-actions[bot] 15586072b6
chore(main): release flagd-web-provider 0.3.5 (#498)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 18:43:52 -04:00
Todd Baert 276a740ba4
fix: add status to flagd web (#497)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-27 18:41:37 -04:00
github-actions[bot] 80990b3c43
chore(main): release go-feature-flag-provider 0.5.13 (#494)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-27 22:41:48 +02:00
github-actions[bot] 85c01af8f1
chore(main): release flagd-provider 0.8.1 (#496)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 14:48:16 -04:00
Todd Baert ff61206f7f
fix: issue with flagd not disconnecting (#495)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-27 14:42:08 -04:00
Thomas Poignant e11269dec8
fix: [GO Feature Flag server] Implement ProviderStatus (#493)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
Signed-off-by: Thomas Poignant <thomas.poignant@gmail.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-07-27 17:58:06 +02:00
renovate[bot] 6f0fafe12b
chore(deps): update dependency eslint-config-prettier to v8.9.0 (#492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-27 15:31:04 +00:00
github-actions[bot] aa66e80731
chore(main): release config-cat-provider 0.3.0 (#438)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 15:26:44 +02:00
Lukas Reining f599c31458
fix(config-cat): add status flag to provider (#491)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2023-07-27 09:18:30 -04:00
github-actions[bot] c348cd5d5b
chore(main): release flagd-provider 0.8.0 (#455)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-27 09:10:22 -04:00
Todd Baert a73fc7670c
feat!: events, init, shutdown (#484)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-27 09:01:59 -04:00
renovate[bot] 3664c06cea
chore(deps): update dependency @types/node to v18.17.1 (#487)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-25 22:51:27 +00:00
renovate[bot] f7c54179b9
chore(deps): update dependency @types/node to v18.17.0 (#482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-22 16:18:56 +00:00
renovate[bot] 4c53cbf9c6
chore(deps): update nrwl monorepo to v16.5.5 (#481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-22 12:45:44 +00:00
renovate[bot] e98f2b2d9b
chore(deps): update dependency nx to v16.5.5 (#480)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-22 10:51:06 +00:00
renovate[bot] 58844b7f18
chore(deps): update types (#457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-22 00:15:20 +00:00
renovate[bot] 1585f40121
chore(deps): update nrwl monorepo to v16.5.4 (#479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-21 22:35:43 +00:00
renovate[bot] 706b6e32cc
chore(deps): update dependency nx to v16.5.4 (#478)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-21 19:42:27 +00:00
github-actions[bot] 697fc0b5d8
chore(main): release open-telemetry-hooks 0.2.2 (#476)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-19 15:38:29 -04:00
Todd Baert 6febfb0d09
fix: otel metric semantic convs (#475)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-19 15:34:55 -04:00
renovate[bot] 5b434fb9ee
fix(deps): update dependency @bufbuild/connect-web to ^0.11.0 (#437)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 11:32:23 -04:00
renovate[bot] a4291802f3
chore(deps): update nrwl monorepo to v16.5.3 (#473)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 15:17:20 +00:00
Todd Baert 94697b85c8
chore: update nx (#470)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-18 11:14:04 -04:00
renovate[bot] 3ff92cf1cb
chore(deps): update dyladan/component-owners digest to cdaadff (#468)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 08:54:22 -04:00
github-actions[bot] b51b9c5eeb
chore(main): release in-memory-provider 0.2.0 (#377)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-18 08:52:33 -04:00
renovate[bot] 198ed7b161
chore(deps): update bufbuild/buf-setup-action action to v1.25.0 (#439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 08:24:04 -04:00
renovate[bot] c00af54279
chore(deps): update eslint (#471)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 01:51:06 +00:00
renovate[bot] 8ce3c203e4
fix(deps): update dependency tslib to v2.6.0 (#385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-17 16:41:37 -04:00
renovate[bot] 9555f38baa
chore(deps): update dependency prettier to v3 (#445)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-17 16:20:27 -04:00
Santiago Jimenez Giraldo 7520092f4d
feat!: support streaming connection and initialization fixes (#418)
Signed-off-by: Santiago Jimenez Giraldo <santiago@redpanda.com>
2023-07-13 15:54:11 -04:00
github-actions[bot] 4716c8f857
chore(main): release open-telemetry-hooks 0.2.1 (#466)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-12 15:38:28 -04:00
Todd Baert ac5b91b60e
fix: update README to remove deprecation (#465)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 15:35:27 -04:00
github-actions[bot] de38767871
chore(main): release open-telemetry-hooks 0.2.0 (#464)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 15:22:30 -04:00
Todd Baert 131db1ef47
feat!: add metrics hook (#448)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 15:02:22 -04:00
github-actions[bot] 5820141508
chore(main): release open-telemetry-hook 6.0.2 (#462)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 14:46:45 -04:00
Todd Baert be39eb5693
fix: ci issue with buf (#463)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 14:39:45 -04:00
Todd Baert 58aa56cdc1
fix: deprecate otel hook (#449)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
2023-07-12 13:55:48 -04:00
Todd Baert 7914b7d124
chore: fix ci permissions (#460)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 08:42:00 -04:00
Todd Baert 15c6c51890
chore: use component_owners (#446)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-12 08:35:40 -04:00
Todd Baert 8568af1e26
chore: migrate buf (#456)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-10 16:25:15 -04:00
Lukas Reining 626cda8906
feat!: add events to in-memory provider (#436)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-06 13:12:03 -04:00
github-actions[bot] d2a310976e
chore(main): release flagd-provider 0.7.7 (#346)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-05 12:22:21 -04:00
renovate[bot] f00a34fc36
chore(deps): update eslint to v5.61.0 (#443)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-03 22:05:08 +00:00
renovate[bot] 761ae5afd8
chore(deps): update dependency eslint to ~8.44.0 (#442)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-01 06:46:20 +00:00
renovate[bot] b9e5d1e649
chore(deps): update dependency @types/node to v18.16.19 (#441)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-01 03:04:29 +00:00
renovate[bot] 1e23a6db18
chore(deps): update dependency ts-jest to v29.1.1 (#440)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-30 13:16:08 +00:00
Lukas Reining da5d21208e
fix!: remove configcat 7 peer dependency (#435)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2023-06-29 18:49:04 +02:00
Todd Baert 71379c8d2b
fix: failure to create grpc credentials (#431)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-06-29 11:59:24 -04:00
Todd Baert 8e7f3008f1
chore: use node-version (#434)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-06-28 15:58:23 -04:00
github-actions[bot] 302150c12a
chore(main): release go-feature-flag-provider 0.5.12 (#432)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-06-28 21:43:21 +02:00
Todd Baert aa140dc22c
chore: add node version matrix to ci (#433)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-06-28 15:40:48 -04:00
Thomas Poignant b4a7ffe0dc
fix: use copy-anything for deepClone to be compatible with nodeJS before v17 (#429)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-06-28 15:28:43 -04:00
github-actions[bot] 9966281fcb
chore(main): release go-feature-flag-provider 0.5.11 (#426)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-27 16:56:14 +02:00
Thomas Poignant f285dab379
feat: Return CACHED reason when using cache (#425) 2023-06-27 16:10:03 +02:00
github-actions[bot] c8863f1a0e
chore(main): release config-cat-provider 0.2.0 (#380)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-27 16:09:17 +02:00
Lukas Reining 3db6927416
feat!: implement events and shutdown for spec 0.6.0 (#422)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2023-06-27 14:05:51 +02:00
renovate[bot] 64c7d3a6c8
fix(deps): update dependency configcat-js to v8 (#415)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-27 13:43:02 +02:00
renovate[bot] 45ce777458
chore(deps): update eslint to v5.60.1 (#424)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-26 22:56:23 +00:00
renovate[bot] c155662ab0
fix(deps): update dependency @bufbuild/connect-web to ^0.10.0 (#386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-26 15:54:29 -04:00
renovate[bot] fbb642c545
chore(deps): update bufbuild/buf-setup-action action to v1.22.0 (#423)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-26 15:28:22 -04:00
renovate[bot] 81144c1dd6
fix(deps): update dependency lru-cache to v10 (#417)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-22 17:03:06 -04:00
renovate[bot] 73e9e1b9a0
chore(deps): update eslint to v5.60.0 (#420)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-19 21:53:30 +00:00
renovate[bot] 671a93ac69
chore(deps): update dependency eslint to ~8.43.0 (#419)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-17 00:59:34 +00:00
github-actions[bot] e026c9dcef
chore(main): release go-feature-flag-provider 0.5.10 (#414)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-16 11:49:45 +02:00
Thomas Poignant 1a76aec013
feat: add LRU TTL cache for GO Feature Flag Provider (#411)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-06-16 11:47:03 +02:00
renovate[bot] 928183a7ba
chore(deps): update bufbuild/buf-setup-action action to v1.21.0 (#351)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-14 15:30:46 -04:00
renovate[bot] a92ea46dd6
chore(deps): update dependency axios-mock-adapter to v1.21.5 (#416)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-14 13:42:34 +00:00
renovate[bot] 946cc46d2a
chore(deps): update dependency @types/node to v18.16.18 (#412)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-13 19:03:22 +00:00
renovate[bot] a8b8222ef7
chore(deps): update eslint to v5.59.11 (#413)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-13 12:55:30 -04:00
Thomas Poignant 9aadf7492e
feat: support metadata (go feature flag provider) (#410)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2023-06-13 18:18:58 +02:00
renovate[bot] 5bf9932088
chore(deps): update dependency @openfeature/js-sdk to v1.3.1 (#409)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-06-13 10:33:49 -04:00
renovate[bot] 6fa273a348
chore(deps): update eslint to v5.59.9 (#407)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-05 23:04:18 +00:00
renovate[bot] a8a1ae6172
chore(deps): update dependency @swc/core to v1.3.62 (#406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-04 07:58:58 +00:00
renovate[bot] b0260b2061
chore(deps): update dependency eslint to ~8.42.0 (#405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-04 05:48:59 +00:00
renovate[bot] 4e3137c501
chore(deps): update dependency @types/jest to v29.5.2 (#400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-31 18:33:35 +00:00
renovate[bot] df8fa7e556
chore(deps): update dependency @swc/core to v1.3.61 (#398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-30 08:08:04 +00:00
renovate[bot] cc7f02792d
chore(deps): update eslint to v5.59.8 (#397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-29 20:41:50 +00:00
renovate[bot] 5112e720cd
chore(deps): update dependency @types/node to v18.16.16 (#396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-27 00:26:10 +00:00
renovate[bot] c1b09b90af
chore(deps): update dependency @types/node to v18.16.15 (#395)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-26 02:29:35 +00:00
renovate[bot] e34e9db17d
chore(deps): update dependency @swc/core to v1.3.60 (#394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-25 09:12:22 +00:00
renovate[bot] a19676806e
chore(deps): update nrwl monorepo to v16.2.2 (#392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-24 00:59:09 +00:00
renovate[bot] c9c5161da4
chore(deps): update dependency nx to v16.2.2 (#393)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-23 21:54:04 +00:00
renovate[bot] 1836cb17b4
chore(deps): update eslint to v5.59.7 (#391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-22 23:45:22 +00:00
renovate[bot] 642b738095
chore(deps): update dependency @types/node to v18.16.14 (#390)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-22 03:38:19 +00:00
renovate[bot] 1cc1a15a7a
chore(deps): update dependency eslint to ~8.41.0 (#389)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-20 04:57:51 +00:00
renovate[bot] 51022982c0
chore(deps): update dependency @swc/core to v1.3.59 (#388)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-19 11:55:52 +00:00
renovate[bot] e4b5a1d4e3
chore(deps): update dependency @types/node to v18.16.13 (#387)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-18 19:07:12 +00:00
renovate[bot] ded90d317c
chore(deps): update nrwl monorepo to v16.2.1 (#384)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-18 03:30:22 +00:00
renovate[bot] 59cc6f3507
chore(deps): update dependency nx to v16.2.1 (#370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-17 23:29:54 +00:00
renovate[bot] 04bc907a96
chore(deps): update dependency @types/node to v18.16.12 (#383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-17 00:15:41 +00:00
renovate[bot] c69a76e3c5
chore(deps): update dependency @types/node to v18.16.10 (#381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-16 08:55:49 +00:00
github-actions[bot] 7a589fa209
chore(main): release go-feature-flag-provider 0.5.9 (#338) 2023-05-16 07:01:43 +02:00
renovate[bot] 5ec3e58ec4
chore(deps): update swc monorepo (#372)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-16 02:17:16 +00:00
renovate[bot] 03a8ebefe5
chore(deps): update eslint to v5.59.6 (#371)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-15 22:45:31 +00:00
github-actions[bot] fdbbf19171
chore(main): release launchdarkly-client-provider 0.1.2 (#379)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-15 14:57:55 -04:00
Todd Baert 395ed186de
chore: correct publish executor (#378)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-05-15 14:55:53 -04:00
github-actions[bot] 1adcffce99
chore(main): release launchdarkly-client-provider 0.1.1 (#360)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-15 14:31:21 -04:00
Todd Baert 7a9c201d16
chore: migrate to nx 16 (#366)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-05-15 14:28:50 -04:00
renovate[bot] 8e3be4d704
chore(deps): update dependency @types/node to v18.16.9 (#363)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-13 18:45:19 +00:00
Todd Baert 23e6251d7b
chore: fix missing computed deps (#362)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-05-13 14:05:38 -04:00
Mateoc 10511c7a86
feat(launchdarkly-provider): Add new provider (#343)
Signed-off-by: mateo <mateo@redpanda.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-05-12 23:01:58 -04:00
renovate[bot] d8ff0e4b43
chore(deps): update dependency @types/node to v18.16.8 (#359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-12 03:19:03 +00:00
renovate[bot] a57f22d964
fix(deps): update dependency configcat-js to v7.0.1 (#340)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-11 12:02:01 -04:00
renovate[bot] d827dbbe1e
chore(deps): update dependency @types/node to v18.16.7 (#358)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-10 21:48:56 +00:00
Todd Baert a02abe30d1
chore: add lint script (#357)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-05-10 11:06:15 -04:00
renovate[bot] ca672bcf96
chore(deps): update dependency @types/node to v18.16.6 (#356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-08 22:29:07 +00:00
renovate[bot] 23ba6e830f
chore(deps): update eslint to v5.59.5 (#355)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-08 22:26:04 +00:00
renovate[bot] fd2c028951
chore(deps): update dependency eslint to ~8.40.0 (#354)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-06 08:44:39 +00:00
renovate[bot] d64c43bffc
chore(deps): update dependency @types/node to v18.16.5 (#352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-06 05:29:49 +00:00
renovate[bot] 80a2c51eea
chore(deps): update dependency @types/node to v18.16.4 (#350)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-05 12:34:47 +00:00
renovate[bot] 30a5538aeb
chore(deps): update dependency @openfeature/js-sdk to v1.2.0 (#349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-02 02:41:41 +00:00
renovate[bot] 83f979a987
chore(deps): update eslint to v5.59.2 (#348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-01 22:30:04 +00:00
renovate[bot] d22fa06100
chore(deps): update dependency prettier to v2.8.8 (#335)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-01 14:58:03 -04:00
renovate[bot] 78d8487173
fix(deps): update dependency @grpc/grpc-js to v1.8.14 (#326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-01 13:49:13 -04:00
renovate[bot] 9e9becbfd9
chore(deps): update dependency @types/node to v18.16.3 (#347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-01 13:26:26 -04:00
renovate[bot] 1ade1e99ad
chore(deps): update nx to v15.9.3 (#342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-01 17:16:39 +00:00
renovate[bot] 3b35d5337e
chore(deps): update eslint (#328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-30 07:21:09 +00:00
renovate[bot] 6e247ad2ba
fix(deps): update dependency lru-cache to v9 (#321)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-04-28 14:19:23 -04:00
renovate[bot] 951d2d8be7
fix(deps): update dependency axios to v1.4.0 (#344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-28 14:07:14 -04:00
renovate[bot] 105f99f7ae
fix(deps): update dependency @protobuf-ts/grpc-transport to v2.9.0 (#337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-27 15:14:31 -04:00
renovate[bot] 292697394c
fix(deps): update dependency @bufbuild/connect-web to v0.8.6 (#324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 13:12:25 -04:00
renovate[bot] 907f13c46e
fix(deps): update dependency axios to v1.3.6 (#331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 11:43:51 -04:00
github-actions[bot] ae4ca1dd44
chore(main): release config-cat-provider 0.1.1 (#339)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-25 16:04:16 -04:00
Lukas Reining 495bf690b7
feat: add ConfigCat provider #327 (#334)
Signed-off-by: Lukas Reining <lukas.reining@codecentric.de>
2023-04-25 11:53:18 -04:00
github-actions[bot] 0797d4e791
chore(main): release flagd-provider 0.7.6 (#270)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-25 11:42:44 -04:00
odubajDT 2db7fa825b
fix: handling zero value responses (previously undefined) (#330)
Signed-off-by: odubajDT <ondrej.dubaj@dynatrace.com>
2023-04-25 11:10:01 -04:00
github-actions[bot] 97c999a891
chore(main): release flagd-web-provider 0.3.4 (#336)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-24 14:35:57 -04:00
Todd Baert cbc76edba9
fix: add shutdown to flagd-web provider (#325)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-04-24 14:28:46 -04:00
renovate[bot] 10a32393df
chore(deps): update dependency @types/node to v18.15.13 (#333)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-21 07:49:42 +00:00
renovate[bot] 3265e445a5
chore(deps): update dependency @types/node to v18.15.12 (#332)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-20 08:02:01 +00:00
renovate[bot] 139d3ef4a0
chore(deps): update dependency @types/jest to v29.5.1 (#329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-19 16:31:59 +00:00
Michael Beemer 68fc9cb9bb
update link to use new doc domain 2023-04-14 16:45:40 -04:00
renovate[bot] 3d6fe29efb
chore(deps): update eslint to ~5.58.0 (#322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-11 02:51:47 +00:00
github-actions[bot] acc0c01832
chore(main): release go-feature-flag-provider 0.5.8 (#320)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-08 13:15:09 -04:00
Thomas Poignant ff60b6fd98
fix: go-feature-flag provider this.apiKey is undefined (#319)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-04-08 10:56:18 -04:00
github-actions[bot] 0294c7d20b
chore(main): release go-feature-flag-provider 0.5.7 (#318)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-08 07:51:32 -04:00
Thomas Poignant eaf6458d1d
fix: go-feature-flag provider add authentication header (#317)
Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2023-04-08 07:48:59 -04:00
renovate[bot] 5e4f87667a
chore(deps): update dependency eslint to ~8.38.0 (#314)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-08 07:12:14 +00:00
github-actions[bot] c903e0f20f
chore(main): release go-feature-flag-provider 0.5.6 (#316)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-07 23:06:31 -04:00
Todd Baert d9130c8e05
fix: comment typo (#315)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-04-07 23:03:23 -04:00
renovate[bot] b4421fba54
chore(deps): update bufbuild/buf-setup-action action to v1.17.0 (#307)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-07 22:57:10 -04:00
renovate[bot] 948e367c8e
fix(deps): update dependency @bufbuild/connect-web to v0.8.5 (#304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-07 22:55:37 -04:00
renovate[bot] 24901e79c1
fix(deps): update dependency axios to v1.3.5 (#308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-07 22:49:32 -04:00
Michael Beemer c17f6f8570
ci: add missing nx dependency (#313)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-04-07 22:33:57 -04:00
github-actions[bot] f4cddd5e83
chore(main): release go-feature-flag-provider 0.5.5 (#311)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-07 09:48:57 -04:00
Thomas Poignant ba0b2a283c
feat: Support apiKey for GO Feature Flag relay proxy v1.7.0 (#310)
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-04-07 09:26:14 -04:00
renovate[bot] 2936df3db5
chore(deps): update nx to v15.9.2 (#299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 16:59:40 -04:00
github-actions[bot] 2dfcb3a938
chore(main): release flagd-web-provider 0.3.3 (#309)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-06 16:54:57 -04:00
Todd Baert 7b5613e6b3
feat: use new event emitter (#305)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-04-06 16:52:11 -04:00
renovate[bot] 9d22e0feef
chore(deps): update dependency axios-mock-adapter to v1.21.4 (#301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-05 21:33:32 +00:00
renovate[bot] 31ebd0e326
fix(deps): update dependency lru-cache to v8.0.5 (#306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-05 13:29:01 -04:00
renovate[bot] 76afed6b5b
chore(deps): update dependency ts-jest to v29.1.0 (#302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-05 13:08:02 -04:00
renovate[bot] 815ec7015d
chore(deps): update eslint to v5.57.1 (#303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-05 16:51:57 +00:00
renovate[bot] 04c21965f4
chore(deps): update bufbuild/buf-setup-action action to v1.16.0 (#297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-31 13:56:11 -04:00
renovate[bot] 29b6242b62
chore(deps): update eslint (#259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 15:43:07 +00:00
renovate[bot] c350bdfd70
chore(deps): update dependency @types/node to v18.15.11 (#296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 08:30:35 +00:00
renovate[bot] dd0a230d56
chore(deps): update jest monorepo to v29.5.0 (#264)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 02:02:59 +00:00
renovate[bot] fc63a825ab
fix(deps): update dependency @grpc/grpc-js to v1.8.13 (#284)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-28 15:11:36 -04:00
renovate[bot] 5ce6702334
fix(deps): update dependency @bufbuild/protobuf to v1.2.0 (#291)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-27 11:59:36 -04:00
renovate[bot] 59c9582fb6
chore(deps): update dependency axios-mock-adapter to v1.21.3 (#294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-27 03:53:53 +00:00
renovate[bot] 6977c029ef
chore(deps): update dependency @types/node to v18.15.10 (#293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-26 03:52:13 +00:00
renovate[bot] b54cac22b3
chore(deps): update dependency @types/node to v18.15.9 (#292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-25 15:58:57 +00:00
renovate[bot] 925fc2a8a5
chore(deps): update dependency @types/node to v18.15.8 (#290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-25 00:25:23 +00:00
renovate[bot] 7da22985b3
chore(deps): update nx to v15.8.9 (#289)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-25 00:23:30 +00:00
renovate[bot] 1d6092186b
chore(deps): update dependency prettier to v2.8.7 (#288)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 18:37:21 +00:00
renovate[bot] 5f11563ca8
chore(deps): update dependency @types/node to v18.15.7 (#287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 18:35:14 +00:00
renovate[bot] 75370a4a99
chore(deps): update nx to v15.8.8 (#286)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 13:23:44 +00:00
renovate[bot] aafe99bdee
chore(deps): update dependency @types/node to v18.15.6 (#285)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 06:38:53 +00:00
github-actions[bot] 11ac4872a0
chore(main): release flagd-web-provider 0.3.2 (#283)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-23 16:28:35 -04:00
Todd Baert b9a9cf24ff
chore: add CODEOWNERS
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-03-23 15:22:24 -04:00
Todd Baert 0a639776ee
fix: issue where context updates somtimes missed (#282)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-03-23 12:50:09 -04:00
renovate[bot] 44637a86df
fix(deps): update dependency @bufbuild/connect-web to ^0.8.0 (#232)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-23 11:54:27 -04:00
renovate[bot] 96fdf0d8af
fix(deps): update dependency @opentelemetry/api to v1.4.1 (#266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-23 11:35:18 -04:00
renovate[bot] 106f9e845d
fix(deps): update dependency @grpc/grpc-js to v1.8.12 (#263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-23 11:06:02 -04:00
github-actions[bot] 3dfdfb969a
chore(main): release flagd-web-provider 0.3.1 (#281)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-23 08:42:54 -04:00
Todd Baert 9cb4da961f
fix: reconnect, tests (#280)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-03-23 08:17:21 -04:00
github-actions[bot] ac5a64fe63
chore(main): release flagd-web-provider 0.3.0 (#279)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-22 16:48:51 -04:00
Todd Baert 5cc817cb15
feat!: use init, events (#278)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-03-22 16:46:26 -04:00
renovate[bot] 76d0566f33
chore(deps): update types (#268)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-22 09:40:20 -04:00
renovate[bot] 6d81fdb669
fix(deps): update dependency lru-cache to v8.0.4 (#271)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 13:40:16 -04:00
renovate[bot] 5658d85a3f
chore(deps): update dependency prettier to v2.8.6 (#277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 15:18:50 +00:00
renovate[bot] 8c40b40aed
fix(deps): update dependency @protobuf-ts/grpc-transport to v2.8.3 (#274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-20 16:41:08 -04:00
renovate[bot] 4f86202adc
fix(deps): update dependency @bufbuild/protobuf to v1.1.1 (#276)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-20 16:17:18 -04:00
github-actions[bot] a6dfbbfdbd
chore(main): release flagd-web-provider 0.2.0 (#275)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-20 13:38:57 -04:00
Todd Baert 8aeeb1d198
feat!: flagd-web uses bulk resolution (#238)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Skye Gill <gill.skye95@gmail.com>
2023-03-20 13:26:15 -04:00
renovate[bot] 1a7689f3ca
chore(deps): update dependency prettier to v2.8.5 (#273)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-20 14:34:50 +00:00
renovate[bot] 2259e3a296
chore(deps): update nx to v15.8.7 (#272)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-17 20:14:20 +00:00
renovate[bot] e752c4a13e
fix(deps): update dependency lru-cache to v8 (#260)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-03-16 14:50:01 -04:00
renovate[bot] 2afeec79a7
chore(deps): update dependency @types/jest to v29.4.4 (#265)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-16 03:27:22 +00:00
renovate[bot] 6a26c9edd6
chore(deps): update types (#257)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 21:03:13 +00:00
renovate[bot] 7c4d551d9d
chore(deps): update nx to v15.8.6 (#258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 21:00:57 +00:00
renovate[bot] 30957df621
chore(deps): update dependency ts-jest to v29.0.5 (#262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 17:15:13 +00:00
renovate[bot] f2b2e7dc6e
chore(deps): update dependency @openfeature/js-sdk to v1.1.1 (#261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 17:12:56 +00:00
Michael Beemer be5c3245fa
chore: extend release notes to include emojis
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-03-15 09:56:23 -04:00
renovate[bot] 6c407008ab
chore(deps): update bufbuild/buf-setup-action action to v1.15.1 (#254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 09:54:17 -04:00
github-actions[bot] 9ad11a445b
chore(main): release in-memory-provider 0.1.1 (#255)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-09 00:24:11 -05:00
Pete Hodgson 18d414700d
feat: add in memory provider (#252)
Signed-off-by: Pete Hodgson <git@thepete.net>
2023-03-09 00:22:23 -05:00
Michael Beemer 9c8400121b
ci: configure release please to open separate release PRs (#253)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-03-08 08:52:07 -05:00
renovate[bot] 19600dce9d
chore(deps): update dependency eslint-config-prettier to v8.7.0 (#249)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-06 20:15:24 +00:00
renovate[bot] 090ed85f8f
chore(deps): update nx to v15.8.5 (#245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-04 09:40:55 +00:00
renovate[bot] 8451ae7993
chore(deps): update dependency @types/node to v18.14.6 (#244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-04 09:37:36 +00:00
renovate[bot] f0af89773b
chore(deps): update dependency @types/node to v18.14.5 (#243)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-03 09:10:16 +00:00
renovate[bot] e52f44012c
chore(deps): update nx to v15.8.3 (#242)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-03 09:07:10 +00:00
github-actions[bot] 1390a81ee2
chore: release main (#227)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-02 14:21:39 -05:00
Michael Beemer 4c5e06f1b6
feat: initial environment variable provider (#239)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2023-03-02 14:17:00 -05:00
renovate[bot] 0cb809b24f
chore(deps): update nx to v15.8.2 (#241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-02 18:24:23 +00:00
renovate[bot] bec8d2560e
chore(deps): update dependency @types/node to v18.14.4 (#240)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-02 18:20:39 +00:00
renovate[bot] 716bf59882
chore(deps): update types (#221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-02 06:18:45 +00:00
renovate[bot] 463b79928e
chore(deps): update nx to v15.8.1 (#237)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-02 06:15:36 +00:00
renovate[bot] 3ae7e0a4d3
chore(deps): update eslint (#229)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-02 06:11:44 +00:00
renovate[bot] 571e63c5e6
chore(deps): update bufbuild/buf-setup-action action to v1.15.0 (#236)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-01 21:50:54 -05:00
renovate[bot] aefa4dca57
fix(deps): update dependency axios to v1.3.4 (#222)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-03-01 21:50:32 -05:00
renovate[bot] 196043014c
fix(deps): update dependency tslib to v2.5.0 (#224)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-01 21:48:54 -05:00
Michael Beemer 41ca28cff7
chore: update github issue templates (#235)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-02-28 21:13:47 -05:00
Michael Beemer 4c918366cb
doc: add additional flagd config options
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-02-15 10:04:21 -05:00
renovate[bot] b0641277a3
chore(deps): update bufbuild/buf-setup-action action to v1.13.1 (#226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-09 15:44:58 -05:00
renovate[bot] e54d510c75
chore(deps): update dependency prettier to v2.8.4 (#233)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-08 13:59:18 +00:00
Michael Beemer 7401481c75
docs: improve readme (#231)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-02-03 17:53:29 -05:00
renovate[bot] 6df417a2a5
chore(deps): update dependency typescript to v4.9.5 (#230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 01:58:49 +00:00
renovate[bot] e78bca22c7
chore(deps): update nx to v15.6.3 (#228)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-28 02:06:52 +00:00
Todd Baert 1e93b5f384
feat: add standard flagd caching (#218)
feat: add standard flagd caching

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-01-27 14:32:22 -05:00
Michael Beemer c5a12bf72b
chore: update lint pr comment on invalid prs
This change helps new users understand how why a PR title validation failed.

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-01-26 14:28:38 -05:00
renovate[bot] 6ae5baa29e
chore(deps): update nx to v15.6.2 (#219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-25 22:43:54 +00:00
renovate[bot] ec43aadca4
fix(deps): update dependency axios to v1.2.4 (#220)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-25 13:14:53 -05:00
renovate[bot] c083c9b09c
fix(deps): update dependency axios to v1.2.3 (#209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-23 13:00:26 -05:00
renovate[bot] 4b1a4d0e9b
chore(deps): update eslint to ~5.49.0 (#216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-23 17:49:35 +00:00
Todd Baert 030e026328
chore: temporarily remove flagd-web (#215)
* chore: temporarily remove flagd-web

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* use latest buf version

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-01-23 12:45:37 -05:00
renovate[bot] 6b8bdd2178
chore(deps): update nx to v15.5.3 (#214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-21 05:12:14 +00:00
github-actions[bot] be55c42bce
chore: release main (#213)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-01-19 10:58:38 -05:00
Todd Baert d2b97dd24c
fix: module issues with types (#212) 2023-01-19 10:48:56 -05:00
renovate[bot] 6ff5527bf6
chore(deps): update dependency @types/jest to v29.2.6 (#211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-19 02:37:29 +00:00
renovate[bot] c28c587a86
chore(deps): update nx to v15.5.2 (#210)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-18 09:40:04 +00:00
renovate[bot] 8566e16bff
chore(deps): update dependency eslint to ~8.32.0 (#208)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-15 09:40:02 +00:00
renovate[bot] aea21e6821
chore(deps): update dependency prettier to v2.8.3 (#207)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-14 11:09:02 +00:00
renovate[bot] a5e60ec23a
chore(deps): update bufbuild/buf-setup-action action to v1.12.0 (#196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 16:26:17 -05:00
renovate[bot] 508141d1b0
chore(deps): update eslint (#203)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 16:19:45 -05:00
renovate[bot] 6dff1ff170
chore(deps): update nx to v15.5.1 (#197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 20:56:30 +00:00
renovate[bot] 38ffff182e
fix(deps): update dependency @bufbuild/connect-web to ^0.6.0 (#204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 15:52:15 -05:00
renovate[bot] 83ea7ef13e
chore(deps): update dependency prettier to v2.8.2 (#205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-07 14:50:46 +00:00
renovate[bot] ab9e2f5029
fix(deps): update dependency @bufbuild/connect-web to ^0.5.0 (#190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-03 10:56:48 -05:00
renovate[bot] dc7d994e1c
fix(deps): update dependency axios to v1.2.2 (#200)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-03 10:26:12 -05:00
renovate[bot] 91827d0f28
chore(deps): update dependency @types/jest to v29.2.5 (#202)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-31 04:33:58 +00:00
Michael Beemer d403fdfd25
chore: Add GitHub token to Buf
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-12-29 12:22:09 -05:00
github-actions[bot] 551eb86798
chore: release main (#195)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-12-29 12:20:07 -05:00
Michael Beemer 7de0826cb3
chore: Add GitHub token to Buf setup
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-12-29 12:17:58 -05:00
Todd Baert acee6e1817
fix: fix ESM and web polyfills issue (#201) 2022-12-29 12:11:53 -05:00
renovate[bot] 0eb3f1802d
chore(deps): update dependency @types/node to v18.11.18 (#199)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-26 23:47:56 +00:00
Michael Beemer 69b2163be1
feat!: update the otel hook to be spec compliant (#179) 2022-12-21 16:38:25 -05:00
renovate[bot] 17eaf6a7d3
chore(deps): update eslint to ~5.47.0 (#194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-19 23:39:42 +00:00
renovate[bot] 8405033d8b
chore(deps): update dependency @types/node to v18.11.17 (#193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-17 23:49:49 +00:00
renovate[bot] 5d4b2f11ce
chore(deps): update dependency eslint to ~8.30.0 (#192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-17 02:28:03 +00:00
renovate[bot] d7b8310be8
chore(deps): update dependency @types/node to v18.11.16 (#191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-17 02:25:46 +00:00
renovate[bot] 736eae6f17
chore(deps): update dependency @types/node to v18.11.15 (#189)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-14 00:11:12 +00:00
renovate[bot] 61c18f17ee
chore(deps): update dependency @types/node to v18.11.14 (#188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-13 08:02:20 +00:00
renovate[bot] cffe8392df
chore(deps): update nx to v15.3.3 (#187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-13 00:08:58 +00:00
renovate[bot] 08c69ca641
chore(deps): update bufbuild/buf-setup-action action to v1.10.0 (#186)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-12 12:40:10 -05:00
renovate[bot] 2f9351d10c
chore(deps): update nx to v15.3.2 (#185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-12 12:34:29 -05:00
renovate[bot] c614ef0c7b
chore(deps): update dependency @types/node to v18.11.13 (#184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-10 23:40:18 +00:00
github-actions[bot] 0867b93d30
chore: release main (#183)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-12-09 17:03:58 -05:00
Todd Baert 16cbe421d6
fix: correct dependencies (#182)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-12-09 17:02:16 -05:00
Todd Baert 53b1201459
chore: fix dependencies in all projects (#181) 2022-12-09 16:59:00 -05:00
renovate[bot] b9f3cfbbf2
chore(deps): update dependency axios to v1 (#155)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-09 16:04:18 -05:00
github-actions[bot] a56a2804f5
chore: release main (#163)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-12-09 15:59:39 -05:00
renovate[bot] b773b60036
fix(deps): update dependency @bufbuild/connect-web to ^0.3.0 (#164)
* fix(deps): update dependency @bufbuild/connect-web to ^0.3.0

* fix: remove unused buf package

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-12-09 12:03:58 -05:00
renovate[bot] cd676b4fd5
chore(deps): update dependency @types/node to v18.11.12 (#178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-09 00:55:35 +00:00
renovate[bot] 24842f19cb
chore(deps): update eslint to ~5.46.0 (#177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-08 15:01:36 +00:00
renovate[bot] bfca0d7d99
chore(deps): update dependency typescript to v4.9.4 (#176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-08 01:24:51 +00:00
renovate[bot] 07883625e4
chore(deps): update dependency prettier to v2.8.1 (#175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-08 01:22:40 +00:00
renovate[bot] af9ad9642d
chore(deps): update types (major) (#156)
* chore(deps): update types

* chore: update jest

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* chore: add jest-environment-jsdom

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-12-06 13:19:07 -05:00
renovate[bot] c4afa2bcea
chore(deps): update nx to v15.3.0 (#174)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-06 12:56:55 -05:00
renovate[bot] 2b2f113ff1
chore(deps): update dependency @types/node to v16.18.6 (#173)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-06 03:11:20 +00:00
renovate[bot] 3c34c7be1d
chore(deps): update dependency eslint to ~8.29.0 (#172)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-03 03:51:04 +00:00
renovate[bot] 4d28a8ff44
chore(deps): update nx to v15.2.4 (#170)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-01 03:12:40 +00:00
renovate[bot] 106a1c7b27
chore(deps): update dependency @types/node to v16.18.4 (#169)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-01 03:09:17 +00:00
renovate[bot] 8c0eeec260
chore(deps): update nx to v15.2.3 (#168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 04:10:03 +00:00
renovate[bot] 67f7fd752e
chore(deps): update eslint (#132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-28 20:55:54 +00:00
renovate[bot] 77636d1727
chore(deps): update dependency prettier to v2.8.0 (#166)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-23 09:19:08 +00:00
Todd Baert bd8312418f
feat: flagd-web provider (#142)
Signed-off-by: James-Milligan <james@omnant.co.uk>
Co-authored-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: James-Milligan <james@omnant.co.uk>
Co-authored-by: James-Milligan <james@omnant.co.uk>
2022-11-21 14:58:23 -05:00
renovate[bot] 78dd3ea8cf
chore(deps): update nx to v15.2.1 (#162)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-19 05:41:54 +00:00
renovate[bot] 0ecedce0c8
chore(deps): update nx to v15.2.0 (#161)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-18 01:04:51 +00:00
renovate[bot] 74dbe76580
fix(deps): update dependency @protobuf-ts/grpc-transport to v2.8.2 (#160)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 16:18:07 -05:00
renovate[bot] 2653d28b15
chore(deps): update nx to v15.1.1 (#159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 20:25:36 +00:00
renovate[bot] cdf79705f1
chore(deps): update bufbuild/buf-setup-action action to v1 (#147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-15 17:59:46 -05:00
renovate[bot] 06e6c90396
chore(deps): update nx to v15.1.0 (#133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-15 22:58:19 +00:00
renovate[bot] bb01ab6563
chore(deps): update dependency typescript to v4.9.3 (#157)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-15 22:55:15 +00:00
renovate[bot] 565a42738f
chore(deps): update amannn/action-semantic-pull-request action to v5 (#146)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-14 17:36:48 -05:00
renovate[bot] 40d6d77790
chore(deps): update nx to v15 (major) (#153)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-14 17:08:01 -05:00
renovate[bot] 7e578d9450
chore(deps): update nrwl/nx-set-shas action to v3 (#152)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 12:53:59 -05:00
renovate[bot] 829f985f12
chore(deps): update dependency ts-node to v10.9.1 (#130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 17:33:09 +00:00
renovate[bot] 7f1676e315
chore(deps): update dependency typescript to v4.8.4 (#131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 17:28:51 +00:00
renovate[bot] 3fec9a0e6d
chore(deps): update bufbuild/buf-setup-action action to v0.7.0 (#128)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 12:25:07 -05:00
Michael Beemer c418234052
chore: Improve Renovate config (#150)
Improve Renovate config

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-11-10 12:22:48 -05:00
renovate[bot] 202ed9585b
chore(deps): update dependency ts-jest to v27.1.5 (#127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 17:12:42 +00:00
renovate[bot] f03571e10d
chore(deps): update dependency axios-mock-adapter to v1.21.2 (#126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 11:49:06 -05:00
renovate[bot] dd24aba5d8
chore(deps): update dependency @opentelemetry/api to v1.3.0 (#144)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 11:23:57 -05:00
renovate[bot] 3d8873f240
chore(deps): update types (#134)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 10:54:42 -05:00
renovate[bot] fbc1ada353
chore(deps): update actions/checkout action to v3 (#145)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 09:54:47 -05:00
renovate[bot] 37c94825f5
fix(deps): update dependency @grpc/grpc-js to v1.7.3 (#135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 09:45:24 -05:00
renovate[bot] 78f6db5eae
fix(deps): update dependency tslib to v2.4.1 (#143)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 09:23:53 -05:00
renovate[bot] e2490d904b
fix(deps): update dependency @protobuf-ts/grpc-transport to v2.8.1 (#140)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-09 16:02:51 -05:00
John Rowley ed4c8ad896
docs: fixed broken links in docs (#141)
Signed-off-by: John Rowley <johnrowleyster@gmail.com>
2022-10-29 12:36:38 -04:00
renovate[bot] c0cef52239
chore(deps): pin dependencies (#139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-19 22:07:39 -04:00
github-actions[bot] f0b7704cfe
chore: release main (#138)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-10-19 15:09:12 -04:00
Michael Beemer 245f02441d
chore!: update OpenFeature SDK version (#137)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-10-19 15:07:03 -04:00
renovate[bot] 8358a9cc84
chore(deps): update dependency @openfeature/js-sdk to v0.5.1 (#124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-14 15:51:57 -04:00
renovate[bot] f1d09c5a59
chore(deps): update dependency prettier to v2.7.1 (#129)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-14 15:48:50 -04:00
renovate[bot] e686bca6df
chore(deps): pin dependencies (#123)
fix(deps): pin dependencies

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-14 12:35:33 -04:00
renovate[bot] 0d73c5ade9
chore: Configure Renovate (#113)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-14 11:53:26 -04:00
Todd Baert b062dbe33d
chore: Update issue templates 2022-10-12 12:01:38 -04:00
Todd Baert cba46503d1
Update issue templates 2022-10-12 11:04:38 -04:00
Todd Baert 4aa8d49e3c
chore: improve dependencies contributing.md section (#118)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-10-12 10:51:12 -04:00
Todd Baert 8b9872254a
chore: update CONTRIBUTING (#117)
* chore: update CONTRIBUTING.md
2022-10-06 15:28:44 -04:00
Todd Baert 321ac0936c
chore: add CONTRIBUTING.md (#116)
* chore: add CONTRIBUTING.md
2022-10-05 16:50:05 -04:00
github-actions[bot] 8e41930f7b
chore: release main (#115)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-10-03 12:07:48 -04:00
Todd Baert f9e9a55ad5
feat!: migrate to sdk 0.5.0 (#114)
* feat!: migrate to sdk 0.5.0
2022-10-03 11:49:14 -04:00
github-actions[bot] 9af8e1c3e8
chore: release main (#111)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-09-22 07:26:32 -04:00
Todd Baert ea05b49309
fix: improved errors, handle undefined context props (#110)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-22 07:25:13 -04:00
github-actions[bot] 31f81e72c8
chore: release main (#103)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-09-20 16:05:53 -04:00
Todd Baert 2558d8025a
chore: change node -> js in readmes (#109)
change node -> js in readmes

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-20 16:03:35 -04:00
Michael Beemer fcc360bffa
feat!: add support for environment variables (#107)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-09-20 15:51:02 -04:00
Todd Baert 60d6146e30
feat!: update to js-sdk (#108)
* feat!: update to js-sdk

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* update provider template with JsonValue

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-20 15:41:06 -04:00
Michael Beemer fd9ad5366b
chore: update provider template (#105)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-09-16 11:32:35 -04:00
Michael Beemer 326e65ad1e
feat: add Unix socket support (#97)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-09-16 11:00:45 -04:00
Todd Baert d6db366a6e
fix!: Fix object parsing, remove HTTP (#102)
* fix: Fix object parsing

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* JsonValue => JsonObject

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Handle undefined value

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Remove catch blocks and defaults from service

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-13 11:49:31 -04:00
github-actions[bot] 3bc87990f3
chore: release main (#94)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-08-15 14:44:01 -04:00
Michael Beemer 935ae80644
chore: remove alpha suffix (#95)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-08-15 14:31:36 -04:00
Michael Beemer a733102f52
fix!: set openfeature sdk min version to 0.2.0 (#93)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-08-15 13:01:53 -04:00
Michael Beemer 42adc7881f
refactor: update go feature flag provider to use not deprecated context transformer (#92)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-08-15 11:09:45 -04:00
Todd Baert 4e9e6eb77c
chore: Update release plz config (#90)
Update release plz config

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-10 14:06:56 -04:00
github-actions[bot] 31d1938257
chore: release main (#89)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-08-09 14:11:28 -04:00
Michael Beemer 991d992343
chore: fix reference to license (#84)
Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2022-08-09 14:09:09 -04:00
Michael Beemer 9e26840650
feat: change flagD default port to 8013 (#85)
Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2022-08-09 14:05:13 -04:00
Michael Beemer 9f871f1880
feat: update flagd provider to use float api (#87)
* update flagd provider to use float api
* commented on why a float was used

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2022-08-09 13:51:12 -04:00
github-actions[bot] 0f59d72c92
chore: release main (#81)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-29 10:42:25 -04:00
Michael Beemer f55bc20362
fix: Add buf dependency to release process (#80)
* Add buf to release please

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* add buf dependency note

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2022-07-29 10:41:24 -04:00
github-actions[bot] 4cc4a521c2
chore: release main (#79)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-29 10:25:09 -04:00
James Milligan 9d6cb86890
feat: flagd provider (#66)
* initial commit

Signed-off-by: James-Milligan <james@omnant.co.uk>

* nx format:write

Signed-off-by: James-Milligan <james@omnant.co.uk>

* udpated nxignore to exclude generated files

Signed-off-by: James-Milligan <james@omnant.co.uk>

* fixed linting issues

Signed-off-by: James-Milligan <james@omnant.co.uk>

* typo

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed nested .vscode

Signed-off-by: James-Milligan <james@omnant.co.uk>

* added typing to axios response objects

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed proto files from version control

Signed-off-by: James-Milligan <james@omnant.co.uk>

* required commit for nx run-command

Signed-off-by: James-Milligan <james@omnant.co.uk>

* actions

Signed-off-by: James-Milligan <james@omnant.co.uk>

* dependency updates + removal of cantextTransformer method

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed forked submodule

Signed-off-by: James-Milligan <james@omnant.co.uk>

* switched to open-feature/schemas

Signed-off-by: James-Milligan <james@omnant.co.uk>

* dependency sync

Signed-off-by: James-Milligan <james@omnant.co.uk>

* merge fixes

Signed-off-by: James-Milligan <james@omnant.co.uk>

* workspace fixes

Signed-off-by: James-Milligan <james@omnant.co.uk>

* merge fixes

Signed-off-by: James-Milligan <james@omnant.co.uk>

* merge fixes

Signed-off-by: James-Milligan <james@omnant.co.uk>

* merge fixes - added go to ci

Signed-off-by: James-Milligan <james@omnant.co.uk>

* merge fixes

Signed-off-by: James-Milligan <james@omnant.co.uk>

* updated go version in github action setup

Signed-off-by: James-Milligan <james@omnant.co.uk>

* squashed commits

Signed-off-by: James-Milligan <james@omnant.co.uk>

* buf setup test => avoid using go install buf

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed go setup + removed submodule issue => error

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed go setup + removed submodule issue => error

Signed-off-by: James-Milligan <james@omnant.co.uk>

* happy path unit tests

Signed-off-by: James-Milligan <james@omnant.co.uk>

* more unit tests + fixes

Signed-off-by: James-Milligan <james@omnant.co.uk>

* set noImplicitOverride to false

Signed-off-by: James-Milligan <james@omnant.co.uk>

* errorCode consolidation

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed tslint ignores and .vscode files

Signed-off-by: James-Milligan <james@omnant.co.uk>

* package.json cleanup

Signed-off-by: James-Milligan <james@omnant.co.uk>

* Update project.json

Signed-off-by: James Milligan <75740990+james-milligan@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Signed-off-by: James Milligan <75740990+james-milligan@users.noreply.github.com>

* PR updates

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed makefile

Signed-off-by: James-Milligan <james@omnant.co.uk>

* replaced hardcoded errorCode and reason values with imported values from nodesdk

Signed-off-by: James-Milligan <james@omnant.co.uk>

* style updates, simplification of provider construction, README updates

Signed-off-by: James-Milligan <james@omnant.co.uk>

* removed variant value "default_value" on error/default, simplified checkResponse function

Signed-off-by: James-Milligan <james@omnant.co.uk>

* Update README.md

Signed-off-by: James Milligan <75740990+james-milligan@users.noreply.github.com>

* Update libs/providers/flagd/package.json

Co-authored-by: Thomas Poignant <thomas.poignant@gmail.com>
Signed-off-by: James Milligan <75740990+james-milligan@users.noreply.github.com>

* added encodeURI to urls in http service

Signed-off-by: James-Milligan <james@omnant.co.uk>

* Update pushlish script

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* encodeURIComponent(flagKey) in http service

Signed-off-by: James-Milligan <james@omnant.co.uk>

* added protocol option

Signed-off-by: James-Milligan <james@omnant.co.uk>

* update README

Signed-off-by: James-Milligan <james@omnant.co.uk>

Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Thomas Poignant <thomas.poignant@gmail.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-07-27 16:07:15 -04:00
github-actions[bot] 7db7d310e0
chore: release main (#78)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-23 09:31:21 -04:00
Thomas Poignant 3e4ab861c1
fix: Peer dependencies error (#77)
* 0.0.1 is not released yet

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* bump to version 0.1.0

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2022-07-23 09:28:57 -04:00
github-actions[bot] 656a0ddb9d
chore: release main (#76)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-21 16:29:36 -04:00
Todd Baert abac20d29f
fix: change test name (#75)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-07-21 16:28:05 -04:00
github-actions[bot] 0b851755a2
chore: release main (#74)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-21 16:23:07 -04:00
Todd Baert 89c8cfe981
fix: shell scripts in templates (#73)
Fix script

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-07-21 16:21:13 -04:00
github-actions[bot] b4246781b1
chore: release main (#72)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-21 15:55:48 -04:00
Todd Baert 080fc4b3c9
fix: add test (#71)
* Use more portable scripting in publish

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fix: add test

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-07-21 15:54:21 -04:00
github-actions[bot] 333f9f035d
chore: release main (#70)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-21 15:09:08 -04:00
Thomas Poignant f32d3b0d8a
feat: Go feature flag provider (#64)
* New empty provider

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* Go Feature Flag provider initialisation.

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* Adding test to the go-feature-flag provider

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* linting issues

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* Edit readme

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* Moved dependencies to the root

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* Set inferred deps to dependencies in package.json

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* export go feature flag provider

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* Formatted and linted

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* Remove semicolon eslint exclusion rule

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* Add release please config

Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>

* chore: update to new publishing

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Co-authored-by: Michael Beemer <michael.beemer@dynatrace.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-07-21 15:06:07 -04:00
Todd Baert 2082f6fef0
chore: Use package, not build (#69)
chore: use package not build

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-07-21 14:42:32 -04:00
github-actions[bot] 5847db4e46
chore(main): release open-telemetry-hook 1.2.0-alpha (#68)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-21 12:05:55 -04:00
github-actions[bot] 5064531008
chore(main): release open-telemetry-hook 1.1.0-alpha (#67)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-07-21 12:00:50 -04:00
Michael Beemer 0dd780271f
feat: Update OTel hook to latest semantic convention (#65)
Signed-off-by: Michael Beemer <michael.beemer@dynatrace.com>
2022-07-21 11:55:21 -04:00
Todd Baert ec729f4051
Add release-plz (#63)
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-07-15 16:23:47 -04:00
537 changed files with 54917 additions and 22865 deletions

View File

@ -1,12 +1,21 @@
{
"root": true,
"ignorePatterns": ["**/*"],
"plugins": ["@nrwl/nx"],
"plugins": ["@nx"],
"extends": ["eslint:recommended", "plugin:prettier/recommended"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
"@nrwl/nx/enforce-module-boundaries": [
"@typescript-eslint/consistent-type-imports": [
"error",
{
"disallowTypeAnnotations": true,
"fixStyle": "separate-type-imports",
"prefer": "type-imports"
}
],
"@nx/enforce-module-boundaries": [
"error",
{
"enforceBuildableLibDependency": true,
@ -23,13 +32,42 @@
},
{
"files": ["*.ts", "*.tsx"],
"extends": ["plugin:@nrwl/nx/typescript"],
"rules": {}
"extends": ["plugin:@nx/typescript"],
"rules": {
"@typescript-eslint/no-extra-semi": "error",
"no-extra-semi": "off"
}
},
{
"files": ["*.js", "*.jsx"],
"extends": ["plugin:@nrwl/nx/javascript"],
"extends": ["plugin:@nx/javascript"],
"rules": {
"@typescript-eslint/no-extra-semi": "error",
"no-extra-semi": "off"
}
},
{
"files": "*.json",
"parser": "jsonc-eslint-parser",
"rules": {}
},
{
"files": ["*.json"],
"parser": "jsonc-eslint-parser",
"rules": {
"@nx/dependency-checks": [
"error",
{
"buildTargets": ["lint"],
"includeTransitiveDependencies": false,
"checkMissingDependencies": true,
"checkObsoleteDependencies": true,
"checkVersionMismatches": true,
"ignoredDependencies": ["jest-cucumber", "jest"],
"ignoredFiles": ["**/test/**", "**/tests/*", "**/spec/**", "**/*.spec.ts", "**/*.spec.js", "**/*.test.ts", "**/*.test.js", "**/jest.*"]
}
]
}
}
]
}

28
.github/ISSUE_TEMPLATE/add-hook.md vendored Normal file
View File

@ -0,0 +1,28 @@
---
name: Add hook
about: Add provider template
title: Add {my-behavior} hook
labels: enhancement
assignees: ''
---
# Add {my-behavior} hook
## Reasoning
I want to add a hook which performs {my-behavior}.
- it would be great if {my-behavior} could be included in some flag evaluations
- {my-behavior} would enable developers to be more productive!
- other reasons!
## Requirements:
- [ ] generate hook via [tooling](https://github.com/open-feature/js-sdk-contrib/blob/main/CONTRIBUTING.md#adding-a-module)
- [ ] implement `Hook` interface
- [ ] add tests
- [ ] complete README
- [ ] add the new provider to the [OpenFeature docs](https://github.com/open-feature/openfeature.dev/issues/new/choose)
Keep in mind the CONTRIBUTING guidelines: https://github.com/open-feature/js-sdk-contrib/blob/main/CONTRIBUTING.md

32
.github/ISSUE_TEMPLATE/add-provider.md vendored Normal file
View File

@ -0,0 +1,32 @@
---
name: Add provider
about: Add provider template
title: Add {my-system} provider
labels: enhancement
assignees: ''
---
# Add {my-system} provider
## Reasoning
I want to add an OpenFeature provider for {my-system}. This would be valuable because...
- everybody uses {my-system}!
- {my system} supports {these things}!
- other reasons!
## Requirements:
- [ ] generate provider via [tooling](https://github.com/open-feature/js-sdk-contrib/blob/main/CONTRIBUTING.md#adding-a-module)
- [ ] implement `Provider` interface
- [ ] add tests
- [ ] complete README
- [ ] add the new provider to the [OpenFeature docs](https://github.com/open-feature/openfeature.dev/issues/new/choose)
## Resources
- {useful-link}
Keep in mind the CONTRIBUTING guidelines: https://github.com/open-feature/js-sdk-contrib/blob/main/CONTRIBUTING.md

39
.github/component_owners.yml vendored Normal file
View File

@ -0,0 +1,39 @@
# Keep all in alphabetical order
components:
libs/hooks/open-telemetry:
- beeme1mr
- toddbaert
libs/providers/aws-ssm:
- gdegiorgio
libs/providers/config-cat:
- lukas-reining
- adams85
libs/providers/config-cat-web:
- lukas-reining
- adams85
libs/providers/env-var:
- beeme1mr
- toddbaert
libs/providers/flagd:
- beeme1mr
- toddbaert
libs/providers/flagd-web:
- beeme1mr
- toddbaert
libs/providers/go-feature-flag:
- thomaspoignant
libs/providers/go-feature-flag-web:
- thomaspoignant
libs/providers/launchdarkly-client:
- kinyoklion
- mateoc
- sago2k8
libs/providers/flipt:
- markphelps
libs/providers/flipt-web:
- markphelps
libs/providers/unleash-web:
- jarebudev
ignored-authors:
- renovate-bot

View File

@ -6,17 +6,50 @@ on:
branches: ['main']
jobs:
main:
lint-test-build:
# Needed for nx-set-shas when run on the main branch
permissions:
actions: read
contents: read
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 22.x, 24.x]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- uses: nrwl/nx-set-shas@v2
- run: npm ci
submodules: recursive
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- uses: nrwl/nx-set-shas@v3
# This line is needed for nx affected to work when CI is running on a PR
- run: git branch --track main origin/main || true
- run: npx nx workspace-lint
- run: if ! npx nx format:check ; then echo "Format check failed. Please run 'npx nx format:write'."; fi
- run: npx nx affected --target=lint --parallel=3
- run: npx nx affected --target=test --parallel=3 --ci --code-coverage
- run: npx nx affected --target=build --parallel=3
- run: npx nx affected --target=lint --parallel=3 --exclude=js-sdk-contrib
- run: npx nx affected --target=test --parallel=3 --ci --code-coverage --exclude=js-sdk-contrib
- run: npx nx affected --target=build --parallel=3 --exclude=js-sdk-contrib
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
submodules: recursive
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
cache: 'npm'
- name: Install
run: npm ci
- name: e2e
run: npm run e2e

18
.github/workflows/component-owners.yml vendored Normal file
View File

@ -0,0 +1,18 @@
name: 'Component Owners'
on:
pull_request_target:
permissions:
contents: read # to read changed files
issues: write # to read/write issue assignees
pull-requests: write # to read/write PR reviewers
jobs:
run_self:
runs-on: ubuntu-latest
name: Auto Assign Owners
steps:
- uses: dyladan/component-owners@58bd86e9814d23f1525d0a970682cead459fa783
with:
config-file: .github/component_owners.yml
repo-token: ${{ secrets.GITHUB_TOKEN }}

40
.github/workflows/lint-pr.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: 'Lint PR'
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
main:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5
id: lint_pr_title
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2
# When the previous steps fails, the workflow would stop. By adding this
# condition you can continue the execution with the populated error message.
if: always() && (steps.lint_pr_title.outputs.error_message != null)
with:
header: pr-title-lint-error
message: |
Hey there and thank you for opening this pull request! 👋🏼
We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted.
Details:
```
${{ steps.lint_pr_title.outputs.error_message }}
```
# Delete a previous comment when the issue has been resolved
- if: ${{ steps.lint_pr_title.outputs.error_message == null }}
uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2
with:
header: pr-title-lint-error
delete: true

50
.github/workflows/release-please.yml vendored Normal file
View File

@ -0,0 +1,50 @@
on:
push:
branches:
- main
name: Run Release Please
jobs:
release-please:
environment: publish
runs-on: ubuntu-latest
# Release-please creates a PR that tracks all changes
steps:
- uses: google-github-actions/release-please-action@db8f2c60ee802b3748b512940dde88eabd7b7e01 # v3
id: release
with:
command: manifest
token: ${{secrets.GITHUB_TOKEN}}
default-branch: main
# The logic below handles the npm publication:
- name: Checkout Repository
if: ${{ steps.release.outputs.releases_created }}
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
submodules: recursive
- uses: bufbuild/buf-setup-action@a47c93e0b1648d5651a065437926377d060baa99 # v1.50.0
with:
github_token: ${{ github.token }}
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
if: ${{ steps.release.outputs.releases_created }}
with:
node-version: 20
registry-url: "https://registry.npmjs.org"
- name: Build Packages
if: ${{ steps.release.outputs.releases_created }}
run: |
npm install
npm run package
# Release Please has already incremented versions and published tags, so we just
# need to publish all unpublished versions to NPM here
# Our scripts only publish versions that do not already exist.
- name: Publish to NPM
if: ${{ steps.release.outputs.releases_created }}
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
run: npm run publish

13
.gitignore vendored
View File

@ -33,7 +33,20 @@ npm-debug.log
yarn-error.log
testem.log
/typings
.nx
# System Files
.DS_Store
Thumbs.db
# generated files
proto
.nx
# yalc stuff
.yalc
yalc.lock
# Generated by @nx/js
.verdaccio

19
.gitmodules vendored Normal file
View File

@ -0,0 +1,19 @@
[submodule "libs/providers/flagd/schemas"]
path = libs/providers/flagd/schemas
url = https://github.com/open-feature/flagd-schemas.git
[submodule "libs/providers/flagd-web/schemas"]
path = libs/providers/flagd-web/schemas
url = https://github.com/open-feature/flagd-schemas.git
[submodule "libs/providers/flagd/spec"]
path = libs/providers/flagd/spec
url = https://github.com/open-feature/spec.git
[submodule "libs/shared/flagd-core/flagd-schemas"]
path = libs/shared/flagd-core/flagd-schemas
url = https://github.com/open-feature/flagd-schemas.git
[submodule "libs/shared/flagd-core/test-harness"]
path = libs/shared/flagd-core/test-harness
url = https://github.com/open-feature/flagd-testbed
branch = v2.8.0
[submodule "libs/shared/flagd-core/spec"]
path = libs/shared/flagd-core/spec
url = https://github.com/open-feature/spec

2
.nvmrc
View File

@ -1 +1 @@
16
20

View File

@ -2,3 +2,6 @@
/dist
/coverage
/.nx/cache
/.nx/workspace-data

View File

@ -1,3 +1,4 @@
{
"printWidth": 120,
"singleQuote": true
}

View File

@ -0,0 +1,25 @@
{
"libs/hooks/open-telemetry": "0.4.0",
"libs/providers/go-feature-flag": "0.7.8",
"libs/providers/flagd": "0.13.3",
"libs/providers/flagd-web": "0.7.3",
"libs/providers/env-var": "0.3.1",
"libs/providers/config-cat": "0.7.6",
"libs/providers/launchdarkly-client": "0.3.2",
"libs/providers/go-feature-flag-web": "0.2.6",
"libs/shared/flagd-core": "1.1.0",
"libs/shared/ofrep-core": "1.0.1",
"libs/providers/ofrep": "0.2.1",
"libs/providers/ofrep-web": "0.3.3",
"libs/providers/flipt": "0.1.3",
"libs/providers/flagsmith-client": "0.1.3",
"libs/providers/flipt-web": "0.1.5",
"libs/providers/multi-provider": "0.1.2",
"libs/providers/multi-provider-web": "0.0.3",
"libs/providers/growthbook-client": "0.1.2",
"libs/providers/config-cat-web": "0.1.6",
"libs/shared/config-cat-core": "0.1.1",
"libs/providers/unleash-web": "0.1.1",
"libs/providers/growthbook": "0.1.2",
"libs/providers/aws-ssm": "0.1.3"
}

View File

@ -1,8 +0,0 @@
{
"recommendations": [
"nrwl.angular-console",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"firsttris.vscode-jest-runner"
]
}

6
CODEOWNERS Normal file
View File

@ -0,0 +1,6 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence
#
# Managed by Peribolos: https://github.com/open-feature/community/blob/main/config/open-feature/sdk-javascript/workgroup.yaml
#
* @open-feature/sdk-javascript-maintainers @open-feature/maintainers

49
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,49 @@
# Contributing
## System Requirements
node 16+, npm 8+ are recommended.
## Compilation target(s)
We target `es2015`, and require all modules to publish both ES-modules and CommonJS modules. The generators described below will configure this automatically.
## Adding a module
The project is a monorepo that uses NX to manage it's modules.
The project has some NX generators for creating [hooks](https://openfeature.dev/docs/reference/concepts/hooks) and [providers](https://openfeature.dev/docs/reference/concepts/provider).
`npm run generate-hook` <- generates a hook module
`npm run generate-provider` <- generates a provider module
The script will create the basic code scaffolding, and infrastructure to publish the artifact.
## Documentation
Any published modules must have documentation in their root directory, explaining the basic purpose of the module as well as installation and usage instructions.
Instructions for how to develop a module should also be included (required system dependencies, instructions for testing locally, etc).
## Testing
Any published modules must have reasonable test coverage.
The NX scaffolding will generate stub tests for you when you create your project.
Use `npm run test` to test the entire project.
Use `npx nx test {MODULE NAME}` to test just a single module.
Module names can be listed using `npx nx show projects`.
## Releases
This repo uses _Release Please_ to release packages.
Release Please sets up a running PR that tracks all changes for the library components, and maintains the versions according to [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/), generated when [PRs are merged](https://github.com/amannn/action-semantic-pull-request).
When Release Please's running PR is merged, any changed artifacts are published.
Breaking changes should be identified by using a semantic PR title.
## Dependencies
Keep dependencies to a minimum, especially non-dev dependencies.
The JS-SDK should be a _peer dependency_ of your module.
Run `npm run package`, and then verify the dependencies in `dist/libs/{MODULE_PATH}/package.json` are appropriate.
Keep in mind, though one version of the JS-SDK is used for all modules in testing, each module may have a different peer-dependency requirement for the JS-SDK (e.g: one module may require ^1.2.0 while another might require ^1.4.0).
Be sure to properly express the JS-SDK peer dependency version your module requires.

View File

@ -1,15 +1,24 @@
# OpenFeature Node Contributions
# OpenFeature JS Contributions
![Experimental](https://img.shields.io/badge/experimental-breaking%20changes%20allowed-yellow)
![Alpha](https://img.shields.io/badge/alpha-release-red)
This repository is intended for OpenFeature contributions which are not included in the [OpenFeature SDK](https://github.com/open-feature/node-sdk).
This repository is intended for OpenFeature contributions which are not included in the [OpenFeature SDK](https://github.com/open-feature/js-sdk).
The project includes:
- [Providers](./libs/providers)
- [Hooks](./libs/hooks)
## Contributing
Interested in contributing? Great, we'd love your help! To get started, take a look at the [CONTRIBUTING](CONTRIBUTING.md) guide.
## Useful links
* For more information on OpenFeature, visit [openfeature.dev](https://openfeature.dev)
* For help or feedback on this project, join us on [Slack][slack] or create a [GitHub issue][github-issue].
## License
Apache 2.0 - See [LICENSE](./license) for more information.
[Apache License 2.0](LICENSE)
[github-issue]: https://github.com/open-feature/js-sdk-contrib/issues/new/choose
[slack]: https://cloud-native.slack.com/archives/C0344AANLA1

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
assets/aws-ssm/search.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/aws-ssm/ssm-menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

3
assets/package.json Normal file
View File

@ -0,0 +1,3 @@
{
"module": "commonjs"
}

3
babel.config.json Normal file
View File

@ -0,0 +1,3 @@
{
"babelrcRoots": ["*"]
}

View File

@ -1,5 +1,5 @@
import { getJestProjects } from '@nrwl/jest';
import { getJestProjectsAsync } from '@nx/jest';
export default {
projects: getJestProjects(),
};
export default async () => ({
projects: await getJestProjectsAsync(),
});

View File

@ -1,3 +1,3 @@
const nxPreset = require('@nrwl/jest/preset').default;
const nxPreset = require('@nx/jest/preset').default;
module.exports = { ...nxPreset };

View File

@ -1,6 +1,6 @@
# OpenFeature NodeJS Hooks
# OpenFeature JavaScript Hooks
Hooks are a mechanism whereby application developers can add arbitrary behavior to flag evaluation. They operate similarly to middleware in many web frameworks. Please see the [spec](https://github.com/open-feature/spec/blob/main/specification/flag-evaluation/hooks.md) for more details.
Hooks are a mechanism whereby application developers can add arbitrary behavior to flag evaluation. They operate similarly to middleware in many web frameworks. Please see the [spec](https://openfeature.dev/docs/specification/sections/hooks) for more details.
## Add a new hook

View File

@ -0,0 +1,209 @@
# Changelog
## [0.4.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.3.0...open-telemetry-hooks-v0.4.0) (2024-03-25)
### ⚠ BREAKING CHANGES
* update OpenFeature SDK peer ([#798](https://github.com/open-feature/js-sdk-contrib/issues/798))
### ✨ New Features
* update OpenFeature SDK peer ([#798](https://github.com/open-feature/js-sdk-contrib/issues/798)) ([ebd16b9](https://github.com/open-feature/js-sdk-contrib/commit/ebd16b9630bcc6b253a7061a144e8d476cd8b586))
### 🧹 Chore
* address lint issues ([#642](https://github.com/open-feature/js-sdk-contrib/issues/642)) ([bbd9aee](https://github.com/open-feature/js-sdk-contrib/commit/bbd9aee896dc4a0817f379b799a1b8d331ee76c6))
* fix lint issues and bump server sdk version ([#715](https://github.com/open-feature/js-sdk-contrib/issues/715)) ([bd57177](https://github.com/open-feature/js-sdk-contrib/commit/bd571770f3a1a01bd62663dc3473273449f96c5c))
## [0.3.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.2.4...open-telemetry-hooks-v0.3.0) (2023-10-11)
### ⚠ BREAKING CHANGES
* use @openfeature/server-sdk peer ([#608](https://github.com/open-feature/js-sdk-contrib/issues/608))
### 🐛 Bug Fixes
* packaging issues impacting babel/react ([#596](https://github.com/open-feature/js-sdk-contrib/issues/596)) ([0446eab](https://github.com/open-feature/js-sdk-contrib/commit/0446eab5cf9b45ce7de251b4f5feb8df1d499b9d))
### 🧹 Chore
* update nx, run migrations ([#552](https://github.com/open-feature/js-sdk-contrib/issues/552)) ([a88d8fc](https://github.com/open-feature/js-sdk-contrib/commit/a88d8fc097789fd7f56011e6ebb66070f52c6e56))
* use @openfeature/server-sdk peer ([#608](https://github.com/open-feature/js-sdk-contrib/issues/608)) ([ae3732a](https://github.com/open-feature/js-sdk-contrib/commit/ae3732a9068f684517db28ea1ae27b29a35e6b16))
## [0.2.4](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.2.3...open-telemetry-hooks-v0.2.4) (2023-08-03)
### ✨ New Features
* add custom attrs to traces ([#520](https://github.com/open-feature/js-sdk-contrib/issues/520)) ([28fbd12](https://github.com/open-feature/js-sdk-contrib/commit/28fbd12f206202ab626d30bdfbbe5b04e75626af))
## [0.2.3](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.2.2...open-telemetry-hooks-v0.2.3) (2023-07-28)
### ✨ New Features
* custom attribute support ([#499](https://github.com/open-feature/js-sdk-contrib/issues/499)) ([c2deddf](https://github.com/open-feature/js-sdk-contrib/commit/c2deddf288e1eb9e55d56ea58eba5f8afb8cccc5))
## [0.2.2](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.2.1...open-telemetry-hooks-v0.2.2) (2023-07-19)
### 🐛 Bug Fixes
* otel metric semantic convs ([#475](https://github.com/open-feature/js-sdk-contrib/issues/475)) ([6febfb0](https://github.com/open-feature/js-sdk-contrib/commit/6febfb0d09849fb4a722af2c1333ebb4b2386684))
## [0.2.1](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.2.0...open-telemetry-hooks-v0.2.1) (2023-07-12)
### 🐛 Bug Fixes
* update README to remove deprecation ([#465](https://github.com/open-feature/js-sdk-contrib/issues/465)) ([ac5b91b](https://github.com/open-feature/js-sdk-contrib/commit/ac5b91b60eaf39b31fc9899f20ad4fef792a50e8))
## [0.2.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hooks-v0.1.0...open-telemetry-hooks-v0.2.0) (2023-07-12)
### ⤴️ Upgrade Instructions
* if upgrading from `@openfeature/open-telemetry-hook`, import and use `TracingHook` instead of `OpenTelemetryHook`
### ✨ New Features
* add metrics hook ([#448](https://github.com/open-feature/js-sdk-contrib/issues/448)) ([131db1e](https://github.com/open-feature/js-sdk-contrib/commit/131db1ef47962288e1c7723e768296307d06837b))
## [6.0.2](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v6.0.1...open-telemetry-hook-v6.0.2) (2023-07-12)
### ⚠️ Deprecation warning
* the `@openfeature/open-telemetry-hook` package is now deprecated, use `@openfeature/open-telemetry-hooks` instead
### 🧹 Chore
* correct publish executor ([#378](https://github.com/open-feature/js-sdk-contrib/issues/378)) ([395ed18](https://github.com/open-feature/js-sdk-contrib/commit/395ed186de8811ae249f087821fdbdf8899c19f2))
* **deps:** update dependency @openfeature/js-sdk to v1.3.1 ([#409](https://github.com/open-feature/js-sdk-contrib/issues/409)) ([5bf9932](https://github.com/open-feature/js-sdk-contrib/commit/5bf993208825e3e1eded941decc067125935d912))
* migrate to nx 16 ([#366](https://github.com/open-feature/js-sdk-contrib/issues/366)) ([7a9c201](https://github.com/open-feature/js-sdk-contrib/commit/7a9c201d16fd7f070a1bcd2e359487ba6e7b78d7))
### 🐛 Bug Fixes
* deprecate otel hook ([#449](https://github.com/open-feature/js-sdk-contrib/issues/449)) ([58aa56c](https://github.com/open-feature/js-sdk-contrib/commit/58aa56cdc13ee5177b64a0a1e126b9d31c8d5756))
## [6.0.1](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v6.0.0...open-telemetry-hook-v6.0.1) (2023-01-19)
### Bug Fixes
* module issues with types ([#212](https://github.com/open-feature/js-sdk-contrib/issues/212)) ([d2b97dd](https://github.com/open-feature/js-sdk-contrib/commit/d2b97dd24c952661ce08724a84e4b312860a9211))
## [6.0.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v5.1.1...open-telemetry-hook-v6.0.0) (2022-12-29)
### ⚠ BREAKING CHANGES
* update the otel hook to be spec compliant ([#179](https://github.com/open-feature/js-sdk-contrib/issues/179))
### Features
* update the otel hook to be spec compliant ([#179](https://github.com/open-feature/js-sdk-contrib/issues/179)) ([69b2163](https://github.com/open-feature/js-sdk-contrib/commit/69b2163be1729697ebc69549aa8fb6e61be1b94d))
### Bug Fixes
* fix ESM and web polyfills issue ([#201](https://github.com/open-feature/js-sdk-contrib/issues/201)) ([acee6e1](https://github.com/open-feature/js-sdk-contrib/commit/acee6e1817a7846251f456455a7218bf98efb00e))
## [5.1.1](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v5.1.0...open-telemetry-hook-v5.1.1) (2022-12-09)
### Bug Fixes
* correct dependencies ([#182](https://github.com/open-feature/js-sdk-contrib/issues/182)) ([16cbe42](https://github.com/open-feature/js-sdk-contrib/commit/16cbe421d6255bd95a78c3914890a63adcce831e))
## [5.0.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v4.0.0...open-telemetry-hook-v5.0.0) (2022-10-19)
### ⚠ BREAKING CHANGES
* update OpenFeature SDK version (#137)
### Miscellaneous Chores
* update OpenFeature SDK version ([#137](https://github.com/open-feature/js-sdk-contrib/issues/137)) ([245f024](https://github.com/open-feature/js-sdk-contrib/commit/245f02441d62f7f42627174737943f1556a6a326))
## [4.0.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v3.0.0...open-telemetry-hook-v4.0.0) (2022-10-03)
### ⚠ BREAKING CHANGES
* migrate to sdk 0.5.0 (#114)
### Features
* migrate to sdk 0.5.0 ([#114](https://github.com/open-feature/js-sdk-contrib/issues/114)) ([f9e9a55](https://github.com/open-feature/js-sdk-contrib/commit/f9e9a55ad5a16e99bb169fdf1a8d11c959520f7b))
## [3.0.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v2.0.0...open-telemetry-hook-v3.0.0) (2022-09-20)
### ⚠ BREAKING CHANGES
* update to js-sdk (#108)
### Features
* update to js-sdk ([#108](https://github.com/open-feature/js-sdk-contrib/issues/108)) ([60d6146](https://github.com/open-feature/js-sdk-contrib/commit/60d6146e30d3ca547e940c3ba441d80fd75d886d))
## [2.0.0](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v1.2.3...open-telemetry-hook-v2.0.0) (2022-08-15)
### ⚠ BREAKING CHANGES
* set openfeature sdk min version to 0.2.0 (#93)
### Features
* Update OTel hook to latest semantic convention ([#65](https://github.com/open-feature/js-sdk-contrib/issues/65)) ([0dd7802](https://github.com/open-feature/js-sdk-contrib/commit/0dd780271fabd7aa7c503a48bff75bebb63b46b9))
### Bug Fixes
* add test ([#71](https://github.com/open-feature/js-sdk-contrib/issues/71)) ([080fc4b](https://github.com/open-feature/js-sdk-contrib/commit/080fc4b3c926728361ad34d6763df7bc2d5ab023))
* change test name ([#75](https://github.com/open-feature/js-sdk-contrib/issues/75)) ([abac20d](https://github.com/open-feature/js-sdk-contrib/commit/abac20d29f54865a18662baacaeb60fb5d8c8175))
* set openfeature sdk min version to 0.2.0 ([#93](https://github.com/open-feature/js-sdk-contrib/issues/93)) ([a733102](https://github.com/open-feature/js-sdk-contrib/commit/a733102f523f9289fdce356a342828cc2e020f48))
* shell scripts in templates ([#73](https://github.com/open-feature/js-sdk-contrib/issues/73)) ([89c8cfe](https://github.com/open-feature/js-sdk-contrib/commit/89c8cfe981348376995f50ca757299077249544e))
## [1.2.3-alpha](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v1.2.2-alpha...open-telemetry-hook-v1.2.3-alpha) (2022-07-21)
### Bug Fixes
* change test name ([#75](https://github.com/open-feature/js-sdk-contrib/issues/75)) ([abac20d](https://github.com/open-feature/js-sdk-contrib/commit/abac20d29f54865a18662baacaeb60fb5d8c8175))
## [1.2.2-alpha](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v1.2.1-alpha...open-telemetry-hook-v1.2.2-alpha) (2022-07-21)
### Bug Fixes
* shell scripts in templates ([#73](https://github.com/open-feature/js-sdk-contrib/issues/73)) ([89c8cfe](https://github.com/open-feature/js-sdk-contrib/commit/89c8cfe981348376995f50ca757299077249544e))
## [1.2.1-alpha](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v1.2.0-alpha...open-telemetry-hook-v1.2.1-alpha) (2022-07-21)
### Bug Fixes
* add test ([#71](https://github.com/open-feature/js-sdk-contrib/issues/71)) ([080fc4b](https://github.com/open-feature/js-sdk-contrib/commit/080fc4b3c926728361ad34d6763df7bc2d5ab023))
## [1.2.0-alpha](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v1.1.0-alpha...open-telemetry-hook-v1.2.0-alpha) (2022-07-21)
### Features
* Update OTel hook to latest semantic convention ([#65](https://github.com/open-feature/js-sdk-contrib/issues/65)) ([0dd7802](https://github.com/open-feature/js-sdk-contrib/commit/0dd780271fabd7aa7c503a48bff75bebb63b46b9))
## [1.1.0-alpha](https://github.com/open-feature/js-sdk-contrib/compare/open-telemetry-hook-v1.0.6-alpha...open-telemetry-hook-v1.1.0-alpha) (2022-07-21)
### Features
* Update OTel hook to latest semantic convention ([#65](https://github.com/open-feature/js-sdk-contrib/issues/65)) ([0dd7802](https://github.com/open-feature/js-sdk-contrib/commit/0dd780271fabd7aa7c503a48bff75bebb63b46b9))

View File

@ -1,23 +1,98 @@
# NodeJS OpenTelemetry Hook for OpenFeature
# OpenTelemetry Hooks
![Experimental](https://img.shields.io/badge/experimental-breaking%20changes%20allowed-yellow)
The OpenTelemetry hooks for OpenFeature provide a [spec compliant][otel-spec] way to automatically add feature flag evaluation information to traces and metrics.
Since feature flags are dynamic and affect runtime behavior, its important to collect relevant feature flag telemetry signals.
These can be used to determine the impact a feature has on application behavior, enabling enhanced observability use cases, such as A/B testing or progressive feature releases.
## Installation
```
$ npm install @openfeature/open-telemetry-hook
$ npm install @openfeature/open-telemetry-hooks
```
Required peer dependencies
### Peer dependencies
Confirm that the following peer dependencies are installed.
```
$ npm install @openfeature/nodejs-sdk @opentelemetry/api
$ npm install @openfeature/server-sdk @opentelemetry/api
```
## Building
## Hooks
### TracingHook
This hook adds a [span event](https://opentelemetry.io/docs/concepts/signals/traces/#span-events) for each feature flag evaluation.
### MetricsHook
This hook performs metric collection by tapping into various hook stages. Below are the metrics are extracted by this hook:
- `feature_flag.evaluation_requests_total`
- `feature_flag.evaluation_success_total`
- `feature_flag.evaluation_error_total`
- `feature_flag.evaluation_active_count`
## Usage
OpenFeature provides various ways to register hooks. The location that a hook is registered affects when the hook is run.
It's recommended to register both the `TracingHook` and `MetricsHook` globally in most situations, but it's possible to only enable the hook on specific clients.
You should **never** register these hooks both globally and on a client.
More information on hooks can be found in the [OpenFeature documentation][hook-concept].
### Register Globally
The `TracingHook` and `MetricsHook` can both be set on the OpenFeature singleton.
This will ensure that every flag evaluation will always generate the applicable telemetry signals.
```typescript
import { OpenFeature } from '@openfeature/server-sdk';
import { TracingHook } from '@openfeature/open-telemetry-hooks';
OpenFeature.addHooks(new TracingHook());
```
### Register Per Client
The `TracingHook` and `MetricsHook` can both be set on an individual client. This should only be done if it wasn't set globally and other clients shouldn't use this hook.
Setting the hook on the client will ensure that every flag evaluation performed by this client will always generate the applicable telemetry signals.
```typescript
import { OpenFeature } from '@openfeature/server-sdk';
import { MetricsHook } from '@openfeature/open-telemetry-hooks';
const client = OpenFeature.getClient('my-app');
client.addHooks(new MetricsHook());
```
### Custom Attributes
Custom attributes can be extracted from [flag metadata](https://openfeature.dev/specification/types#flag-metadata) by supplying a `attributeMapper` in the `MetricsHookOptions` or `TracingHookOptions`.
In the case of the `MetricsHook`, these will be added to the `feature_flag.evaluation_success_total` metric.
The `TracingHook` adds them as [span event attributes](https://opentelemetry.io/docs/instrumentation/js/manual/#span-events).
```typescript
// configure an attributeMapper function for a custom property
const attributeMapper: AttributeMapper = (flagMetadata) => {
return {
myCustomAttribute: flagMetadata.someFlagMetadataField,
};
};
const metricsHook = new MetricsHook({ attributeMapper });
const tracingHook = new TracingHook({ attributeMapper });
```
## Development
### Building
Run `nx package hooks-open-telemetry` to build the library.
## Running unit tests
### Running unit tests
Run `nx test hooks-open-telemetry` to execute the unit tests via [Jest](https://jestjs.io).
[otel-spec]: https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/feature-flags/
[hook-concept]: https://openfeature.dev/docs/reference/concepts/hooks

View File

@ -1,3 +1,3 @@
{
"presets": ["minify"]
}
"presets": [["minify", { "builtIns": false }]]
}

View File

@ -2,14 +2,13 @@
export default {
displayName: 'hooks-open-telemetry',
preset: '../../../jest.preset.js',
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json',
},
},
transform: {
'^.+\\.[tj]s$': 'ts-jest',
'^.+\\.[tj]s$': [
'ts-jest',
{
tsconfig: '<rootDir>/tsconfig.spec.json',
},
],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../../coverage/libs/hooks/open-telemetry',
};

View File

@ -1,5 +1,21 @@
{
"name": "@openfeature/open-telemetry-hook",
"version": "0.0.1",
"type": "commonjs"
"name": "@openfeature/open-telemetry-hooks",
"version": "0.4.0",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/open-feature/js-sdk-contrib.git",
"directory": "libs/hooks/open-telemetry"
},
"publishConfig": {
"access": "public"
},
"scripts": {
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
"current-version": "echo $npm_package_version"
},
"peerDependencies": {
"@openfeature/server-sdk": "^1.13.0",
"@opentelemetry/api": ">=1.3.0"
}
}

View File

@ -1,21 +1,28 @@
{
"name": "hooks-open-telemetry",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/hooks/open-telemetry/src",
"projectType": "library",
"targets": {
"package": {
"executor": "@nrwl/web:rollup",
"executor": "@nx/rollup:rollup",
"outputs": ["{options.outputPath}"],
"options": {
"project": "libs/hooks/open-telemetry/package.json",
"outputPath": "dist/libs/hooks/open-telemetry",
"entryFile": "libs/hooks/open-telemetry/src/index.ts",
"tsConfig": "libs/hooks/open-telemetry/tsconfig.lib.json",
"compiler": "babel",
"compiler": "tsc",
"generateExportsField": true,
"umdName": "OpenTelemetry",
"external": ["typescript"],
"external": "all",
"format": ["cjs", "esm"],
"assets": [
{
"glob": "package.json",
"input": "./assets",
"output": "./src/"
},
{
"glob": "LICENSE",
"input": "./",
@ -30,7 +37,7 @@
}
},
"build": {
"executor": "@nrwl/js:tsc",
"executor": "@nx/js:tsc",
"outputs": ["{options.outputPath}"],
"options": {
"outputPath": "dist/libs/hooks/open-telemetry",
@ -40,30 +47,28 @@
}
},
"publish": {
"executor": "@nrwl/workspace:run-commands",
"executor": "nx:run-commands",
"options": {
"command": "node tools/scripts/publish.mjs hooks-open-telemetry {args.ver} {args.tag}"
"command": "npm run publish-if-not-exists",
"cwd": "dist/libs/hooks/open-telemetry"
},
"dependsOn": [
{
"projects": "self",
"target": "package"
}
]
},
"lint": {
"executor": "@nrwl/linter:eslint",
"outputs": ["{options.outputFile}"],
"options": {
"lintFilePatterns": ["libs/hooks/open-telemetry/**/*.ts"]
}
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
},
"test": {
"executor": "@nrwl/jest:jest",
"outputs": ["coverage/libs/hooks/open-telemetry"],
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/libs/hooks/open-telemetry"],
"options": {
"jestConfig": "libs/hooks/open-telemetry/jest.config.ts",
"passWithNoTests": true
"codeCoverage": true,
"coverageDirectory": "coverage/libs/hooks/open-telemetry"
}
}
},

View File

@ -1 +1,2 @@
export * from './lib/open-telemetry-hook';
export * from './lib/traces';
export * from './lib/metrics';

View File

@ -0,0 +1,16 @@
// see: https://opentelemetry.io/docs/specs/otel/logs/semantic_conventions/feature-flags/
export const FEATURE_FLAG = 'feature_flag';
export const EXCEPTION_ATTR = 'exception';
export const ACTIVE_COUNT_NAME = `${FEATURE_FLAG}.evaluation_active_count`;
export const REQUESTS_TOTAL_NAME = `${FEATURE_FLAG}.evaluation_requests_total`;
export const SUCCESS_TOTAL_NAME = `${FEATURE_FLAG}.evaluation_success_total`;
export const ERROR_TOTAL_NAME = `${FEATURE_FLAG}.evaluation_error_total`;
export type EvaluationAttributes = { [key: `${typeof FEATURE_FLAG}.${string}`]: string | undefined };
export type ExceptionAttributes = { [EXCEPTION_ATTR]: string };
export const KEY_ATTR: keyof EvaluationAttributes = `${FEATURE_FLAG}.key`;
export const PROVIDER_NAME_ATTR: keyof EvaluationAttributes = `${FEATURE_FLAG}.provider_name`;
export const VARIANT_ATTR: keyof EvaluationAttributes = `${FEATURE_FLAG}.variant`;
export const REASON_ATTR: keyof EvaluationAttributes = `${FEATURE_FLAG}.reason`;

View File

@ -0,0 +1 @@
export * from './metrics-hook';

View File

@ -0,0 +1,331 @@
import type { BeforeHookContext, EvaluationDetails, HookContext } from '@openfeature/server-sdk';
import { StandardResolutionReasons } from '@openfeature/server-sdk';
import opentelemetry from '@opentelemetry/api';
import type { DataPoint, ScopeMetrics } from '@opentelemetry/sdk-metrics';
import { MeterProvider, MetricReader } from '@opentelemetry/sdk-metrics';
import {
ACTIVE_COUNT_NAME,
ERROR_TOTAL_NAME,
KEY_ATTR,
PROVIDER_NAME_ATTR,
REASON_ATTR,
REQUESTS_TOTAL_NAME,
SUCCESS_TOTAL_NAME,
VARIANT_ATTR,
} from '../conventions';
import { MetricsHook } from './metrics-hook';
import type { AttributeMapper } from '../otel-hook';
// no-op "in-memory" reader
class InMemoryMetricReader extends MetricReader {
protected onShutdown(): Promise<void> {
return Promise.resolve();
}
protected onForceFlush(): Promise<void> {
return Promise.resolve();
}
}
describe(MetricsHook.name, () => {
let reader: MetricReader;
beforeAll(() => {
reader = new InMemoryMetricReader();
const provider = new MeterProvider();
provider.addMetricReader(reader);
// Set this MeterProvider to be global to the app being instrumented.
const successful = opentelemetry.metrics.setGlobalMeterProvider(provider);
expect(successful).toBeTruthy();
});
describe('before stage', () => {
it('should increment evaluation_active_count and evaluation_requests_total and set attrs', async () => {
const FLAG_KEY = 'before-test-key';
const PROVIDER_NAME = 'before-provider-name';
const mockHookContext: BeforeHookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as BeforeHookContext;
const hook = new MetricsHook();
hook.before(mockHookContext);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
ACTIVE_COUNT_NAME,
0,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME,
),
).toBeTruthy();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
REQUESTS_TOTAL_NAME,
0,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME,
),
).toBeTruthy();
});
});
describe('after stage', () => {
describe('variant set', () => {
it('should increment evaluation_success_total and set attrs with variant = variant', async () => {
const FLAG_KEY = 'after-test-key';
const PROVIDER_NAME = 'after-provider-name';
const VARIANT = 'one';
const VALUE = 1;
const mockHookContext: HookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as HookContext;
const evaluationDetails: EvaluationDetails<number> = {
variant: VARIANT,
value: VALUE,
reason: StandardResolutionReasons.STATIC,
} as EvaluationDetails<number>;
const hook = new MetricsHook();
hook.after(mockHookContext, evaluationDetails);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
SUCCESS_TOTAL_NAME,
0,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME &&
point.attributes[VARIANT_ATTR] === VARIANT &&
point.attributes[REASON_ATTR] === StandardResolutionReasons.STATIC,
),
).toBeTruthy();
});
it('should increment evaluation_success_total and set attrs with variant = value', async () => {
const FLAG_KEY = 'after-test-key';
const PROVIDER_NAME = 'after-provider-name';
const VALUE = 1;
const mockHookContext: HookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as HookContext;
const evaluationDetails: EvaluationDetails<number> = {
value: VALUE,
reason: StandardResolutionReasons.STATIC,
} as EvaluationDetails<number>;
const hook = new MetricsHook();
hook.after(mockHookContext, evaluationDetails);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
SUCCESS_TOTAL_NAME,
1,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME &&
point.attributes[VARIANT_ATTR] === VALUE.toString() &&
point.attributes[REASON_ATTR] === StandardResolutionReasons.STATIC,
),
).toBeTruthy();
});
});
describe('attributeMapper defined', () => {
it('should run attribute mapper', async () => {
const FLAG_KEY = 'after-test-key';
const PROVIDER_NAME = 'after-provider-name';
const VARIANT = 'two';
const VALUE = 2;
const CUSTOM_ATTR_KEY_1 = 'custom1';
const CUSTOM_ATTR_KEY_2 = 'custom2';
const CUSTOM_ATTR_VALUE_1 = 'value1';
const CUSTOM_ATTR_VALUE_2 = 500;
const mockHookContext: HookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as HookContext;
const evaluationDetails: EvaluationDetails<number> = {
flagKey: FLAG_KEY,
variant: VARIANT,
value: VALUE,
reason: StandardResolutionReasons.STATIC,
flagMetadata: {
[CUSTOM_ATTR_KEY_1]: CUSTOM_ATTR_VALUE_1,
[CUSTOM_ATTR_KEY_2]: CUSTOM_ATTR_VALUE_2,
},
} as EvaluationDetails<number>;
// configure a mapper for our custom properties
const attributeMapper: AttributeMapper = (flagMetadata) => {
return {
[CUSTOM_ATTR_KEY_1]: flagMetadata[CUSTOM_ATTR_KEY_1],
[CUSTOM_ATTR_KEY_2]: flagMetadata[CUSTOM_ATTR_KEY_2],
};
};
const hook = new MetricsHook({ attributeMapper });
hook.after(mockHookContext, evaluationDetails);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
SUCCESS_TOTAL_NAME,
2,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME &&
point.attributes[VARIANT_ATTR] === VARIANT &&
point.attributes[REASON_ATTR] === StandardResolutionReasons.STATIC &&
// custom attributes should be present
point.attributes[CUSTOM_ATTR_KEY_1] === CUSTOM_ATTR_VALUE_1 &&
point.attributes[CUSTOM_ATTR_KEY_2] === CUSTOM_ATTR_VALUE_2,
),
).toBeTruthy();
});
});
describe('attributeMapper throws', () => {
it('should no-op', async () => {
const FLAG_KEY = 'after-test-key';
const PROVIDER_NAME = 'after-provider-name';
const VARIANT = 'three';
const VALUE = 3;
const mockHookContext: HookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as HookContext;
const evaluationDetails: EvaluationDetails<number> = {
flagKey: FLAG_KEY,
variant: VARIANT,
value: VALUE,
reason: StandardResolutionReasons.STATIC,
} as EvaluationDetails<number>;
// configure a mapper that throws
const attributeMapper: AttributeMapper = () => {
throw new Error('fake error');
};
const hook = new MetricsHook({ attributeMapper });
hook.after(mockHookContext, evaluationDetails);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
SUCCESS_TOTAL_NAME,
3,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME &&
point.attributes[VARIANT_ATTR] === VARIANT &&
point.attributes[REASON_ATTR] === StandardResolutionReasons.STATIC,
),
).toBeTruthy();
});
});
});
describe('finally stage', () => {
it('should decrement evaluation_success_total and set attrs', async () => {
const FLAG_KEY = 'finally-test-key';
const PROVIDER_NAME = 'finally-provider-name';
const mockHookContext: HookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as HookContext;
const hook = new MetricsHook();
hook.finally(mockHookContext);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
ACTIVE_COUNT_NAME,
1,
(point) =>
point.value === -1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME,
),
).toBeTruthy();
});
});
describe('error stage', () => {
it('should decrement evaluation_success_total and set attrs', async () => {
const FLAG_KEY = 'error-test-key';
const PROVIDER_NAME = 'error-provider-name';
const ERROR_MESSAGE = 'error message';
const error = new Error(ERROR_MESSAGE);
const mockHookContext: HookContext = {
flagKey: FLAG_KEY,
providerMetadata: {
name: PROVIDER_NAME,
},
} as HookContext;
const hook = new MetricsHook();
hook.error(mockHookContext, error);
const result = await reader.collect();
expect(
hasDataPointMatching(
result.resourceMetrics.scopeMetrics,
ERROR_TOTAL_NAME,
0,
(point) =>
point.value === 1 &&
point.attributes[KEY_ATTR] === FLAG_KEY &&
point.attributes[PROVIDER_NAME_ATTR] === PROVIDER_NAME,
),
).toBeTruthy();
});
});
});
const hasDataPointMatching = (
scopeMetrics: ScopeMetrics[],
metricName: string,
dataPointIndex: number,
dataPointMatcher: (dataPoint: DataPoint<number>) => boolean,
) => {
const found = scopeMetrics.find((sm) =>
sm.metrics.find((m) => {
const point = m.dataPoints[dataPointIndex] as DataPoint<number>;
if (point) {
return m.descriptor.name === metricName && dataPointMatcher(point);
}
}),
);
if (!found) {
throw Error('Unable to find matching datapoint');
}
return found;
};

View File

@ -0,0 +1,106 @@
import type { BeforeHookContext, Logger } from '@openfeature/server-sdk';
import {
StandardResolutionReasons,
type EvaluationDetails,
type FlagValue,
type Hook,
type HookContext,
} from '@openfeature/server-sdk';
import type { Attributes, Counter, UpDownCounter } from '@opentelemetry/api';
import { ValueType, metrics } from '@opentelemetry/api';
import type { EvaluationAttributes, ExceptionAttributes } from '../conventions';
import {
ACTIVE_COUNT_NAME,
ERROR_TOTAL_NAME,
EXCEPTION_ATTR,
KEY_ATTR,
PROVIDER_NAME_ATTR,
REASON_ATTR,
REQUESTS_TOTAL_NAME,
SUCCESS_TOTAL_NAME,
VARIANT_ATTR,
} from '../conventions';
import type { OpenTelemetryHookOptions } from '../otel-hook';
import { OpenTelemetryHook } from '../otel-hook';
type ErrorEvaluationAttributes = EvaluationAttributes & ExceptionAttributes;
export type MetricsHookOptions = OpenTelemetryHookOptions;
const METER_NAME = 'js.openfeature.dev';
const ACTIVE_DESCRIPTION = 'active flag evaluations counter';
const REQUESTS_DESCRIPTION = 'feature flag evaluation request counter';
const SUCCESS_DESCRIPTION = 'feature flag evaluation success counter';
const ERROR_DESCRIPTION = 'feature flag evaluation error counter';
/**
* A hook that adds conventionally-compliant metrics to feature flag evaluations.
*
* See {@link https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/feature-flags/}
*/
export class MetricsHook extends OpenTelemetryHook implements Hook {
protected name = MetricsHook.name;
private readonly evaluationActiveUpDownCounter: UpDownCounter<EvaluationAttributes>;
private readonly evaluationRequestCounter: Counter<EvaluationAttributes>;
private readonly evaluationSuccessCounter: Counter<EvaluationAttributes | Attributes>;
private readonly evaluationErrorCounter: Counter<ErrorEvaluationAttributes>;
constructor(
options?: MetricsHookOptions,
private readonly logger?: Logger,
) {
super(options, logger);
const meter = metrics.getMeter(METER_NAME);
this.evaluationActiveUpDownCounter = meter.createUpDownCounter(ACTIVE_COUNT_NAME, {
description: ACTIVE_DESCRIPTION,
valueType: ValueType.INT,
});
this.evaluationRequestCounter = meter.createCounter(REQUESTS_TOTAL_NAME, {
description: REQUESTS_DESCRIPTION,
valueType: ValueType.INT,
});
this.evaluationSuccessCounter = meter.createCounter(SUCCESS_TOTAL_NAME, {
description: SUCCESS_DESCRIPTION,
valueType: ValueType.INT,
});
this.evaluationErrorCounter = meter.createCounter(ERROR_TOTAL_NAME, {
description: ERROR_DESCRIPTION,
valueType: ValueType.INT,
});
}
before(hookContext: BeforeHookContext) {
const attributes: EvaluationAttributes = {
[KEY_ATTR]: hookContext.flagKey,
[PROVIDER_NAME_ATTR]: hookContext.providerMetadata.name,
};
this.evaluationActiveUpDownCounter.add(1, attributes);
this.evaluationRequestCounter.add(1, attributes);
}
after(hookContext: Readonly<HookContext<FlagValue>>, evaluationDetails: EvaluationDetails<FlagValue>) {
this.evaluationSuccessCounter.add(1, {
[KEY_ATTR]: hookContext.flagKey,
[PROVIDER_NAME_ATTR]: hookContext.providerMetadata.name,
[VARIANT_ATTR]: evaluationDetails.variant ?? evaluationDetails.value?.toString(),
[REASON_ATTR]: evaluationDetails.reason ?? StandardResolutionReasons.UNKNOWN,
...this.safeAttributeMapper(evaluationDetails?.flagMetadata || {}),
});
}
error(hookContext: Readonly<HookContext<FlagValue>>, error: unknown) {
this.evaluationErrorCounter.add(1, {
[KEY_ATTR]: hookContext.flagKey,
[PROVIDER_NAME_ATTR]: hookContext.providerMetadata.name,
[EXCEPTION_ATTR]: (error as Error)?.message || 'Unknown error',
});
}
finally(hookContext: Readonly<HookContext<FlagValue>>) {
this.evaluationActiveUpDownCounter.add(-1, {
[KEY_ATTR]: hookContext.flagKey,
[PROVIDER_NAME_ATTR]: hookContext.providerMetadata.name,
});
}
}

View File

@ -1,150 +0,0 @@
import { EvaluationDetails, HookContext } from '@openfeature/nodejs-sdk';
const setAttributes = jest.fn();
const setAttribute = jest.fn();
const recordException = jest.fn();
const end = jest.fn();
const startSpan = jest.fn(() => ({
setAttributes,
setAttribute,
recordException,
end,
}));
const getTracer = jest.fn(() => ({ startSpan }));
jest.mock('@opentelemetry/api', () => ({
trace: {
getTracer,
},
}));
// Import must be after the mocks
import { OpenTelemetryHook } from './open-telemetry-hook';
describe('OpenTelemetry Hooks', () => {
const hookContext: HookContext = {
flagKey: 'testFlagKey',
clientMetadata: {
name: 'testClient',
},
providerMetadata: {
name: 'testProvider',
},
context: {},
defaultValue: true,
flagValueType: 'boolean',
};
let otelHook: OpenTelemetryHook;
beforeEach(() => {
otelHook = new OpenTelemetryHook('test');
});
afterEach(() => {
jest.clearAllMocks();
});
it('should use the same span with all the hooks', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
};
const setSpanMapSpy = jest.spyOn(otelHook['spanMap'], 'set');
const testError = new Error();
otelHook.before(hookContext);
expect(setSpanMapSpy).toBeCalled();
otelHook.after(hookContext, evaluationDetails);
expect(setAttribute).toBeCalledWith('feature_flag.evaluated.value', 'true');
otelHook.error(hookContext, testError);
expect(recordException).toBeCalledWith(testError);
otelHook.finally(hookContext);
expect(end).toBeCalled();
});
describe('before hook', () => {
it('should start a new span', () => {
expect(otelHook.before(hookContext)).toBeUndefined();
expect(getTracer).toBeCalled();
expect(startSpan).toBeCalledWith('feature flag - boolean');
expect(setAttributes).toBeCalledWith({
'feature_flag.client.name': 'testClient',
'feature_flag.client.version': undefined,
'feature_flag.flag_key': 'testFlagKey',
'feature_flag.provider.name': 'testProvider',
});
expect(otelHook['spanMap'].has(hookContext)).toBeTruthy;
});
});
describe('after hook', () => {
it('should set the variant as a span attribute', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
variant: 'enabled',
}; // The before hook should
otelHook.before(hookContext);
otelHook.after(hookContext, evaluationDetails);
expect(setAttribute).toBeCalledWith(
'feature_flag.evaluated.variant',
'enabled'
);
});
it('should set the value as a span attribute', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
}; // The before hook should
otelHook.before(hookContext);
otelHook.after(hookContext, evaluationDetails);
expect(setAttribute).toBeCalledWith(
'feature_flag.evaluated.value',
'true'
);
});
});
describe('error hook', () => {
const testError = new Error();
it('should not call recordException because the span is undefined', () => {
otelHook.error(hookContext, testError);
expect(otelHook['spanMap'].has(hookContext)).toBeFalsy;
expect(recordException).not.toBeCalledWith(testError);
});
it('should call recordException with a test error', () => {
otelHook.before(hookContext);
otelHook.error(hookContext, testError);
expect(otelHook['spanMap'].has(hookContext)).toBeTruthy;
expect(recordException).toBeCalledWith(testError);
});
});
describe('finally hook', () => {
it('should not call end because the span is undefined', () => {
otelHook.finally(hookContext);
expect(otelHook['spanMap'].has(hookContext)).toBeFalsy;
expect(end).not.toBeCalled();
});
it('should call end to finish the span', () => {
otelHook.before(hookContext);
otelHook.finally(hookContext);
expect(otelHook['spanMap'].has(hookContext)).toBeTruthy;
expect(end).toBeCalled();
});
});
});

View File

@ -1,66 +0,0 @@
import {
Hook,
HookContext,
EvaluationDetails,
FlagValue,
} from '@openfeature/nodejs-sdk';
import { Span, Tracer, trace } from '@opentelemetry/api';
const SpanProperties = Object.freeze({
FLAG_KEY: 'feature_flag.flag_key',
CLIENT_NAME: 'feature_flag.client.name',
CLIENT_VERSION: 'feature_flag.client.version',
PROVIDER_NAME: 'feature_flag.provider.name',
VARIANT: 'feature_flag.evaluated.variant',
VALUE: 'feature_flag.evaluated.value',
});
export class OpenTelemetryHook implements Hook {
private spanMap = new WeakMap<HookContext, Span>();
private tracer: Tracer;
constructor(name: string, version?: string) {
this.tracer = trace.getTracer(name, version);
}
before(hookContext: HookContext) {
const span = this.tracer.startSpan(
`feature flag - ${hookContext.flagValueType}`
);
span.setAttributes({
[SpanProperties.FLAG_KEY]: hookContext.flagKey,
[SpanProperties.CLIENT_NAME]: hookContext.clientMetadata.name,
[SpanProperties.CLIENT_VERSION]: hookContext.clientMetadata.version,
[SpanProperties.PROVIDER_NAME]: hookContext.providerMetadata.name,
});
this.spanMap.set(hookContext, span);
}
after(
hookContext: HookContext,
evaluationDetails: EvaluationDetails<FlagValue>
) {
if (evaluationDetails.variant) {
this.spanMap
.get(hookContext)
?.setAttribute(SpanProperties.VARIANT, evaluationDetails.variant);
} else {
this.spanMap
.get(hookContext)
?.setAttribute(
SpanProperties.VALUE,
JSON.stringify(evaluationDetails.value)
);
}
}
error(hookContext: HookContext, err: Error) {
this.spanMap.get(hookContext)?.recordException(err);
}
finally(hookContext: HookContext) {
this.spanMap.get(hookContext)?.end();
}
}

View File

@ -0,0 +1,30 @@
import type { FlagMetadata, Logger } from '@openfeature/server-sdk';
import type { Attributes } from '@opentelemetry/api';
export type AttributeMapper = (flagMetadata: FlagMetadata) => Attributes;
export type OpenTelemetryHookOptions = {
/**
* A function that maps OpenFeature flag metadata values to OpenTelemetry attributes.
*/
attributeMapper?: AttributeMapper;
};
/**
* Base class that does some logging and safely wraps the AttributeMapper.
*/
export abstract class OpenTelemetryHook {
protected safeAttributeMapper: AttributeMapper;
protected abstract name: string;
constructor(options?: OpenTelemetryHookOptions, logger?: Logger) {
this.safeAttributeMapper = (flagMetadata: FlagMetadata) => {
try {
return options?.attributeMapper?.(flagMetadata) || {};
} catch (err) {
logger?.debug(`${this.name}: error in attributeMapper, ${err.message}, ${err.stack}`);
return {};
}
};
}
}

View File

@ -0,0 +1 @@
export * from './tracing-hook';

View File

@ -0,0 +1,195 @@
import type { EvaluationDetails, HookContext } from '@openfeature/server-sdk';
const addEvent = jest.fn();
const recordException = jest.fn();
const getActiveSpan = jest.fn<unknown, unknown[]>(() => ({ addEvent, recordException }));
jest.mock('@opentelemetry/api', () => ({
trace: {
getActiveSpan,
},
}));
// Import must be after the mocks
import { TracingHook } from './tracing-hook';
describe('OpenTelemetry Hooks', () => {
const hookContext: HookContext = {
flagKey: 'testFlagKey',
clientMetadata: {
providerMetadata: {
name: 'fake',
},
name: 'testClient',
},
providerMetadata: {
name: 'testProvider',
},
context: {},
defaultValue: true,
flagValueType: 'boolean',
logger: console,
};
let tracingHook: TracingHook;
afterEach(() => {
jest.clearAllMocks();
});
describe('after stage', () => {
describe('no attribute mapper', () => {
beforeEach(() => {
tracingHook = new TracingHook();
});
it('should use the variant value on the span event', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
variant: 'enabled',
flagMetadata: {},
};
tracingHook.after(hookContext, evaluationDetails);
expect(addEvent).toBeCalledWith('feature_flag', {
'feature_flag.key': 'testFlagKey',
'feature_flag.provider_name': 'testProvider',
'feature_flag.variant': 'enabled',
});
});
it('should use a stringified value as the variant value on the span event', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
flagMetadata: {},
};
tracingHook.after(hookContext, evaluationDetails);
expect(addEvent).toBeCalledWith('feature_flag', {
'feature_flag.key': 'testFlagKey',
'feature_flag.provider_name': 'testProvider',
'feature_flag.variant': 'true',
});
});
it('should set the value without extra quotes if value is already a string', () => {
const evaluationDetails: EvaluationDetails<string> = {
flagKey: hookContext.flagKey,
value: 'already-string',
flagMetadata: {},
};
tracingHook.after(hookContext, evaluationDetails);
expect(addEvent).toBeCalledWith('feature_flag', {
'feature_flag.key': 'testFlagKey',
'feature_flag.provider_name': 'testProvider',
'feature_flag.variant': 'already-string',
});
});
it('should not call addEvent because there is no active span', () => {
getActiveSpan.mockReturnValueOnce(undefined);
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
variant: 'enabled',
flagMetadata: {},
};
tracingHook.after(hookContext, evaluationDetails);
expect(addEvent).not.toBeCalled();
});
});
describe('attribute mapper configured', () => {
describe('no error in mapper', () => {
beforeEach(() => {
tracingHook = new TracingHook({
attributeMapper: (flagMetadata) => {
return {
customAttr1: flagMetadata.metadata1,
customAttr2: flagMetadata.metadata2,
customAttr3: flagMetadata.metadata3,
};
},
});
});
it('should run the attribute mapper to add custom attributes, if set', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
variant: 'enabled',
flagMetadata: {
metadata1: 'one',
metadata2: 2,
metadata3: true,
},
};
tracingHook.after(hookContext, evaluationDetails);
expect(addEvent).toBeCalledWith('feature_flag', {
'feature_flag.key': 'testFlagKey',
'feature_flag.provider_name': 'testProvider',
'feature_flag.variant': 'enabled',
customAttr1: 'one',
customAttr2: 2,
customAttr3: true,
});
});
});
describe('error in mapper', () => {
beforeEach(() => {
tracingHook = new TracingHook({
attributeMapper: () => {
throw new Error('fake error');
},
});
});
it('should no-op', () => {
const evaluationDetails: EvaluationDetails<boolean> = {
flagKey: hookContext.flagKey,
value: true,
variant: 'enabled',
flagMetadata: {
metadata1: 'one',
metadata2: 2,
metadata3: true,
},
};
tracingHook.after(hookContext, evaluationDetails);
expect(addEvent).toBeCalledWith('feature_flag', {
'feature_flag.key': 'testFlagKey',
'feature_flag.provider_name': 'testProvider',
'feature_flag.variant': 'enabled',
});
});
});
});
});
describe('error stage', () => {
const testError = new Error();
it('should call recordException with a test error', () => {
tracingHook.error(hookContext, testError);
expect(recordException).toBeCalledWith(testError);
});
it('should not call recordException because there is no active span', () => {
getActiveSpan.mockReturnValueOnce(undefined);
tracingHook.error(hookContext, testError);
expect(recordException).not.toBeCalled();
});
});
});

View File

@ -0,0 +1,46 @@
import type { Hook, HookContext, EvaluationDetails, FlagValue, Logger } from '@openfeature/server-sdk';
import { trace } from '@opentelemetry/api';
import { FEATURE_FLAG, KEY_ATTR, PROVIDER_NAME_ATTR, VARIANT_ATTR } from '../conventions';
import type { OpenTelemetryHookOptions } from '../otel-hook';
import { OpenTelemetryHook } from '../otel-hook';
export type TracingHookOptions = OpenTelemetryHookOptions;
/**
* A hook that adds conventionally-compliant span events to feature flag evaluations.
*
* See {@link https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/feature-flags/}
*/
export class TracingHook extends OpenTelemetryHook implements Hook {
protected name = TracingHook.name;
constructor(options?: TracingHookOptions, logger?: Logger) {
super(options, logger);
}
after(hookContext: HookContext, evaluationDetails: EvaluationDetails<FlagValue>) {
const currentTrace = trace.getActiveSpan();
if (currentTrace) {
let variant = evaluationDetails.variant;
if (!variant) {
if (typeof evaluationDetails.value === 'string') {
variant = evaluationDetails.value;
} else {
variant = JSON.stringify(evaluationDetails.value);
}
}
currentTrace.addEvent(FEATURE_FLAG, {
[KEY_ATTR]: hookContext.flagKey,
[PROVIDER_NAME_ATTR]: hookContext.providerMetadata.name,
[VARIANT_ATTR]: variant,
...this.safeAttributeMapper(evaluationDetails.flagMetadata),
});
}
}
error(_: HookContext, err: Error) {
trace.getActiveSpan()?.recordException(err);
}
}

View File

@ -1,6 +1,6 @@
# OpenFeature NodeJS Providers
# OpenFeature JavaScript Providers
Providers are responsible for performing flag evaluation. They provide an abstraction between the underlying flag management system and OpenFeature itself. This allows providers to be changed without requiring a major code refactor. Please see the [spec](https://github.com/open-feature/spec/blob/main/specification/provider/providers.md) for more details.
Providers are responsible for performing flag evaluation. They provide an abstraction between the underlying flag management system and OpenFeature itself. This allows providers to be changed without requiring a major code refactor. Please see the [spec](https://openfeature.dev/docs/specification/sections/providers) for more details.
## Add a new provider

View File

@ -0,0 +1,30 @@
{
"extends": ["../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.json"],
"parser": "jsonc-eslint-parser",
"rules": {
"@nx/dependency-checks": [
"error",
{
"ignoredFiles": ["{projectRoot}/eslint.config.{js,cjs,mjs}"]
}
]
}
}
]
}

View File

@ -0,0 +1,23 @@
# Changelog
## [0.1.3](https://github.com/open-feature/js-sdk-contrib/compare/aws-ssm-provider-v0.1.2...aws-ssm-provider-v0.1.3) (2025-06-04)
### 🐛 Bug Fixes
* **deps:** update dependency @aws-sdk/client-ssm to v3.787.0 ([#1278](https://github.com/open-feature/js-sdk-contrib/issues/1278)) ([afae82c](https://github.com/open-feature/js-sdk-contrib/commit/afae82c1a1472d33b884105edaac2976c19e7423))
* **deps:** update dependency lru-cache to v11.1.0 ([#1279](https://github.com/open-feature/js-sdk-contrib/issues/1279)) ([a80f5ce](https://github.com/open-feature/js-sdk-contrib/commit/a80f5ce3d7a6e74e762a75ba8fa9f5b70ca2a179))
## [0.1.2](https://github.com/open-feature/js-sdk-contrib/compare/aws-ssm-provider-v0.1.1...aws-ssm-provider-v0.1.2) (2025-03-27)
### ✨ New Features
* **aws-ssm:** add decryption support for `SecureString` parameters ([#1241](https://github.com/open-feature/js-sdk-contrib/issues/1241)) ([043be44](https://github.com/open-feature/js-sdk-contrib/commit/043be44de1442b89876e9857478afe619fcf0b04))
## [0.1.1](https://github.com/open-feature/js-sdk-contrib/compare/aws-ssm-provider-v0.1.0...aws-ssm-provider-v0.1.1) (2025-03-20)
### ✨ New Features
* **aws-ssm:** implement AWS SSM provider ([#1221](https://github.com/open-feature/js-sdk-contrib/issues/1221)) ([819a247](https://github.com/open-feature/js-sdk-contrib/commit/819a247c41112c2873aa025ac0abd3c62eb53aca))

View File

@ -0,0 +1,73 @@
# AWS SSM Provider
## What is AWS SSM?
AWS Systems Manager (SSM) is a service provided by Amazon Web Services (AWS) that enables users to manage and automate operational tasks across their AWS infrastructure. One of its key components is AWS Systems Manager Parameter Store, which allows users to store, retrieve, and manage configuration data and secrets securely.
SSM Parameter Store can be used to manage application configuration settings, database connection strings, API keys, and other sensitive information. It provides integration with AWS Identity and Access Management (IAM) to control access and encryption through AWS Key Management Service (KMS).
The aws-ssm provider for OpenFeature allows applications to fetch feature flag configurations from AWS SSM Parameter Store, enabling centralized and dynamic configuration management.
## Installation
```
$ npm install @openfeature/aws-ssm-provider
```
## Set AWS Provider
```
OpenFeature.setProvider(
new AwsSsmProvider({
ssmClientConfig: {
region: 'eu-west-1', // Change this to your desired AWS region
// You can setup your aws credentials here or it will be automatically retrieved from env vars
// See https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html
},
// Use an LRUCache for improve performance and optimize AWS SDK Calls to SSM (cost awareness)
cacheOpts: {
enabled: true, // Enable caching
size: 1, // Cache size
ttl: 10, // Time-to-live in seconds
},
})
);
```
# AWS SSM Provider Configuration
## AwsSsmProviderConfig
| Property | Type | Description | Default |
|-----------------|--------------------|----------------------------------------------|---------|
| `ssmClientConfig` | `SSMClientConfig` | AWS SSM Client configuration options. | See [here](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/ssm/) |
| `enableDecryption` | `boolean` | Enable decryption for SecureString parameters | false |
| `cacheOpts` | `LRUCacheConfig` | Configuration for the local LRU cache. | See below |
## LRUCacheConfig
| Property | Type | Description | Default |
|-----------|--------|------------------------------------------------|---------|
| `enabled` | `boolean` | Whether caching is enabled. | `false` |
| `ttl` | `number` | Time-to-live (TTL) for cached items (in ms). | `300000` (5 minutes) |
| `size` | `number` | Maximum number of items in the cache. | `1000` |
## Retrieve Feature Flag!
Open your AWS Management Console and go to AWS System Manager service
![SSM-Menu](../../../assets/aws-ssm/search.png)
Go to Parameter Store
![Parameter-Store](../../../assets/aws-ssm/ssm-menu.png)
Create a new SSM Param called 'my-feature-flag' in your AWS Account and then retrieve it via OpenFeature Client!
![Create-Param](../../../assets/aws-ssm/create-param.png)
```
const featureFlags = OpenFeature.getClient();
const flagValue = await featureFlags.getBooleanValue('my-feature-flag', false);
console.log(`Feature flag value: ${flagValue}`);
```

View File

@ -0,0 +1,3 @@
{
"presets": [["minify", { "builtIns": false }]]
}

View File

@ -0,0 +1,16 @@
/* eslint-disable */
export default {
displayName: 'aws-ssm',
preset: '../../../jest.preset.js',
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json',
},
},
transform: {
'^.+\\.[tj]s$': 'ts-jest',
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../../coverage/libs/providers/aws-ssm',
testEnvironment: 'node',
};

1514
libs/providers/aws-ssm/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,23 @@
{
"name": "@openfeature/aws-ssm-provider",
"version": "0.1.3",
"dependencies": {
"@aws-sdk/client-ssm": "^3.759.0",
"lru-cache": "^11.0.2",
"tslib": "^2.3.0"
},
"main": "./src/index.js",
"typings": "./src/index.d.ts",
"scripts": {
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
"current-version": "echo $npm_package_version"
},
"license": "Apache-2.0",
"peerDependencies": {
"@openfeature/server-sdk": "^1.17.0"
},
"devDependencies": {
"@smithy/types": "^4.1.0",
"aws-sdk-client-mock": "^4.1.0"
}
}

View File

@ -0,0 +1,64 @@
{
"name": "providers-aws-ssm",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/providers/aws-ssm/src",
"projectType": "library",
"targets": {
"publish": {
"executor": "nx:run-commands",
"options": {
"command": "npm run publish-if-not-exists",
"cwd": "dist/libs/providers/aws-ssm"
},
"dependsOn": [
{
"target": "package"
}
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"jestConfig": "libs/providers/aws-ssm/jest.config.ts"
}
},
"package": {
"executor": "@nx/rollup:rollup",
"outputs": ["{options.outputPath}"],
"options": {
"project": "libs/providers/aws-ssm/package.json",
"outputPath": "dist/libs/providers/aws-ssm",
"entryFile": "libs/providers/aws-ssm/src/index.ts",
"tsConfig": "libs/providers/aws-ssm/tsconfig.lib.json",
"compiler": "tsc",
"generateExportsField": true,
"umdName": "aws-ssm",
"external": "all",
"format": ["cjs", "esm"],
"assets": [
{
"glob": "package.json",
"input": "./assets",
"output": "./src/"
},
{
"glob": "LICENSE",
"input": "./",
"output": "./"
},
{
"glob": "README.md",
"input": "./libs/providers/aws-ssm",
"output": "./"
}
]
}
}
},
"tags": []
}

View File

@ -0,0 +1 @@
export * from './lib/aws-ssm-provider';

View File

@ -0,0 +1,86 @@
import { OpenFeature } from '@openfeature/server-sdk';
import { AwsSsmProvider } from '../lib/aws-ssm-provider';
import type { GetParameterCommandOutput } from '@aws-sdk/client-ssm';
import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';
import { mockClient } from 'aws-sdk-client-mock';
const ssmMock = mockClient(SSMClient);
describe('AWS SSM Provider E2E', () => {
const featureFlags = OpenFeature.getClient();
OpenFeature.setProvider(
new AwsSsmProvider({
ssmClientConfig: {
region: 'eu-west-1',
},
cacheOpts: {
enabled: true,
size: 1,
ttl: 10,
},
}),
);
describe('when using OpenFeature with AWS SSM Provider to retrieve a boolean', () => {
it('should use AWS SSM in order to retrieve the value', async () => {
const res: GetParameterCommandOutput = {
Parameter: {
Name: '/lambda/loggingEnabled',
Value: 'true',
},
$metadata: {},
};
ssmMock.on(GetParameterCommand).resolves(res);
const flagValue = await featureFlags.getBooleanValue('/lambda/loggingEnabled', false);
expect(flagValue).toBe(true);
});
});
describe('when using OpenFeature with AWS SSM Provider to retrieve a string', () => {
it('should use AWS SSM in order to retrieve the value', async () => {
const res: GetParameterCommandOutput = {
Parameter: {
Name: '/lambda/logLevel',
Value: 'ERROR',
},
$metadata: {},
};
ssmMock.on(GetParameterCommand).resolves(res);
const flagValue = await featureFlags.getStringValue('/lambda/logLevel', 'INFO');
expect(flagValue).toBe('ERROR');
});
});
describe('when using OpenFeature with AWS SSM Provider to retrieve a number', () => {
it('should use AWS SSM in order to retrieve the value', async () => {
const res: GetParameterCommandOutput = {
Parameter: {
Name: '/lambda/logRetentionInDays',
Value: '3',
},
$metadata: {},
};
ssmMock.on(GetParameterCommand).resolves(res);
const flagValue = await featureFlags.getNumberValue('/lambda/logRetentionInDays', 14);
expect(flagValue).toBe(3);
});
});
describe('when using OpenFeature with AWS SSM Provider to retrieve an object', () => {
it('should use AWS SSM in order to retrieve the value', async () => {
const res: GetParameterCommandOutput = {
Parameter: {
Name: '/lambda/env',
Value: JSON.stringify({
PROCESS_NUMBER: 3,
SOME_ENV_VAR: 4,
}),
},
$metadata: {},
};
ssmMock.on(GetParameterCommand).resolves(res);
const flagValue = await featureFlags.getObjectValue('/lambda/env', {});
expect(flagValue).toStrictEqual({
PROCESS_NUMBER: 3,
SOME_ENV_VAR: 4,
});
});
});
});

View File

@ -0,0 +1,203 @@
import type { SSMClientConfig } from '@aws-sdk/client-ssm';
import { AwsSsmProvider } from './aws-ssm-provider';
import { ErrorCode, StandardResolutionReasons } from '@openfeature/core';
const MOCK_SSM_CLIENT_CONFIG: SSMClientConfig = {
region: 'us-east-1',
credentials: {
accessKeyId: 'accessKeyId',
secretAccessKey: 'secretAccessKey',
},
};
const provider: AwsSsmProvider = new AwsSsmProvider({
ssmClientConfig: MOCK_SSM_CLIENT_CONFIG,
cacheOpts: {
enabled: true,
ttl: 1000,
size: 100,
},
});
describe(AwsSsmProvider.name, () => {
describe(AwsSsmProvider.prototype.resolveBooleanEvaluation.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe('when flag is cached', () => {
afterAll(() => {
provider.cache.clear();
});
it('should return cached value', async () => {
provider.cache.set('test', {
value: true,
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveBooleanEvaluation('test', false, {})).resolves.toEqual({
value: true,
reason: StandardResolutionReasons.CACHED,
});
});
});
describe('when flag is not cached', () => {
describe('when getBooleanValue rejects', () => {
it('should return default value', async () => {
jest.spyOn(provider.service, 'getBooleanValue').mockRejectedValue(new Error());
await expect(provider.resolveBooleanEvaluation('test', false, {})).resolves.toEqual({
value: false,
reason: StandardResolutionReasons.ERROR,
errorMessage: 'An unknown error occurred',
errorCode: ErrorCode.GENERAL,
});
});
});
describe('when getBooleanValue resolves', () => {
it('should resolve with expected value', async () => {
jest.spyOn(provider.service, 'getBooleanValue').mockResolvedValue({
value: true,
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveBooleanEvaluation('test', false, {})).resolves.toEqual({
value: true,
reason: StandardResolutionReasons.STATIC,
});
});
});
});
});
describe(AwsSsmProvider.prototype.resolveStringEvaluation.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe('when flag is cached', () => {
afterAll(() => {
provider.cache.clear();
});
it('should return cached value', async () => {
provider.cache.set('test', {
value: 'somestring',
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveStringEvaluation('test', 'default', {})).resolves.toEqual({
value: 'somestring',
reason: StandardResolutionReasons.CACHED,
});
});
});
describe('when flag is not cached', () => {
describe('when getStringValue rejects', () => {
it('should return default value', async () => {
jest.spyOn(provider.service, 'getStringValue').mockRejectedValue(new Error());
await expect(provider.resolveStringEvaluation('test', 'default', {})).resolves.toEqual({
value: 'default',
reason: StandardResolutionReasons.ERROR,
errorMessage: 'An unknown error occurred',
errorCode: ErrorCode.GENERAL,
});
});
});
describe('when getStringValue resolves', () => {
it('should resolve with expected value', async () => {
jest.spyOn(provider.service, 'getStringValue').mockResolvedValue({
value: 'somestring',
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveStringEvaluation('test', 'default', {})).resolves.toEqual({
value: 'somestring',
reason: StandardResolutionReasons.STATIC,
});
});
});
});
});
describe(AwsSsmProvider.prototype.resolveNumberEvaluation.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe('when flag is cached', () => {
afterAll(() => {
provider.cache.clear();
});
it('should return cached value', async () => {
provider.cache.set('test', {
value: 489,
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveNumberEvaluation('test', -1, {})).resolves.toEqual({
value: 489,
reason: StandardResolutionReasons.CACHED,
});
});
});
describe('when flag is not cached', () => {
describe('when getNumberValue rejects', () => {
it('should return default value', async () => {
jest.spyOn(provider.service, 'getNumberValue').mockRejectedValue(new Error());
await expect(provider.resolveNumberEvaluation('test', -1, {})).resolves.toEqual({
value: -1,
reason: StandardResolutionReasons.ERROR,
errorMessage: 'An unknown error occurred',
errorCode: ErrorCode.GENERAL,
});
});
});
describe('when getNumberValue resolves', () => {
it('should resolve with expected value', async () => {
jest.spyOn(provider.service, 'getNumberValue').mockResolvedValue({
value: 489,
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveNumberEvaluation('test', -1, {})).resolves.toEqual({
value: 489,
reason: StandardResolutionReasons.STATIC,
});
});
});
});
});
describe(AwsSsmProvider.prototype.resolveObjectEvaluation.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe('when flag is cached', () => {
afterAll(() => {
provider.cache.clear();
});
it('should return cached value', async () => {
provider.cache.set('test', {
value: { default: false },
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveObjectEvaluation('test', { default: true }, {})).resolves.toEqual({
value: { default: false },
reason: StandardResolutionReasons.CACHED,
});
});
});
describe('when flag is not cached', () => {
describe('when getObjectValue rejects', () => {
it('should return default value', async () => {
jest.spyOn(provider.service, 'getObjectValue').mockRejectedValue(new Error());
await expect(provider.resolveObjectEvaluation('test', { default: true }, {})).resolves.toEqual({
value: { default: true },
reason: StandardResolutionReasons.ERROR,
errorMessage: 'An unknown error occurred',
errorCode: ErrorCode.GENERAL,
});
});
});
describe('when getObjectValue resolves', () => {
it('should resolve with expected value', async () => {
jest.spyOn(provider.service, 'getObjectValue').mockResolvedValue({
value: { default: true },
reason: StandardResolutionReasons.STATIC,
});
await expect(provider.resolveObjectEvaluation('test', -1, {})).resolves.toEqual({
value: { default: true },
reason: StandardResolutionReasons.STATIC,
});
});
});
});
});
});

View File

@ -0,0 +1,146 @@
import type { EvaluationContext, Provider, JsonValue, ResolutionDetails } from '@openfeature/server-sdk';
import { StandardResolutionReasons, ErrorCode } from '@openfeature/server-sdk';
import { InternalServerError } from '@aws-sdk/client-ssm';
import type { AwsSsmProviderConfig } from './types';
import { SSMService } from './ssm-service';
import { Cache } from './cache';
export class AwsSsmProvider implements Provider {
metadata = {
name: AwsSsmProvider.name,
};
readonly runsOn = 'server';
readonly service: SSMService;
hooks = [];
cache: Cache;
constructor(config: AwsSsmProviderConfig) {
this.service = new SSMService(config.ssmClientConfig, config.enableDecryption);
this.cache = new Cache(config.cacheOpts);
}
async resolveBooleanEvaluation(
flagKey: string,
defaultValue: boolean,
context: EvaluationContext,
): Promise<ResolutionDetails<boolean>> {
const cachedValue = this.cache.get(flagKey);
if (cachedValue) {
return {
value: cachedValue.value,
reason: StandardResolutionReasons.CACHED,
};
}
try {
const res = await this.service.getBooleanValue(flagKey);
this.cache.set(flagKey, res);
return res;
} catch (err) {
let errMsg = 'An unknown error occurred';
if (err instanceof InternalServerError) {
errMsg = err.message;
}
return {
value: defaultValue,
reason: StandardResolutionReasons.ERROR,
errorCode: ErrorCode.GENERAL,
errorMessage: errMsg,
};
}
}
async resolveStringEvaluation(
flagKey: string,
defaultValue: string,
context: EvaluationContext,
): Promise<ResolutionDetails<string>> {
const cachedValue = this.cache.get(flagKey);
if (cachedValue) {
return {
value: cachedValue.value,
reason: StandardResolutionReasons.CACHED,
};
}
try {
const res = await this.service.getStringValue(flagKey);
this.cache.set(flagKey, res);
return res;
} catch (err) {
let errMsg = 'An unknown error occurred';
if (err instanceof InternalServerError) {
errMsg = err.message;
}
return {
value: defaultValue,
reason: StandardResolutionReasons.ERROR,
errorCode: ErrorCode.GENERAL,
errorMessage: errMsg,
};
}
}
async resolveNumberEvaluation(
flagKey: string,
defaultValue: number,
context: EvaluationContext,
): Promise<ResolutionDetails<number>> {
const cachedValue = this.cache.get(flagKey);
if (cachedValue) {
return {
value: cachedValue.value,
reason: StandardResolutionReasons.CACHED,
};
}
try {
return await this.service.getNumberValue(flagKey);
} catch (err) {
let errMsg = 'An unknown error occurred';
if (err instanceof InternalServerError) {
errMsg = err.message;
}
return {
value: defaultValue,
reason: StandardResolutionReasons.ERROR,
errorCode: ErrorCode.GENERAL,
errorMessage: errMsg,
};
}
}
async resolveObjectEvaluation<U extends JsonValue>(
flagKey: string,
defaultValue: U,
context: EvaluationContext,
): Promise<ResolutionDetails<U>> {
const cachedValue = this.cache.get(flagKey);
if (cachedValue) {
return {
value: cachedValue.value,
reason: StandardResolutionReasons.CACHED,
};
}
try {
return await this.service.getObjectValue(flagKey);
} catch (err) {
let errMsg = 'An unknown error occurred';
if (err instanceof InternalServerError) {
errMsg = err.message;
}
return {
value: defaultValue,
reason: StandardResolutionReasons.ERROR,
errorCode: ErrorCode.GENERAL,
errorMessage: errMsg,
};
}
}
}

View File

@ -0,0 +1,59 @@
import { Cache } from './cache';
describe(Cache.name, () => {
describe(Cache.prototype.get.name, () => {
describe('when cache is disabled', () => {
it('should return undefined', () => {
const cache = new Cache({ enabled: false, size: 1, ttl: 1 });
expect(cache.get('test')).toBeUndefined();
});
});
describe('when cache is enabled', () => {
describe('when key is not in cache', () => {
it('should return undefined', () => {
const cache = new Cache({ enabled: true, size: 1, ttl: 1 });
expect(cache.get('test')).toBeUndefined();
});
});
describe('when key is in cache', () => {
it('should return the value', () => {
const cache = new Cache({ enabled: true, size: 1, ttl: 1 });
cache.set('test', { value: true, reason: 'test' });
expect(cache.get('test')).toEqual({ value: true, reason: 'test' });
});
});
});
});
describe(Cache.prototype.set.name, () => {
describe('when cache is disabled', () => {
it('should not set the value', () => {
const spy = jest.spyOn(Cache.prototype, 'set');
expect(spy).not.toHaveBeenCalled();
});
});
describe('when cache is enabled', () => {
it('should set the value', () => {
const cache = new Cache({ enabled: true, size: 1, ttl: 1 });
cache.set('test', { value: true, reason: 'test' });
expect(cache.get('test')).toEqual({ value: true, reason: 'test' });
});
});
});
describe(Cache.prototype.clear.name, () => {
describe('when cache is disabled', () => {
it('should not clear the cache', () => {
const spy = jest.spyOn(Cache.prototype, 'clear');
expect(spy).not.toHaveBeenCalled();
});
});
describe('when cache is enabled', () => {
it('should clear the cache', () => {
const cache = new Cache({ enabled: true, size: 1, ttl: 1 });
cache.set('test', { value: true, reason: 'test' });
cache.clear();
expect(cache.get('test')).toBeUndefined();
});
});
});
});

View File

@ -0,0 +1,38 @@
import type { ResolutionDetails } from '@openfeature/core';
import type { LRUCacheConfig } from './types';
import { LRUCache } from 'lru-cache';
export class Cache {
private cache: LRUCache<string, ResolutionDetails<any>>;
private ttl: number;
private enabled: boolean;
constructor(opts: LRUCacheConfig) {
this.cache = new LRUCache({
maxSize: opts.size ?? 1000,
sizeCalculation: () => 1,
});
this.ttl = opts.ttl ?? 300000;
this.enabled = opts.enabled;
}
get(key: string): ResolutionDetails<any> | undefined {
if (!this.enabled) {
return undefined;
}
return this.cache.get(key);
}
set(key: string, value: ResolutionDetails<any>): void {
if (!this.enabled) {
return;
}
this.cache.set(key, value, { ttl: this.ttl });
}
clear() {
if (!this.enabled) {
return;
}
this.cache.clear();
}
}

View File

@ -0,0 +1,122 @@
import { ParseError, StandardResolutionReasons, TypeMismatchError } from '@openfeature/core';
import { SSMService } from './ssm-service';
describe(SSMService.name, () => {
describe(SSMService.prototype.getBooleanValue.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe(`when _getParamFromSSM returns "true"`, () => {
it(`should return a ResolutionDetails with value true`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: 'true', metadata: { httpStatusCode: 200 } });
const service = new SSMService({});
const result = await service.getBooleanValue('test');
expect(result).toEqual({
value: true,
reason: StandardResolutionReasons.STATIC,
flagMetadata: { httpStatusCode: 200 },
});
});
});
describe(`when _getParamFromSSM returns "false"`, () => {
it(`should return a ResolutionDetails with value true`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: 'false', metadata: { httpStatusCode: 200 } });
const service = new SSMService({});
const result = await service.getBooleanValue('test');
expect(result).toEqual({
value: false,
reason: StandardResolutionReasons.STATIC,
flagMetadata: { httpStatusCode: 200 },
});
});
});
describe(`when _getParamFromSSM returns an invalid value`, () => {
it('should throw a TypeMismatchError', () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: 'invalid boolean', metadata: { httpStatusCode: 400 } });
const service = new SSMService({});
expect(() => service.getBooleanValue('test')).rejects.toThrow(TypeMismatchError);
});
});
});
describe(SSMService.prototype.getStringValue.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe(`when _getParamFromSSM returns a valid value`, () => {
it(`should return a ResolutionDetails with that value`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: 'example', metadata: { httpStatusCode: 200 } });
const service = new SSMService({});
const result = await service.getStringValue('example');
expect(result).toEqual({
value: 'example',
reason: StandardResolutionReasons.STATIC,
flagMetadata: { httpStatusCode: 200 },
});
});
});
});
describe(SSMService.prototype.getNumberValue.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe(`when _getParamFromSSM returns a valid number`, () => {
it(`should return a ResolutionDetails with value true`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: '1478', metadata: { httpStatusCode: 200 } });
const service = new SSMService({});
const result = await service.getNumberValue('test');
expect(result).toEqual({
value: 1478,
reason: StandardResolutionReasons.STATIC,
flagMetadata: { httpStatusCode: 200 },
});
});
});
describe(`when _getParamFromSSM returns a value that is not a number`, () => {
it(`should return a TypeMismatchError`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: 'invalid number', metadata: { httpStatusCode: 400 } });
const service = new SSMService({});
expect(() => service.getNumberValue('test')).rejects.toThrow(TypeMismatchError);
});
});
});
describe(SSMService.prototype.getObjectValue.name, () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe(`when _getParamFromSSM returns a valid object`, () => {
it(`should return a ResolutionDetails with that object`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: JSON.stringify({ test: true }), metadata: { httpStatusCode: 400 } });
const service = new SSMService({});
const result = await service.getObjectValue('test');
expect(result).toEqual({
value: { test: true },
reason: StandardResolutionReasons.STATIC,
flagMetadata: { httpStatusCode: 400 },
});
});
});
describe(`when _getParamFromSSM returns an invalid object`, () => {
it(`should return a ParseError`, async () => {
jest
.spyOn(SSMService.prototype, '_getValueFromSSM')
.mockResolvedValue({ val: 'invalid object', metadata: { httpStatusCode: 400 } });
const service = new SSMService({});
expect(() => service.getObjectValue('test')).rejects.toThrow(ParseError);
});
});
});
});

View File

@ -0,0 +1,118 @@
import type { SSMClientConfig, GetParameterCommandInput } from '@aws-sdk/client-ssm';
import { GetParameterCommand, SSMClient, DescribeParametersCommand } from '@aws-sdk/client-ssm';
import type { ResponseMetadata } from '@smithy/types';
import type { JsonValue, ResolutionDetails } from '@openfeature/core';
import { FlagNotFoundError, TypeMismatchError, ParseError, StandardResolutionReasons } from '@openfeature/core';
export class SSMService {
client: SSMClient;
enableDecryption: boolean;
constructor(config: SSMClientConfig, enableDecryption?: boolean) {
this.client = new SSMClient(config);
this.enableDecryption = enableDecryption ?? false;
}
async getBooleanValue(name: string): Promise<ResolutionDetails<boolean>> {
const res = await this._getValueFromSSM(name);
const { val, metadata } = res;
let result: boolean;
switch (val) {
case 'true':
result = true;
break;
case 'false':
result = false;
break;
default:
throw new TypeMismatchError(`${val} is not a valid boolean value`);
}
return {
value: result,
reason: StandardResolutionReasons.STATIC,
flagMetadata: { ...metadata },
};
}
async getStringValue(name: string): Promise<ResolutionDetails<string>> {
const res = await this._getValueFromSSM(name);
const { val, metadata } = res;
return {
value: val,
reason: StandardResolutionReasons.STATIC,
flagMetadata: { ...metadata },
};
}
async getNumberValue(name: string): Promise<ResolutionDetails<number>> {
const res = await this._getValueFromSSM(name);
const { val, metadata } = res;
if (Number.isNaN(Number(val))) {
throw new TypeMismatchError(`${val} is not a number`);
}
return {
value: Number(val),
reason: StandardResolutionReasons.STATIC,
flagMetadata: { ...metadata },
};
}
async getObjectValue<U extends JsonValue>(name: string): Promise<ResolutionDetails<U>> {
const res = await this._getValueFromSSM(name);
const { val, metadata } = res;
try {
return {
value: JSON.parse(val),
reason: StandardResolutionReasons.STATIC,
flagMetadata: { ...metadata },
};
} catch (e) {
throw new ParseError(`Unable to parse value as JSON: ${e}`);
}
}
async _isSecureString(name: string): Promise<boolean> {
const res = await this.client.send(
new DescribeParametersCommand({
ParameterFilters: [
{
Key: 'Name',
Values: [name],
},
],
}),
);
if (!res.Parameters) {
throw new FlagNotFoundError(`Unable to find an SSM Parameter with key ${name}`);
}
return res.Parameters[0].Type === 'SecureString';
}
async _getValueFromSSM(name: string): Promise<{ val: string; metadata: ResponseMetadata }> {
const param: GetParameterCommandInput = {
Name: name,
};
if (this.enableDecryption) {
param.WithDecryption = await this._isSecureString(name);
}
const command: GetParameterCommand = new GetParameterCommand(param);
const res = await this.client.send(command);
if (!res.Parameter) {
throw new FlagNotFoundError(`Unable to find an SSM Parameter with key ${name}`);
}
if (!res.Parameter.Value) {
throw new ParseError(`Value is empty`);
}
return { val: res.Parameter.Value, metadata: res.$metadata };
}
}

View File

@ -0,0 +1,13 @@
import type { SSMClientConfig } from '@aws-sdk/client-ssm';
export type AwsSsmProviderConfig = {
ssmClientConfig: SSMClientConfig;
cacheOpts: LRUCacheConfig;
enableDecryption?: boolean;
};
export type LRUCacheConfig = {
enabled: boolean;
ttl?: number;
size?: number;
};

View File

@ -0,0 +1,22 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"module": "ES6",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

View File

@ -0,0 +1,10 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"],
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
}

View File

@ -0,0 +1,10 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../dist/out-tsc",
"module": "commonjs",
"moduleResolution": "node10",
"types": ["jest", "node"]
},
"include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
}

View File

@ -0,0 +1,18 @@
{
"extends": ["../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@ -0,0 +1,60 @@
# Changelog
## [0.1.6](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.5...config-cat-web-provider-v0.1.6) (2025-04-09)
### 🐛 Bug Fixes
* **config-cat:** Rework error reporting ([#1242](https://github.com/open-feature/js-sdk-contrib/issues/1242)) ([0425619](https://github.com/open-feature/js-sdk-contrib/commit/04256197bf6e7da70afd4ac1c31bdaf55ce4b789))
## [0.1.5](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.4...config-cat-web-provider-v0.1.5) (2025-03-14)
### 🧹 Chore
* bump the required core version ([1408397](https://github.com/open-feature/js-sdk-contrib/commit/140839777b5cff8e624b23fc9eb2f8d2f4a977cb))
## [0.1.4](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.3...config-cat-web-provider-v0.1.4) (2025-03-04)
### 🐛 Bug Fixes
* **config-cat:** Forward default value to underlying client ([#1214](https://github.com/open-feature/js-sdk-contrib/issues/1214)) ([9d14173](https://github.com/open-feature/js-sdk-contrib/commit/9d14173cf08da3030fc58fea8786b24bafd80403))
### 🧹 Chore
* update nx packages ([#1147](https://github.com/open-feature/js-sdk-contrib/issues/1147)) ([7f310fe](https://github.com/open-feature/js-sdk-contrib/commit/7f310fe87101b8aa793e1436e63c7602ccc202e3))
## [0.1.3](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.2...config-cat-web-provider-v0.1.3) (2024-09-20)
### 🐛 Bug Fixes
* **config-cat-web:** Fix code examples in README.md ([#1050](https://github.com/open-feature/js-sdk-contrib/issues/1050)) ([0b6179b](https://github.com/open-feature/js-sdk-contrib/commit/0b6179b9cb16cce592be6c2fbe86dbacce5adc1f))
* **config-cat:** Revise readme ([#1054](https://github.com/open-feature/js-sdk-contrib/issues/1054)) ([7e1dd72](https://github.com/open-feature/js-sdk-contrib/commit/7e1dd72a1450a9982b340afda62d34379d1b3f16))
## [0.1.2](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.1...config-cat-web-provider-v0.1.2) (2024-08-22)
### 🐛 Bug Fixes
* **config-cat-web:** Update dependency configcat-js-ssr to v8.4.2 ([#1041](https://github.com/open-feature/js-sdk-contrib/issues/1041)) ([55e554d](https://github.com/open-feature/js-sdk-contrib/commit/55e554d9fc9966d7d2b364da4776c478a2ba9bb1))
## [0.1.1](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.0...config-cat-web-provider-v0.1.1) (2024-07-28)
### 📚 Documentation
* A few corrections to ConfigCat providers' README.md ([#1014](https://github.com/open-feature/js-sdk-contrib/issues/1014)) ([3b24653](https://github.com/open-feature/js-sdk-contrib/commit/3b24653854643c827bddccb12aeb59e61204202d))
## 0.1.0 (2024-07-21)
### ⚠ BREAKING CHANGES
* implement config cat web provider ([#918](https://github.com/open-feature/js-sdk-contrib/issues/918))
### ✨ New Features
* implement config cat web provider ([#918](https://github.com/open-feature/js-sdk-contrib/issues/918)) ([e280014](https://github.com/open-feature/js-sdk-contrib/commit/e280014f8998dd2e5f2b7700f0d24842eeafab5f))

View File

@ -0,0 +1,160 @@
# ConfigCat Web Provider
This is an OpenFeature provider implementation for using [ConfigCat](https://configcat.com), a managed feature flag service in JavaScript frontend applications.
## Installation
```
$ npm install @openfeature/config-cat-web-provider
```
#### Required peer dependencies
The OpenFeature SDK is required as peer dependency.
The minimum required version of `@openfeature/web-sdk` currently is `1.0.0`.
The minimum required version of `configcat-js-ssr` currently is `8.4.3`.
```
$ npm install @openfeature/web-sdk configcat-js-ssr
```
## Usage
The ConfigCat provider uses the [ConfigCat JavaScript SSR SDK](https://configcat.com/docs/sdk-reference/js-ssr/).
It can be created by passing the ConfigCat SDK options to ```ConfigCatWebProvider.create```.
The available options can be found in the [ConfigCat JavaScript SSR SDK](https://configcat.com/docs/sdk-reference/js-ssr/#creating-the-configcat-client).
The ConfigCat Web Provider only supports the `AutoPolling` mode because it caches all evaluation data to support synchronous evaluation of feature flags.
### Example using the default configuration
```javascript
import { OpenFeature } from "@openfeature/web-sdk";
import { ConfigCatWebProvider } from '@openfeature/config-cat-web-provider';
// Create and set the provider.
const provider = ConfigCatWebProvider.create('<sdk_key>');
await OpenFeature.setProviderAndWait(provider);
// Create a client instance to evaluate feature flags.
const client = OpenFeature.getClient();
const value = await client.getBooleanValue('isAwesomeFeatureEnabled', false);
console.log(`isAwesomeFeatureEnabled: ${value}`);
// On application shutdown, clean up the OpenFeature provider and the underlying ConfigCat client.
await OpenFeature.clearProviders();
```
### Example using custom configuration
```javascript
import { OpenFeature } from "@openfeature/web-sdk";
import { ConfigCatWebProvider } from '@openfeature/config-cat-web-provider';
import { createConsoleLogger, LogLevel } from 'configcat-js-ssr';
// Create and set the provider.
const provider = ConfigCatWebProvider.create('<sdk_key>', {
logger: createConsoleLogger(LogLevel.Info),
setupHooks: (hooks) => hooks.on('clientReady', () => console.log('Client is ready!')),
});
await OpenFeature.setProviderAndWait(provider);
// ...
```
## Evaluation Context
The OpenFeature Evaluation Context is mapped to the [ConfigCat User Object](https://configcat.com/docs/advanced/user-object/).
The [ConfigCat User Object](https://configcat.com/docs/advanced/user-object/) has three predefined attributes,
and allows for additional attributes.
The following shows how the attributes are mapped:
| OpenFeature EvaluationContext Field | ConfigCat User Field | Required |
|-------------------------------------|----------------------|----------|
| targetingKey | identifier | yes |
| email | email | no |
| country | country | no |
| _Any Other_ | custom | no |
The custom types are mapped the following way:
| OpenFeature EvaluationContext Field Type | ConfigCat User Field Type |
|------------------------------------------|---------------------------|
| string | string |
| number | number |
| boolean | string |
| Array<string> | Array<string> |
| Array | Array |
| object | string |
The following example shows the conversion between an OpenFeature Evaluation Context and the corresponding ConfigCat
User:
#### OpenFeature
```json
{
"targetingKey": "test",
"email": "email",
"country": "country",
"customString": "customString",
"customNumber": 1,
"customBoolean": true,
"customObject": {
"prop1": "1",
"prop2": 2
},
"customStringArray": [
"one",
"two"
],
"customArray": [
1,
"2",
false
]
}
```
#### ConfigCat
```json
{
"identifier": "test",
"email": "email",
"country": "country",
"custom": {
"customString": "customString",
"customBoolean": "true",
"customNumber": 1,
"customObject": "{\"prop1\":\"1\",\"prop2\":2}",
"customStringArray": [
"one",
"two"
],
"customArray": "[1,\"2\",false]"
}
}
```
## Events
The ConfigCat provider emits the
following [OpenFeature events](https://openfeature.dev/specification/types#provider-events):
- PROVIDER_READY
- PROVIDER_ERROR
- PROVIDER_CONFIGURATION_CHANGED
## Building
Run `nx package providers-config-cat-web` to build the library.
## Running unit tests
Run `nx test providers-config-cat-web` to execute the unit tests via [Jest](https://jestjs.io).

View File

@ -0,0 +1,3 @@
{
"presets": [["minify", { "builtIns": false }]]
}

View File

@ -0,0 +1,10 @@
/* eslint-disable */
export default {
displayName: 'providers-config-cat-web',
preset: '../../../jest.preset.js',
transform: {
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../../coverage/libs/providers/config-cat',
};

View File

@ -0,0 +1,156 @@
{
"name": "@openfeature/config-cat-web-provider",
"version": "0.1.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openfeature/config-cat-web-provider",
"version": "0.1.6",
"peerDependencies": {
"@openfeature/web-sdk": "^1.0.0",
"configcat-js-ssr": "^8.4.3"
}
},
"node_modules/@openfeature/core": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.2.0.tgz",
"integrity": "sha512-JyIiije5f+8Big1xz7UAmxqVmHBuFUI9Dh8DEFG2D1ocgjMm1tEzYXJDr3urCQGNnX9M/cYtNhEcGfyontIgJw==",
"peer": true
},
"node_modules/@openfeature/web-sdk": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@openfeature/web-sdk/-/web-sdk-1.1.0.tgz",
"integrity": "sha512-qfJBWVN0AzYGoZZUE4w4LrQc3Oq3MWaUys+bkBjkgyFFDJM4TrgRz+wz/f3TwRVKj2Bc0EZ0ouyfupdWjR7bsQ==",
"peer": true,
"peerDependencies": {
"@openfeature/core": "1.2.0"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"peer": true
},
"node_modules/axios": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
"integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
"peer": true,
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"peer": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/configcat-common": {
"version": "9.3.1",
"resolved": "https://registry.npmjs.org/configcat-common/-/configcat-common-9.3.1.tgz",
"integrity": "sha512-yVkIbluksD/kZfVyKjLIOpwLrq3/ZRM7Lwrsz89JmbpQ6VtbnelrTQynSPElTtKjrPRZx56v3IZYk3nWTnnM6A==",
"peer": true,
"dependencies": {
"tslib": "^2.4.1"
}
},
"node_modules/configcat-js-ssr": {
"version": "8.4.3",
"resolved": "https://registry.npmjs.org/configcat-js-ssr/-/configcat-js-ssr-8.4.3.tgz",
"integrity": "sha512-9tNM61cgJOE9C1MO8wBK1QglrnlT8VpiAW/KgGdFdOuIPs3ky62EThgAE+HYSRYEv4JrRNB4i7G0v1Qgbf18Hw==",
"peer": true,
"dependencies": {
"axios": "^1.7.4",
"configcat-common": "9.3.1",
"tslib": "^2.4.1"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"peer": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"peer": true,
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"peer": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"peer": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"peer": true,
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"peer": true
},
"node_modules/tslib": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
"integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
"peer": true
}
}
}

View File

@ -0,0 +1,14 @@
{
"name": "@openfeature/config-cat-web-provider",
"version": "0.1.6",
"license": "Apache-2.0",
"scripts": {
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
"current-version": "echo $npm_package_version"
},
"peerDependencies": {
"@openfeature/web-sdk": "^1.0.0",
"configcat-js-ssr": "^8.4.3",
"@openfeature/config-cat-core": "0.1.1"
}
}

View File

@ -0,0 +1,64 @@
{
"name": "providers-config-cat-web",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/providers/config-cat-web/src",
"projectType": "library",
"targets": {
"publish": {
"executor": "nx:run-commands",
"options": {
"command": "npm run publish-if-not-exists",
"cwd": "dist/libs/providers/config-cat-web"
},
"dependsOn": [
{
"target": "package"
}
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"jestConfig": "libs/providers/config-cat-web/jest.config.ts"
}
},
"package": {
"executor": "@nx/rollup:rollup",
"outputs": ["{options.outputPath}"],
"options": {
"project": "libs/providers/config-cat-web/package.json",
"outputPath": "dist/libs/providers/config-cat-web",
"entryFile": "libs/providers/config-cat-web/src/index.ts",
"tsConfig": "libs/providers/config-cat-web/tsconfig.lib.json",
"compiler": "tsc",
"generateExportsField": true,
"umdName": "config-cat",
"external": "all",
"format": ["cjs", "esm"],
"assets": [
{
"glob": "package.json",
"input": "./assets",
"output": "./src/"
},
{
"glob": "LICENSE",
"input": "./",
"output": "./"
},
{
"glob": "README.md",
"input": "./libs/providers/config-cat-web",
"output": "./"
}
]
}
}
},
"tags": []
}

View File

@ -0,0 +1 @@
export * from './lib/config-cat-web-provider';

View File

@ -0,0 +1,191 @@
import { ConfigCatWebProvider } from './config-cat-web-provider';
import type { HookEvents, IConfigCatCache, ISettingUnion } from 'configcat-js-ssr';
import { createConsoleLogger, createFlagOverridesFromMap, LogLevel, OverrideBehaviour } from 'configcat-js-ssr';
import type { EventEmitter } from 'events';
import { ProviderEvents, ParseError, FlagNotFoundError, TypeMismatchError } from '@openfeature/web-sdk';
describe('ConfigCatWebProvider', () => {
const targetingKey = 'abc';
let provider: ConfigCatWebProvider;
let configCatEmitter: EventEmitter<HookEvents>;
const values = {
booleanFalse: false,
booleanTrue: true,
number1: 1,
number2: 2,
stringTest: 'Test',
jsonValid: JSON.stringify({ valid: true }),
jsonInvalid: '{test:123',
jsonPrimitive: JSON.stringify(123),
};
beforeAll(async () => {
provider = ConfigCatWebProvider.create('__key__', {
logger: createConsoleLogger(LogLevel.Off),
offline: true,
flagOverrides: createFlagOverridesFromMap(values, OverrideBehaviour.LocalOnly),
});
await provider.initialize();
// Currently there is no option to get access to the event emitter
// eslint-disable-next-line @typescript-eslint/no-explicit-any
configCatEmitter = (provider.configCatClient as any).options.hooks;
});
afterAll(async () => {
await provider.onClose();
});
it('should be an instance of ConfigCatWebProvider', () => {
expect(provider).toBeInstanceOf(ConfigCatWebProvider);
});
it('should dispose the configcat client on provider closing', async () => {
const newProvider = ConfigCatWebProvider.create('__another_key__', {
logger: createConsoleLogger(LogLevel.Off),
offline: true,
flagOverrides: createFlagOverridesFromMap(values, OverrideBehaviour.LocalOnly),
});
await newProvider.initialize();
if (!newProvider.configCatClient) {
throw Error('No ConfigCat client');
}
const clientDisposeSpy = jest.spyOn(newProvider.configCatClient, 'dispose');
await newProvider.onClose();
expect(clientDisposeSpy).toHaveBeenCalled();
});
describe('events', () => {
it('should emit PROVIDER_CONFIGURATION_CHANGED event', () => {
const handler = jest.fn();
const eventData = { settings: { myFlag: {} as ISettingUnion }, salt: undefined, segments: [] };
provider.events.addHandler(ProviderEvents.ConfigurationChanged, handler);
configCatEmitter.emit('configChanged', eventData);
expect(handler).toHaveBeenCalledWith({
flagsChanged: ['myFlag'],
});
});
it("should emit PROVIDER_READY event when underlying client is initialized after provider's initialize", async () => {
const cacheValue = '253370761200000\nW/"12345678-90a"\n{"f":{"booleanTrue":{"t":0,"v":{"b":true}}}}';
const fakeSharedCache = new (class implements IConfigCatCache {
private _value?: string;
get(key: string) {
return this._value;
}
set(key: string, value: string) {
this._value = value;
}
})();
const provider = ConfigCatWebProvider.create('configcat-sdk-1/1234567890123456789012/1234567890123456789012', {
cache: fakeSharedCache,
logger: createConsoleLogger(LogLevel.Off),
offline: true,
maxInitWaitTimeSeconds: 1,
});
const readyHandler = jest.fn();
provider.events.addHandler(ProviderEvents.Ready, readyHandler);
try {
await provider.initialize();
} catch (err) {
expect((err as Error).message).toContain('underlying ConfigCat client could not initialize');
}
expect(readyHandler).toHaveBeenCalledTimes(0);
fakeSharedCache.set('', cacheValue);
// Make sure that the internal cache is refreshed.
await provider.configCatClient?.forceRefreshAsync();
provider.resolveBooleanEvaluation('booleanTrue', false, { targetingKey });
// Wait a little while for the Ready event to be emitted.
await new Promise((resolve) => setTimeout(resolve, 100));
expect(readyHandler).toHaveBeenCalled();
});
});
describe('method resolveBooleanEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', () => {
expect(() => provider.resolveBooleanEvaluation('nonExistent', false, { targetingKey })).toThrow(
FlagNotFoundError,
);
});
it('should return right value if key exists', () => {
const value = provider.resolveBooleanEvaluation('booleanTrue', false, { targetingKey });
expect(value).toHaveProperty('value', values.booleanTrue);
});
it('should throw TypeMismatchError if type is different than expected', () => {
expect(() => provider.resolveBooleanEvaluation('number1', false, { targetingKey })).toThrow(TypeMismatchError);
});
});
describe('method resolveStringEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', async () => {
expect(() => provider.resolveStringEvaluation('nonExistent', 'nonExistent', { targetingKey })).toThrow(
FlagNotFoundError,
);
});
it('should return right value if key exists', () => {
const value = provider.resolveStringEvaluation('stringTest', 'default', { targetingKey });
expect(value).toHaveProperty('value', values.stringTest);
});
it('should throw TypeMismatchError if type is different than expected', async () => {
expect(() => provider.resolveStringEvaluation('number1', 'default', { targetingKey })).toThrow(TypeMismatchError);
});
});
describe('method resolveNumberEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', async () => {
expect(() => provider.resolveNumberEvaluation('nonExistent', 0, { targetingKey })).toThrow(FlagNotFoundError);
});
it('should return right value if key exists', () => {
const value = provider.resolveNumberEvaluation('number1', 0, { targetingKey });
expect(value).toHaveProperty('value', values.number1);
});
it('should throw TypeMismatchError if type is different than expected', () => {
expect(() => provider.resolveNumberEvaluation('stringTest', 0, { targetingKey })).toThrow(TypeMismatchError);
});
});
describe('method resolveObjectEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', () => {
expect(() => provider.resolveObjectEvaluation('nonExistent', false, { targetingKey })).toThrow(FlagNotFoundError);
});
it('should return right value if key exists', () => {
const value = provider.resolveObjectEvaluation('jsonValid', {}, { targetingKey });
expect(value).toHaveProperty('value', JSON.parse(values.jsonValid));
});
it('should throw ParseError if string is not valid JSON', () => {
expect(() => provider.resolveObjectEvaluation('jsonInvalid', {}, { targetingKey })).toThrow(ParseError);
});
it('should return right value if key exists and value is only a JSON primitive', () => {
const value = provider.resolveObjectEvaluation('jsonPrimitive', {}, { targetingKey });
expect(value).toHaveProperty('value', JSON.parse(values.jsonPrimitive));
});
});
});

View File

@ -0,0 +1,167 @@
import type { EvaluationContext, JsonValue, Paradigm, Provider, ResolutionDetails } from '@openfeature/web-sdk';
import {
OpenFeatureEventEmitter,
ParseError,
ProviderEvents,
ProviderNotReadyError,
TypeMismatchError,
} from '@openfeature/web-sdk';
import type { PrimitiveType, PrimitiveTypeName } from '@openfeature/config-cat-core';
import { isType, parseError, toResolutionDetails, transformContext } from '@openfeature/config-cat-core';
import type { IConfig, IConfigCatClient, OptionsForPollingMode, SettingValue } from 'configcat-js-ssr';
import { ClientCacheState, getClient, PollingMode } from 'configcat-js-ssr';
export class ConfigCatWebProvider implements Provider {
public readonly events = new OpenFeatureEventEmitter();
private readonly _clientFactory: (provider: ConfigCatWebProvider) => IConfigCatClient;
private _isProviderReady = false;
private _client?: IConfigCatClient;
public runsOn: Paradigm = 'client';
public metadata = {
name: ConfigCatWebProvider.name,
};
protected constructor(clientFactory: (provider: ConfigCatWebProvider) => IConfigCatClient) {
this._clientFactory = clientFactory;
}
public static create(sdkKey: string, options?: OptionsForPollingMode<PollingMode.AutoPoll>) {
// Let's create a shallow copy to not mess up caller's options object.
options = options ? { ...options } : {};
return new ConfigCatWebProvider((provider) => {
const oldSetupHooks = options?.setupHooks;
options.setupHooks = (hooks) => {
oldSetupHooks?.(hooks);
hooks.on('configChanged', (config: IConfig) =>
provider.events.emit(ProviderEvents.ConfigurationChanged, {
flagsChanged: Object.keys(config.settings),
}),
);
};
return getClient(sdkKey, PollingMode.AutoPoll, options);
});
}
public async initialize(): Promise<void> {
const client = this._clientFactory(this);
const clientCacheState = await client.waitForReady();
this._client = client;
if (clientCacheState !== ClientCacheState.NoFlagData) {
this._isProviderReady = true;
} else {
// OpenFeature provider defines ready state like this: "The provider is ready to resolve flags."
// However, ConfigCat client's behavior is different: in some cases ready state may be reached
// even if the client's internal, in-memory cache hasn't been populated yet, that is,
// the client is not able to evaluate feature flags yet. In such cases we throw an error to
// prevent the provider from being set ready right away, and check for the ready state later.
throw Error('The underlying ConfigCat client could not initialize within maxInitWaitTimeSeconds.');
}
}
public get configCatClient() {
return this._client;
}
public async onClose(): Promise<void> {
this._client?.dispose();
}
public resolveBooleanEvaluation(
flagKey: string,
defaultValue: boolean,
context: EvaluationContext,
): ResolutionDetails<boolean> {
return this.evaluate(flagKey, 'boolean', defaultValue, context);
}
public resolveStringEvaluation(
flagKey: string,
defaultValue: string,
context: EvaluationContext,
): ResolutionDetails<string> {
return this.evaluate(flagKey, 'string', defaultValue, context);
}
public resolveNumberEvaluation(
flagKey: string,
defaultValue: number,
context: EvaluationContext,
): ResolutionDetails<number> {
return this.evaluate(flagKey, 'number', defaultValue, context);
}
public resolveObjectEvaluation<U extends JsonValue>(
flagKey: string,
defaultValue: U,
context: EvaluationContext,
): ResolutionDetails<U> {
const objectValue = this.evaluate(flagKey, 'object', defaultValue, context);
return objectValue as ResolutionDetails<U>;
}
protected evaluate<T extends PrimitiveTypeName>(
flagKey: string,
flagType: T,
defaultValue: PrimitiveType<T>,
context: EvaluationContext,
): ResolutionDetails<PrimitiveType<T>> {
if (!this._client) {
throw new ProviderNotReadyError('Provider is not initialized');
}
// Make sure that the user-provided `defaultValue` is compatible with `flagType` as there is
// no guarantee that it actually is. (User may bypass type checking or may not use TypeScript at all.)
if (!isType(flagType, defaultValue)) {
throw new TypeMismatchError();
}
const configCatDefaultValue = flagType !== 'object' ? (defaultValue as SettingValue) : JSON.stringify(defaultValue);
const snapshot = this._client.snapshot();
const { value, ...evaluationData } = snapshot.getValueDetails(
flagKey,
configCatDefaultValue,
transformContext(context),
);
if (!this._isProviderReady && snapshot.cacheState !== ClientCacheState.NoFlagData) {
// Ideally, we would check ConfigCat client's initialization state in its "background" polling loop.
// This is not possible at the moment, so as a workaround, we do the check on feature flag evaluation.
// There are plans to improve this situation, so let's revise this
// as soon as ConfigCat SDK implements the necessary event.
this._isProviderReady = true;
setTimeout(() => this.events.emit(ProviderEvents.Ready), 0);
}
if (evaluationData.isDefaultValue) {
throw parseError(evaluationData.errorMessage);
}
if (flagType !== 'object') {
// When `flagType` (more precisely, `configCatDefaultValue`) is boolean, string or number,
// ConfigCat SDK guarantees that the returned `value` is compatible with `PrimitiveType<T>`.
// See also: https://configcat.com/docs/sdk-reference/js-ssr/#setting-type-mapping
return toResolutionDetails(value as PrimitiveType<T>, evaluationData);
}
let json: JsonValue;
try {
// In this case we can be sure that `value` is string since `configCatDefaultValue` is string,
// which means that ConfigCat SDK is guaranteed to return a string value.
json = JSON.parse(value as string);
} catch (e) {
throw new ParseError(`Unable to parse "${value}" as JSON`);
}
return toResolutionDetails(json as PrimitiveType<T>, evaluationData);
}
}

View File

@ -0,0 +1,21 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"module": "ES6",
"forceConsistentCasingInFileNames": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

View File

@ -0,0 +1,10 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"],
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
}

View File

@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"module": "commonjs",
"types": ["jest", "node"]
},
"include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
}

View File

@ -0,0 +1,18 @@
{
"extends": ["../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@ -0,0 +1,158 @@
# Changelog
## [0.7.6](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.7.5...config-cat-provider-v0.7.6) (2025-07-04)
### 🐛 Bug Fixes
* **security:** update dependency configcat-common to v9.4.0 ([#1348](https://github.com/open-feature/js-sdk-contrib/issues/1348)) ([601e7de](https://github.com/open-feature/js-sdk-contrib/commit/601e7de19948bc826778a076f27b46a8cb1fabca))
## [0.7.5](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.7.4...config-cat-provider-v0.7.5) (2025-04-09)
### 🐛 Bug Fixes
* **config-cat:** Rework error reporting ([#1242](https://github.com/open-feature/js-sdk-contrib/issues/1242)) ([0425619](https://github.com/open-feature/js-sdk-contrib/commit/04256197bf6e7da70afd4ac1c31bdaf55ce4b789))
## [0.7.4](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.7.3...config-cat-provider-v0.7.4) (2025-03-14)
### 🧹 Chore
* bump the required core version ([d8fc42f](https://github.com/open-feature/js-sdk-contrib/commit/d8fc42f5d23f30f011a697610e65d83144c19fca))
## [0.7.3](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.7.2...config-cat-provider-v0.7.3) (2025-03-04)
### 🐛 Bug Fixes
* **config-cat:** Forward default value to underlying client ([#1214](https://github.com/open-feature/js-sdk-contrib/issues/1214)) ([9d14173](https://github.com/open-feature/js-sdk-contrib/commit/9d14173cf08da3030fc58fea8786b24bafd80403))
### 🧹 Chore
* update nx packages ([#1147](https://github.com/open-feature/js-sdk-contrib/issues/1147)) ([7f310fe](https://github.com/open-feature/js-sdk-contrib/commit/7f310fe87101b8aa793e1436e63c7602ccc202e3))
## [0.7.2](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.7.1...config-cat-provider-v0.7.2) (2024-09-20)
### 🐛 Bug Fixes
* **config-cat:** Revise readme ([#1054](https://github.com/open-feature/js-sdk-contrib/issues/1054)) ([7e1dd72](https://github.com/open-feature/js-sdk-contrib/commit/7e1dd72a1450a9982b340afda62d34379d1b3f16))
## [0.7.1](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.7.0...config-cat-provider-v0.7.1) (2024-07-23)
### 📚 Documentation
* A few corrections to ConfigCat providers' README.md ([#1014](https://github.com/open-feature/js-sdk-contrib/issues/1014)) ([3b24653](https://github.com/open-feature/js-sdk-contrib/commit/3b24653854643c827bddccb12aeb59e61204202d))
## [0.7.0](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.6.1...config-cat-provider-v0.7.0) (2024-07-21)
### ⚠ BREAKING CHANGES
* make interface similar to config-cat-web ([#918](https://github.com/open-feature/js-sdk-contrib/issues/918))
### ✨ New Features
* make interface similar to config-cat-web ([#918](https://github.com/open-feature/js-sdk-contrib/issues/918)) ([e280014](https://github.com/open-feature/js-sdk-contrib/commit/e280014f8998dd2e5f2b7700f0d24842eeafab5f))
## [0.6.1](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.6.0...config-cat-provider-v0.6.1) (2024-04-05)
### 🐛 Bug Fixes
* **config-cat:** remove event emitter type import from config-cat ([#830](https://github.com/open-feature/js-sdk-contrib/issues/830)) ([1c76f63](https://github.com/open-feature/js-sdk-contrib/commit/1c76f63db0c8992325ac645d308e90337529e049))
### 🧹 Chore
* Lint Fix Providers ([#837](https://github.com/open-feature/js-sdk-contrib/issues/837)) ([8c6c46b](https://github.com/open-feature/js-sdk-contrib/commit/8c6c46b5f8f72c5a292af7e5ff8ad8d710982554))
* lock configcat dep ([#827](https://github.com/open-feature/js-sdk-contrib/issues/827)) ([28f25a2](https://github.com/open-feature/js-sdk-contrib/commit/28f25a25cfc6ba3262472c7bad061ae3b256aba3))
## [0.6.0](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.5.0...config-cat-provider-v0.6.0) (2024-03-16)
### ⚠ BREAKING CHANGES
* update OpenFeature SDK peer ([#798](https://github.com/open-feature/js-sdk-contrib/issues/798))
### ✨ New Features
* update OpenFeature SDK peer ([#798](https://github.com/open-feature/js-sdk-contrib/issues/798)) ([ebd16b9](https://github.com/open-feature/js-sdk-contrib/commit/ebd16b9630bcc6b253a7061a144e8d476cd8b586))
## [0.5.0](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.4.0...config-cat-provider-v0.5.0) (2024-03-14)
### ⚠ BREAKING CHANGES
* Allow ConfigCat provider to be used in server applications ([#796](https://github.com/open-feature/js-sdk-contrib/issues/796))
### 🐛 Bug Fixes
* Allow ConfigCat provider to be used in server applications ([#796](https://github.com/open-feature/js-sdk-contrib/issues/796)) ([190946f](https://github.com/open-feature/js-sdk-contrib/commit/190946ff83ede64f513d43a1791cc4dc274b0d37))
* **deps:** update dependency configcat-js to v9 ([#664](https://github.com/open-feature/js-sdk-contrib/issues/664)) ([6fdf552](https://github.com/open-feature/js-sdk-contrib/commit/6fdf55256cc3238fdeb9bd2bf0cde0bf494a78f9))
### 🧹 Chore
* address lint issues ([#642](https://github.com/open-feature/js-sdk-contrib/issues/642)) ([bbd9aee](https://github.com/open-feature/js-sdk-contrib/commit/bbd9aee896dc4a0817f379b799a1b8d331ee76c6))
* fix lint issues and bump server sdk version ([#715](https://github.com/open-feature/js-sdk-contrib/issues/715)) ([bd57177](https://github.com/open-feature/js-sdk-contrib/commit/bd571770f3a1a01bd62663dc3473273449f96c5c))
## [0.4.0](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.3.0...config-cat-provider-v0.4.0) (2023-10-11)
### ⚠ BREAKING CHANGES
* use @openfeature/server-sdk peer ([#608](https://github.com/open-feature/js-sdk-contrib/issues/608))
### 🐛 Bug Fixes
* packaging issues impacting babel/react ([#596](https://github.com/open-feature/js-sdk-contrib/issues/596)) ([0446eab](https://github.com/open-feature/js-sdk-contrib/commit/0446eab5cf9b45ce7de251b4f5feb8df1d499b9d))
### 🧹 Chore
* update nx, run migrations ([#552](https://github.com/open-feature/js-sdk-contrib/issues/552)) ([a88d8fc](https://github.com/open-feature/js-sdk-contrib/commit/a88d8fc097789fd7f56011e6ebb66070f52c6e56))
* use @openfeature/server-sdk peer ([#608](https://github.com/open-feature/js-sdk-contrib/issues/608)) ([ae3732a](https://github.com/open-feature/js-sdk-contrib/commit/ae3732a9068f684517db28ea1ae27b29a35e6b16))
## [0.3.0](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.2.0...config-cat-provider-v0.3.0) (2023-07-27)
### ⚠ BREAKING CHANGES
* remove configcat 7 peer dependency ([#435](https://github.com/open-feature/js-sdk-contrib/issues/435))
### 🐛 Bug Fixes
* **config-cat:** add status flag to provider ([#491](https://github.com/open-feature/js-sdk-contrib/issues/491)) ([f599c31](https://github.com/open-feature/js-sdk-contrib/commit/f599c3145881b81107c9a65b2c4cfe2a8b4111f1))
* remove configcat 7 peer dependency ([#435](https://github.com/open-feature/js-sdk-contrib/issues/435)) ([da5d212](https://github.com/open-feature/js-sdk-contrib/commit/da5d21208e8929f7cdfc805e256cb892968bcd95))
## [0.2.0](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.1.1...config-cat-provider-v0.2.0) (2023-06-27)
### ⚠ BREAKING CHANGES
* implement events and shutdown for spec 0.6.0 ([#422](https://github.com/open-feature/js-sdk-contrib/issues/422))
### 🧹 Chore
* migrate to nx 16 ([#366](https://github.com/open-feature/js-sdk-contrib/issues/366)) ([7a9c201](https://github.com/open-feature/js-sdk-contrib/commit/7a9c201d16fd7f070a1bcd2e359487ba6e7b78d7))
### 🐛 Bug Fixes
* **deps:** update dependency configcat-js to v8 ([#415](https://github.com/open-feature/js-sdk-contrib/issues/415)) ([64c7d3a](https://github.com/open-feature/js-sdk-contrib/commit/64c7d3a6c89cc4bce2e445869a4ee421e93f990b))
### ✨ New Features
* implement events and shutdown for spec 0.6.0 ([#422](https://github.com/open-feature/js-sdk-contrib/issues/422)) ([3db6927](https://github.com/open-feature/js-sdk-contrib/commit/3db6927416f1841ff836452935fc6f89634239e3))
## [0.1.1](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-provider-v0.1.0...config-cat-provider-v0.1.1) (2023-04-25)
### ✨ New Features
* add ConfigCat provider [#327](https://github.com/open-feature/js-sdk-contrib/issues/327) ([#334](https://github.com/open-feature/js-sdk-contrib/issues/334)) ([495bf69](https://github.com/open-feature/js-sdk-contrib/commit/495bf690b7d83d429622cfcc554ece2b6fb9a34e))

View File

@ -0,0 +1,153 @@
# ConfigCat Provider
This is an OpenFeature provider implementation for using [ConfigCat](https://configcat.com), a managed feature flag service in Node.js applications.
## Installation
```
$ npm install @openfeature/config-cat-provider
```
#### Required peer dependencies
The OpenFeature SDK is required as peer dependency.
The minimum required version of `@openfeature/server-sdk` currently is `1.13.5`.
The minimum required version of `configcat-node` currently is `11.3.1`.
```
$ npm install @openfeature/server-sdk configcat-node
```
## Usage
The ConfigCat provider uses the [ConfigCat Node.js SDK](https://configcat.com/docs/sdk-reference/node/).
It can be created by passing the ConfigCat SDK options to ```ConfigCatProvider.create```.
The available options can be found in the [ConfigCat Node.js SDK](https://configcat.com/docs/sdk-reference/node/#creating-the-configcat-client).
### Example using the default configuration
```javascript
import { OpenFeature } from "@openfeature/server-sdk";
import { ConfigCatProvider } from '@openfeature/config-cat-provider';
// Create and set the provider.
const provider = ConfigCatProvider.create('<sdk_key>');
await OpenFeature.setProviderAndWait(provider);
// Obtain a client instance and evaluate feature flags.
const client = OpenFeature.getClient();
const value = await client.getBooleanValue('isAwesomeFeatureEnabled', false);
console.log(`isAwesomeFeatureEnabled: ${value}`);
// On application shutdown, clean up the OpenFeature provider and the underlying ConfigCat client.
await OpenFeature.clearProviders();
```
### Example using a different polling mode and custom configuration
```javascript
import { OpenFeature } from "@openfeature/server-sdk";
import { ConfigCatProvider } from '@openfeature/config-cat-provider';
import { createConsoleLogger, LogLevel, PollingMode } from 'configcat-node';
// Create and set the provider.
const provider = ConfigCatProvider.create('<sdk_key>', PollingMode.LazyLoad, {
logger: createConsoleLogger(LogLevel.Info),
setupHooks: (hooks) => hooks.on('clientReady', () => console.log('Client is ready!')),
});
await OpenFeature.setProviderAndWait(provider);
// ...
```
## Evaluation Context
The OpenFeature Evaluation Context is mapped to the [ConfigCat User Object](https://configcat.com/docs/advanced/user-object/).
The [ConfigCat User Object](https://configcat.com/docs/advanced/user-object/) has three predefined attributes,
and allows for additional attributes.
The following shows how the attributes are mapped:
| OpenFeature EvaluationContext Field | ConfigCat User Field | Required |
|-------------------------------------|----------------------|----------|
| targetingKey | identifier | yes |
| email | email | no |
| country | country | no |
| _Any Other_ | custom | no |
The custom types are mapped the following way:
| OpenFeature EvaluationContext Field Type | ConfigCat User Field Type |
|-----------------------------------------------|---------------------------|
| string | string |
| number | number |
| boolean | string |
| Array<string> | Array<string> |
| Array | Array |
| object | string |
The following example shows the conversion between an OpenFeature Evaluation Context and the corresponding ConfigCat
User:
#### OpenFeature
```json
{
"targetingKey": "test",
"email": "email",
"country": "country",
"customString": "customString",
"customNumber": 1,
"customBoolean": true,
"customObject": {
"prop1": "1",
"prop2": 2
},
"customStringArray": ["one", "two"],
"customArray": [
1,
"2",
false
]
}
```
#### ConfigCat
```json
{
"identifier": "test",
"email": "email",
"country": "country",
"custom": {
"customString": "customString",
"customBoolean": "true",
"customNumber": 1,
"customObject": "{\"prop1\":\"1\",\"prop2\":2}",
"customStringArray": ["one", "two"],
"customArray": "[1,\"2\",false]"
}
}
```
## Events
The ConfigCat provider emits the
following [OpenFeature events](https://openfeature.dev/specification/types#provider-events):
- PROVIDER_READY
- PROVIDER_ERROR
- PROVIDER_CONFIGURATION_CHANGED
## Building
Run `nx package providers-config-cat` to build the library.
## Running unit tests
Run `nx test providers-config-cat` to execute the unit tests via [Jest](https://jestjs.io).

View File

@ -0,0 +1,3 @@
{
"presets": [["minify", { "builtIns": false }]]
}

View File

@ -0,0 +1,10 @@
/* eslint-disable */
export default {
displayName: 'providers-config-cat',
preset: '../../../jest.preset.js',
transform: {
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../../coverage/libs/providers/config-cat',
};

View File

@ -0,0 +1,72 @@
{
"name": "@openfeature/config-cat-provider",
"version": "0.7.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openfeature/config-cat-provider",
"version": "0.7.6",
"peerDependencies": {
"@openfeature/server-sdk": "^1.13.5",
"configcat-node": "^11.3.1"
}
},
"node_modules/@openfeature/core": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.2.0.tgz",
"integrity": "sha512-JyIiije5f+8Big1xz7UAmxqVmHBuFUI9Dh8DEFG2D1ocgjMm1tEzYXJDr3urCQGNnX9M/cYtNhEcGfyontIgJw==",
"peer": true
},
"node_modules/@openfeature/server-sdk": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.14.0.tgz",
"integrity": "sha512-PGPI6OZdyAy2FZVUiH1suw/WuWZJsIlK2xd1KbRl5rlMLawYk2bKGBGgZYX9rcozsGKOZM6/vaFjCSB6QCjCfw==",
"peer": true,
"engines": {
"node": ">=18"
},
"peerDependencies": {
"@openfeature/core": "1.2.0"
}
},
"node_modules/configcat-common": {
"version": "9.3.1",
"resolved": "https://registry.npmjs.org/configcat-common/-/configcat-common-9.3.1.tgz",
"integrity": "sha512-yVkIbluksD/kZfVyKjLIOpwLrq3/ZRM7Lwrsz89JmbpQ6VtbnelrTQynSPElTtKjrPRZx56v3IZYk3nWTnnM6A==",
"peer": true,
"dependencies": {
"tslib": "^2.4.1"
}
},
"node_modules/configcat-node": {
"version": "11.3.1",
"resolved": "https://registry.npmjs.org/configcat-node/-/configcat-node-11.3.1.tgz",
"integrity": "sha512-7XJbgBpcxlwzlRLmvCtHTkO247Ban2ZkBqlmk+T0wVEt5tXfltgd53SYLYpw7RBWX0ma/QyP5E+/k/UDdMrOCw==",
"peer": true,
"dependencies": {
"configcat-common": "9.3.1",
"tslib": "^2.4.1",
"tunnel": "0.0.6"
},
"engines": {
"node": ">=14"
}
},
"node_modules/tslib": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
"integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
"peer": true
},
"node_modules/tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
"peer": true,
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
}
}
}

View File

@ -0,0 +1,15 @@
{
"name": "@openfeature/config-cat-provider",
"version": "0.7.6",
"license": "Apache-2.0",
"scripts": {
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
"current-version": "echo $npm_package_version"
},
"peerDependencies": {
"@openfeature/server-sdk": "^1.13.5",
"configcat-node": "^11.3.1",
"@openfeature/config-cat-core": "0.1.1",
"configcat-common": "9.4.0"
}
}

View File

@ -0,0 +1,64 @@
{
"name": "providers-config-cat",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/providers/config-cat/src",
"projectType": "library",
"targets": {
"publish": {
"executor": "nx:run-commands",
"options": {
"command": "npm run publish-if-not-exists",
"cwd": "dist/libs/providers/config-cat"
},
"dependsOn": [
{
"target": "package"
}
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"jestConfig": "libs/providers/config-cat/jest.config.ts"
}
},
"package": {
"executor": "@nx/rollup:rollup",
"outputs": ["{options.outputPath}"],
"options": {
"project": "libs/providers/config-cat/package.json",
"outputPath": "dist/libs/providers/config-cat",
"entryFile": "libs/providers/config-cat/src/index.ts",
"tsConfig": "libs/providers/config-cat/tsconfig.lib.json",
"compiler": "tsc",
"generateExportsField": true,
"umdName": "config-cat",
"external": "all",
"format": ["cjs", "esm"],
"assets": [
{
"glob": "package.json",
"input": "./assets",
"output": "./src/"
},
{
"glob": "LICENSE",
"input": "./",
"output": "./"
},
{
"glob": "README.md",
"input": "./libs/providers/config-cat",
"output": "./"
}
]
}
}
},
"tags": []
}

View File

@ -0,0 +1 @@
export * from './lib/config-cat-provider';

View File

@ -0,0 +1,211 @@
import { ConfigCatProvider } from './config-cat-provider';
import { ProviderEvents, ParseError, FlagNotFoundError, TypeMismatchError } from '@openfeature/web-sdk';
import type { HookEvents, IConfigCatCache, ISettingUnion } from 'configcat-js-ssr';
import {
createConsoleLogger,
createFlagOverridesFromMap,
LogLevel,
OverrideBehaviour,
PollingMode,
} from 'configcat-js-ssr';
import type { EventEmitter } from 'events';
describe('ConfigCatProvider', () => {
const targetingKey = 'abc';
let provider: ConfigCatProvider;
let configCatEmitter: EventEmitter<HookEvents>;
const values = {
booleanFalse: false,
booleanTrue: true,
number1: 1,
number2: 2,
stringTest: 'Test',
jsonValid: JSON.stringify({ valid: true }),
jsonInvalid: '{test:123',
jsonPrimitive: JSON.stringify(123),
};
beforeAll(async () => {
provider = ConfigCatProvider.create('__key__', PollingMode.ManualPoll, {
logger: createConsoleLogger(LogLevel.Off),
offline: true,
flagOverrides: createFlagOverridesFromMap(values, OverrideBehaviour.LocalOnly),
});
await provider.initialize();
// Currently there is no option to get access to the event emitter
// eslint-disable-next-line @typescript-eslint/no-explicit-any
configCatEmitter = (provider.configCatClient as any).options.hooks;
});
afterAll(async () => {
await provider.onClose();
});
it('should be an instance of ConfigCatProvider', () => {
expect(provider).toBeInstanceOf(ConfigCatProvider);
});
it('should dispose the configcat client on provider closing', async () => {
const newProvider = ConfigCatProvider.create('__another_key__', PollingMode.AutoPoll, {
logger: createConsoleLogger(LogLevel.Off),
offline: true,
flagOverrides: createFlagOverridesFromMap(values, OverrideBehaviour.LocalOnly),
});
await newProvider.initialize();
if (!newProvider.configCatClient) {
throw Error('No ConfigCat client');
}
const clientDisposeSpy = jest.spyOn(newProvider.configCatClient, 'dispose');
await newProvider.onClose();
expect(clientDisposeSpy).toHaveBeenCalled();
});
describe('events', () => {
it('should emit PROVIDER_CONFIGURATION_CHANGED event', () => {
const handler = jest.fn();
const eventData = { settings: { myFlag: {} as ISettingUnion }, salt: undefined, segments: [] };
provider.events.addHandler(ProviderEvents.ConfigurationChanged, handler);
configCatEmitter.emit('configChanged', eventData);
expect(handler).toHaveBeenCalledWith({
flagsChanged: ['myFlag'],
});
});
it("should emit PROVIDER_READY event when underlying client is initialized after provider's initialize", async () => {
const cacheValue = '253370761200000\nW/"12345678-90a"\n{"f":{"booleanTrue":{"t":0,"v":{"b":true}}}}';
const fakeSharedCache = new (class implements IConfigCatCache {
private _value?: string;
get(key: string) {
return this._value;
}
set(key: string, value: string) {
this._value = value;
}
})();
const provider = ConfigCatProvider.create(
'configcat-sdk-1/1234567890123456789012/1234567890123456789012',
PollingMode.AutoPoll,
{
cache: fakeSharedCache,
logger: createConsoleLogger(LogLevel.Off),
offline: true,
maxInitWaitTimeSeconds: 1,
},
);
const readyHandler = jest.fn();
provider.events.addHandler(ProviderEvents.Ready, readyHandler);
try {
await provider.initialize();
} catch (err) {
expect((err as Error).message).toContain('underlying ConfigCat client could not initialize');
}
expect(readyHandler).toHaveBeenCalledTimes(0);
fakeSharedCache.set('', cacheValue);
// Make sure that the internal cache is refreshed.
await provider.configCatClient?.forceRefreshAsync();
provider.resolveBooleanEvaluation('booleanTrue', false, { targetingKey });
// Wait a little while for the Ready event to be emitted.
await new Promise((resolve) => setTimeout(resolve, 100));
expect(readyHandler).toHaveBeenCalled();
});
});
describe('method resolveBooleanEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', async () => {
await expect(provider.resolveBooleanEvaluation('nonExistent', false, { targetingKey })).rejects.toThrow(
FlagNotFoundError,
);
});
it('should return right value if key exists', async () => {
const value = await provider.resolveBooleanEvaluation('booleanTrue', false, { targetingKey });
expect(value).toHaveProperty('value', values.booleanTrue);
});
it('should throw TypeMismatchError if type is different than expected', async () => {
await expect(provider.resolveBooleanEvaluation('number1', false, { targetingKey })).rejects.toThrow(
TypeMismatchError,
);
});
});
describe('method resolveStringEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', async () => {
await expect(provider.resolveStringEvaluation('nonExistent', 'nonExistent', { targetingKey })).rejects.toThrow(
FlagNotFoundError,
);
});
it('should return right value if key exists', async () => {
const value = await provider.resolveStringEvaluation('stringTest', 'default', { targetingKey });
expect(value).toHaveProperty('value', values.stringTest);
});
it('should throw TypeMismatchError if type is different than expected', async () => {
await expect(provider.resolveStringEvaluation('number1', 'default', { targetingKey })).rejects.toThrow(
TypeMismatchError,
);
});
});
describe('method resolveNumberEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', async () => {
await expect(provider.resolveNumberEvaluation('nonExistent', 0, { targetingKey })).rejects.toThrow(
FlagNotFoundError,
);
});
it('should return right value if key exists', async () => {
const value = await provider.resolveNumberEvaluation('number1', 0, { targetingKey });
expect(value).toHaveProperty('value', values.number1);
});
it('should throw TypeMismatchError if type is different than expected', async () => {
await expect(provider.resolveNumberEvaluation('stringTest', 0, { targetingKey })).rejects.toThrow(
TypeMismatchError,
);
});
});
describe('method resolveObjectEvaluation', () => {
it('should throw FlagNotFoundError if type is different than expected', async () => {
await expect(provider.resolveObjectEvaluation('nonExistent', false, { targetingKey })).rejects.toThrow(
FlagNotFoundError,
);
});
it('should return right value if key exists', async () => {
const value = await provider.resolveObjectEvaluation('jsonValid', {}, { targetingKey });
expect(value).toHaveProperty('value', JSON.parse(values.jsonValid));
});
it('should throw ParseError if string is not valid JSON', async () => {
await expect(provider.resolveObjectEvaluation('jsonInvalid', {}, { targetingKey })).rejects.toThrow(ParseError);
});
it('should return right value if key exists and value is only a JSON primitive', async () => {
const value = await provider.resolveObjectEvaluation('jsonPrimitive', {}, { targetingKey });
expect(value).toHaveProperty('value', JSON.parse(values.jsonPrimitive));
});
});
});

View File

@ -0,0 +1,172 @@
import type { EvaluationContext, JsonValue, Provider, ResolutionDetails, Paradigm } from '@openfeature/server-sdk';
import {
OpenFeatureEventEmitter,
ProviderEvents,
ProviderNotReadyError,
TypeMismatchError,
ParseError,
} from '@openfeature/server-sdk';
import type { PrimitiveType, PrimitiveTypeName } from '@openfeature/config-cat-core';
import { isType, parseError, toResolutionDetails, transformContext } from '@openfeature/config-cat-core';
import type { SettingValue } from 'configcat-common';
import { ClientCacheState, PollingMode } from 'configcat-common';
import type { IConfigCatClient, IConfig, OptionsForPollingMode } from 'configcat-node';
import { getClient } from 'configcat-node';
export class ConfigCatProvider implements Provider {
public readonly events = new OpenFeatureEventEmitter();
private readonly _clientFactory: (provider: ConfigCatProvider) => IConfigCatClient;
private readonly _pollingMode: PollingMode;
private _isProviderReady = false;
private _client?: IConfigCatClient;
public runsOn: Paradigm = 'server';
public metadata = {
name: ConfigCatProvider.name,
};
protected constructor(clientFactory: (provider: ConfigCatProvider) => IConfigCatClient, pollingMode: PollingMode) {
this._clientFactory = clientFactory;
this._pollingMode = pollingMode;
}
public static create<TMode extends PollingMode>(
sdkKey: string,
pollingMode?: TMode,
options?: OptionsForPollingMode<TMode>,
): ConfigCatProvider {
// Let's create a shallow copy to not mess up caller's options object.
options = options ? { ...options } : ({} as OptionsForPollingMode<TMode>);
return new ConfigCatProvider((provider) => {
const oldSetupHooks = options?.setupHooks;
options.setupHooks = (hooks) => {
oldSetupHooks?.(hooks);
hooks.on('configChanged', (config: IConfig) =>
provider.events.emit(ProviderEvents.ConfigurationChanged, {
flagsChanged: Object.keys(config.settings),
}),
);
};
return getClient(sdkKey, pollingMode, options);
}, pollingMode ?? PollingMode.AutoPoll);
}
public async initialize(): Promise<void> {
const client = this._clientFactory(this);
const clientCacheState = await client.waitForReady();
this._client = client;
if (this._pollingMode !== PollingMode.AutoPoll || clientCacheState !== ClientCacheState.NoFlagData) {
this._isProviderReady = true;
} else {
// OpenFeature provider defines ready state like this: "The provider is ready to resolve flags."
// However, ConfigCat client's behavior is different: in some cases ready state may be reached
// even if the client's internal, in-memory cache hasn't been populated yet, that is,
// the client is not able to evaluate feature flags yet. In such cases we throw an error to
// prevent the provider from being set ready right away, and check for the ready state later.
throw Error('The underlying ConfigCat client could not initialize within maxInitWaitTimeSeconds.');
}
}
public get configCatClient() {
return this._client;
}
public async onClose(): Promise<void> {
this._client?.dispose();
}
async resolveBooleanEvaluation(
flagKey: string,
defaultValue: boolean,
context: EvaluationContext,
): Promise<ResolutionDetails<boolean>> {
return this.evaluate(flagKey, 'boolean', defaultValue, context);
}
public async resolveStringEvaluation(
flagKey: string,
defaultValue: string,
context: EvaluationContext,
): Promise<ResolutionDetails<string>> {
return this.evaluate(flagKey, 'string', defaultValue, context);
}
public async resolveNumberEvaluation(
flagKey: string,
defaultValue: number,
context: EvaluationContext,
): Promise<ResolutionDetails<number>> {
return this.evaluate(flagKey, 'number', defaultValue, context);
}
public async resolveObjectEvaluation<U extends JsonValue>(
flagKey: string,
defaultValue: U,
context: EvaluationContext,
): Promise<ResolutionDetails<U>> {
const objectValue = await this.evaluate(flagKey, 'object', defaultValue, context);
return objectValue as ResolutionDetails<U>;
}
protected async evaluate<T extends PrimitiveTypeName>(
flagKey: string,
flagType: T,
defaultValue: PrimitiveType<T>,
context: EvaluationContext,
): Promise<ResolutionDetails<PrimitiveType<T>>> {
if (!this._client) {
throw new ProviderNotReadyError('Provider is not initialized');
}
// Make sure that the user-provided `defaultValue` is compatible with `flagType` as there is
// no guarantee that it actually is. (User may bypass type checking or may not use TypeScript at all.)
if (!isType(flagType, defaultValue)) {
throw new TypeMismatchError();
}
const configCatDefaultValue = flagType !== 'object' ? (defaultValue as SettingValue) : JSON.stringify(defaultValue);
const { value, ...evaluationData } = await this._client.getValueDetailsAsync(
flagKey,
configCatDefaultValue,
transformContext(context),
);
if (!this._isProviderReady && this._client.snapshot().cacheState !== ClientCacheState.NoFlagData) {
// Ideally, we would check ConfigCat client's initialization state in its "background" polling loop.
// This is not possible at the moment, so as a workaround, we do the check on feature flag evaluation.
// There are plans to improve this situation, so let's revise this
// as soon as ConfigCat SDK implements the necessary event.
this._isProviderReady = true;
setTimeout(() => this.events.emit(ProviderEvents.Ready), 0);
}
if (evaluationData.isDefaultValue) {
throw parseError(evaluationData.errorMessage);
}
if (flagType !== 'object') {
// When `flagType` (more precisely, `configCatDefaultValue`) is boolean, string or number,
// ConfigCat SDK guarantees that the returned `value` is compatible with `PrimitiveType<T>`.
// See also: https://configcat.com/docs/sdk-reference/node/#setting-type-mapping
return toResolutionDetails(value as PrimitiveType<T>, evaluationData);
}
let json: JsonValue;
try {
// In this case we can be sure that `value` is string since `configCatDefaultValue` is string,
// which means that ConfigCat SDK is guaranteed to return a string value.
json = JSON.parse(value as string);
} catch (e) {
throw new ParseError(`Unable to parse "${value}" as JSON`);
}
return toResolutionDetails(json as PrimitiveType<T>, evaluationData);
}
}

View File

@ -0,0 +1,21 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"module": "ES6",
"forceConsistentCasingInFileNames": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

View File

@ -0,0 +1,10 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"],
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
}

View File

@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"module": "commonjs",
"types": ["jest", "node"]
},
"include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
}

View File

@ -0,0 +1,10 @@
{
"presets": [
[
"@nx/js/babel",
{
"useBuiltIns": "usage"
}
]
]
}

View File

@ -0,0 +1,18 @@
{
"extends": ["../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@ -0,0 +1,51 @@
# Changelog
## [0.3.1](https://github.com/open-feature/js-sdk-contrib/compare/env-var-provider-v0.3.0...env-var-provider-v0.3.1) (2024-07-10)
### 🐛 Bug Fixes
* **env-var:** set runs on property to server ([#981](https://github.com/open-feature/js-sdk-contrib/issues/981)) ([919761d](https://github.com/open-feature/js-sdk-contrib/commit/919761d8926fc102c84b11288d4c6d1ff3e3fc05))
## [0.3.0](https://github.com/open-feature/js-sdk-contrib/compare/env-var-provider-v0.2.0...env-var-provider-v0.3.0) (2024-03-25)
### ⚠ BREAKING CHANGES
* update OpenFeature SDK peer ([#798](https://github.com/open-feature/js-sdk-contrib/issues/798))
### ✨ New Features
* update OpenFeature SDK peer ([#798](https://github.com/open-feature/js-sdk-contrib/issues/798)) ([ebd16b9](https://github.com/open-feature/js-sdk-contrib/commit/ebd16b9630bcc6b253a7061a144e8d476cd8b586))
### 🧹 Chore
* address lint issues ([#642](https://github.com/open-feature/js-sdk-contrib/issues/642)) ([bbd9aee](https://github.com/open-feature/js-sdk-contrib/commit/bbd9aee896dc4a0817f379b799a1b8d331ee76c6))
* fix lint issues and bump server sdk version ([#715](https://github.com/open-feature/js-sdk-contrib/issues/715)) ([bd57177](https://github.com/open-feature/js-sdk-contrib/commit/bd571770f3a1a01bd62663dc3473273449f96c5c))
## [0.2.0](https://github.com/open-feature/js-sdk-contrib/compare/env-var-provider-v0.1.1...env-var-provider-v0.2.0) (2023-10-11)
### ⚠ BREAKING CHANGES
* use @openfeature/server-sdk peer ([#608](https://github.com/open-feature/js-sdk-contrib/issues/608))
### 🐛 Bug Fixes
* packaging issues impacting babel/react ([#596](https://github.com/open-feature/js-sdk-contrib/issues/596)) ([0446eab](https://github.com/open-feature/js-sdk-contrib/commit/0446eab5cf9b45ce7de251b4f5feb8df1d499b9d))
### 🧹 Chore
* correct publish executor ([#378](https://github.com/open-feature/js-sdk-contrib/issues/378)) ([395ed18](https://github.com/open-feature/js-sdk-contrib/commit/395ed186de8811ae249f087821fdbdf8899c19f2))
* migrate to nx 16 ([#366](https://github.com/open-feature/js-sdk-contrib/issues/366)) ([7a9c201](https://github.com/open-feature/js-sdk-contrib/commit/7a9c201d16fd7f070a1bcd2e359487ba6e7b78d7))
* update nx, run migrations ([#552](https://github.com/open-feature/js-sdk-contrib/issues/552)) ([a88d8fc](https://github.com/open-feature/js-sdk-contrib/commit/a88d8fc097789fd7f56011e6ebb66070f52c6e56))
* use @openfeature/server-sdk peer ([#608](https://github.com/open-feature/js-sdk-contrib/issues/608)) ([ae3732a](https://github.com/open-feature/js-sdk-contrib/commit/ae3732a9068f684517db28ea1ae27b29a35e6b16))
## [0.1.1](https://github.com/open-feature/js-sdk-contrib/compare/env-var-provider-v0.1.0...env-var-provider-v0.1.1) (2023-03-02)
### Features
* initial environment variable provider ([#239](https://github.com/open-feature/js-sdk-contrib/issues/239)) ([4c5e06f](https://github.com/open-feature/js-sdk-contrib/commit/4c5e06f1b6b13b85096c424e0d52bc182f28bc33))

View File

@ -0,0 +1,96 @@
# Environment Variable Provider
The environment variable provider is a great way to start using OpenFeature.
It doesn't require any infrastructure to setup or manage, and provides a simple way to gain experience with the core concepts of feature flagging.
However, it doesn't support features such as dynamic updates at run-time or contextual flag evaluation.
That's where feature flags become extremely powerful!
Thankfully, the OpenFeature SDK supports basic providers such at this one, while making it simple to switch to a more powerful system when the time is right.
## Installation
```
$ npm install @openfeature/env-var-provider
```
Required peer dependencies
```
$ npm install @openfeature/server-sdk
```
## Usage
The environment variable provider uses environment variables to determine the value of a feature flag.
It supports `booleans`, `strings`, `numbers` and `objects` by attempting to interpret the value of an environment variable to the requested type.
The default value will be returned if the environment variable doesn't exist or the value can't be cast to the desired type.
```typescript
// Register the environment variable provider globally
OpenFeature.setProvider(new EnvVarProvider());
```
### Available options
| Option name | Type | Default |
| ------------------- | ------- | ------- |
| disableConstantCase | boolean | false |
## Examples
### Boolean example
```sh
# Start a hypothetical application with the ENABLE_NEW_FEATURE environment variable
ENABLE_NEW_FEATURE=true node my-app.js
```
```typescript
const client = OpenFeature.getClient();
client.getBooleanValue('enable-new-feature', false);
```
### Number example
```sh
# Start a hypothetical application with the DIFFICULTY_MULTIPLIER environment variable
DIFFICULTY_MULTIPLIER=5 node my-app.js
```
```typescript
const client = OpenFeature.getClient();
client.getNumberValue('difficulty-multiplier', 0);
```
### String example
```sh
# Start a hypothetical application with the WELCOME_MESSAGE environment variable
WELCOME_MESSAGE=yo node my-app.js
```
```typescript
const client = OpenFeature.getClient();
client.getStringValue('welcome-message', 'hi');
```
### Object example
```sh
# Start a hypothetical application with the PREFERRED_SDK environment variable
PREFERRED_SDK='{"name": "openfeature"}' node my-app.js
```
```typescript
const client = OpenFeature.getClient();
client.getObjectValue('preferred-sdk', { name: 'OpenFeature' });
```
## Development
### Building
Run `nx package providers-env-var` to build the library.
### Running unit tests
Run `nx test providers-env-var` to execute the unit tests via [Jest](https://jestjs.io).

View File

@ -0,0 +1,3 @@
{
"presets": [["minify", { "builtIns": false }]]
}

View File

@ -0,0 +1,15 @@
/* eslint-disable */
export default {
displayName: 'providers-env-var',
preset: '../../../jest.preset.js',
transform: {
'^.+\\.[tj]s$': [
'ts-jest',
{
tsconfig: '<rootDir>/tsconfig.spec.json',
},
],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../../coverage/libs/providers/env-var',
};

View File

@ -0,0 +1,12 @@
{
"name": "@openfeature/env-var-provider",
"version": "0.3.1",
"license": "Apache-2.0",
"scripts": {
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
"current-version": "echo $npm_package_version"
},
"peerDependencies": {
"@openfeature/server-sdk": "^1.13.0"
}
}

View File

@ -0,0 +1,64 @@
{
"name": "providers-env-var",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/providers/env-var/src",
"projectType": "library",
"targets": {
"publish": {
"executor": "nx:run-commands",
"options": {
"command": "npm run publish-if-not-exists",
"cwd": "dist/libs/providers/env-var"
},
"dependsOn": [
{
"target": "package"
}
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"jestConfig": "libs/providers/env-var/jest.config.ts"
}
},
"package": {
"executor": "@nx/rollup:rollup",
"outputs": ["{options.outputPath}"],
"options": {
"project": "libs/providers/env-var/package.json",
"outputPath": "dist/libs/providers/env-var",
"entryFile": "libs/providers/env-var/src/index.ts",
"tsConfig": "libs/providers/env-var/tsconfig.lib.json",
"compiler": "tsc",
"generateExportsField": true,
"umdName": "Env Var",
"external": "all",
"format": ["cjs", "esm"],
"assets": [
{
"glob": "package.json",
"input": "./assets",
"output": "./src/"
},
{
"glob": "LICENSE",
"input": "./",
"output": "./"
},
{
"glob": "README.md",
"input": "./libs/providers/env-var",
"output": "./"
}
]
}
}
},
"tags": []
}

Some files were not shown because too many files have changed in this diff Show More