@tatumio/flow 2.0.1-alpha.376 → 2.0.1-alpha.377
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +10 -10
- package/src/lib/flow.sdk.d.ts +56 -57
- package/src/lib/flow.sdk.js +7 -17
- package/src/lib/flow.sdk.js.map +1 -1
- package/src/lib/services/flow.account.d.ts +25 -0
- package/src/lib/services/flow.account.js +92 -0
- package/src/lib/services/flow.account.js.map +1 -0
- package/src/lib/services/flow.kms.js +8 -8
- package/src/lib/services/flow.kms.js.map +1 -1
- package/src/lib/services/flow.nft.d.ts +57 -0
- package/src/lib/services/flow.nft.js +213 -0
- package/src/lib/services/flow.nft.js.map +1 -0
- package/src/lib/services/flow.sdk.wallet.d.ts +1 -4
- package/src/lib/services/flow.sdk.wallet.js +5 -22
- package/src/lib/services/flow.sdk.wallet.js.map +1 -1
- package/src/lib/services/flow.tx.d.ts +42 -104
- package/src/lib/services/flow.tx.js +54 -447
- package/src/lib/services/flow.tx.js.map +1 -1
- package/src/lib/utils/flow.utils.d.ts +47 -0
- package/src/lib/utils/flow.utils.js +143 -0
- package/src/lib/utils/flow.utils.js.map +1 -0
- package/src/lib/utils/flow.wallet.utils.d.ts +7 -0
- package/src/lib/utils/flow.wallet.utils.js +37 -0
- package/src/lib/utils/flow.wallet.utils.js.map +1 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
import { Account, AccountAuthorization, FixedFlowCustomTransactionPK, FlowArgs, FlowPrivateKeyOrSignatureId, Transaction, TransactionResult } from '@tatumio/flow';
|
2
|
+
import { BurnNftFlowPK, FlowCreateAddressFromPubKeySecret, FlowTransactionPK, MintMultipleNftFlowPK, MintNftFlowPK, TransferNftFlowPK } from '@tatumio/api-client';
|
3
|
+
export declare type MintFlowNft = FlowPrivateKeyOrSignatureId<MintNftFlowPK>;
|
4
|
+
export declare type MintMultipleFlowNft = FlowPrivateKeyOrSignatureId<MintMultipleNftFlowPK>;
|
5
|
+
export declare type TransferFlowNft = FlowPrivateKeyOrSignatureId<TransferNftFlowPK>;
|
6
|
+
export declare type BurnFlowNft = FlowPrivateKeyOrSignatureId<BurnNftFlowPK>;
|
7
|
+
export declare type TransferFlowCustomTx = FlowPrivateKeyOrSignatureId<FixedFlowCustomTransactionPK>;
|
8
|
+
export declare type TransferFlow = FlowPrivateKeyOrSignatureId<FlowTransactionPK>;
|
9
|
+
export declare type CreateAddressFromPubKey = FlowPrivateKeyOrSignatureId<FlowCreateAddressFromPubKeySecret>;
|
10
|
+
export declare type FlowApiCalls = {
|
11
|
+
getSignKey: (isPayer: boolean) => Promise<{
|
12
|
+
keyId: number;
|
13
|
+
address: string;
|
14
|
+
}>;
|
15
|
+
signWithKey: (data: string, isPayer: boolean) => Promise<{
|
16
|
+
signature: string;
|
17
|
+
}>;
|
18
|
+
broadcast: (txData: string, signatureId?: string, proposalKey?: number) => Promise<{
|
19
|
+
txId: string;
|
20
|
+
failed?: boolean;
|
21
|
+
}>;
|
22
|
+
};
|
23
|
+
export declare const flowUtils: {
|
24
|
+
sign: (pk: string, msg: Buffer) => string;
|
25
|
+
getSigner: (pk: string, address: string, keyId?: number) => {
|
26
|
+
signer: (account: Account) => Promise<AccountAuthorization>;
|
27
|
+
};
|
28
|
+
getApiSigner: (apiCalls: FlowApiCalls, isPayer: boolean) => {
|
29
|
+
signer: (account: Account) => Promise<AccountAuthorization>;
|
30
|
+
keyHash: string;
|
31
|
+
};
|
32
|
+
sendTransaction: (apiCalls: FlowApiCalls, { code, txArgs, proposer, authorizations, payer, keyHash }: Transaction, provider: string) => Promise<TransactionResult>;
|
33
|
+
sendScript: (code: string, scriptArgs: FlowArgs[], provider: string) => Promise<any>;
|
34
|
+
getPrivateKey: (body: FlowPrivateKeyOrSignatureId<{
|
35
|
+
privateKey: string;
|
36
|
+
}>) => string | Promise<string>;
|
37
|
+
getProposalKeyOrFetch: (apiCalls: FlowApiCalls, keyHash: string, isPayer: boolean) => Promise<{
|
38
|
+
address: string;
|
39
|
+
keyId: number;
|
40
|
+
}>;
|
41
|
+
storeProposalKey: (keyHash: string, address: string, keyId: number) => void;
|
42
|
+
proposalKey: (keyHash: string) => {
|
43
|
+
address: string;
|
44
|
+
keyId: number;
|
45
|
+
} | undefined;
|
46
|
+
unlockProposalKey: (apiCalls: FlowApiCalls, keyHash?: string) => Promise<void>;
|
47
|
+
};
|
@@ -0,0 +1,143 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.flowUtils = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const elliptic = tslib_1.__importStar(require("elliptic"));
|
6
|
+
const sha3_1 = tslib_1.__importDefault(require("sha3"));
|
7
|
+
const fcl_1 = tslib_1.__importDefault(require("@onflow/fcl"));
|
8
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
9
|
+
const flow_sdk_errors_1 = require("../flow.sdk.errors");
|
10
|
+
const types_1 = tslib_1.__importDefault(require("@onflow/types"));
|
11
|
+
const shared_abstract_sdk_1 = require("@tatumio/shared-abstract-sdk");
|
12
|
+
const flow_wallet_utils_1 = require("./flow.wallet.utils");
|
13
|
+
function ArrayArgValue(arg) {
|
14
|
+
return arg.type === 'Array' ? types_1.default[arg.type](types_1.default[arg.subType]) : types_1.default[arg.type];
|
15
|
+
}
|
16
|
+
exports.flowUtils = {
|
17
|
+
sign: (pk, msg) => {
|
18
|
+
const keyPair = new elliptic.ec('secp256k1').keyFromPrivate(pk);
|
19
|
+
const signature = keyPair.sign(new sha3_1.default(256).update(msg).digest());
|
20
|
+
const r = signature.r.toArrayLike(Buffer, 'be', 32);
|
21
|
+
const s = signature.s.toArrayLike(Buffer, 'be', 32);
|
22
|
+
return Buffer.concat([r, s]).toString('hex');
|
23
|
+
},
|
24
|
+
getSigner: (pk, address, keyId = 0) => {
|
25
|
+
return {
|
26
|
+
signer: (account) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
27
|
+
return Object.assign(Object.assign({}, account), { tempId: `${address}-${keyId}`, addr: fcl_1.default.sansPrefix(address), keyId: Number(keyId), signingFunction: (data) => {
|
28
|
+
return {
|
29
|
+
addr: fcl_1.default.withPrefix(address),
|
30
|
+
keyId: Number(keyId),
|
31
|
+
signature: exports.flowUtils.sign(pk, Buffer.from(data.message, 'hex')),
|
32
|
+
};
|
33
|
+
} });
|
34
|
+
}),
|
35
|
+
};
|
36
|
+
},
|
37
|
+
getApiSigner: (apiCalls, isPayer) => {
|
38
|
+
const keyHash = lodash_1.default.uniqueId(`FLOW_PROPOSAL_KEY_`);
|
39
|
+
const signer = (account) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
40
|
+
const { address, keyId } = yield exports.flowUtils.getProposalKeyOrFetch(apiCalls, keyHash, isPayer);
|
41
|
+
if (!isPayer) {
|
42
|
+
exports.flowUtils.storeProposalKey(keyHash, address, keyId);
|
43
|
+
}
|
44
|
+
return Object.assign(Object.assign({}, account), { tempId: `${address}-${keyId}`, addr: fcl_1.default.sansPrefix(address), keyId, signingFunction: (data) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
45
|
+
return {
|
46
|
+
addr: fcl_1.default.withPrefix(address),
|
47
|
+
keyId: Number(keyId),
|
48
|
+
signature: (yield apiCalls.signWithKey(data.message, isPayer)).signature,
|
49
|
+
};
|
50
|
+
}) });
|
51
|
+
});
|
52
|
+
return { signer, keyHash: keyHash };
|
53
|
+
},
|
54
|
+
sendTransaction: (apiCalls, { code, txArgs, proposer, authorizations, payer, keyHash }, provider) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
55
|
+
fcl_1.default.config().put('accessNode.api', provider);
|
56
|
+
let response;
|
57
|
+
try {
|
58
|
+
response = yield fcl_1.default.send([
|
59
|
+
fcl_1.default.transaction(code),
|
60
|
+
fcl_1.default.args(txArgs.map((arg) => fcl_1.default.arg(arg.value, ArrayArgValue(arg)))),
|
61
|
+
fcl_1.default.proposer(proposer),
|
62
|
+
fcl_1.default.authorizations(authorizations),
|
63
|
+
fcl_1.default.payer(payer),
|
64
|
+
fcl_1.default.limit(1000),
|
65
|
+
]);
|
66
|
+
}
|
67
|
+
catch (e) {
|
68
|
+
yield exports.flowUtils.unlockProposalKey(apiCalls, keyHash);
|
69
|
+
throw new flow_sdk_errors_1.FlowSdkError({ error: e });
|
70
|
+
}
|
71
|
+
const { transactionId } = response;
|
72
|
+
try {
|
73
|
+
const { error, events } = yield fcl_1.default.tx(response).onceSealed();
|
74
|
+
if (error) {
|
75
|
+
throw new flow_sdk_errors_1.FlowSdkError({ error: error });
|
76
|
+
}
|
77
|
+
return {
|
78
|
+
id: transactionId,
|
79
|
+
events,
|
80
|
+
};
|
81
|
+
}
|
82
|
+
catch (e) {
|
83
|
+
throw new flow_sdk_errors_1.FlowSdkError({ error: e });
|
84
|
+
}
|
85
|
+
finally {
|
86
|
+
yield exports.flowUtils.unlockProposalKey(apiCalls, keyHash);
|
87
|
+
}
|
88
|
+
}),
|
89
|
+
sendScript: (code, scriptArgs, provider) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
90
|
+
fcl_1.default.config().put('accessNode.api', provider);
|
91
|
+
const response = yield fcl_1.default.send([
|
92
|
+
fcl_1.default.script(code),
|
93
|
+
fcl_1.default.args(scriptArgs.map((arg) => fcl_1.default.arg(arg.value, types_1.default[arg.type]))),
|
94
|
+
]);
|
95
|
+
return fcl_1.default.decode(response);
|
96
|
+
}),
|
97
|
+
getPrivateKey: (body) => {
|
98
|
+
const { mnemonic, index, privateKey } = body;
|
99
|
+
if (privateKey) {
|
100
|
+
return privateKey;
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
if (mnemonic && !lodash_1.default.isNil(index) && index >= 0) {
|
104
|
+
return flow_wallet_utils_1.flowWalletUtils.generatePrivateKeyFromMnemonic(mnemonic, index);
|
105
|
+
}
|
106
|
+
else
|
107
|
+
throw new flow_sdk_errors_1.FlowSdkError({ code: shared_abstract_sdk_1.SdkErrorCode.FLOW_MISSING_MNEMONIC });
|
108
|
+
}
|
109
|
+
},
|
110
|
+
getProposalKeyOrFetch: (apiCalls, keyHash, isPayer) => {
|
111
|
+
const value = process.env[keyHash];
|
112
|
+
if (value) {
|
113
|
+
return JSON.parse(value);
|
114
|
+
}
|
115
|
+
else {
|
116
|
+
return apiCalls.getSignKey(isPayer);
|
117
|
+
}
|
118
|
+
},
|
119
|
+
storeProposalKey: (keyHash, address, keyId) => {
|
120
|
+
process.env[keyHash] = JSON.stringify({ address, keyId });
|
121
|
+
},
|
122
|
+
proposalKey: (keyHash) => {
|
123
|
+
const value = process.env[keyHash];
|
124
|
+
if (!value)
|
125
|
+
return undefined;
|
126
|
+
return keyHash ? JSON.parse(value) : undefined;
|
127
|
+
},
|
128
|
+
unlockProposalKey: (apiCalls, keyHash) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
129
|
+
try {
|
130
|
+
if (keyHash) {
|
131
|
+
const key = exports.flowUtils.proposalKey(keyHash);
|
132
|
+
if (key) {
|
133
|
+
yield apiCalls.broadcast('', undefined, key.keyId);
|
134
|
+
delete process.env[keyHash];
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
catch (e) {
|
139
|
+
throw new flow_sdk_errors_1.FlowSdkError({ error: e });
|
140
|
+
}
|
141
|
+
}),
|
142
|
+
};
|
143
|
+
//# sourceMappingURL=flow.utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"flow.utils.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/flow/src/lib/utils/flow.utils.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { Wallet } from '@tatumio/api-client';
|
2
|
+
export declare const flowWalletUtils: {
|
3
|
+
generateAddressFromXPub: (xpub: string, i: number) => string;
|
4
|
+
generateAddressFromPrivateKey: (privateKey: string) => string;
|
5
|
+
generateWallet: (mnemonic?: string) => Promise<Wallet>;
|
6
|
+
generatePrivateKeyFromMnemonic: (mnemonic: string, i: number) => Promise<string>;
|
7
|
+
};
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.flowWalletUtils = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const bip32_1 = require("bip32");
|
6
|
+
const elliptic = tslib_1.__importStar(require("elliptic"));
|
7
|
+
const bip39_1 = require("bip39");
|
8
|
+
const hdkey_1 = tslib_1.__importDefault(require("hdkey"));
|
9
|
+
const shared_core_1 = require("@tatumio/shared-core");
|
10
|
+
exports.flowWalletUtils = {
|
11
|
+
generateAddressFromXPub: (xpub, i) => {
|
12
|
+
const w = (0, bip32_1.fromBase58)(xpub).derivePath(String(i));
|
13
|
+
const s = new elliptic.ec('secp256k1').keyFromPublic(w.publicKey).getPublic().encode('hex', false);
|
14
|
+
return s.slice(2);
|
15
|
+
},
|
16
|
+
generateAddressFromPrivateKey: (privateKey) => {
|
17
|
+
const s = new elliptic.ec('secp256k1').keyFromPrivate(privateKey).getPublic().encode('hex', false);
|
18
|
+
return s.slice(2);
|
19
|
+
},
|
20
|
+
generateWallet: (mnemonic) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
21
|
+
mnemonic || (mnemonic = (0, bip39_1.generateMnemonic)(256));
|
22
|
+
const hdwallet = hdkey_1.default.fromMasterSeed(yield (0, bip39_1.mnemonicToSeed)(mnemonic));
|
23
|
+
return {
|
24
|
+
mnemonic,
|
25
|
+
xpub: hdwallet.derive(shared_core_1.DERIVATION_PATH.FLOW).toJSON().xpub,
|
26
|
+
};
|
27
|
+
}),
|
28
|
+
generatePrivateKeyFromMnemonic: (mnemonic, i) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
29
|
+
const key = (0, bip32_1.fromSeed)(yield (0, bip39_1.mnemonicToSeed)(mnemonic))
|
30
|
+
.derivePath(shared_core_1.DERIVATION_PATH.FLOW)
|
31
|
+
.derive(i).privateKey;
|
32
|
+
if (!key)
|
33
|
+
throw new Error('No key generated');
|
34
|
+
return new elliptic.ec('secp256k1').keyFromPrivate(key).getPrivate().toString(16);
|
35
|
+
}),
|
36
|
+
};
|
37
|
+
//# sourceMappingURL=flow.wallet.utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"flow.wallet.utils.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/flow/src/lib/utils/flow.wallet.utils.ts"],"names":[],"mappings":";;;;AAAA,iCAA4C;AAC5C,2DAAoC;AACpC,iCAAwD;AACxD,0DAAyB;AACzB,sDAAsD;AAGzC,QAAA,eAAe,GAAG;IAC7B,uBAAuB,EAAE,CAAC,IAAY,EAAE,CAAS,EAAU,EAAE;QAC3D,MAAM,CAAC,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAChD,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAClG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,6BAA6B,EAAE,CAAC,UAAkB,EAAU,EAAE;QAC5D,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAClG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,cAAc,EAAE,CAAO,QAAiB,EAAmB,EAAE;QAC3D,QAAQ,KAAR,QAAQ,GAAK,IAAA,wBAAgB,EAAC,GAAG,CAAC,EAAA;QAClC,MAAM,QAAQ,GAAG,eAAK,CAAC,cAAc,CAAC,MAAM,IAAA,sBAAc,EAAC,QAAQ,CAAC,CAAC,CAAA;QACrE,OAAO;YACL,QAAQ;YACR,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,6BAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI;SAC1D,CAAA;IACH,CAAC,CAAA;IACD,8BAA8B,EAAE,CAAO,QAAgB,EAAE,CAAS,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,IAAA,gBAAQ,EAAC,MAAM,IAAA,sBAAc,EAAC,QAAQ,CAAC,CAAC;aACjD,UAAU,CAAC,6BAAe,CAAC,IAAI,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QACvB,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC7C,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACnF,CAAC,CAAA;CACF,CAAA"}
|