Package Exports
- @onflow/config
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@onflow/config) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
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")
}