Skip to content

Releases: featbit/featbit

v3.3.3

08 May 14:12
7aa6e64
Compare
Choose a tag to compare

What's Changed

Full Changelog: 3.3.2...3.3.3

v3.3.2

24 Apr 07:56
5113bdd
Compare
Choose a tag to compare

What's Changed

Breaking changes

The API used to retrieve client-side feature flags has a new response format due to changes in pull request #635. This may affect existing integrations that rely on the previous format.

Old Format

[
    {
       "id":"hello-world",
       "variation":"true",
       "variationType":"boolean",
       "variationId":"fafb6319-9270-4a4b-b2c3-12d2be29e69a",
       "sendToExperiment":false
    }
]

New Format

{
   "messageType":"data-sync",
   "data":{
      "eventType":"full",
      "userKeyId":"bot-id",
      "featureFlags":[
         {
            "id":"hello-world",
            "variation":"true",
            "variationType":"boolean",
            "variationId":"fafb6319-9270-4a4b-b2c3-12d2be29e69a",
            "matchReason":"flag disabled",
            "variationOptions":[
               {
                  "id":"fafb6319-9270-4a4b-b2c3-12d2be29e69a",
                  "value":"true"
               },
               {
                  "id":"3f02a597-a150-4c3f-83b9-27a2de80c7dc",
                  "value":"false"
               }
            ],
            "sendToExperiment":false,
            "timestamp":1712755780494
         }
      ]
   }
}

Full Changelog: 3.3.1...3.3.2

v3.3.1

13 Apr 13:33
31621b1
Compare
Choose a tag to compare

What's Changed

Breaking Change in API Service

  • Background: In PR #623 we upgraded some packages to address vulnerabilities. However the new version of System.IdentityModel.Tokens.Jwt package introduces a breaking change.
  • Impact: JWT key (environment variable: Jwt__Key) in the API service now must be longer than 32 characters.

Full Changelog: 3.3.0...3.3.1

v3.3.0

25 Mar 09:25
3dccece
Compare
Choose a tag to compare

What's Changed

Breaking Changes

We normalize redis cache keys in PR #603, So after upgrading to v3.3.0, you will need to

  • restart the Api service to automatically repopulate the new Redis cache

As for cleaning up the old Redis cache, check out this comment. If you have any questions, feel free to contact us for assistance.

New Contributors

Full Changelog: 3.2.1...3.3.0

v3.2.1

26 Feb 14:42
6dc8f8e
Compare
Choose a tag to compare

What's Changed

New Contributors

  • Thanks for @omahs made his first contribution in #600 ❤️

Full Changelog: 3.2.0...3.2.1

v3.2.0

05 Feb 14:11
fe20d9b
Compare
Choose a tag to compare

What's Changed

🎉🎉 Big thanks to @wss-rbrennan for his contribution to the backend services otel integration in PR #584

New Contributors

Full Changelog: 3.1.0...3.2.0

v3.1.0

09 Jan 08:48
0a213b6
Compare
Choose a tag to compare

What's Changed

Full Changelog: 3.0.1...3.1.0

v3.0.1

29 Nov 08:01
01f77b4
Compare
Choose a tag to compare

What's Changed

  • 📖 doc: fix broken links in README.md by @deleteLater in #546
  • 🏗 infra: support set redis password for services by @dsun0720 in #545
  • 🏗 infra: build latest image only if github action runs from main branch by @deleteLater in #547
  • 🐛 fix: add missing REDIS_DB parameter by @dsun0720 in #548

Full Changelog: 3.0.0...3.0.1

v2.5.3

23 Nov 15:04
Compare
Choose a tag to compare

Breaking Changes

  • 🏗 infra: support set redis password for services by @dsun0720 in #545

Full Changelog: 2.5.2...2.5.3

v3.0.0

17 Nov 16:03
1bf3063
Compare
Choose a tag to compare

What's Changed

Breaking Changes

  • Introduce Workspace in PR #534, which is a higher level of organization
  • Rename account to organization to avoid misconception in PR #530

If you're upgrading from version 2.5.x, please run the following script against your MongoDB:

// PR #534
const workspaceId = UUID()
db.Workspaces.deleteMany({})
db.Workspaces.insertOne(
    {
        _id: workspaceId,
        name: "Default Workspace",
        key: "default-workspace",
        sso: null,
        license: null,
        createdAt: new Date(),
        updatedAt: new Date()
    }
);

const orgCursor = db.Organizations.find({});
orgCursor.forEach(doc => {
    db.Organizations.updateOne({ _id: doc._id }, { $set: { workspaceId: workspaceId } });
});

const userCursor = db.Users.find({});
userCursor.forEach(doc => {
    db.Users.updateOne({ _id: doc._id }, { $set: { workspaceId: workspaceId } });
});

// PR #530
const policyCursor = db.Policies.find({ "statements.resourceType": "account" });
policyCursor.forEach(doc => {
    doc.statements.forEach(statement => {
        if (statement.resourceType === "account") {
            statement.resourceType = "organization";
            statement.resources = statement.resources.map(resource => resource.replace(/^account\//, "organization/"));
        }
    });

    db.Policies.updateOne({ _id: doc._id }, { $set: { statements: doc.statements } });
});

Full Changelog: 2.5.2...3.0.0