flagsmith-nodejs 2.0.1 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/flagsmith-engine/environments/integrations/models.d.ts +4 -0
- package/build/flagsmith-engine/environments/integrations/models.js +11 -0
- package/build/flagsmith-engine/environments/models.d.ts +25 -0
- package/build/flagsmith-engine/environments/models.js +29 -0
- package/build/flagsmith-engine/environments/util.d.ts +3 -0
- package/build/flagsmith-engine/environments/util.js +21 -0
- package/build/flagsmith-engine/features/constants.d.ts +4 -0
- package/build/flagsmith-engine/features/constants.js +7 -0
- package/build/flagsmith-engine/features/models.d.ts +37 -0
- package/build/flagsmith-engine/features/models.js +122 -0
- package/build/flagsmith-engine/features/util.d.ts +4 -0
- package/build/flagsmith-engine/features/util.js +27 -0
- package/build/flagsmith-engine/identities/models.d.ts +15 -0
- package/build/flagsmith-engine/identities/models.js +112 -0
- package/build/flagsmith-engine/identities/traits/models.d.ts +5 -0
- package/build/flagsmith-engine/identities/traits/models.js +11 -0
- package/build/flagsmith-engine/identities/util.d.ts +4 -0
- package/build/flagsmith-engine/identities/util.js +46 -0
- package/build/flagsmith-engine/index.d.ts +8 -0
- package/build/flagsmith-engine/index.js +115 -0
- package/build/flagsmith-engine/organisations/models.d.ts +9 -0
- package/build/flagsmith-engine/organisations/models.js +21 -0
- package/build/flagsmith-engine/organisations/util.d.ts +2 -0
- package/build/flagsmith-engine/organisations/util.js +8 -0
- package/build/flagsmith-engine/projects/models.d.ts +10 -0
- package/build/flagsmith-engine/projects/models.js +14 -0
- package/build/flagsmith-engine/projects/util.d.ts +2 -0
- package/build/flagsmith-engine/projects/util.js +15 -0
- package/build/flagsmith-engine/segments/constants.d.ts +26 -0
- package/build/flagsmith-engine/segments/constants.js +31 -0
- package/build/flagsmith-engine/segments/evaluators.d.ts +6 -0
- package/build/flagsmith-engine/segments/evaluators.js +37 -0
- package/build/flagsmith-engine/segments/models.d.ts +37 -0
- package/build/flagsmith-engine/segments/models.js +114 -0
- package/build/flagsmith-engine/segments/util.d.ts +6 -0
- package/build/flagsmith-engine/segments/util.js +33 -0
- package/build/flagsmith-engine/utils/collections.d.ts +3 -0
- package/build/flagsmith-engine/utils/collections.js +26 -0
- package/build/flagsmith-engine/utils/errors.d.ts +2 -0
- package/build/flagsmith-engine/utils/errors.js +26 -0
- package/build/flagsmith-engine/utils/hashing/index.d.ts +9 -0
- package/build/flagsmith-engine/utils/hashing/index.js +60 -0
- package/build/flagsmith-engine/utils/index.d.ts +1 -0
- package/build/flagsmith-engine/utils/index.js +17 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +11 -0
- package/build/sdk/analytics.d.ts +28 -0
- package/build/sdk/analytics.js +102 -0
- package/build/sdk/errors.d.ts +4 -0
- package/build/sdk/errors.js +34 -0
- package/build/sdk/index.d.ts +123 -0
- package/build/sdk/index.js +492 -0
- package/build/sdk/models.d.ts +55 -0
- package/build/sdk/models.js +149 -0
- package/build/sdk/polling_manager.d.ts +9 -0
- package/build/sdk/polling_manager.js +72 -0
- package/build/sdk/types.d.ts +7 -0
- package/build/sdk/types.js +2 -0
- package/build/sdk/utils.d.ts +12 -0
- package/build/sdk/utils.js +92 -0
- package/example/package-lock.json +997 -21
- package/example/server/api/index.js +6 -3
- package/example/server/index.js +1 -1
- package/package.json +3 -2
- package/sdk/analytics.ts +2 -2
- package/sdk/index.ts +4 -0
- package/sdk/models.ts +1 -1
- package/sdk/types.ts +4 -4
- package/tests/sdk/analytics.test.ts +10 -10
- package/tests/sdk/utils.ts +2 -1
- package/.idea/flagsmith-nodejs-client.iml +0 -12
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const Router = require('express').Router;
|
|
2
2
|
const Flagsmith = require('../../../build');
|
|
3
3
|
const environmentKey = '';
|
|
4
|
+
const nodecache = require("node-cache");
|
|
5
|
+
|
|
4
6
|
if (!environmentKey) {
|
|
5
7
|
throw new Error(
|
|
6
8
|
'Please generate a Server Side SDK Key in environment settings to run the example'
|
|
@@ -9,9 +11,10 @@ if (!environmentKey) {
|
|
|
9
11
|
const flagsmith = new Flagsmith({
|
|
10
12
|
environmentKey,
|
|
11
13
|
enableLocalEvaluation: true,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
cache: new nodecache({
|
|
15
|
+
stdTTL: 10,
|
|
16
|
+
checkperiod: 10,
|
|
17
|
+
}),
|
|
15
18
|
});
|
|
16
19
|
|
|
17
20
|
module.exports = () => {
|
package/example/server/index.js
CHANGED
|
@@ -15,7 +15,7 @@ app.use(bodyParser.json());
|
|
|
15
15
|
app.use('/api', api());
|
|
16
16
|
|
|
17
17
|
app.server.listen(PORT);
|
|
18
|
-
console.log('Server started on port ' +
|
|
18
|
+
console.log('Server started on port ' + PORT);
|
|
19
19
|
console.log();
|
|
20
20
|
console.log('Go to http://localhost:' + PORT + '/api');
|
|
21
21
|
console.log('To get an example response for getFlags');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flagsmith-nodejs",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Flagsmith lets you manage features flags and remote config across web, mobile and server side applications. Deliver true Continuous Integration. Get builds out faster. Control who has access to new features.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"test:watch": "jest --coverage --watch --coverageReporters='text'",
|
|
47
47
|
"test:debug": "node --inspect-brk node_modules/.bin/jest --coverage --watch --coverageReporters='text'",
|
|
48
48
|
"build": "tsc",
|
|
49
|
-
"
|
|
49
|
+
"deploy": "npm i && npm run build && npm publish",
|
|
50
|
+
"deploy:beta": "npm i && npm run build && npm publish --tag beta",
|
|
50
51
|
"prepare": "husky install"
|
|
51
52
|
},
|
|
52
53
|
"dependencies": {
|
package/sdk/analytics.ts
CHANGED
|
@@ -49,8 +49,8 @@ export class AnalyticsProcessor {
|
|
|
49
49
|
this.lastFlushed = Date.now();
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
trackFeature(
|
|
53
|
-
this.analyticsData[
|
|
52
|
+
trackFeature(featureName: string) {
|
|
53
|
+
this.analyticsData[featureName] = (this.analyticsData[featureName] || 0) + 1;
|
|
54
54
|
if (Date.now() - this.lastFlushed > ANALYTICS_TIMER * 1000) {
|
|
55
55
|
this.flush();
|
|
56
56
|
}
|
package/sdk/index.ts
CHANGED
|
@@ -298,6 +298,7 @@ export class Flagsmith {
|
|
|
298
298
|
defaultFlagHandler: this.defaultFlagHandler
|
|
299
299
|
});
|
|
300
300
|
if (!!this.cache) {
|
|
301
|
+
// @ts-ignore node-cache types are incorrect, ttl should be optional
|
|
301
302
|
await this.cache.set('flags', flags);
|
|
302
303
|
}
|
|
303
304
|
return flags;
|
|
@@ -321,6 +322,7 @@ export class Flagsmith {
|
|
|
321
322
|
});
|
|
322
323
|
|
|
323
324
|
if (!!this.cache) {
|
|
325
|
+
// @ts-ignore node-cache types are incorrect, ttl should be optional
|
|
324
326
|
await this.cache.set(`flags-${identifier}`, flags);
|
|
325
327
|
}
|
|
326
328
|
|
|
@@ -336,6 +338,7 @@ export class Flagsmith {
|
|
|
336
338
|
defaultFlagHandler: this.defaultFlagHandler
|
|
337
339
|
});
|
|
338
340
|
if (!!this.cache) {
|
|
341
|
+
// @ts-ignore node-cache types are incorrect, ttl should be optional
|
|
339
342
|
await this.cache.set('flags', flags);
|
|
340
343
|
}
|
|
341
344
|
return flags;
|
|
@@ -361,6 +364,7 @@ export class Flagsmith {
|
|
|
361
364
|
defaultFlagHandler: this.defaultFlagHandler
|
|
362
365
|
});
|
|
363
366
|
if (!!this.cache) {
|
|
367
|
+
// @ts-ignore node-cache types are incorrect, ttl should be optional
|
|
364
368
|
await this.cache.set(`flags-${identifier}`, flags);
|
|
365
369
|
}
|
|
366
370
|
return flags;
|
package/sdk/models.ts
CHANGED
package/sdk/types.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Flags } from "./models";
|
|
2
2
|
|
|
3
3
|
export interface FlagsmithCache {
|
|
4
|
-
get(key: string): Promise<Flags
|
|
5
|
-
set(key: string, value: Flags): Promise<
|
|
6
|
-
has(key: string): Promise<boolean>;
|
|
4
|
+
get(key: string): Promise<Flags|undefined> | undefined;
|
|
5
|
+
set(key: string, value: Flags, ttl: string | number): boolean | Promise<boolean>;
|
|
6
|
+
has(key: string): boolean | Promise<boolean>;
|
|
7
7
|
[key: string]: any;
|
|
8
|
-
}
|
|
8
|
+
}
|
|
@@ -8,28 +8,28 @@ afterEach(() => {
|
|
|
8
8
|
|
|
9
9
|
test('test_analytics_processor_track_feature_updates_analytics_data', () => {
|
|
10
10
|
const aP = analyticsProcessor();
|
|
11
|
-
aP.trackFeature(
|
|
12
|
-
expect(aP.analyticsData[
|
|
11
|
+
aP.trackFeature("myFeature");
|
|
12
|
+
expect(aP.analyticsData["myFeature"]).toBe(1);
|
|
13
13
|
|
|
14
|
-
aP.trackFeature(
|
|
15
|
-
expect(aP.analyticsData[
|
|
14
|
+
aP.trackFeature("myFeature");
|
|
15
|
+
expect(aP.analyticsData["myFeature"]).toBe(2);
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
test('test_analytics_processor_flush_clears_analytics_data', async () => {
|
|
19
19
|
const aP = analyticsProcessor();
|
|
20
|
-
aP.trackFeature(
|
|
20
|
+
aP.trackFeature("myFeature");
|
|
21
21
|
await aP.flush();
|
|
22
22
|
expect(aP.analyticsData).toStrictEqual({});
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
test('test_analytics_processor_flush_post_request_data_match_ananlytics_data', async () => {
|
|
26
26
|
const aP = analyticsProcessor();
|
|
27
|
-
aP.trackFeature(
|
|
28
|
-
aP.trackFeature(
|
|
27
|
+
aP.trackFeature("myFeature1");
|
|
28
|
+
aP.trackFeature("myFeature2");
|
|
29
29
|
await aP.flush();
|
|
30
30
|
expect(fetch).toHaveBeenCalledTimes(1);
|
|
31
31
|
expect(fetch).toHaveBeenCalledWith('http://testUrlanalytics/flags/', {
|
|
32
|
-
body: '{"
|
|
32
|
+
body: '{"myFeature1":1,"myFeature2":1}',
|
|
33
33
|
headers: { 'Content-Type': 'application/json', 'X-Environment-Key': 'test-key' },
|
|
34
34
|
method: 'POST',
|
|
35
35
|
timeout: 3
|
|
@@ -39,9 +39,9 @@ test('test_analytics_processor_flush_post_request_data_match_ananlytics_data', a
|
|
|
39
39
|
jest.useFakeTimers()
|
|
40
40
|
test('test_analytics_processor_flush_post_request_data_match_ananlytics_data_test', async () => {
|
|
41
41
|
const aP = analyticsProcessor();
|
|
42
|
-
aP.trackFeature(
|
|
42
|
+
aP.trackFeature("myFeature1");
|
|
43
43
|
setTimeout(() => {
|
|
44
|
-
aP.trackFeature(
|
|
44
|
+
aP.trackFeature("myFeature2");
|
|
45
45
|
expect(fetch).toHaveBeenCalledTimes(1);
|
|
46
46
|
}, 15000);
|
|
47
47
|
jest.runOnlyPendingTimers();
|
package/tests/sdk/utils.ts
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="WEB_MODULE" version="4">
|
|
3
|
-
<component name="NewModuleRootManager">
|
|
4
|
-
<content url="file://$MODULE_DIR$">
|
|
5
|
-
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
6
|
-
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
7
|
-
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
8
|
-
</content>
|
|
9
|
-
<orderEntry type="inheritedJdk" />
|
|
10
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
11
|
-
</component>
|
|
12
|
-
</module>
|
package/.idea/modules.xml
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="ProjectModuleManager">
|
|
4
|
-
<modules>
|
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/flagsmith-nodejs-client.iml" filepath="$PROJECT_DIR$/.idea/flagsmith-nodejs-client.iml" />
|
|
6
|
-
</modules>
|
|
7
|
-
</component>
|
|
8
|
-
</project>
|