@forge/feature-flags-node 1.0.0-next.0 → 1.1.0-next.0
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/CHANGELOG.md +24 -0
- package/README.md +3 -3
- package/out/data-adapter.js +1 -1
- package/out/index.js +8 -7
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @forge/feature-flags-node
|
|
2
2
|
|
|
3
|
+
## 1.1.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- e8ed058: Fixed the import statements and updated the polling duration
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- @forge/api@6.0.3-next.0
|
|
12
|
+
|
|
13
|
+
## 1.0.0
|
|
14
|
+
|
|
15
|
+
### Major Changes
|
|
16
|
+
|
|
17
|
+
- ebad936: Initial release of @forge/feature-flags-node
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [7abca30]
|
|
22
|
+
- Updated dependencies [8916328]
|
|
23
|
+
- Updated dependencies [e118b07]
|
|
24
|
+
- Updated dependencies [ebad936]
|
|
25
|
+
- @forge/api@6.0.2
|
|
26
|
+
|
|
3
27
|
## 1.0.0-next.0
|
|
4
28
|
|
|
5
29
|
### Major Changes
|
package/README.md
CHANGED
|
@@ -85,18 +85,18 @@ export const handler = async (payload, context) => {
|
|
|
85
85
|
|
|
86
86
|
## Polling Behavior
|
|
87
87
|
|
|
88
|
-
The package automatically polls for feature flag updates every
|
|
88
|
+
The package automatically polls for feature flag updates every 60 seconds:
|
|
89
89
|
|
|
90
90
|
1. **Cache Updates**: New data is cached for fallback purposes
|
|
91
91
|
2. **Error Resilience**: If a fetch fails, the package falls back to cached data
|
|
92
|
-
3. **Immediate Updates**: Feature flag changes are reflected within
|
|
92
|
+
3. **Immediate Updates**: Feature flag changes are reflected within 60 seconds
|
|
93
93
|
|
|
94
94
|
```typescript
|
|
95
95
|
// Polling happens automatically in the background
|
|
96
96
|
const featureFlags = new ForgeFeatureFlags();
|
|
97
97
|
await featureFlags.initialize();
|
|
98
98
|
|
|
99
|
-
// Feature flags are automatically updated every
|
|
99
|
+
// Feature flags are automatically updated every 60 seconds
|
|
100
100
|
// No manual intervention required
|
|
101
101
|
```
|
|
102
102
|
|
package/out/data-adapter.js
CHANGED
|
@@ -6,7 +6,7 @@ class ForgeDataAdapter {
|
|
|
6
6
|
pollingIntervalMs;
|
|
7
7
|
pollingEnabled;
|
|
8
8
|
cache = new Map();
|
|
9
|
-
constructor(pollingIntervalMs =
|
|
9
|
+
constructor(pollingIntervalMs = 60000, pollingEnabled = true) {
|
|
10
10
|
this.pollingIntervalMs = pollingIntervalMs;
|
|
11
11
|
this.pollingEnabled = pollingEnabled;
|
|
12
12
|
}
|
package/out/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ForgeFeatureFlags = void 0;
|
|
4
|
-
const
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const statsig_node_1 = tslib_1.__importDefault(require("statsig-node"));
|
|
5
6
|
const data_adapter_1 = require("./data-adapter");
|
|
6
7
|
class ForgeFeatureFlags {
|
|
7
8
|
initialized = false;
|
|
@@ -11,10 +12,10 @@ class ForgeFeatureFlags {
|
|
|
11
12
|
return;
|
|
12
13
|
}
|
|
13
14
|
try {
|
|
14
|
-
statsig_node_1.
|
|
15
|
+
statsig_node_1.default.shutdown();
|
|
15
16
|
}
|
|
16
17
|
catch { }
|
|
17
|
-
this.dataAdapter = new data_adapter_1.ForgeDataAdapter(
|
|
18
|
+
this.dataAdapter = new data_adapter_1.ForgeDataAdapter(60000, true);
|
|
18
19
|
const statsigOptions = {
|
|
19
20
|
environment: { tier: config.environment || 'development' },
|
|
20
21
|
disableRulesetsSync: false,
|
|
@@ -23,18 +24,18 @@ class ForgeFeatureFlags {
|
|
|
23
24
|
localMode: true,
|
|
24
25
|
dataAdapter: this.dataAdapter
|
|
25
26
|
};
|
|
26
|
-
await statsig_node_1.
|
|
27
|
+
await statsig_node_1.default.initialize('forge-internal-key', statsigOptions);
|
|
27
28
|
this.initialized = true;
|
|
28
29
|
}
|
|
29
30
|
checkFlag(user, flagName) {
|
|
30
31
|
this.ensureInitialized();
|
|
31
|
-
return statsig_node_1.
|
|
32
|
+
return statsig_node_1.default.checkGate(this.convertUser(user), flagName);
|
|
32
33
|
}
|
|
33
34
|
getFeatureFlags(user, flagNames) {
|
|
34
35
|
this.ensureInitialized();
|
|
35
36
|
const results = {};
|
|
36
37
|
for (const flagName of flagNames) {
|
|
37
|
-
results[flagName] = statsig_node_1.
|
|
38
|
+
results[flagName] = statsig_node_1.default.checkGate(this.convertUser(user), flagName);
|
|
38
39
|
}
|
|
39
40
|
return results;
|
|
40
41
|
}
|
|
@@ -42,7 +43,7 @@ class ForgeFeatureFlags {
|
|
|
42
43
|
if (!this.initialized) {
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
|
-
statsig_node_1.
|
|
46
|
+
statsig_node_1.default.shutdown();
|
|
46
47
|
if (this.dataAdapter) {
|
|
47
48
|
await this.dataAdapter.shutdown();
|
|
48
49
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/feature-flags-node",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0-next.0",
|
|
4
4
|
"description": "Feature Flags Node SDK for Atlassian Forge apps running on Node Runtime",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"@types/node": "20.19.1"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@forge/api": "^6.0.
|
|
18
|
+
"@forge/api": "^6.0.3-next.0",
|
|
19
19
|
"statsig-node": "^6.4.3"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|