@fruitsjs/util
Version:
Useful utilities and tools for building Fruits Eco-Blockchain applications
55 lines (45 loc) • 1.63 kB
text/typescript
import {CreateDeeplinkArgs, EncoderFormat} from './typings/args/createDeeplinkArgs';
import {convertStringToHexString} from './convertStringToHexString';
import {convertStringToBase64String} from './convertStringToBase64String';
/**
* @internal
*/
function encodePayload(payload: any, encoderFormat: EncoderFormat): string {
let data = payload;
if (typeof payload !== 'string') {
data = JSON.stringify(payload);
}
switch (encoderFormat) {
case EncoderFormat.Hexadecimal:
return convertStringToHexString(data);
case EncoderFormat.Base64:
return convertStringToBase64String(data);
case EncoderFormat.Text:
default:
// noop
return data;
}
}
/**
*
* `fruits.[domain]://v1?action=[action]&payload=[encodedData]`
*
* Deeplinks are a way to call/open applications and do certain actions within it, e.g. Phoenix wallet
* can redirect to the "Send FRTS" screen a fill out the form according the passed payload.
*
* @see [[parseDeeplink]] as inverse function
* @param {CreateDeeplinkArgs} args The arguments for the deeplink
* @return The Deeplink
* @module util
*/
export const createDeeplink = (args: CreateDeeplinkArgs): string => {
const {encoderFormat = EncoderFormat.Base64, domain, action, payload} = args;
let link = domain ? `fruits.${domain}://v1` : `fruits://v1`;
if (action) {
link += `?action=${action}`;
}
if (payload) {
link += `&payload=${encodePayload(payload, encoderFormat)}`;
}
return link;
};