react-native-fpay 0.1.1 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/FountainPayProvider.js +114 -7
- package/lib/module/FountainPayProvider.js.map +1 -1
- package/lib/module/ui/modals/FPShell.js +7 -9
- package/lib/module/ui/modals/FPShell.js.map +1 -1
- package/lib/module/ui/screens/ReceiveScreen.js +7 -7
- package/lib/module/ui/screens/ReceiveScreen.js.map +1 -1
- package/lib/module/useFountainPay.js +3 -79
- package/lib/module/useFountainPay.js.map +1 -1
- package/lib/typescript/src/FountainPayProvider.d.ts +15 -2
- package/lib/typescript/src/FountainPayProvider.d.ts.map +1 -1
- package/lib/typescript/src/core/types/index.d.ts +1 -1
- package/lib/typescript/src/core/types/index.d.ts.map +1 -1
- package/lib/typescript/src/ui/modals/FPShell.d.ts.map +1 -1
- package/lib/typescript/src/ui/screens/ReceiveScreen.d.ts +1 -1
- package/lib/typescript/src/ui/screens/ReceiveScreen.d.ts.map +1 -1
- package/lib/typescript/src/useFountainPay.d.ts +1 -2
- package/lib/typescript/src/useFountainPay.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/FountainPayProvider.tsx +136 -10
- package/src/core/types/index.ts +1 -1
- package/src/ui/modals/FPShell.tsx +10 -11
- package/src/ui/screens/ReceiveScreen.tsx +8 -8
- package/src/useFountainPay.ts +3 -95
|
@@ -1,17 +1,124 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
4
|
// FountainPayProvider
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
|
|
5
|
+
//
|
|
6
|
+
// Mount once at the root of your app and pass your API key here.
|
|
7
|
+
// Every component can then call useFountainPay() (no arguments) and get
|
|
8
|
+
// the SAME instance — no re-initialization, no prop drilling.
|
|
9
|
+
//
|
|
10
|
+
// Usage:
|
|
11
|
+
// <FountainPayProvider apiKey="fp_live_...">
|
|
12
|
+
// <YourApp />
|
|
13
|
+
// </FountainPayProvider>
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
import React, { createContext, useContext, useMemo, useRef } from 'react';
|
|
9
16
|
import { FPShell } from "./ui/modals/FPShell.js";
|
|
10
|
-
import {
|
|
17
|
+
import { FPEngine } from "./engine/FPEngine.js";
|
|
18
|
+
import { initClient } from "./core/api/client.js";
|
|
19
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
// ── Context ───────────────────────────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
const FountainPayContext = /*#__PURE__*/createContext(null);
|
|
23
|
+
|
|
24
|
+
// ── Hook — the only thing components import ───────────────────────────────────
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Returns the shared FountainPay instance created by the nearest
|
|
28
|
+
* <FountainPayProvider>. No API key needed here — it was given to the provider.
|
|
29
|
+
*
|
|
30
|
+
* Call from any component:
|
|
31
|
+
* const pay = useFountainPay();
|
|
32
|
+
* await pay.initializeSDK(user, callbacks); // call once after login
|
|
33
|
+
* pay.send(500, 'NGN'); // call anywhere, anytime
|
|
34
|
+
*/
|
|
35
|
+
export function useFountainPay() {
|
|
36
|
+
const instance = useContext(FountainPayContext);
|
|
37
|
+
if (!instance) {
|
|
38
|
+
throw new Error('[FountainPay] useFountainPay() must be called inside <FountainPayProvider>.\n' + 'Make sure you have wrapped your app root with <FountainPayProvider apiKey="...">.');
|
|
39
|
+
}
|
|
40
|
+
return instance;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ── Provider ──────────────────────────────────────────────────────────────────
|
|
44
|
+
|
|
11
45
|
export function FountainPayProvider({
|
|
46
|
+
apiKey,
|
|
47
|
+
options,
|
|
12
48
|
children
|
|
13
49
|
}) {
|
|
14
|
-
|
|
50
|
+
// Boot the HTTP client as soon as the provider mounts —
|
|
51
|
+
// this means generateAccountNumber works even before initializeSDK
|
|
52
|
+
const clientBooted = useRef(false);
|
|
53
|
+
if (!clientBooted.current) {
|
|
54
|
+
initClient(apiKey, {
|
|
55
|
+
baseUrl: options?.baseUrl,
|
|
56
|
+
environment: options?.environment
|
|
57
|
+
});
|
|
58
|
+
clientBooted.current = true;
|
|
59
|
+
console.log('[FountainPay] Provider mounted. HTTP client ready.');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Build the instance once per provider lifetime.
|
|
63
|
+
// All components that call useFountainPay() share this exact object.
|
|
64
|
+
const instance = useMemo(() => {
|
|
65
|
+
console.log('[FountainPay] Creating shared FPInstance for apiKey:', apiKey.slice(0, 8) + '...');
|
|
66
|
+
return {
|
|
67
|
+
/**
|
|
68
|
+
* Call once after the user logs in.
|
|
69
|
+
* Starts BLE advertising, proximity broadcast, and the payment listener.
|
|
70
|
+
*/
|
|
71
|
+
async initializeSDK(user, callbacks) {
|
|
72
|
+
console.log('[FountainPay] initializeSDK() called for user:', user.accountName);
|
|
73
|
+
try {
|
|
74
|
+
await FPEngine.initialize(apiKey, user, options ?? {}, callbacks ?? {});
|
|
75
|
+
console.log('[FountainPay] initializeSDK() complete. SDK is ready.');
|
|
76
|
+
} catch (err) {
|
|
77
|
+
console.error('[FountainPay] initializeSDK() FAILED:', err);
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
/** Open the Send Money bottom sheet. */
|
|
82
|
+
send(amount, currency) {
|
|
83
|
+
console.log('[FountainPay] send() called:', amount, currency);
|
|
84
|
+
FPEngine.showSend(amount, currency);
|
|
85
|
+
},
|
|
86
|
+
/** Open the Receive Money bottom sheet. */
|
|
87
|
+
receive(amount, currency = 'NGN') {
|
|
88
|
+
console.log('[FountainPay] receive() called:', amount, currency);
|
|
89
|
+
FPEngine.showReceive(amount, currency);
|
|
90
|
+
},
|
|
91
|
+
/** Generate a virtual account number (no UI shown). */
|
|
92
|
+
async generateAccountNumber(request) {
|
|
93
|
+
console.log('[FountainPay] generateAccountNumber() called:', request.accountName);
|
|
94
|
+
return FPEngine.generateAccount(request);
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* Activate the incoming Bluetooth payment request listener.
|
|
98
|
+
* When a nearby device sends a payment request, the Accept/Decline
|
|
99
|
+
* modal will appear automatically.
|
|
100
|
+
*/
|
|
101
|
+
listen() {
|
|
102
|
+
console.log('[FountainPay] listen() called — activating BT payment listener.');
|
|
103
|
+
FPEngine.startListening();
|
|
104
|
+
},
|
|
105
|
+
/** Stop all background services. Call on logout. */
|
|
106
|
+
async destroy() {
|
|
107
|
+
console.log('[FountainPay] destroy() called — stopping all services.');
|
|
108
|
+
await FPEngine.destroy();
|
|
109
|
+
console.log('[FountainPay] All services stopped.');
|
|
110
|
+
},
|
|
111
|
+
get isReady() {
|
|
112
|
+
return FPEngine.isReady();
|
|
113
|
+
},
|
|
114
|
+
get currentUser() {
|
|
115
|
+
return FPEngine.getUser();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
// Re-create instance only if the apiKey changes (which should never happen at runtime)
|
|
119
|
+
}, [apiKey]);
|
|
120
|
+
return /*#__PURE__*/_jsxs(FountainPayContext.Provider, {
|
|
121
|
+
value: instance,
|
|
15
122
|
children: [children, /*#__PURE__*/_jsx(FPShell, {})]
|
|
16
123
|
});
|
|
17
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","FPShell","
|
|
1
|
+
{"version":3,"names":["React","createContext","useContext","useMemo","useRef","FPShell","FPEngine","initClient","jsx","_jsx","jsxs","_jsxs","FountainPayContext","useFountainPay","instance","Error","FountainPayProvider","apiKey","options","children","clientBooted","current","baseUrl","environment","console","log","slice","initializeSDK","user","callbacks","accountName","initialize","err","error","send","amount","currency","showSend","receive","showReceive","generateAccountNumber","request","generateAccount","listen","startListening","destroy","isReady","currentUser","getUser","Provider","value"],"sourceRoot":"../../src","sources":["FountainPayProvider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -65,8 +65,6 @@ export function FPShell() {
|
|
|
65
65
|
unsubReceive();
|
|
66
66
|
};
|
|
67
67
|
}, []);
|
|
68
|
-
const user = FPEngine.getUser();
|
|
69
|
-
const callbacks = FPEngine.getCallbacks();
|
|
70
68
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
71
69
|
children: [/*#__PURE__*/_jsx(FPPaymentRequestModal, {}), /*#__PURE__*/_jsxs(Modal, {
|
|
72
70
|
visible: sheet.mode !== null,
|
|
@@ -103,22 +101,22 @@ export function FPShell() {
|
|
|
103
101
|
children: "Done"
|
|
104
102
|
})
|
|
105
103
|
})]
|
|
106
|
-
}), sheet.mode === 'send' &&
|
|
104
|
+
}), sheet.mode === 'send' && /*#__PURE__*/_jsx(SendScreen, {
|
|
107
105
|
amount: sheet.amount ?? 0,
|
|
108
106
|
currency: sheet.currency ?? 'NGN',
|
|
109
107
|
onClose: close,
|
|
110
108
|
onPaymentSent: tx => {
|
|
111
|
-
|
|
109
|
+
FPEngine.getCallbacks().onPaymentSent?.(tx);
|
|
112
110
|
close();
|
|
113
111
|
},
|
|
114
|
-
onError:
|
|
115
|
-
}), sheet.mode === 'receive' &&
|
|
112
|
+
onError: FPEngine.getCallbacks().onError
|
|
113
|
+
}), sheet.mode === 'receive' && /*#__PURE__*/_jsx(ReceiveScreen, {
|
|
116
114
|
amount: sheet.amount,
|
|
117
115
|
currency: sheet.currency,
|
|
118
|
-
user:
|
|
116
|
+
user: FPEngine.getUser() ?? undefined,
|
|
119
117
|
onClose: close,
|
|
120
|
-
onPaymentReceived:
|
|
121
|
-
onError:
|
|
118
|
+
onPaymentReceived: FPEngine.getCallbacks().onPaymentReceived,
|
|
119
|
+
onError: FPEngine.getCallbacks().onError
|
|
122
120
|
})]
|
|
123
121
|
})
|
|
124
122
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","useRef","Modal","View","Text","TouchableOpacity","StyleSheet","Animated","Dimensions","SafeAreaView","_onEvent","SendScreen","ReceiveScreen","FPPaymentRequestModal","FPEngine","C","S","F","shadow","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","height","SCREEN_H","get","FPShell","sheet","setSheet","mode","slide","Value","current","open","state","spring","toValue","useNativeDriver","tension","friction","start","close","timing","duration","unsubSend","d","data","amount","currency","unsubReceive","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","useRef","Modal","View","Text","TouchableOpacity","StyleSheet","Animated","Dimensions","SafeAreaView","_onEvent","SendScreen","ReceiveScreen","FPPaymentRequestModal","FPEngine","C","S","F","shadow","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","height","SCREEN_H","get","FPShell","sheet","setSheet","mode","slide","Value","current","open","state","spring","toValue","useNativeDriver","tension","friction","start","close","timing","duration","unsubSend","d","data","amount","currency","unsubReceive","children","visible","transparent","animationType","statusBarTranslucent","onRequestClose","style","st","scrim","activeOpacity","onPress","transform","translateY","flex","handle","header","headerTitle","closeBtn","closeText","onClose","onPaymentSent","tx","getCallbacks","onError","user","getUser","undefined","onPaymentReceived","create","position","top","left","right","bottom","backgroundColor","white","borderTopLeftRadius","borderTopRightRadius","lg","width","borderRadius","alignSelf","marginTop","sm","flexDirection","alignItems","justifyContent","paddingHorizontal","paddingVertical","md","borderBottomWidth","borderBottomColor","fontSize","fontWeight","color","ink"],"sourceRoot":"../../../../src","sources":["ui/modals/FPShell.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,10 +32,10 @@ export function ReceiveScreen({
|
|
|
32
32
|
}) {
|
|
33
33
|
const [channel, setChannel] = useState(null);
|
|
34
34
|
const myWallet = {
|
|
35
|
-
accountName: user
|
|
36
|
-
accountNumber: user
|
|
37
|
-
bankName: user
|
|
38
|
-
bankCode: user
|
|
35
|
+
accountName: user?.accountName ?? '',
|
|
36
|
+
accountNumber: user?.accountNumber ?? '',
|
|
37
|
+
bankName: user?.bankName ?? '',
|
|
38
|
+
bankCode: user?.bankCode ?? ''
|
|
39
39
|
};
|
|
40
40
|
if (channel === 'nqr') return /*#__PURE__*/_jsx(NQRSubScreen, {
|
|
41
41
|
mode: "receive",
|
|
@@ -70,15 +70,15 @@ export function ReceiveScreen({
|
|
|
70
70
|
style: styles.accountCard,
|
|
71
71
|
children: [/*#__PURE__*/_jsx(Row, {
|
|
72
72
|
label: "Account Name",
|
|
73
|
-
value: user
|
|
73
|
+
value: user?.accountName ?? ''
|
|
74
74
|
}), /*#__PURE__*/_jsx(Row, {
|
|
75
75
|
label: "Account Number",
|
|
76
|
-
value: user
|
|
76
|
+
value: user?.accountNumber ?? '',
|
|
77
77
|
large: true,
|
|
78
78
|
copyable: true
|
|
79
79
|
}), /*#__PURE__*/_jsx(Row, {
|
|
80
80
|
label: "Bank",
|
|
81
|
-
value: user
|
|
81
|
+
value: user?.bankName ?? ''
|
|
82
82
|
}), amount && /*#__PURE__*/_jsx(Row, {
|
|
83
83
|
label: "Expected Amount",
|
|
84
84
|
value: `${currency} ${amount.toLocaleString('en-NG', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","View","Text","TouchableOpacity","StyleSheet","ScrollView","C","R","S","F","shadow","NQRSubScreen","NFCSubScreen","jsx","_jsx","jsxs","_jsxs","CHANNELS","id","emoji","title","desc","ReceiveScreen","amount","currency","user","onClose","onPaymentReceived","onError","channel","setChannel","myWallet","accountName","accountNumber","bankName","bankCode","mode","onBack","onDone","style","styles","container","children","onPress","back","backText","sectionTitle","accountCard","Row","label","value","large","copyable","toLocaleString","minimumFractionDigits","highlight","hint","amountBanner","amountLabel","amountValue","showsVerticalScrollIndicator","contentContainerStyle","list","map","ch","card","activeOpacity","cardIcon","cardEmoji","cardText","cardTitle","cardDesc","arrow","copied","setCopied","rowStyles","row","require","Clipboard","setString","setTimeout","undefined","copy","create","paddingVertical","sm","borderBottomWidth","borderBottomColor","border","fontSize","xs","color","muted","marginBottom","md","ink","fontWeight","xl","letterSpacing","green","brand","flex","padding","lg","backgroundColor","greenLight","borderRadius","alignItems","hero","textTransform","paddingBottom","flexDirection","surface","width","height","white","justifyContent","marginRight","marginTop","ghost","textAlign"],"sourceRoot":"../../../../src","sources":["ui/screens/ReceiveScreen.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,IAAI,EAAEC,IAAI,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,UAAU,QAAQ,cAAc;AACnF,SAASC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEC,MAAM,QAAQ,mBAAU;AAC7C,SAASC,YAAY,QAAQ,uBAAoB;AACjD,SAASC,YAAY,QAAQ,uBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAKlD,MAAMC,QAAuE,GAAG,CAC9E;EAAEC,EAAE,EAAE,UAAU;EAAEC,KAAK,EAAE,IAAI;EAAEC,KAAK,EAAE,eAAe;EAAEC,IAAI,EAAE;AAA4B,CAAC,EAC1F;EAAEH,EAAE,EAAE,KAAK;EAAMC,KAAK,EAAE,GAAG;EAAEC,KAAK,EAAE,UAAU;EAAMC,IAAI,EAAE;AAAmC,CAAC,EAC9F;EAAEH,EAAE,EAAE,KAAK;EAAMC,KAAK,EAAE,IAAI;EAAEC,KAAK,EAAE,SAAS;EAAOC,IAAI,EAAE;AAA6B,CAAC,CAC1F;AASD,OAAO,SAASC,aAAaA,CAAC;EAAEC,MAAM;EAAEC,QAAQ,GAAG,KAAK;EAAEC,IAAI;EAAEC,OAAO;EAAEC,iBAAiB;EAAEC;AAAe,CAAC,EAAE;EAC5G,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG9B,QAAQ,CAAiB,IAAI,CAAC;EAE5D,MAAM+B,QAAQ,GAAG;IACfC,WAAW,EAAEP,IAAI,
|
|
1
|
+
{"version":3,"names":["React","useState","View","Text","TouchableOpacity","StyleSheet","ScrollView","C","R","S","F","shadow","NQRSubScreen","NFCSubScreen","jsx","_jsx","jsxs","_jsxs","CHANNELS","id","emoji","title","desc","ReceiveScreen","amount","currency","user","onClose","onPaymentReceived","onError","channel","setChannel","myWallet","accountName","accountNumber","bankName","bankCode","mode","onBack","onDone","style","styles","container","children","onPress","back","backText","sectionTitle","accountCard","Row","label","value","large","copyable","toLocaleString","minimumFractionDigits","highlight","hint","amountBanner","amountLabel","amountValue","showsVerticalScrollIndicator","contentContainerStyle","list","map","ch","card","activeOpacity","cardIcon","cardEmoji","cardText","cardTitle","cardDesc","arrow","copied","setCopied","rowStyles","row","require","Clipboard","setString","setTimeout","undefined","copy","create","paddingVertical","sm","borderBottomWidth","borderBottomColor","border","fontSize","xs","color","muted","marginBottom","md","ink","fontWeight","xl","letterSpacing","green","brand","flex","padding","lg","backgroundColor","greenLight","borderRadius","alignItems","hero","textTransform","paddingBottom","flexDirection","surface","width","height","white","justifyContent","marginRight","marginTop","ghost","textAlign"],"sourceRoot":"../../../../src","sources":["ui/screens/ReceiveScreen.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,82 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
// Usage:
|
|
7
|
-
// const pay = useFountainPay('your-api-key');
|
|
8
|
-
// await pay.initializeSDK(userInfo, callbacks);
|
|
9
|
-
// pay.send(500, 'NGN');
|
|
10
|
-
// pay.receive(200, 'NGN');
|
|
11
|
-
// const acct = await pay.generateAccountNumber({ accountName: 'John' });
|
|
12
|
-
// pay.listen();
|
|
13
|
-
// pay.destroy();
|
|
14
|
-
// ─────────────────────────────────────────────────────────────
|
|
15
|
-
import { useMemo } from 'react';
|
|
16
|
-
import { FPEngine } from "./engine/FPEngine.js";
|
|
17
|
-
import { initClient } from "./core/api/client.js";
|
|
18
|
-
export function useFountainPay(apiKey, options) {
|
|
19
|
-
// Initialize HTTP client immediately so API calls can be made
|
|
20
|
-
// even before initializeSDK (e.g. generateAccountNumber for onboarding)
|
|
21
|
-
useMemo(() => {
|
|
22
|
-
initClient(apiKey, {
|
|
23
|
-
baseUrl: options?.baseUrl,
|
|
24
|
-
environment: options?.environment
|
|
25
|
-
});
|
|
26
|
-
}, [apiKey]);
|
|
27
|
-
const instance = useMemo(() => ({
|
|
28
|
-
/**
|
|
29
|
-
* Call this once after the user logs in.
|
|
30
|
-
* Starts proximity broadcasting, BLE peripheral, and BT listener.
|
|
31
|
-
*/
|
|
32
|
-
async initializeSDK(user, callbacks) {
|
|
33
|
-
await FPEngine.initialize(apiKey, user, options ?? {}, callbacks ?? {});
|
|
34
|
-
},
|
|
35
|
-
/**
|
|
36
|
-
* Open the Send Money sheet.
|
|
37
|
-
* @param amount Major denomination (e.g. 500 for NGN 500)
|
|
38
|
-
* @param currency e.g. 'NGN', 'USD'
|
|
39
|
-
*/
|
|
40
|
-
send(amount, currency) {
|
|
41
|
-
FPEngine.showSend(amount, currency);
|
|
42
|
-
},
|
|
43
|
-
/**
|
|
44
|
-
* Open the Receive Money sheet.
|
|
45
|
-
* @param amount Expected amount (optional)
|
|
46
|
-
* @param currency e.g. 'NGN'
|
|
47
|
-
*/
|
|
48
|
-
receive(amount, currency = 'NGN') {
|
|
49
|
-
FPEngine.showReceive(amount, currency);
|
|
50
|
-
},
|
|
51
|
-
/**
|
|
52
|
-
* Generate a virtual account number.
|
|
53
|
-
* No UI is shown — returns the account directly.
|
|
54
|
-
*/
|
|
55
|
-
async generateAccountNumber(request) {
|
|
56
|
-
return FPEngine.generateAccount(request);
|
|
57
|
-
},
|
|
58
|
-
/**
|
|
59
|
-
* Start listening for incoming Bluetooth payment requests.
|
|
60
|
-
* When one arrives, the SDK auto-shows the Accept/Decline modal.
|
|
61
|
-
* The result fires onPaymentReceived / onPaymentDeclined callbacks
|
|
62
|
-
* that were passed into initializeSDK.
|
|
63
|
-
*/
|
|
64
|
-
listen() {
|
|
65
|
-
FPEngine.startListening();
|
|
66
|
-
},
|
|
67
|
-
/**
|
|
68
|
-
* Stop all background services. Call on logout.
|
|
69
|
-
*/
|
|
70
|
-
destroy() {
|
|
71
|
-
FPEngine.destroy();
|
|
72
|
-
},
|
|
73
|
-
get isReady() {
|
|
74
|
-
return FPEngine.isReady();
|
|
75
|
-
},
|
|
76
|
-
get currentUser() {
|
|
77
|
-
return FPEngine.getUser();
|
|
78
|
-
}
|
|
79
|
-
}), [apiKey]);
|
|
80
|
-
return instance;
|
|
81
|
-
}
|
|
3
|
+
// useFountainPay re-exported from FountainPayProvider.
|
|
4
|
+
// The hook lives in FountainPayProvider.tsx now.
|
|
5
|
+
export { useFountainPay } from "./FountainPayProvider.js";
|
|
82
6
|
//# sourceMappingURL=useFountainPay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useFountainPay"],"sourceRoot":"../../src","sources":["useFountainPay.ts"],"mappings":";;AAAA;AACA;AACA,SAASA,cAAc,QAAQ,0BAAuB","ignoreList":[]}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
-
|
|
2
|
+
import type { FPInstance, FPSDKOptions } from './core/types';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the shared FountainPay instance created by the nearest
|
|
5
|
+
* <FountainPayProvider>. No API key needed here — it was given to the provider.
|
|
6
|
+
*
|
|
7
|
+
* Call from any component:
|
|
8
|
+
* const pay = useFountainPay();
|
|
9
|
+
* await pay.initializeSDK(user, callbacks); // call once after login
|
|
10
|
+
* pay.send(500, 'NGN'); // call anywhere, anytime
|
|
11
|
+
*/
|
|
12
|
+
export declare function useFountainPay(): FPInstance;
|
|
13
|
+
interface ProviderProps {
|
|
14
|
+
apiKey: string;
|
|
15
|
+
options?: FPSDKOptions;
|
|
3
16
|
children: ReactNode;
|
|
4
17
|
}
|
|
5
|
-
export declare function FountainPayProvider({ children }:
|
|
18
|
+
export declare function FountainPayProvider({ apiKey, options, children }: ProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
6
19
|
export {};
|
|
7
20
|
//# sourceMappingURL=FountainPayProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FountainPayProvider.d.ts","sourceRoot":"","sources":["../../../src/FountainPayProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FountainPayProvider.d.ts","sourceRoot":"","sources":["../../../src/FountainPayProvider.tsx"],"names":[],"mappings":"AAYA,OAAc,EACZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EACV,UAAU,EAEV,YAAY,EAKb,MAAM,cAAc,CAAC;AAQtB;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAS3C;AAID,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAoF/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/types/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAChE,MAAM,MAAM,SAAS,GAAI,UAAU,GAAG,KAAK,GAAG,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AACzF,MAAM,MAAM,QAAQ,GAAK,OAAO,GAAG,QAAQ,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FPShell.d.ts","sourceRoot":"","sources":["../../../../../src/ui/modals/FPShell.tsx"],"names":[],"mappings":"AA0BA,wBAAgB,OAAO,
|
|
1
|
+
{"version":3,"file":"FPShell.d.ts","sourceRoot":"","sources":["../../../../../src/ui/modals/FPShell.tsx"],"names":[],"mappings":"AA0BA,wBAAgB,OAAO,4CAqEtB"}
|
|
@@ -2,7 +2,7 @@ import type { FPCurrency, FPCallbacks, FPUserInfo } from '../../core/types';
|
|
|
2
2
|
interface Props extends FPCallbacks {
|
|
3
3
|
amount?: number;
|
|
4
4
|
currency?: FPCurrency;
|
|
5
|
-
user
|
|
5
|
+
user?: FPUserInfo;
|
|
6
6
|
onClose: () => void;
|
|
7
7
|
}
|
|
8
8
|
export declare function ReceiveScreen({ amount, currency, user, onClose, onPaymentReceived, onError }: Props): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReceiveScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/ReceiveScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAU5E,UAAU,KAAM,SAAQ,WAAW;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ReceiveScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/ReceiveScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAU5E,UAAU,KAAM,SAAQ,WAAW;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,QAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,KAAK,2CAqD3G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFountainPay.d.ts","sourceRoot":"","sources":["../../../src/useFountainPay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useFountainPay.d.ts","sourceRoot":"","sources":["../../../src/useFountainPay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,147 @@
|
|
|
1
|
-
//
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
2
|
// FountainPayProvider
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
3
|
+
//
|
|
4
|
+
// Mount once at the root of your app and pass your API key here.
|
|
5
|
+
// Every component can then call useFountainPay() (no arguments) and get
|
|
6
|
+
// the SAME instance — no re-initialization, no prop drilling.
|
|
7
|
+
//
|
|
8
|
+
// Usage:
|
|
9
|
+
// <FountainPayProvider apiKey="fp_live_...">
|
|
10
|
+
// <YourApp />
|
|
11
|
+
// </FountainPayProvider>
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
import React, {
|
|
14
|
+
type ReactNode, createContext, useContext, useMemo, useRef,
|
|
15
|
+
} from 'react';
|
|
7
16
|
import { FPShell } from './ui/modals/FPShell';
|
|
17
|
+
import { FPEngine } from './engine/FPEngine';
|
|
18
|
+
import { initClient } from './core/api/client';
|
|
19
|
+
import type {
|
|
20
|
+
FPInstance,
|
|
21
|
+
FPUserInfo,
|
|
22
|
+
FPSDKOptions,
|
|
23
|
+
FPCallbacks,
|
|
24
|
+
FPCurrency,
|
|
25
|
+
FPGenerateAccountRequest,
|
|
26
|
+
FPVirtualAccount,
|
|
27
|
+
} from './core/types';
|
|
8
28
|
|
|
9
|
-
|
|
29
|
+
// ── Context ───────────────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
const FountainPayContext = createContext<FPInstance | null>(null);
|
|
32
|
+
|
|
33
|
+
// ── Hook — the only thing components import ───────────────────────────────────
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Returns the shared FountainPay instance created by the nearest
|
|
37
|
+
* <FountainPayProvider>. No API key needed here — it was given to the provider.
|
|
38
|
+
*
|
|
39
|
+
* Call from any component:
|
|
40
|
+
* const pay = useFountainPay();
|
|
41
|
+
* await pay.initializeSDK(user, callbacks); // call once after login
|
|
42
|
+
* pay.send(500, 'NGN'); // call anywhere, anytime
|
|
43
|
+
*/
|
|
44
|
+
export function useFountainPay(): FPInstance {
|
|
45
|
+
const instance = useContext(FountainPayContext);
|
|
46
|
+
if (!instance) {
|
|
47
|
+
throw new Error(
|
|
48
|
+
'[FountainPay] useFountainPay() must be called inside <FountainPayProvider>.\n' +
|
|
49
|
+
'Make sure you have wrapped your app root with <FountainPayProvider apiKey="...">.'
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
return instance;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ── Provider ──────────────────────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
interface ProviderProps {
|
|
58
|
+
apiKey: string;
|
|
59
|
+
options?: FPSDKOptions;
|
|
10
60
|
children: ReactNode;
|
|
11
61
|
}
|
|
12
62
|
|
|
13
|
-
export function FountainPayProvider({ children }:
|
|
63
|
+
export function FountainPayProvider({ apiKey, options, children }: ProviderProps) {
|
|
64
|
+
// Boot the HTTP client as soon as the provider mounts —
|
|
65
|
+
// this means generateAccountNumber works even before initializeSDK
|
|
66
|
+
const clientBooted = useRef(false);
|
|
67
|
+
if (!clientBooted.current) {
|
|
68
|
+
initClient(apiKey, { baseUrl: options?.baseUrl, environment: options?.environment });
|
|
69
|
+
clientBooted.current = true;
|
|
70
|
+
console.log('[FountainPay] Provider mounted. HTTP client ready.');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Build the instance once per provider lifetime.
|
|
74
|
+
// All components that call useFountainPay() share this exact object.
|
|
75
|
+
const instance = useMemo<FPInstance>(() => {
|
|
76
|
+
console.log('[FountainPay] Creating shared FPInstance for apiKey:', apiKey.slice(0, 8) + '...');
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
/**
|
|
80
|
+
* Call once after the user logs in.
|
|
81
|
+
* Starts BLE advertising, proximity broadcast, and the payment listener.
|
|
82
|
+
*/
|
|
83
|
+
async initializeSDK(user: FPUserInfo, callbacks?: FPCallbacks): Promise<void> {
|
|
84
|
+
console.log('[FountainPay] initializeSDK() called for user:', user.accountName);
|
|
85
|
+
try {
|
|
86
|
+
await FPEngine.initialize(apiKey, user, options ?? {}, callbacks ?? {});
|
|
87
|
+
console.log('[FountainPay] initializeSDK() complete. SDK is ready.');
|
|
88
|
+
} catch (err) {
|
|
89
|
+
console.error('[FountainPay] initializeSDK() FAILED:', err);
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
/** Open the Send Money bottom sheet. */
|
|
95
|
+
send(amount: number, currency: FPCurrency): void {
|
|
96
|
+
console.log('[FountainPay] send() called:', amount, currency);
|
|
97
|
+
FPEngine.showSend(amount, currency);
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
/** Open the Receive Money bottom sheet. */
|
|
101
|
+
receive(amount?: number, currency: FPCurrency = 'NGN'): void {
|
|
102
|
+
console.log('[FountainPay] receive() called:', amount, currency);
|
|
103
|
+
FPEngine.showReceive(amount, currency);
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
/** Generate a virtual account number (no UI shown). */
|
|
107
|
+
async generateAccountNumber(request: FPGenerateAccountRequest): Promise<FPVirtualAccount> {
|
|
108
|
+
console.log('[FountainPay] generateAccountNumber() called:', request.accountName);
|
|
109
|
+
return FPEngine.generateAccount(request);
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Activate the incoming Bluetooth payment request listener.
|
|
114
|
+
* When a nearby device sends a payment request, the Accept/Decline
|
|
115
|
+
* modal will appear automatically.
|
|
116
|
+
*/
|
|
117
|
+
listen(): void {
|
|
118
|
+
console.log('[FountainPay] listen() called — activating BT payment listener.');
|
|
119
|
+
FPEngine.startListening();
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
/** Stop all background services. Call on logout. */
|
|
123
|
+
async destroy(): Promise<void> {
|
|
124
|
+
console.log('[FountainPay] destroy() called — stopping all services.');
|
|
125
|
+
await FPEngine.destroy();
|
|
126
|
+
console.log('[FountainPay] All services stopped.');
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
get isReady(): boolean {
|
|
130
|
+
return FPEngine.isReady();
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
get currentUser(): FPUserInfo | null {
|
|
134
|
+
return FPEngine.getUser();
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
// Re-create instance only if the apiKey changes (which should never happen at runtime)
|
|
138
|
+
}, [apiKey]);
|
|
139
|
+
|
|
14
140
|
return (
|
|
15
|
-
|
|
141
|
+
<FountainPayContext.Provider value={instance}>
|
|
16
142
|
{children}
|
|
17
|
-
{/* FPShell is invisible until pay.send() or pay.receive()
|
|
143
|
+
{/* FPShell is invisible until pay.send() or pay.receive() fires */}
|
|
18
144
|
<FPShell />
|
|
19
|
-
|
|
145
|
+
</FountainPayContext.Provider>
|
|
20
146
|
);
|
|
21
147
|
}
|
package/src/core/types/index.ts
CHANGED
|
@@ -45,9 +45,6 @@ export function FPShell() {
|
|
|
45
45
|
return () => { unsubSend(); unsubReceive(); };
|
|
46
46
|
}, []);
|
|
47
47
|
|
|
48
|
-
const user = FPEngine.getUser();
|
|
49
|
-
const callbacks = FPEngine.getCallbacks();
|
|
50
|
-
|
|
51
48
|
return (
|
|
52
49
|
<>
|
|
53
50
|
{/* Always-on BT payment request modal */}
|
|
@@ -69,24 +66,26 @@ export function FPShell() {
|
|
|
69
66
|
</TouchableOpacity>
|
|
70
67
|
</View>
|
|
71
68
|
|
|
72
|
-
{/*
|
|
73
|
-
|
|
69
|
+
{/* Read user + callbacks fresh at render time — not at mount time.
|
|
70
|
+
This ensures they're populated even if initializeSDK ran after
|
|
71
|
+
the shell mounted (which is always the case). */}
|
|
72
|
+
{sheet.mode === 'send' && (
|
|
74
73
|
<SendScreen
|
|
75
74
|
amount={sheet.amount ?? 0}
|
|
76
75
|
currency={sheet.currency ?? 'NGN'}
|
|
77
76
|
onClose={close}
|
|
78
|
-
onPaymentSent={(tx) => {
|
|
79
|
-
onError={
|
|
77
|
+
onPaymentSent={(tx) => { FPEngine.getCallbacks().onPaymentSent?.(tx); close(); }}
|
|
78
|
+
onError={FPEngine.getCallbacks().onError}
|
|
80
79
|
/>
|
|
81
80
|
)}
|
|
82
|
-
{sheet.mode === 'receive' &&
|
|
81
|
+
{sheet.mode === 'receive' && (
|
|
83
82
|
<ReceiveScreen
|
|
84
83
|
amount={sheet.amount}
|
|
85
84
|
currency={sheet.currency}
|
|
86
|
-
user={
|
|
85
|
+
user={FPEngine.getUser() ?? undefined}
|
|
87
86
|
onClose={close}
|
|
88
|
-
onPaymentReceived={
|
|
89
|
-
onError={
|
|
87
|
+
onPaymentReceived={FPEngine.getCallbacks().onPaymentReceived}
|
|
88
|
+
onError={FPEngine.getCallbacks().onError}
|
|
90
89
|
/>
|
|
91
90
|
)}
|
|
92
91
|
</SafeAreaView>
|
|
@@ -16,7 +16,7 @@ const CHANNELS: { id: Channel; emoji: string; title: string; desc: string }[] =
|
|
|
16
16
|
interface Props extends FPCallbacks {
|
|
17
17
|
amount?: number;
|
|
18
18
|
currency?: FPCurrency;
|
|
19
|
-
user
|
|
19
|
+
user?: FPUserInfo;
|
|
20
20
|
onClose: () => void;
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -24,10 +24,10 @@ export function ReceiveScreen({ amount, currency = 'NGN', user, onClose, onPayme
|
|
|
24
24
|
const [channel, setChannel] = useState<Channel | null>(null);
|
|
25
25
|
|
|
26
26
|
const myWallet = {
|
|
27
|
-
accountName: user
|
|
28
|
-
accountNumber: user
|
|
29
|
-
bankName: user
|
|
30
|
-
bankCode: user
|
|
27
|
+
accountName: user?.accountName ?? '',
|
|
28
|
+
accountNumber: user?.accountNumber ?? '',
|
|
29
|
+
bankName: user?.bankName ?? '',
|
|
30
|
+
bankCode: user?.bankCode ?? '',
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
if (channel === 'nqr') return <NQRSubScreen mode="receive" amount={amount} currency={currency} onBack={() => setChannel(null)} onDone={onClose} onError={onError} />;
|
|
@@ -41,9 +41,9 @@ export function ReceiveScreen({ amount, currency = 'NGN', user, onClose, onPayme
|
|
|
41
41
|
</TouchableOpacity>
|
|
42
42
|
<Text style={styles.sectionTitle}>Your Account Details</Text>
|
|
43
43
|
<View style={styles.accountCard}>
|
|
44
|
-
<Row label="Account Name" value={user
|
|
45
|
-
<Row label="Account Number" value={user
|
|
46
|
-
<Row label="Bank" value={user
|
|
44
|
+
<Row label="Account Name" value={user?.accountName ?? ''} />
|
|
45
|
+
<Row label="Account Number" value={user?.accountNumber ?? ''} large copyable />
|
|
46
|
+
<Row label="Bank" value={user?.bankName ?? ''} />
|
|
47
47
|
{amount && <Row label="Expected Amount" value={`${currency} ${amount.toLocaleString('en-NG', { minimumFractionDigits: 2 })}`} highlight />}
|
|
48
48
|
</View>
|
|
49
49
|
<Text style={styles.hint}>Share these details with whoever is paying you</Text>
|
package/src/useFountainPay.ts
CHANGED
|
@@ -1,95 +1,3 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
// Usage:
|
|
5
|
-
// const pay = useFountainPay('your-api-key');
|
|
6
|
-
// await pay.initializeSDK(userInfo, callbacks);
|
|
7
|
-
// pay.send(500, 'NGN');
|
|
8
|
-
// pay.receive(200, 'NGN');
|
|
9
|
-
// const acct = await pay.generateAccountNumber({ accountName: 'John' });
|
|
10
|
-
// pay.listen();
|
|
11
|
-
// pay.destroy();
|
|
12
|
-
// ─────────────────────────────────────────────────────────────
|
|
13
|
-
import { useMemo } from 'react';
|
|
14
|
-
import { FPEngine } from './engine/FPEngine';
|
|
15
|
-
import { initClient } from './core/api/client';
|
|
16
|
-
import type {
|
|
17
|
-
FPInstance,
|
|
18
|
-
FPUserInfo,
|
|
19
|
-
FPSDKOptions,
|
|
20
|
-
FPCallbacks,
|
|
21
|
-
FPCurrency,
|
|
22
|
-
FPGenerateAccountRequest,
|
|
23
|
-
FPVirtualAccount,
|
|
24
|
-
} from './core/types';
|
|
25
|
-
|
|
26
|
-
export function useFountainPay(apiKey: string, options?: FPSDKOptions): FPInstance {
|
|
27
|
-
// Initialize HTTP client immediately so API calls can be made
|
|
28
|
-
// even before initializeSDK (e.g. generateAccountNumber for onboarding)
|
|
29
|
-
useMemo(() => {
|
|
30
|
-
initClient(apiKey, { baseUrl: options?.baseUrl, environment: options?.environment });
|
|
31
|
-
}, [apiKey]);
|
|
32
|
-
|
|
33
|
-
const instance = useMemo<FPInstance>(() => ({
|
|
34
|
-
/**
|
|
35
|
-
* Call this once after the user logs in.
|
|
36
|
-
* Starts proximity broadcasting, BLE peripheral, and BT listener.
|
|
37
|
-
*/
|
|
38
|
-
async initializeSDK(user: FPUserInfo, callbacks?: FPCallbacks): Promise<void> {
|
|
39
|
-
await FPEngine.initialize(apiKey, user, options ?? {}, callbacks ?? {});
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Open the Send Money sheet.
|
|
44
|
-
* @param amount Major denomination (e.g. 500 for NGN 500)
|
|
45
|
-
* @param currency e.g. 'NGN', 'USD'
|
|
46
|
-
*/
|
|
47
|
-
send(amount: number, currency: FPCurrency): void {
|
|
48
|
-
FPEngine.showSend(amount, currency);
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Open the Receive Money sheet.
|
|
53
|
-
* @param amount Expected amount (optional)
|
|
54
|
-
* @param currency e.g. 'NGN'
|
|
55
|
-
*/
|
|
56
|
-
receive(amount?: number, currency: FPCurrency = 'NGN'): void {
|
|
57
|
-
FPEngine.showReceive(amount, currency);
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Generate a virtual account number.
|
|
62
|
-
* No UI is shown — returns the account directly.
|
|
63
|
-
*/
|
|
64
|
-
async generateAccountNumber(request: FPGenerateAccountRequest): Promise<FPVirtualAccount> {
|
|
65
|
-
return FPEngine.generateAccount(request);
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Start listening for incoming Bluetooth payment requests.
|
|
70
|
-
* When one arrives, the SDK auto-shows the Accept/Decline modal.
|
|
71
|
-
* The result fires onPaymentReceived / onPaymentDeclined callbacks
|
|
72
|
-
* that were passed into initializeSDK.
|
|
73
|
-
*/
|
|
74
|
-
listen(): void {
|
|
75
|
-
FPEngine.startListening();
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Stop all background services. Call on logout.
|
|
80
|
-
*/
|
|
81
|
-
destroy(): void {
|
|
82
|
-
FPEngine.destroy();
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
get isReady(): boolean {
|
|
86
|
-
return FPEngine.isReady();
|
|
87
|
-
},
|
|
88
|
-
|
|
89
|
-
get currentUser(): FPUserInfo | null {
|
|
90
|
-
return FPEngine.getUser();
|
|
91
|
-
},
|
|
92
|
-
}), [apiKey]);
|
|
93
|
-
|
|
94
|
-
return instance;
|
|
95
|
-
}
|
|
1
|
+
// useFountainPay re-exported from FountainPayProvider.
|
|
2
|
+
// The hook lives in FountainPayProvider.tsx now.
|
|
3
|
+
export { useFountainPay } from './FountainPayProvider';
|