@coinflowlabs/react 0.2.0 → 0.2.2
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/README.md +17 -0
- package/build/cjs/CoinflowIFrame.d.ts +1 -1
- package/build/cjs/CoinflowIFrame.js +0 -1
- package/build/cjs/CoinflowIFrame.js.map +1 -1
- package/build/cjs/CoinflowPurchase.d.ts +4 -2
- package/build/cjs/CoinflowPurchase.js +8 -2
- package/build/cjs/CoinflowPurchase.js.map +1 -1
- package/build/cjs/IFrameWalletConnector.d.ts +4 -2
- package/build/cjs/IFrameWalletConnector.js +41 -6
- package/build/cjs/IFrameWalletConnector.js.map +1 -1
- package/build/esm/CoinflowIFrame.d.ts +1 -1
- package/build/esm/CoinflowIFrame.js +0 -1
- package/build/esm/CoinflowIFrame.js.map +1 -1
- package/build/esm/CoinflowPurchase.d.ts +4 -2
- package/build/esm/CoinflowPurchase.js +8 -2
- package/build/esm/CoinflowPurchase.js.map +1 -1
- package/build/esm/IFrameWalletConnector.d.ts +4 -2
- package/build/esm/IFrameWalletConnector.js +41 -6
- package/build/esm/IFrameWalletConnector.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -34,3 +34,20 @@ Props:
|
|
|
34
34
|
- For testing set to `staging`
|
|
35
35
|
* `onSuccess` (optional): function to run when the purchase process is successful
|
|
36
36
|
* `transaction` (optional): transaction for the user to run which redeems their credits with your smart contract. Create this transaction just like you would for a normal user who has USDC in their account.
|
|
37
|
+
* `partialSigners` (optional): Keypairs of Partial Signers to sign the transaction with, this is necessary when initializing new accounts as the new account Keypair must sign the transaction.
|
|
38
|
+
* `debugTx` (optional): Setting this to `true` will sign the transaction with the wallet, and send the transaction with no preflight checks allowing for easier debug of any issues.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# Changelog
|
|
42
|
+
|
|
43
|
+
### 0.2.2
|
|
44
|
+
|
|
45
|
+
- Added the optional debugTx parameter to allow for easier debugging of any redeem transaction related issues.
|
|
46
|
+
|
|
47
|
+
### 0.2.1
|
|
48
|
+
|
|
49
|
+
- Added the optional partialSigners parameter to CoinflowPurchase component so redeem txs that require partial signers can be supported.
|
|
50
|
+
|
|
51
|
+
### 0.2.0
|
|
52
|
+
|
|
53
|
+
- Added the transaction optional parameter to CoinflowPurchase component enabling automatic redemption of credits on purchases.
|
|
@@ -6,8 +6,8 @@ type CoinflowIFrameProps = {
|
|
|
6
6
|
IFrameRef: React.RefObject<HTMLIFrameElement>;
|
|
7
7
|
env?: CoinflowEnvs;
|
|
8
8
|
route: string;
|
|
9
|
-
transaction?: Transaction;
|
|
10
9
|
amount?: number;
|
|
10
|
+
transaction?: Transaction;
|
|
11
11
|
};
|
|
12
12
|
export declare function CoinflowIFrame({ publicKey, IFrameRef, env, route, transaction, amount, }: CoinflowIFrameProps): JSX.Element;
|
|
13
13
|
export {};
|
|
@@ -26,7 +26,6 @@ function CoinflowIFrame(_a) {
|
|
|
26
26
|
if (amount) {
|
|
27
27
|
url.searchParams.append('amount', amount.toString());
|
|
28
28
|
}
|
|
29
|
-
console.log({ url: url });
|
|
30
29
|
return url;
|
|
31
30
|
}, [amount, env, publicKey, route, transaction]);
|
|
32
31
|
return (0, react_1.useMemo)(function () { return (react_1["default"].createElement("iframe", { ref: IFrameRef, style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinflowIFrame.js","sourceRoot":"","sources":["../../src/CoinflowIFrame.tsx"],"names":[],"mappings":";;;;AAAA,qDAAqC;AAErC,sDAA0B;AAa1B,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,uBAAuB,CAAC;IAC3D,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,uBAAuB,CAAC;IAEpD,OAAO,kBAAW,GAAG,mBAAgB,CAAC;AACxC,CAAC;AAED,SAAgB,cAAc,CAAC,EAOT;QANpB,SAAS,eAAA,EACT,SAAS,eAAA,EACT,GAAG,SAAA,EACH,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,MAAM,YAAA;IAEN,IAAM,GAAG,GAAG,IAAA,eAAO,EAAC;QAClB,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,WAAW,EAAE;YACf,IAAM,YAAY,GAAG,iBAAM,CAAC,MAAM,CAChC,WAAW,CAAC,SAAS,CAAC;gBACpB,oBAAoB,EAAE,KAAK;gBAC3B,gBAAgB,EAAE,KAAK;aACxB,CAAC,CACH,CAAC;YACF,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACtD;QACD,IAAI,MAAM,EAAE;YACV,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,
|
|
1
|
+
{"version":3,"file":"CoinflowIFrame.js","sourceRoot":"","sources":["../../src/CoinflowIFrame.tsx"],"names":[],"mappings":";;;;AAAA,qDAAqC;AAErC,sDAA0B;AAa1B,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,uBAAuB,CAAC;IAC3D,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,uBAAuB,CAAC;IAEpD,OAAO,kBAAW,GAAG,mBAAgB,CAAC;AACxC,CAAC;AAED,SAAgB,cAAc,CAAC,EAOT;QANpB,SAAS,eAAA,EACT,SAAS,eAAA,EACT,GAAG,SAAA,EACH,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,MAAM,YAAA;IAEN,IAAM,GAAG,GAAG,IAAA,eAAO,EAAC;QAClB,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,WAAW,EAAE;YACf,IAAM,YAAY,GAAG,iBAAM,CAAC,MAAM,CAChC,WAAW,CAAC,SAAS,CAAC;gBACpB,oBAAoB,EAAE,KAAK;gBAC3B,gBAAgB,EAAE,KAAK;aACxB,CAAC,CACH,CAAC;YACF,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACtD;QACD,IAAI,MAAM,EAAE;YACV,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjD,OAAO,IAAA,eAAO,EACZ,cAAM,OAAA,CACJ,6CACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;YACL,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;SACf,EACD,KAAK,EAAC,UAAU,EAChB,WAAW,EAAC,GAAG,EACf,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,GACnB,CACH,EAXK,CAWL,EACD,CAAC,SAAS,EAAE,GAAG,CAAC,CACjB,CAAC;AACJ,CAAC;AAzCD,wCAyCC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { WalletContextState } from '@solana/wallet-adapter-react';
|
|
3
|
-
import { Connection, Transaction } from '@solana/web3.js';
|
|
3
|
+
import { Connection, Signer, Transaction } from '@solana/web3.js';
|
|
4
4
|
import { CoinflowEnvs } from './CoinflowIFrame';
|
|
5
5
|
import { OnSuccessMethod } from './IFrameWalletConnector';
|
|
6
6
|
type Props = {
|
|
@@ -11,6 +11,8 @@ type Props = {
|
|
|
11
11
|
env?: CoinflowEnvs;
|
|
12
12
|
onSuccess?: OnSuccessMethod;
|
|
13
13
|
transaction?: Transaction;
|
|
14
|
+
partialSigners?: Signer[];
|
|
15
|
+
debugTx?: boolean;
|
|
14
16
|
};
|
|
15
|
-
export declare function CoinflowPurchase({ wallet, merchantId, env, connection, onSuccess, transaction, amount, }: Props): JSX.Element | null;
|
|
17
|
+
export declare function CoinflowPurchase({ wallet, merchantId, env, connection, onSuccess, transaction, amount, partialSigners, debugTx, }: Props): JSX.Element | null;
|
|
16
18
|
export {};
|
|
@@ -6,8 +6,14 @@ var react_1 = tslib_1.__importDefault(require("react"));
|
|
|
6
6
|
var CoinflowIFrame_1 = require("./CoinflowIFrame");
|
|
7
7
|
var IFrameWalletConnector_1 = require("./IFrameWalletConnector");
|
|
8
8
|
function CoinflowPurchase(_a) {
|
|
9
|
-
var wallet = _a.wallet, merchantId = _a.merchantId, env = _a.env, connection = _a.connection, onSuccess = _a.onSuccess, transaction = _a.transaction, amount = _a.amount;
|
|
10
|
-
var IFrameRef = (0, IFrameWalletConnector_1.useIframeWallet)({
|
|
9
|
+
var wallet = _a.wallet, merchantId = _a.merchantId, env = _a.env, connection = _a.connection, onSuccess = _a.onSuccess, transaction = _a.transaction, amount = _a.amount, partialSigners = _a.partialSigners, _b = _a.debugTx, debugTx = _b === void 0 ? false : _b;
|
|
10
|
+
var IFrameRef = (0, IFrameWalletConnector_1.useIframeWallet)({
|
|
11
|
+
wallet: wallet,
|
|
12
|
+
connection: connection,
|
|
13
|
+
onSuccess: onSuccess,
|
|
14
|
+
partialSigners: partialSigners,
|
|
15
|
+
debugTx: debugTx
|
|
16
|
+
}).IFrameRef;
|
|
11
17
|
if (!wallet.publicKey || !wallet.connected)
|
|
12
18
|
return null;
|
|
13
19
|
return (react_1["default"].createElement(CoinflowIFrame_1.CoinflowIFrame, { publicKey: wallet.publicKey.toString(), IFrameRef: IFrameRef, route: "/purchase/".concat(merchantId), env: env, transaction: transaction, amount: amount }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinflowPurchase.js","sourceRoot":"","sources":["../../src/CoinflowPurchase.tsx"],"names":[],"mappings":";;;;AACA,wDAA0B;AAE1B,mDAA8D;AAC9D,iEAAyE;
|
|
1
|
+
{"version":3,"file":"CoinflowPurchase.js","sourceRoot":"","sources":["../../src/CoinflowPurchase.tsx"],"names":[],"mappings":";;;;AACA,wDAA0B;AAE1B,mDAA8D;AAC9D,iEAAyE;AAczE,SAAgB,gBAAgB,CAAC,EAUzB;QATN,MAAM,YAAA,EACN,UAAU,gBAAA,EACV,GAAG,SAAA,EACH,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,WAAW,iBAAA,EACX,MAAM,YAAA,EACN,cAAc,oBAAA,EACd,eAAe,EAAf,OAAO,mBAAG,KAAK,KAAA;IAER,IAAA,SAAS,GAAI,IAAA,uCAAe,EAAC;QAClC,MAAM,QAAA;QACN,UAAU,YAAA;QACV,SAAS,WAAA;QACT,cAAc,gBAAA;QACd,OAAO,SAAA;KACR,CAAC,UANc,CAMb;IAEH,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAExD,OAAO,CACL,iCAAC,+BAAc,IACb,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EACtC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,oBAAa,UAAU,CAAE,EAChC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,GACd,CACH,CAAC;AACJ,CAAC;AA/BD,4CA+BC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { Connection } from '@solana/web3.js';
|
|
2
|
+
import { Connection, Signer } from '@solana/web3.js';
|
|
3
3
|
import { WalletContextState } from '@solana/wallet-adapter-react';
|
|
4
4
|
export type WalletCall = {
|
|
5
5
|
method: string;
|
|
@@ -10,8 +10,10 @@ type Props = {
|
|
|
10
10
|
wallet: WalletContextState;
|
|
11
11
|
connection: Connection;
|
|
12
12
|
onSuccess?: OnSuccessMethod;
|
|
13
|
+
partialSigners?: Signer[];
|
|
14
|
+
debugTx?: boolean;
|
|
13
15
|
};
|
|
14
|
-
export declare function useIframeWallet({ wallet, connection, onSuccess }: Props): {
|
|
16
|
+
export declare function useIframeWallet({ wallet, connection, onSuccess, partialSigners, debugTx, }: Props): {
|
|
15
17
|
IFrameRef: import("react").RefObject<HTMLIFrameElement>;
|
|
16
18
|
};
|
|
17
19
|
export {};
|
|
@@ -7,7 +7,7 @@ var bs58_1 = tslib_1.__importDefault(require("bs58"));
|
|
|
7
7
|
var web3_js_1 = require("@solana/web3.js");
|
|
8
8
|
function useIframeWallet(_a) {
|
|
9
9
|
var _this = this;
|
|
10
|
-
var wallet = _a.wallet, connection = _a.connection, onSuccess = _a.onSuccess;
|
|
10
|
+
var wallet = _a.wallet, connection = _a.connection, onSuccess = _a.onSuccess, partialSigners = _a.partialSigners, _b = _a.debugTx, debugTx = _b === void 0 ? false : _b;
|
|
11
11
|
var IFrameRef = (0, react_1.useRef)(null);
|
|
12
12
|
var sendIFrameMessage = (0, react_1.useCallback)(function (message) {
|
|
13
13
|
var _a;
|
|
@@ -33,7 +33,27 @@ function useIframeWallet(_a) {
|
|
|
33
33
|
});
|
|
34
34
|
});
|
|
35
35
|
}, [sendIFrameMessage, wallet]);
|
|
36
|
-
var
|
|
36
|
+
var sendTransactionDebug = (0, react_1.useCallback)(function (tx) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
37
|
+
var signedTx, signature;
|
|
38
|
+
return tslib_1.__generator(this, function (_a) {
|
|
39
|
+
switch (_a.label) {
|
|
40
|
+
case 0:
|
|
41
|
+
if (!wallet.signTransaction)
|
|
42
|
+
throw new Error('Wallet does not support sign transaction');
|
|
43
|
+
return [4 /*yield*/, wallet.signTransaction(tx)];
|
|
44
|
+
case 1:
|
|
45
|
+
signedTx = _a.sent();
|
|
46
|
+
return [4 /*yield*/, connection.sendTransaction(signedTx, [], {
|
|
47
|
+
skipPreflight: true
|
|
48
|
+
})];
|
|
49
|
+
case 2:
|
|
50
|
+
signature = _a.sent();
|
|
51
|
+
sendIFrameMessage(signature);
|
|
52
|
+
return [2 /*return*/];
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}); }, [connection, sendIFrameMessage, wallet]);
|
|
56
|
+
var handleSendTransaction = (0, react_1.useCallback)(function (_a) {
|
|
37
57
|
var data = _a.data;
|
|
38
58
|
return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
39
59
|
var tx, _b, signature;
|
|
@@ -45,15 +65,30 @@ function useIframeWallet(_a) {
|
|
|
45
65
|
return [4 /*yield*/, connection.getLatestBlockhash()];
|
|
46
66
|
case 1:
|
|
47
67
|
_b.recentBlockhash = (_c.sent()).blockhash;
|
|
48
|
-
|
|
68
|
+
// Partially sign the transaction with any partial signers
|
|
69
|
+
if (partialSigners)
|
|
70
|
+
partialSigners.forEach(function (signer) { return tx.partialSign(signer); });
|
|
71
|
+
if (!debugTx) return [3 /*break*/, 3];
|
|
72
|
+
return [4 /*yield*/, sendTransactionDebug(tx)];
|
|
49
73
|
case 2:
|
|
74
|
+
_c.sent();
|
|
75
|
+
return [2 /*return*/];
|
|
76
|
+
case 3: return [4 /*yield*/, wallet.sendTransaction(tx, connection)];
|
|
77
|
+
case 4:
|
|
50
78
|
signature = _c.sent();
|
|
51
79
|
sendIFrameMessage(signature);
|
|
52
80
|
return [2 /*return*/];
|
|
53
81
|
}
|
|
54
82
|
});
|
|
55
83
|
});
|
|
56
|
-
}, [
|
|
84
|
+
}, [
|
|
85
|
+
connection,
|
|
86
|
+
debugTx,
|
|
87
|
+
partialSigners,
|
|
88
|
+
sendIFrameMessage,
|
|
89
|
+
sendTransactionDebug,
|
|
90
|
+
wallet,
|
|
91
|
+
]);
|
|
57
92
|
var handleIframeMessages = (0, react_1.useCallback)(function (_a) {
|
|
58
93
|
var data = _a.data;
|
|
59
94
|
return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
@@ -78,7 +113,7 @@ function useIframeWallet(_a) {
|
|
|
78
113
|
case 2:
|
|
79
114
|
_c.sent();
|
|
80
115
|
return [3 /*break*/, 7];
|
|
81
|
-
case 3: return [4 /*yield*/,
|
|
116
|
+
case 3: return [4 /*yield*/, handleSendTransaction(parsedData)];
|
|
82
117
|
case 4:
|
|
83
118
|
_c.sent();
|
|
84
119
|
return [3 /*break*/, 7];
|
|
@@ -106,7 +141,7 @@ function useIframeWallet(_a) {
|
|
|
106
141
|
});
|
|
107
142
|
}, [
|
|
108
143
|
handleSignMessage,
|
|
109
|
-
|
|
144
|
+
handleSendTransaction,
|
|
110
145
|
onSuccess,
|
|
111
146
|
sendIFrameMessage,
|
|
112
147
|
wallet,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IFrameWalletConnector.js","sourceRoot":"","sources":["../../src/IFrameWalletConnector.ts"],"names":[],"mappings":";;;;AAAA,+BAAqD;AACrD,sDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"IFrameWalletConnector.js","sourceRoot":"","sources":["../../src/IFrameWalletConnector.ts"],"names":[],"mappings":";;;;AAAA,+BAAqD;AACrD,sDAA0B;AAC1B,2CAAgE;AAehE,SAAgB,eAAe,CAAC,EAMxB;IANR,iBAmHC;QAlHC,MAAM,YAAA,EACN,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,eAAe,EAAf,OAAO,mBAAG,KAAK,KAAA;IAEf,IAAM,SAAS,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IAElD,IAAM,iBAAiB,GAAG,IAAA,mBAAW,EACnC,UAAC,OAAe;;QACd,IAAI,CAAC,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0CAAE,aAAa,CAAA;YACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,IAAM,iBAAiB,GAAG,IAAA,mBAAW,EACnC,UAAO,EAAkB;YAAjB,IAAI,UAAA;;;;;;wBACV,IAAI,CAAC,MAAM,CAAC,WAAW;4BAAE,sBAAO;wBACd,qBAAM,MAAM,CAAC,WAAW,CAAC,iBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAA;;wBAAzD,SAAS,GAAG,SAA6C;wBAC/D,iBAAiB,CAAC,iBAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;;;;;KAC7C,EACD,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAC5B,CAAC;IAEF,IAAM,oBAAoB,GAAG,IAAA,mBAAW,EACtC,UAAO,EAAe;;;;;oBACpB,IAAI,CAAC,MAAM,CAAC,eAAe;wBACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;oBAE7C,qBAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,EAAA;;oBAA3C,QAAQ,GAAG,SAAgC;oBAC/B,qBAAM,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE;4BAC/D,aAAa,EAAE,IAAI;yBACpB,CAAC,EAAA;;oBAFI,SAAS,GAAG,SAEhB;oBACF,iBAAiB,CAAC,SAAS,CAAC,CAAC;;;;SAC9B,EACD,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,CACxC,CAAC;IAEF,IAAM,qBAAqB,GAAG,IAAA,mBAAW,EACvC,UAAO,EAAkB;YAAjB,IAAI,UAAA;;;;;;wBACJ,EAAE,GAAG,qBAAW,CAAC,IAAI,CAAC,iBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjD,KAAA,EAAE,CAAA;wBAAoB,qBAAM,UAAU,CAAC,kBAAkB,EAAE,EAAA;;wBAA3D,GAAG,eAAe,GAAG,CAAC,SAAqC,CAAC,CAAC,SAAS,CAAC;wBAEvE,0DAA0D;wBAC1D,IAAI,cAAc;4BAChB,cAAc,CAAC,OAAO,CAAC,UAAA,MAAM,IAAI,OAAA,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAtB,CAAsB,CAAC,CAAC;6BAEvD,OAAO,EAAP,wBAAO;wBACT,qBAAM,oBAAoB,CAAC,EAAE,CAAC,EAAA;;wBAA9B,SAA8B,CAAC;wBAC/B,sBAAO;4BAGS,qBAAM,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,EAAA;;wBAAxD,SAAS,GAAG,SAA4C;wBAC9D,iBAAiB,CAAC,SAAS,CAAC,CAAC;;;;;KAC9B,EACD;QACE,UAAU;QACV,OAAO;QACP,cAAc;QACd,iBAAiB;QACjB,oBAAoB;QACpB,MAAM;KACP,CACF,CAAC;IAEF,IAAM,oBAAoB,GAAG,IAAA,mBAAW,EACtC,UAAO,EAAsB;YAArB,IAAI,UAAA;;;;;;;wBAER,IAAI,CAAC,MAAM;4BAAE,sBAAO;wBAEhB,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;wBACjC,IAAI,CAAC,UAAU;4BAAE,sBAAO;wBAEhB,KAAA,UAAU,CAAC,MAAM,CAAA;;iCAClB,aAAa,CAAC,CAAd,wBAAa;iCAIb,iBAAiB,CAAC,CAAlB,wBAAiB;iCAIjB,SAAS,CAAC,CAAV,wBAAS;;;4BAPZ,qBAAM,iBAAiB,CAAC,UAAU,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,wBAAM;4BAGN,qBAAM,qBAAqB,CAAC,UAAU,CAAC,EAAA;;wBAAvC,SAAuC,CAAC;wBACxC,wBAAM;;wBAEQ;4BACd,IAAI,SAAS;gCAAE,SAAS,CAAC,IAAI,CAAC,CAAC;4BAC/B,wBAAM;yBACP;;;wBACQ;4BACP,MAAM,IAAI,KAAK,CACb,oCAA6B,UAAU,CAAC,MAAM,6CAA0C,CACzF,CAAC;yBACH;;;;;wBAGH,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAC,CAAC,CAAC;wBACzC,iBAAiB,CAAC,OAAO,CAAC,CAAC;;;;;;KAE9B,EACD;QACE,iBAAiB;QACjB,qBAAqB;QACrB,SAAS;QACT,iBAAiB;QACjB,MAAM;KACP,CACF,CAAC;IAEF,IAAA,iBAAS,EAAC;QACR,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnD,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC;IAC1C,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,OAAO,EAAC,SAAS,WAAA,EAAC,CAAC;AACrB,CAAC;AAnHD,0CAmHC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI;QACF,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO,GAAG,CAAC;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC;KACb;AACH,CAAC"}
|
|
@@ -6,8 +6,8 @@ type CoinflowIFrameProps = {
|
|
|
6
6
|
IFrameRef: React.RefObject<HTMLIFrameElement>;
|
|
7
7
|
env?: CoinflowEnvs;
|
|
8
8
|
route: string;
|
|
9
|
-
transaction?: Transaction;
|
|
10
9
|
amount?: number;
|
|
10
|
+
transaction?: Transaction;
|
|
11
11
|
};
|
|
12
12
|
export declare function CoinflowIFrame({ publicKey, IFrameRef, env, route, transaction, amount, }: CoinflowIFrameProps): JSX.Element;
|
|
13
13
|
export {};
|
|
@@ -22,7 +22,6 @@ export function CoinflowIFrame(_a) {
|
|
|
22
22
|
if (amount) {
|
|
23
23
|
url.searchParams.append('amount', amount.toString());
|
|
24
24
|
}
|
|
25
|
-
console.log({ url: url });
|
|
26
25
|
return url;
|
|
27
26
|
}, [amount, env, publicKey, route, transaction]);
|
|
28
27
|
return useMemo(function () { return (React.createElement("iframe", { ref: IFrameRef, style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinflowIFrame.js","sourceRoot":"","sources":["../../src/CoinflowIFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,MAAM,MAAM,MAAM,CAAC;AAa1B,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,uBAAuB,CAAC;IAC3D,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,uBAAuB,CAAC;IAEpD,OAAO,kBAAW,GAAG,mBAAgB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAOT;QANpB,SAAS,eAAA,EACT,SAAS,eAAA,EACT,GAAG,SAAA,EACH,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,MAAM,YAAA;IAEN,IAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,WAAW,EAAE;YACf,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,WAAW,CAAC,SAAS,CAAC;gBACpB,oBAAoB,EAAE,KAAK;gBAC3B,gBAAgB,EAAE,KAAK;aACxB,CAAC,CACH,CAAC;YACF,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACtD;QACD,IAAI,MAAM,EAAE;YACV,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,
|
|
1
|
+
{"version":3,"file":"CoinflowIFrame.js","sourceRoot":"","sources":["../../src/CoinflowIFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,MAAM,MAAM,MAAM,CAAC;AAa1B,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,uBAAuB,CAAC;IAC3D,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,uBAAuB,CAAC;IAEpD,OAAO,kBAAW,GAAG,mBAAgB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAOT;QANpB,SAAS,eAAA,EACT,SAAS,eAAA,EACT,GAAG,SAAA,EACH,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,MAAM,YAAA;IAEN,IAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,WAAW,EAAE;YACf,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,WAAW,CAAC,SAAS,CAAC;gBACpB,oBAAoB,EAAE,KAAK;gBAC3B,gBAAgB,EAAE,KAAK;aACxB,CAAC,CACH,CAAC;YACF,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACtD;QACD,IAAI,MAAM,EAAE;YACV,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjD,OAAO,OAAO,CACZ,cAAM,OAAA,CACJ,gCACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;YACL,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;SACf,EACD,KAAK,EAAC,UAAU,EAChB,WAAW,EAAC,GAAG,EACf,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,GACnB,CACH,EAXK,CAWL,EACD,CAAC,SAAS,EAAE,GAAG,CAAC,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { WalletContextState } from '@solana/wallet-adapter-react';
|
|
3
|
-
import { Connection, Transaction } from '@solana/web3.js';
|
|
3
|
+
import { Connection, Signer, Transaction } from '@solana/web3.js';
|
|
4
4
|
import { CoinflowEnvs } from './CoinflowIFrame';
|
|
5
5
|
import { OnSuccessMethod } from './IFrameWalletConnector';
|
|
6
6
|
type Props = {
|
|
@@ -11,6 +11,8 @@ type Props = {
|
|
|
11
11
|
env?: CoinflowEnvs;
|
|
12
12
|
onSuccess?: OnSuccessMethod;
|
|
13
13
|
transaction?: Transaction;
|
|
14
|
+
partialSigners?: Signer[];
|
|
15
|
+
debugTx?: boolean;
|
|
14
16
|
};
|
|
15
|
-
export declare function CoinflowPurchase({ wallet, merchantId, env, connection, onSuccess, transaction, amount, }: Props): JSX.Element | null;
|
|
17
|
+
export declare function CoinflowPurchase({ wallet, merchantId, env, connection, onSuccess, transaction, amount, partialSigners, debugTx, }: Props): JSX.Element | null;
|
|
16
18
|
export {};
|
|
@@ -2,8 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import { CoinflowIFrame } from './CoinflowIFrame';
|
|
3
3
|
import { useIframeWallet } from './IFrameWalletConnector';
|
|
4
4
|
export function CoinflowPurchase(_a) {
|
|
5
|
-
var wallet = _a.wallet, merchantId = _a.merchantId, env = _a.env, connection = _a.connection, onSuccess = _a.onSuccess, transaction = _a.transaction, amount = _a.amount;
|
|
6
|
-
var IFrameRef = useIframeWallet({
|
|
5
|
+
var wallet = _a.wallet, merchantId = _a.merchantId, env = _a.env, connection = _a.connection, onSuccess = _a.onSuccess, transaction = _a.transaction, amount = _a.amount, partialSigners = _a.partialSigners, _b = _a.debugTx, debugTx = _b === void 0 ? false : _b;
|
|
6
|
+
var IFrameRef = useIframeWallet({
|
|
7
|
+
wallet: wallet,
|
|
8
|
+
connection: connection,
|
|
9
|
+
onSuccess: onSuccess,
|
|
10
|
+
partialSigners: partialSigners,
|
|
11
|
+
debugTx: debugTx
|
|
12
|
+
}).IFrameRef;
|
|
7
13
|
if (!wallet.publicKey || !wallet.connected)
|
|
8
14
|
return null;
|
|
9
15
|
return (React.createElement(CoinflowIFrame, { publicKey: wallet.publicKey.toString(), IFrameRef: IFrameRef, route: "/purchase/".concat(merchantId), env: env, transaction: transaction, amount: amount }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinflowPurchase.js","sourceRoot":"","sources":["../../src/CoinflowPurchase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAe,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAkB,eAAe,EAAC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"CoinflowPurchase.js","sourceRoot":"","sources":["../../src/CoinflowPurchase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAe,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAkB,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAczE,MAAM,UAAU,gBAAgB,CAAC,EAUzB;QATN,MAAM,YAAA,EACN,UAAU,gBAAA,EACV,GAAG,SAAA,EACH,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,WAAW,iBAAA,EACX,MAAM,YAAA,EACN,cAAc,oBAAA,EACd,eAAe,EAAf,OAAO,mBAAG,KAAK,KAAA;IAER,IAAA,SAAS,GAAI,eAAe,CAAC;QAClC,MAAM,QAAA;QACN,UAAU,YAAA;QACV,SAAS,WAAA;QACT,cAAc,gBAAA;QACd,OAAO,SAAA;KACR,CAAC,UANc,CAMb;IAEH,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAExD,OAAO,CACL,oBAAC,cAAc,IACb,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EACtC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,oBAAa,UAAU,CAAE,EAChC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,GACd,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { Connection } from '@solana/web3.js';
|
|
2
|
+
import { Connection, Signer } from '@solana/web3.js';
|
|
3
3
|
import { WalletContextState } from '@solana/wallet-adapter-react';
|
|
4
4
|
export type WalletCall = {
|
|
5
5
|
method: string;
|
|
@@ -10,8 +10,10 @@ type Props = {
|
|
|
10
10
|
wallet: WalletContextState;
|
|
11
11
|
connection: Connection;
|
|
12
12
|
onSuccess?: OnSuccessMethod;
|
|
13
|
+
partialSigners?: Signer[];
|
|
14
|
+
debugTx?: boolean;
|
|
13
15
|
};
|
|
14
|
-
export declare function useIframeWallet({ wallet, connection, onSuccess }: Props): {
|
|
16
|
+
export declare function useIframeWallet({ wallet, connection, onSuccess, partialSigners, debugTx, }: Props): {
|
|
15
17
|
IFrameRef: import("react").RefObject<HTMLIFrameElement>;
|
|
16
18
|
};
|
|
17
19
|
export {};
|
|
@@ -4,7 +4,7 @@ import base58 from 'bs58';
|
|
|
4
4
|
import { Transaction } from '@solana/web3.js';
|
|
5
5
|
export function useIframeWallet(_a) {
|
|
6
6
|
var _this = this;
|
|
7
|
-
var wallet = _a.wallet, connection = _a.connection, onSuccess = _a.onSuccess;
|
|
7
|
+
var wallet = _a.wallet, connection = _a.connection, onSuccess = _a.onSuccess, partialSigners = _a.partialSigners, _b = _a.debugTx, debugTx = _b === void 0 ? false : _b;
|
|
8
8
|
var IFrameRef = useRef(null);
|
|
9
9
|
var sendIFrameMessage = useCallback(function (message) {
|
|
10
10
|
var _a;
|
|
@@ -30,7 +30,27 @@ export function useIframeWallet(_a) {
|
|
|
30
30
|
});
|
|
31
31
|
});
|
|
32
32
|
}, [sendIFrameMessage, wallet]);
|
|
33
|
-
var
|
|
33
|
+
var sendTransactionDebug = useCallback(function (tx) { return __awaiter(_this, void 0, void 0, function () {
|
|
34
|
+
var signedTx, signature;
|
|
35
|
+
return __generator(this, function (_a) {
|
|
36
|
+
switch (_a.label) {
|
|
37
|
+
case 0:
|
|
38
|
+
if (!wallet.signTransaction)
|
|
39
|
+
throw new Error('Wallet does not support sign transaction');
|
|
40
|
+
return [4 /*yield*/, wallet.signTransaction(tx)];
|
|
41
|
+
case 1:
|
|
42
|
+
signedTx = _a.sent();
|
|
43
|
+
return [4 /*yield*/, connection.sendTransaction(signedTx, [], {
|
|
44
|
+
skipPreflight: true
|
|
45
|
+
})];
|
|
46
|
+
case 2:
|
|
47
|
+
signature = _a.sent();
|
|
48
|
+
sendIFrameMessage(signature);
|
|
49
|
+
return [2 /*return*/];
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}); }, [connection, sendIFrameMessage, wallet]);
|
|
53
|
+
var handleSendTransaction = useCallback(function (_a) {
|
|
34
54
|
var data = _a.data;
|
|
35
55
|
return __awaiter(_this, void 0, void 0, function () {
|
|
36
56
|
var tx, _b, signature;
|
|
@@ -42,15 +62,30 @@ export function useIframeWallet(_a) {
|
|
|
42
62
|
return [4 /*yield*/, connection.getLatestBlockhash()];
|
|
43
63
|
case 1:
|
|
44
64
|
_b.recentBlockhash = (_c.sent()).blockhash;
|
|
45
|
-
|
|
65
|
+
// Partially sign the transaction with any partial signers
|
|
66
|
+
if (partialSigners)
|
|
67
|
+
partialSigners.forEach(function (signer) { return tx.partialSign(signer); });
|
|
68
|
+
if (!debugTx) return [3 /*break*/, 3];
|
|
69
|
+
return [4 /*yield*/, sendTransactionDebug(tx)];
|
|
46
70
|
case 2:
|
|
71
|
+
_c.sent();
|
|
72
|
+
return [2 /*return*/];
|
|
73
|
+
case 3: return [4 /*yield*/, wallet.sendTransaction(tx, connection)];
|
|
74
|
+
case 4:
|
|
47
75
|
signature = _c.sent();
|
|
48
76
|
sendIFrameMessage(signature);
|
|
49
77
|
return [2 /*return*/];
|
|
50
78
|
}
|
|
51
79
|
});
|
|
52
80
|
});
|
|
53
|
-
}, [
|
|
81
|
+
}, [
|
|
82
|
+
connection,
|
|
83
|
+
debugTx,
|
|
84
|
+
partialSigners,
|
|
85
|
+
sendIFrameMessage,
|
|
86
|
+
sendTransactionDebug,
|
|
87
|
+
wallet,
|
|
88
|
+
]);
|
|
54
89
|
var handleIframeMessages = useCallback(function (_a) {
|
|
55
90
|
var data = _a.data;
|
|
56
91
|
return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -75,7 +110,7 @@ export function useIframeWallet(_a) {
|
|
|
75
110
|
case 2:
|
|
76
111
|
_c.sent();
|
|
77
112
|
return [3 /*break*/, 7];
|
|
78
|
-
case 3: return [4 /*yield*/,
|
|
113
|
+
case 3: return [4 /*yield*/, handleSendTransaction(parsedData)];
|
|
79
114
|
case 4:
|
|
80
115
|
_c.sent();
|
|
81
116
|
return [3 /*break*/, 7];
|
|
@@ -103,7 +138,7 @@ export function useIframeWallet(_a) {
|
|
|
103
138
|
});
|
|
104
139
|
}, [
|
|
105
140
|
handleSignMessage,
|
|
106
|
-
|
|
141
|
+
handleSendTransaction,
|
|
107
142
|
onSuccess,
|
|
108
143
|
sendIFrameMessage,
|
|
109
144
|
wallet,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IFrameWalletConnector.js","sourceRoot":"","sources":["../../src/IFrameWalletConnector.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,MAAM,MAAM,MAAM,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"IFrameWalletConnector.js","sourceRoot":"","sources":["../../src/IFrameWalletConnector.ts"],"names":[],"mappings":"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"}
|