0.4.9-pre.0 • Published 6 months ago

@prefab-cloud/prefab-cloud-node v0.4.9-pre.0

Weekly downloads
-
License
ISC
Repository
-
Last release
6 months ago

prefab-cloud-nodejs

Prefab Node.js client


Install the client

npm install @prefab-cloud/prefab-cloud-node or yarn add @prefab-cloud/prefab-cloud-node

Required Peer Dependencies

This library requires the long package to handle 64-bit integers properly:

npm install long
# or
yarn add long

Important: The long package must be directly installed in your project. Some environments (particularly Heroku) require this dependency to be in your project's direct dependencies for proper module resolution. Without it, you may encounter issues with integer values being parsed incorrectly.

Usage

Set up a Prefab client.

import { Prefab } from "@prefab-cloud/prefab-cloud-node";

if (!process.env.PREFAB_API_KEY) {
  throw new Error("PREFAB_API_KEY is not set");
}

const prefab = new Prefab({
  apiKey: process.env.PREFAB_API_KEY,
  enableSSE: true,
  enablePolling: true,
});

await prefab.init();

After the init completes you can use

  • prefab.get('some.config.name') returns a raw value
  • prefab.isFeatureEnabled('some.feature.name') returns true or false
  • prefab.shouldLog({loggerName, desiredLevel, defaultLevel, contexts}) returns true or false

Prefab supports context for intelligent rule-based evaluation of get and isFeatureEnabled based on the current request/device/user/etc.

Given

const context = new Map([
  [
    "user",
    new Map([
      ["key", "some-unique-identifier"],
      ["country", "US"],
    ]),
  ],

  [
    "subscription",
    new Map([
      ["key", "pro-sub"],
      ["plan", "pro"],
    ]),
  ],
]);

You can pass this in to each call

  • prefab.get('some.config.name', context, defaultValue)
  • prefab.isFeatureEnabled('some.feature.name', context, false)

Or you can set the context in a block (perhaps surrounding evaluation of a web request)

prefab.inContext(context, (pf) => {
  const optionalJustInTimeContext = { ... }

  console.log(pf.get("some.config.name", optionalJustInTimeContext, defaultValue))
  console.log(pf.isEnabled("some.config.name", optionalJustInTimeContext, false))
})

Note that you can also provide Context as an object instead of a Map, e.g.:

{
  user: {
    key: "some-unique-identifier",
    country: "US"
  },
  subscription: {
    key: "pro-sub",
    plan: "pro"
  }
}

Option Definitions

Besides apiKey, you can initialize new Prefab(...) with the following options

NameDescriptionDefault
collectEvaluationSummariesSend counts of config/flag evaluation results back to Prefab to view in web apptrue
collectLoggerCountsSend counts of logger usage back to Prefab to power log-levels configuration screentrue
contextUploadModeUpload either context "shapes" (the names and data types your app uses in prefab contexts) or periodically send full example contexts"periodicExample"
defaultLevelLevel to be used as the min-verbosity for a loggerPath if no value is configured in Prefab"warn"
enableSSEWhether or not we should listen for live changes from Prefabtrue
enablePollingWhether or not we should poll for changes from Prefabfalse

Publishing a new version of the library

  • Ensure you have the latest on the main branch
  • Update the changelog and commit
  • Run npm run prep to build the new version
  • Run npm version patch to bump the version number (adjust accordingly for minor/major)
  • Run npm run prep again and the working directory should be clean
  • Push main to github
  • Run npm publish --access public to publish the new version to npm
0.4.6-pre23

7 months ago

0.4.6-pre22

8 months ago

0.4.8

7 months ago

0.4.6-pre21

8 months ago

0.4.6-pre20

8 months ago

0.4.9-pre.0

6 months ago

0.4.6-pre8

8 months ago

0.4.6-pre9

8 months ago

0.4.6-pre6

8 months ago

0.4.6-pre7

8 months ago

0.4.6-pre4

8 months ago

0.4.6-pre5

8 months ago

0.4.6-pre12

8 months ago

0.4.6-pre2

8 months ago

0.4.6-pre11

8 months ago

0.4.6-pre3

8 months ago

0.4.6-pre14

8 months ago

0.4.6-pre13

8 months ago

0.4.6-pre1

8 months ago

0.4.6-pre10

8 months ago

0.4.6-pre19

8 months ago

0.4.6-pre16

8 months ago

0.4.6-pre15

8 months ago

0.4.6-pre18

8 months ago

0.4.6-pre17

8 months ago

0.4.5

8 months ago

0.4.4

8 months ago

0.4.7

7 months ago

0.4.6

7 months ago

0.4.3

9 months ago

0.4.2

1 year ago

0.4.2-pre1

1 year ago

0.4.1

1 year ago

0.3.0

1 year ago

0.4.0

1 year ago

0.2.2

1 year ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.20

2 years ago

0.1.19-pre1

2 years ago

0.1.18-pre3

2 years ago

0.1.18

2 years ago

0.1.19

2 years ago

0.1.18-pre1

2 years ago

0.1.18-pre2

2 years ago

0.1.17

2 years ago

0.1.17-rc1

2 years ago

0.1.16-rc1

2 years ago

0.1.16

2 years ago

0.1.15-rc7

2 years ago

0.1.15-rc8

2 years ago

0.1.15-rc9

2 years ago

0.1.15

2 years ago

0.1.15-rc6

2 years ago

0.1.15-rc4

2 years ago

0.1.15-rc5

2 years ago

0.1.15-rc2

2 years ago

0.1.15-rc3

2 years ago

0.1.15-rc1

2 years ago

0.1.13

2 years ago

0.1.14

2 years ago

0.1.12

2 years ago

0.1.12-rc1

2 years ago

0.1.12-rc2

2 years ago

0.1.11

2 years ago

0.1.10

2 years ago

0.1.10-rc4

2 years ago

0.1.10-rc2

2 years ago

0.1.10-rc3

2 years ago

0.1.10-rc1

2 years ago

0.1.1-alpha.8

2 years ago

0.1.1-alpha.7

2 years ago

0.1.2

2 years ago

0.1.1-alpha.6

2 years ago

0.1.1-alpha.5

2 years ago

0.1.9-rc3

2 years ago

0.1.8

2 years ago

0.1.9-rc2

2 years ago

0.1.7

2 years ago

0.1.9-rc1

2 years ago

0.1.9

2 years ago

0.1.4

2 years ago

0.1.9-rc6

2 years ago

0.1.3

2 years ago

0.1.9-rc5

2 years ago

0.1.6

2 years ago

0.1.9-rc4

2 years ago

0.1.5

2 years ago

0.1.1-alpha.4

2 years ago

0.1.1-alpha.3

2 years ago

0.1.1-alpha.2

2 years ago

0.1.1-alpha.1

2 years ago

0.1.1-alpha.0

2 years ago