@onflow/config

A mechanism for configuring the Flow JS SDK and FCL

Usage no npm install needed!

<script type="module">
  import onflowConfig from 'https://cdn.skypack.dev/@onflow/config';
</script>

README

@onflow/config

Reactive configuration for Flow JS SDK and FCL

Status

  • Status Last Updated: July 17th 2020
  • Stable: Yes
  • Risk of Breaking Change: Low

Overview

Install

npm install --save @onflow/config

Usage

import {config} from "@onflow/config"

// Reactively subscribe to config changes
config().subscribe(configData => console.log("CONFIG", configData))

// Set a config value
config().put("foo", "bar")

// .put can be chained
config()
  .put("foo", "bar")
  .put("baz", "rawr")

// Get a config value (its async)
var configValue = await config().get("woot")
console.log(configValue) // undefined

// A fallback can be supplied for .get
var configValue = await config().get("woot", "fallback")
console.log(configValue) // "fallback"

config.put("woot", "woot")
var configValue = await config().get("woot", "fallback")
console.log(configValue) // "woot"

// Update a config value
config().put("count", 1)
var count = await config().get("count", 0)
console.log(count) // 1

config().update("count", oldValue => oldValue + 1)
var count = await config().get("count", 0)
console.log(count) // 2

// Delete a config value
config().delete("woot")
var configValue = await config().get("woot", "fallback")
console.log(configValue) // "fallback"

// Configs that match a pattern
config()
  .put("scope.A", 1)
  .put("scope.B", 1)

var scopeValues = await config().where(/^scope\.\s+/)
console.log(scopeValues) // { "scope.A": 1, "scope.B": 2 }

Configurations

Known configuration values in FCL

Access Node

  • accessNode.api (default: emulator url) -- Where FCL will used to communicate with the Flow blockchain.
  • accessNode.key (default: null) -- Some Access Nodes require an api key.
import {config} from "@onflow/config"

if (process.env.NODE_ENV === "production") {
  config()
    .put("accessNode.api", process.env.ACCESS_NODE_API)
    .put("accessNode.key", process.env.ACCESS_NODE_KEY)
}

Decode

See fcl.decode for more details on decode.

decoder.* -- Custom decoders for parsing JSON-CDC

import {config} from "@onflow/config"
import * as fcl from "@onflow/fcl"

function Woot({x, y}) {
  this.x = x
  this.y = y
}

config().put("decoder.Woot", woot => new Woot(woot))

var response = await fcl.send([
  fcl.script`
    pub struct Woot {
      pub var x: Int
      pub var y: Int

      init(x: Int, y: Int) {
        self.x = x
        self.y = y
      }
    }

    pub fun main(): [Woot] {
      return [Woot(x: 1, y: 2), Woot(x: 3, y: 4), Woot(x: 5, y: 6)]
    }
  `,
])

var data = await fcl.decode(response)
console.log(data) // [ Woot{x:1, y:2}, Woot{x:3, y:4}, Woot{x:5, y:6} ]

Wallets

See fcl.currentUser for more details on authentication.

challenge.handshake (default: FCL wallet discovery service url) -- Where FCL will attempt to authenticate

import {config} from "@onflow/config"

if (process.env.NODE_ENV === "development") {
  // Use dev wallet during development
  config().put("challenge.handshake", "http://localhost:8701/flow/authenticate")
}