Implement unified API for linking
Opened this issue ยท 0 comments
icidasset commented
This unifies the account linking and capabilities (app-to-app linking) APIs.
More context: https://talk.fission.codes/t/unified-linking-api-app-linking/4268
Producer API
const config: ProvisionConfig = {
allowedCapabilities: [
webnative.capabilities.accountLinking,
webnative.capabilities.fileSystem
]
}
// ๐ STEP 1 - PROVIDE CAPABILITIES
// This could potentially be done automatically based on program config.
// Or called automatically when `on` is called with a producer event.
program.linking.provide(config)
// โ๏ธ STEP 2 - APPROVE THE REQUESTED CAPABILITIES
program.linking.on("query", query => {
// What is being requested?
query.capabilities
// [{ "cap" : ... }]
// Query looks good, user approves the set of capabilities requested.
program.linking.accept(query)
// You're asking for too much, I'm out.
program.linking.dismiss(query)
})
// ๐ STEP 3 - ADDITIONAL SECURITY
program.linking.on("challenge", challenge => {
// You could also not require any user input and `proceed` immediately
if (userInput === challenge) program.linking.approve(challenge)
else program.linking.dismiss(challenge)
})
// โ
COMPLETED
program.linking.on("link", ...)
// โ
program.linking.stopProviding()
Consumer API
// ๐ฝ๏ธ STEP 1 - REQUEST CAPABILITIES
const requestId = program.linking.request([
webnative.capabilities.accountLinking
])
// ๐ STEP 2 - ADDITIONAL SECURITY
program.linking.on("challenge", challenge => {
showPinInUI(challenge)
})
// โ
COMPLETED
program.linking.on("link", ucans => {
if (ucans) program.linking.collect(ucans)
else // Producer dismissed
})
// โ
program.linking.cancelRequest(requestId)