freetimesdk 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeeManager.d.ts","sourceRoot":"","sources":["../src/FeeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE/C,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,gBAAgB,CAUrB;IAEH,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWjD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWlC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAQrD,sBAAsB,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;IAI/C,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;IAKtE,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,UAAU;CAItE"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeeManagerImpl = void 0;
4
+ const types_1 = require("./types");
5
+ class FeeManagerImpl {
6
+ constructor() {
7
+ this.developerWallets = new Map([
8
+ [types_1.CoinType.BITCOIN, 'bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh'],
9
+ [types_1.CoinType.ETHEREUM, '0x742d35Cc6634C0532925a3b8D4C9db96C4b4Db45'],
10
+ [types_1.CoinType.LITECOIN, 'LTC1QXY2KGDYGJRSQTZQ2N0YRF2493P83KKFJHX0WLH'],
11
+ [types_1.CoinType.BITCOIN_CASH, 'bitcoincash:qpm2qsznhks23z7629mms6s4qs0vjsyevgqq9k0u0'],
12
+ [types_1.CoinType.DOGECOIN, 'D8iFWKZP6h8c6R5J5X5X5X5X5X5X5X5X5X'],
13
+ [types_1.CoinType.SOLANA, '9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM'],
14
+ [types_1.CoinType.POLYGON, '0x742d35Cc6634C0532925a3b8D4C9db96C4b4Db45'],
15
+ [types_1.CoinType.BINANCE_COIN, 'bnb1grpf0955h0ykzq3ar5nmum7y6fdflryxqfxp9c'],
16
+ [types_1.CoinType.TRON, 'TJjXgmR1SjJQkLGGaXQZgDq4QWqLZ8vZkL']
17
+ ]);
18
+ }
19
+ getDeveloperFeePercentage(amount) {
20
+ const amountNum = parseFloat(amount);
21
+ if (amountNum >= 1000)
22
+ return '0.05';
23
+ if (amountNum >= 100)
24
+ return '0.1';
25
+ if (amountNum >= 10)
26
+ return '0.25';
27
+ if (amountNum >= 1)
28
+ return '0.35';
29
+ if (amountNum >= 0.1)
30
+ return '0.4';
31
+ return '0.5';
32
+ }
33
+ getFeeTier(amount) {
34
+ const amountNum = parseFloat(amount);
35
+ if (amountNum >= 1000)
36
+ return 'Enterprise (>= 1000)';
37
+ if (amountNum >= 100)
38
+ return 'Business (>= 100)';
39
+ if (amountNum >= 10)
40
+ return 'Professional (>= 10)';
41
+ if (amountNum >= 1)
42
+ return 'Standard (>= 1)';
43
+ if (amountNum >= 0.1)
44
+ return 'Basic (>= 0.1)';
45
+ return 'Micro (< 0.1)';
46
+ }
47
+ getDeveloperWalletAddress(coinType) {
48
+ const wallet = this.developerWallets.get(coinType);
49
+ if (!wallet) {
50
+ throw new Error(`Developer wallet not configured for ${coinType}`);
51
+ }
52
+ return wallet;
53
+ }
54
+ getAllDeveloperWallets() {
55
+ return new Map(this.developerWallets);
56
+ }
57
+ updateDeveloperWallet(coinType, address) {
58
+ this.developerWallets.set(coinType, address);
59
+ return this;
60
+ }
61
+ updateAllDeveloperWallets(wallets) {
62
+ this.developerWallets = new Map(wallets);
63
+ return this;
64
+ }
65
+ }
66
+ exports.FeeManagerImpl = FeeManagerImpl;
67
+ //# sourceMappingURL=FeeManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeeManager.js","sourceRoot":"","sources":["../src/FeeManager.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAE/C,MAAa,cAAc;IAA3B;QACU,qBAAgB,GAA0B,IAAI,GAAG,CAAC;YACxD,CAAC,gBAAQ,CAAC,OAAO,EAAE,4CAA4C,CAAC;YAChE,CAAC,gBAAQ,CAAC,QAAQ,EAAE,4CAA4C,CAAC;YACjE,CAAC,gBAAQ,CAAC,QAAQ,EAAE,6CAA6C,CAAC;YAClE,CAAC,gBAAQ,CAAC,YAAY,EAAE,uDAAuD,CAAC;YAChF,CAAC,gBAAQ,CAAC,QAAQ,EAAE,oCAAoC,CAAC;YACzD,CAAC,gBAAQ,CAAC,MAAM,EAAE,8CAA8C,CAAC;YACjE,CAAC,gBAAQ,CAAC,OAAO,EAAE,4CAA4C,CAAC;YAChE,CAAC,gBAAQ,CAAC,YAAY,EAAE,4CAA4C,CAAC;YACrE,CAAC,gBAAQ,CAAC,IAAI,EAAE,oCAAoC,CAAC;SACtD,CAAC,CAAC;IA6CL,CAAC;IA3CC,yBAAyB,CAAC,MAAc;QACtC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;QACrC,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,SAAS,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QACnC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,sBAAsB,CAAC;QACrD,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,mBAAmB,CAAC;QACjD,IAAI,SAAS,IAAI,EAAE;YAAE,OAAO,sBAAsB,CAAC;QACnD,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,iBAAiB,CAAC;QAC7C,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,gBAAgB,CAAC;QAC9C,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,yBAAyB,CAAC,QAAkB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB,CAAC,QAAkB,EAAE,OAAe;QACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAyB,CAAC,OAA8B;QACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAxDD,wCAwDC"}
@@ -0,0 +1,17 @@
1
+ import { CoinType, Wallet, TransactionWithFees, FeeManager, FreetimePaymentSDK as IFreetimePaymentSDK } from './types';
2
+ export declare class FreetimePaymentSDK implements IFreetimePaymentSDK {
3
+ private wallets;
4
+ private feeManager;
5
+ private paymentProviders;
6
+ constructor();
7
+ private initializePaymentProviders;
8
+ createWallet(coinType: CoinType, name?: string): Wallet;
9
+ getBalance(address: string): Promise<string>;
10
+ send(fromAddress: string, toAddress: string, amount: string, coinType: CoinType): Promise<TransactionWithFees>;
11
+ getFeeEstimate(fromAddress: string, toAddress: string, amount: string, coinType: CoinType): Promise<string>;
12
+ getFeeManager(): FeeManager;
13
+ getAllWallets(): Wallet[];
14
+ getWalletsByCoinType(coinType: CoinType): Wallet[];
15
+ validateAddress(address: string, coinType: CoinType): boolean;
16
+ }
17
+ //# sourceMappingURL=FreetimePaymentSDK.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreetimePaymentSDK.d.ts","sourceRoot":"","sources":["../src/FreetimePaymentSDK.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,MAAM,EAEN,mBAAmB,EACnB,UAAU,EAEV,kBAAkB,IAAI,mBAAmB,EAC1C,MAAM,SAAS,CAAC;AAOjB,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAA8C;;IAOtE,OAAO,CAAC,0BAA0B;IAMlC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAMjD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc5C,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,mBAAmB,CAAC;IA4CzB,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC;IAalB,aAAa,IAAI,UAAU;IAI3B,aAAa,IAAI,MAAM,EAAE;IAIzB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE;IAIlD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAG9D"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FreetimePaymentSDK = void 0;
4
+ const types_1 = require("./types");
5
+ const Wallet_1 = require("./Wallet");
6
+ const Transaction_1 = require("./Transaction");
7
+ const FeeManager_1 = require("./FeeManager");
8
+ const FeeBreakdown_1 = require("./FeeBreakdown");
9
+ const CryptoUtils_1 = require("./CryptoUtils");
10
+ class FreetimePaymentSDK {
11
+ constructor() {
12
+ this.wallets = [];
13
+ this.paymentProviders = new Map();
14
+ this.feeManager = new FeeManager_1.FeeManagerImpl();
15
+ this.initializePaymentProviders();
16
+ }
17
+ initializePaymentProviders() {
18
+ for (const coinType of Object.values(types_1.CoinType)) {
19
+ this.paymentProviders.set(coinType, new MockPaymentProvider(coinType));
20
+ }
21
+ }
22
+ createWallet(coinType, name) {
23
+ const wallet = Wallet_1.WalletImpl.create(coinType, name);
24
+ this.wallets.push(wallet);
25
+ return wallet;
26
+ }
27
+ async getBalance(address) {
28
+ const wallet = this.wallets.find(w => w.address === address);
29
+ if (!wallet) {
30
+ throw new Error(`Wallet not found for address: ${address}`);
31
+ }
32
+ const provider = this.paymentProviders.get(wallet.coinType);
33
+ if (!provider) {
34
+ throw new Error(`Payment provider not found for ${wallet.coinType}`);
35
+ }
36
+ return await provider.getBalance(address);
37
+ }
38
+ async send(fromAddress, toAddress, amount, coinType) {
39
+ const fromWallet = this.wallets.find(w => w.address === fromAddress);
40
+ if (!fromWallet) {
41
+ throw new Error(`Source wallet not found: ${fromAddress}`);
42
+ }
43
+ if (!this.validateAddress(toAddress, coinType)) {
44
+ throw new Error(`Invalid recipient address: ${toAddress}`);
45
+ }
46
+ const provider = this.paymentProviders.get(coinType);
47
+ if (!provider) {
48
+ throw new Error(`Payment provider not found for ${coinType}`);
49
+ }
50
+ const networkFee = await provider.getFeeEstimate(toAddress, amount);
51
+ const developerFeePercentage = this.feeManager.getDeveloperFeePercentage(amount);
52
+ const developerFee = (parseFloat(amount) * parseFloat(developerFeePercentage) / 100).toString();
53
+ const totalFee = (parseFloat(networkFee) + parseFloat(developerFee)).toString();
54
+ const recipientReceives = (parseFloat(amount) - parseFloat(totalFee)).toString();
55
+ const feeBreakdown = new FeeBreakdown_1.FeeBreakdownImpl(amount, networkFee, developerFee, developerFeePercentage, totalFee, recipientReceives, this.feeManager.getDeveloperWalletAddress(coinType), coinType);
56
+ const transaction = new Transaction_1.TransactionImpl(CryptoUtils_1.CryptoUtils.generateTransactionHash(), fromAddress, toAddress, recipientReceives, totalFee, coinType);
57
+ return new Transaction_1.TransactionWithFeesImpl(transaction, feeBreakdown);
58
+ }
59
+ async getFeeEstimate(fromAddress, toAddress, amount, coinType) {
60
+ const provider = this.paymentProviders.get(coinType);
61
+ if (!provider) {
62
+ throw new Error(`Payment provider not found for ${coinType}`);
63
+ }
64
+ const networkFee = await provider.getFeeEstimate(toAddress, amount);
65
+ const developerFeePercentage = this.feeManager.getDeveloperFeePercentage(amount);
66
+ const developerFee = (parseFloat(amount) * parseFloat(developerFeePercentage) / 100).toString();
67
+ return (parseFloat(networkFee) + parseFloat(developerFee)).toString();
68
+ }
69
+ getFeeManager() {
70
+ return this.feeManager;
71
+ }
72
+ getAllWallets() {
73
+ return [...this.wallets];
74
+ }
75
+ getWalletsByCoinType(coinType) {
76
+ return this.wallets.filter(w => w.coinType === coinType);
77
+ }
78
+ validateAddress(address, coinType) {
79
+ return CryptoUtils_1.CryptoUtils.validateAddress(address, coinType);
80
+ }
81
+ }
82
+ exports.FreetimePaymentSDK = FreetimePaymentSDK;
83
+ class MockPaymentProvider {
84
+ constructor(coinType) {
85
+ this.coinType = coinType;
86
+ }
87
+ async getBalance(address) {
88
+ return (Math.random() * 10).toFixed(8);
89
+ }
90
+ async send(toAddress, amount) {
91
+ return new Transaction_1.TransactionImpl(CryptoUtils_1.CryptoUtils.generateTransactionHash(), 'mock-from-address', toAddress, amount, '0.0001', this.coinType);
92
+ }
93
+ async getFeeEstimate(toAddress, amount) {
94
+ return (Math.random() * 0.001).toFixed(8);
95
+ }
96
+ }
97
+ //# sourceMappingURL=FreetimePaymentSDK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreetimePaymentSDK.js","sourceRoot":"","sources":["../src/FreetimePaymentSDK.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { CoinType, Transaction, TransactionWithFees, FeeBreakdown } from './types';
2
+ export declare class TransactionImpl implements Transaction {
3
+ hash: string;
4
+ fromAddress: string;
5
+ toAddress: string;
6
+ amount: string;
7
+ fee: string;
8
+ coinType: CoinType;
9
+ timestamp: number;
10
+ status: 'pending' | 'confirmed' | 'failed';
11
+ constructor(hash: string, fromAddress: string, toAddress: string, amount: string, fee: string, coinType: CoinType, timestamp?: number, status?: 'pending' | 'confirmed' | 'failed');
12
+ }
13
+ export declare class TransactionWithFeesImpl implements TransactionWithFees {
14
+ transaction: Transaction;
15
+ feeBreakdown: FeeBreakdown;
16
+ constructor(transaction: Transaction, feeBreakdown: FeeBreakdown);
17
+ broadcast(): Promise<string>;
18
+ getFormattedSummary(): string;
19
+ }
20
+ //# sourceMappingURL=Transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.d.ts","sourceRoot":"","sources":["../src/Transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGnF,qBAAa,eAAgB,YAAW,WAAW;IAExC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ;gBAP1C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,SAAS,GAAE,MAAmB,EAC9B,MAAM,GAAE,SAAS,GAAG,WAAW,GAAG,QAAoB;CAEhE;AAED,qBAAa,uBAAwB,YAAW,mBAAmB;IAExD,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;gBAD1B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY;IAG7B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAYlC,mBAAmB,IAAI,MAAM;CAS9B"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionWithFeesImpl = exports.TransactionImpl = void 0;
4
+ class TransactionImpl {
5
+ constructor(hash, fromAddress, toAddress, amount, fee, coinType, timestamp = Date.now(), status = 'pending') {
6
+ this.hash = hash;
7
+ this.fromAddress = fromAddress;
8
+ this.toAddress = toAddress;
9
+ this.amount = amount;
10
+ this.fee = fee;
11
+ this.coinType = coinType;
12
+ this.timestamp = timestamp;
13
+ this.status = status;
14
+ }
15
+ }
16
+ exports.TransactionImpl = TransactionImpl;
17
+ class TransactionWithFeesImpl {
18
+ constructor(transaction, feeBreakdown) {
19
+ this.transaction = transaction;
20
+ this.feeBreakdown = feeBreakdown;
21
+ }
22
+ async broadcast() {
23
+ this.transaction.status = 'pending';
24
+ console.log(`Broadcasting transaction: ${this.transaction.hash}`);
25
+ console.log(this.feeBreakdown.getFormattedBreakdown());
26
+ await new Promise(resolve => setTimeout(resolve, 1000));
27
+ this.transaction.status = 'confirmed';
28
+ return this.transaction.hash;
29
+ }
30
+ getFormattedSummary() {
31
+ return `Transaction Summary:
32
+ Hash: ${this.transaction.hash}
33
+ From: ${this.transaction.fromAddress}
34
+ To: ${this.transaction.toAddress}
35
+ Amount: ${this.transaction.amount} ${this.transaction.coinType}
36
+ Status: ${this.transaction.status}
37
+ ${this.feeBreakdown.getFormattedBreakdown()}`;
38
+ }
39
+ }
40
+ exports.TransactionWithFeesImpl = TransactionWithFeesImpl;
41
+ //# sourceMappingURL=Transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../src/Transaction.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAC1B,YACS,IAAY,EACZ,WAAmB,EACnB,SAAiB,EACjB,MAAc,EACd,GAAW,EACX,QAAkB,EAClB,YAAoB,IAAI,CAAC,GAAG,EAAE,EAC9B,SAA6C,SAAS;QAPtD,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;QACnB,cAAS,GAAT,SAAS,CAAQ;QACjB,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAqB;QAC9B,WAAM,GAAN,MAAM,CAAgD;IAC5D,CAAC;CACL;AAXD,0CAWC;AAED,MAAa,uBAAuB;IAClC,YACS,WAAwB,EACxB,YAA0B;QAD1B,gBAAW,GAAX,WAAW,CAAa;QACxB,iBAAY,GAAZ,YAAY,CAAc;IAChC,CAAC;IAEJ,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAEvD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,mBAAmB;QACjB,OAAO;QACH,IAAI,CAAC,WAAW,CAAC,IAAI;QACrB,IAAI,CAAC,WAAW,CAAC,WAAW;MAC9B,IAAI,CAAC,WAAW,CAAC,SAAS;UACtB,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ;UACpD,IAAI,CAAC,WAAW,CAAC,MAAM;EAC/B,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,EAAE,CAAC;IAC5C,CAAC;CACF;AA3BD,0DA2BC"}
@@ -0,0 +1,19 @@
1
+ import { CoinType, Wallet, PaymentInterface } from './types';
2
+ export declare class WalletImpl implements Wallet {
3
+ address: string;
4
+ coinType: CoinType;
5
+ publicKey: string;
6
+ privateKey: string;
7
+ name?: string | undefined;
8
+ constructor(address: string, coinType: CoinType, publicKey: string, privateKey: string, name?: string | undefined);
9
+ static create(coinType: CoinType, name?: string): WalletImpl;
10
+ private static generateBitcoinAddress;
11
+ private static generateEthereumAddress;
12
+ private static generateLitecoinAddress;
13
+ private static generateBitcoinCashAddress;
14
+ private static generateDogecoinAddress;
15
+ private static generateGenericAddress;
16
+ getBalance(paymentProvider: PaymentInterface): Promise<string>;
17
+ send(toAddress: string, amount: string, paymentProvider: PaymentInterface): Promise<import("./types").Transaction>;
18
+ }
19
+ //# sourceMappingURL=Wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wallet.d.ts","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAS7D,qBAAa,UAAW,YAAW,MAAM;IAE9B,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,MAAM;gBAJb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,YAAA;IAGtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU;IA+B5D,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAWrC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAMtC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAWtC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAWtC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAK/B,UAAU,CAAC,eAAe,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB;CAGhF"}
package/dist/Wallet.js ADDED
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.WalletImpl = void 0;
40
+ const types_1 = require("./types");
41
+ const crypto = __importStar(require("crypto"));
42
+ const elliptic_1 = require("elliptic");
43
+ const bs58_1 = __importDefault(require("bs58"));
44
+ // Import type declarations
45
+ /// <reference path="./types.d.ts" />
46
+ class WalletImpl {
47
+ constructor(address, coinType, publicKey, privateKey, name) {
48
+ this.address = address;
49
+ this.coinType = coinType;
50
+ this.publicKey = publicKey;
51
+ this.privateKey = privateKey;
52
+ this.name = name;
53
+ }
54
+ static create(coinType, name) {
55
+ const privateKey = crypto.randomBytes(32).toString('hex');
56
+ const ecInstance = new elliptic_1.ec('secp256k1');
57
+ const keyPair = ecInstance.keyFromPrivate(privateKey, 'hex');
58
+ const publicKey = keyPair.getPublic(false, 'hex').substring(2);
59
+ let address;
60
+ switch (coinType) {
61
+ case types_1.CoinType.BITCOIN:
62
+ address = WalletImpl.generateBitcoinAddress(publicKey);
63
+ break;
64
+ case types_1.CoinType.ETHEREUM:
65
+ address = WalletImpl.generateEthereumAddress(publicKey);
66
+ break;
67
+ case types_1.CoinType.LITECOIN:
68
+ address = WalletImpl.generateLitecoinAddress(publicKey);
69
+ break;
70
+ case types_1.CoinType.BITCOIN_CASH:
71
+ address = WalletImpl.generateBitcoinCashAddress(publicKey);
72
+ break;
73
+ case types_1.CoinType.DOGECOIN:
74
+ address = WalletImpl.generateDogecoinAddress(publicKey);
75
+ break;
76
+ default:
77
+ address = WalletImpl.generateGenericAddress(publicKey, coinType);
78
+ }
79
+ return new WalletImpl(address, coinType, publicKey, privateKey, name);
80
+ }
81
+ static generateBitcoinAddress(publicKey) {
82
+ const sha256Hash = crypto.createHash('sha256').update(Buffer.from(publicKey, 'hex')).digest();
83
+ const ripemd160Hash = crypto.createHash('ripemd160').update(sha256Hash).digest();
84
+ const versionedHash = Buffer.concat([Buffer.from([0x00]), ripemd160Hash]);
85
+ const checksum = crypto.createHash('sha256').update(crypto.createHash('sha256').update(versionedHash).digest()).digest().slice(0, 4);
86
+ const addressBytes = Buffer.concat([versionedHash, checksum]);
87
+ return bs58_1.default.encode(addressBytes);
88
+ }
89
+ static generateEthereumAddress(publicKey) {
90
+ const hash = crypto.createHash('sha256').update(Buffer.from(publicKey, 'hex')).digest();
91
+ const address = hash.slice(-20);
92
+ return '0x' + address.toString('hex');
93
+ }
94
+ static generateLitecoinAddress(publicKey) {
95
+ const sha256Hash = crypto.createHash('sha256').update(Buffer.from(publicKey, 'hex')).digest();
96
+ const ripemd160Hash = crypto.createHash('ripemd160').update(sha256Hash).digest();
97
+ const versionedHash = Buffer.concat([Buffer.from([0x30]), ripemd160Hash]);
98
+ const checksum = crypto.createHash('sha256').update(crypto.createHash('sha256').update(versionedHash).digest()).digest().slice(0, 4);
99
+ const addressBytes = Buffer.concat([versionedHash, checksum]);
100
+ return bs58_1.default.encode(addressBytes);
101
+ }
102
+ static generateBitcoinCashAddress(publicKey) {
103
+ // Simplified Bitcoin Cash address generation
104
+ const sha256Hash = crypto.createHash('sha256').update(Buffer.from(publicKey, 'hex')).digest();
105
+ const ripemd160Hash = crypto.createHash('ripemd160').update(sha256Hash).digest();
106
+ // For simplicity, generate a base58 address similar to Bitcoin
107
+ const versionedHash = Buffer.concat([Buffer.from([0x00]), ripemd160Hash]);
108
+ const checksum = crypto.createHash('sha256').update(crypto.createHash('sha256').update(versionedHash).digest()).digest().slice(0, 4);
109
+ const addressBytes = Buffer.concat([versionedHash, checksum]);
110
+ return 'bitcoincash:' + bs58_1.default.encode(addressBytes);
111
+ }
112
+ static generateDogecoinAddress(publicKey) {
113
+ const sha256Hash = crypto.createHash('sha256').update(Buffer.from(publicKey, 'hex')).digest();
114
+ const ripemd160Hash = crypto.createHash('ripemd160').update(sha256Hash).digest();
115
+ const versionedHash = Buffer.concat([Buffer.from([0x1e]), ripemd160Hash]);
116
+ const checksum = crypto.createHash('sha256').update(crypto.createHash('sha256').update(versionedHash).digest()).digest().slice(0, 4);
117
+ const addressBytes = Buffer.concat([versionedHash, checksum]);
118
+ return bs58_1.default.encode(addressBytes);
119
+ }
120
+ static generateGenericAddress(publicKey, coinType) {
121
+ const hash = crypto.createHash('sha256').update(Buffer.from(publicKey, 'hex')).digest();
122
+ return coinType.toLowerCase() + hash.slice(-20).toString('hex');
123
+ }
124
+ async getBalance(paymentProvider) {
125
+ return await paymentProvider.getBalance(this.address);
126
+ }
127
+ async send(toAddress, amount, paymentProvider) {
128
+ return await paymentProvider.send(toAddress, amount);
129
+ }
130
+ }
131
+ exports.WalletImpl = WalletImpl;
132
+ //# sourceMappingURL=Wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wallet.js","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { FreetimePaymentSDK } from './FreetimePaymentSDK';
2
+ export { WalletImpl } from './Wallet';
3
+ export { TransactionImpl, TransactionWithFeesImpl } from './Transaction';
4
+ export { FeeManagerImpl } from './FeeManager';
5
+ export { FeeBreakdownImpl } from './FeeBreakdown';
6
+ export { CryptoUtils } from './CryptoUtils';
7
+ export * from './types';
8
+ import { FreetimePaymentSDK } from './FreetimePaymentSDK';
9
+ export default FreetimePaymentSDK;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,eAAe,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.CryptoUtils = exports.FeeBreakdownImpl = exports.FeeManagerImpl = exports.TransactionWithFeesImpl = exports.TransactionImpl = exports.WalletImpl = exports.FreetimePaymentSDK = void 0;
18
+ var FreetimePaymentSDK_1 = require("./FreetimePaymentSDK");
19
+ Object.defineProperty(exports, "FreetimePaymentSDK", { enumerable: true, get: function () { return FreetimePaymentSDK_1.FreetimePaymentSDK; } });
20
+ var Wallet_1 = require("./Wallet");
21
+ Object.defineProperty(exports, "WalletImpl", { enumerable: true, get: function () { return Wallet_1.WalletImpl; } });
22
+ var Transaction_1 = require("./Transaction");
23
+ Object.defineProperty(exports, "TransactionImpl", { enumerable: true, get: function () { return Transaction_1.TransactionImpl; } });
24
+ Object.defineProperty(exports, "TransactionWithFeesImpl", { enumerable: true, get: function () { return Transaction_1.TransactionWithFeesImpl; } });
25
+ var FeeManager_1 = require("./FeeManager");
26
+ Object.defineProperty(exports, "FeeManagerImpl", { enumerable: true, get: function () { return FeeManager_1.FeeManagerImpl; } });
27
+ var FeeBreakdown_1 = require("./FeeBreakdown");
28
+ Object.defineProperty(exports, "FeeBreakdownImpl", { enumerable: true, get: function () { return FeeBreakdown_1.FeeBreakdownImpl; } });
29
+ var CryptoUtils_1 = require("./CryptoUtils");
30
+ Object.defineProperty(exports, "CryptoUtils", { enumerable: true, get: function () { return CryptoUtils_1.CryptoUtils; } });
31
+ __exportStar(require("./types"), exports);
32
+ const FreetimePaymentSDK_2 = require("./FreetimePaymentSDK");
33
+ exports.default = FreetimePaymentSDK_2.FreetimePaymentSDK;
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,6CAAyE;AAAhE,8GAAA,eAAe,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AACjD,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AACvB,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AAEpB,0CAAwB;AAExB,6DAA0D;AAC1D,kBAAe,uCAAkB,CAAC"}
@@ -0,0 +1,70 @@
1
+ export declare enum CoinType {
2
+ BITCOIN = "BTC",
3
+ ETHEREUM = "ETH",
4
+ LITECOIN = "LTC",
5
+ BITCOIN_CASH = "BCH",
6
+ DOGECOIN = "DOGE",
7
+ SOLANA = "SOL",
8
+ POLYGON = "MATIC",
9
+ BINANCE_COIN = "BNB",
10
+ TRON = "TRX"
11
+ }
12
+ export declare const COIN_TYPE_MAP: Record<string, CoinType>;
13
+ export interface Wallet {
14
+ address: string;
15
+ coinType: CoinType;
16
+ publicKey: string;
17
+ privateKey: string;
18
+ name?: string;
19
+ }
20
+ export interface Transaction {
21
+ hash: string;
22
+ fromAddress: string;
23
+ toAddress: string;
24
+ amount: string;
25
+ fee: string;
26
+ coinType: CoinType;
27
+ timestamp: number;
28
+ status: 'pending' | 'confirmed' | 'failed';
29
+ }
30
+ export interface FeeBreakdown {
31
+ originalAmount: string;
32
+ networkFee: string;
33
+ developerFee: string;
34
+ developerFeePercentage: string;
35
+ totalFee: string;
36
+ recipientReceives: string;
37
+ developerWallet: string;
38
+ coinType: CoinType;
39
+ getFormattedBreakdown(): string;
40
+ }
41
+ export interface TransactionWithFees {
42
+ transaction: Transaction;
43
+ feeBreakdown: FeeBreakdown;
44
+ broadcast(): Promise<string>;
45
+ getFormattedSummary(): string;
46
+ }
47
+ export interface FeeManager {
48
+ getDeveloperFeePercentage(amount: string): string;
49
+ getFeeTier(amount: string): string;
50
+ getDeveloperWalletAddress(coinType: CoinType): string;
51
+ getAllDeveloperWallets(): Map<CoinType, string>;
52
+ updateDeveloperWallet(coinType: CoinType, address: string): FeeManager;
53
+ updateAllDeveloperWallets(wallets: Map<CoinType, string>): FeeManager;
54
+ }
55
+ export interface PaymentInterface {
56
+ getBalance(address: string): Promise<string>;
57
+ send(toAddress: string, amount: string): Promise<Transaction>;
58
+ getFeeEstimate(toAddress: string, amount: string): Promise<string>;
59
+ }
60
+ export interface FreetimePaymentSDK {
61
+ createWallet(coinType: CoinType, name?: string): Wallet;
62
+ getBalance(address: string): Promise<string>;
63
+ send(fromAddress: string, toAddress: string, amount: string, coinType: CoinType): Promise<TransactionWithFees>;
64
+ getFeeEstimate(fromAddress: string, toAddress: string, amount: string, coinType: CoinType): Promise<string>;
65
+ getFeeManager(): FeeManager;
66
+ getAllWallets(): Wallet[];
67
+ getWalletsByCoinType(coinType: CoinType): Wallet[];
68
+ validateAddress(address: string, coinType: CoinType): boolean;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COIN_TYPE_MAP = exports.CoinType = void 0;
4
+ var CoinType;
5
+ (function (CoinType) {
6
+ CoinType["BITCOIN"] = "BTC";
7
+ CoinType["ETHEREUM"] = "ETH";
8
+ CoinType["LITECOIN"] = "LTC";
9
+ CoinType["BITCOIN_CASH"] = "BCH";
10
+ CoinType["DOGECOIN"] = "DOGE";
11
+ CoinType["SOLANA"] = "SOL";
12
+ CoinType["POLYGON"] = "MATIC";
13
+ CoinType["BINANCE_COIN"] = "BNB";
14
+ CoinType["TRON"] = "TRX";
15
+ })(CoinType || (exports.CoinType = CoinType = {}));
16
+ exports.COIN_TYPE_MAP = {
17
+ 'BTC': CoinType.BITCOIN,
18
+ 'ETH': CoinType.ETHEREUM,
19
+ 'LTC': CoinType.LITECOIN,
20
+ 'BCH': CoinType.BITCOIN_CASH,
21
+ 'DOGE': CoinType.DOGECOIN,
22
+ 'SOL': CoinType.SOLANA,
23
+ 'MATIC': CoinType.POLYGON,
24
+ 'BNB': CoinType.BINANCE_COIN,
25
+ 'TRX': CoinType.TRON
26
+ };
27
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,4BAAgB,CAAA;IAChB,4BAAgB,CAAA;IAChB,gCAAoB,CAAA;IACpB,6BAAiB,CAAA;IACjB,0BAAc,CAAA;IACd,6BAAiB,CAAA;IACjB,gCAAoB,CAAA;IACpB,wBAAY,CAAA;AACd,CAAC,EAVW,QAAQ,wBAAR,QAAQ,QAUnB;AAEY,QAAA,aAAa,GAA6B;IACrD,KAAK,EAAE,QAAQ,CAAC,OAAO;IACvB,KAAK,EAAE,QAAQ,CAAC,QAAQ;IACxB,KAAK,EAAE,QAAQ,CAAC,QAAQ;IACxB,KAAK,EAAE,QAAQ,CAAC,YAAY;IAC5B,MAAM,EAAE,QAAQ,CAAC,QAAQ;IACzB,KAAK,EAAE,QAAQ,CAAC,MAAM;IACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;IACzB,KAAK,EAAE,QAAQ,CAAC,YAAY;IAC5B,KAAK,EAAE,QAAQ,CAAC,IAAI;CACrB,CAAC"}