@arkade-os/sdk 0.0.16

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.
Files changed (103) hide show
  1. package/README.md +312 -0
  2. package/dist/cjs/arknote/index.js +86 -0
  3. package/dist/cjs/forfeit.js +38 -0
  4. package/dist/cjs/identity/inMemoryKey.js +40 -0
  5. package/dist/cjs/identity/index.js +2 -0
  6. package/dist/cjs/index.js +48 -0
  7. package/dist/cjs/musig2/index.js +10 -0
  8. package/dist/cjs/musig2/keys.js +57 -0
  9. package/dist/cjs/musig2/nonces.js +44 -0
  10. package/dist/cjs/musig2/sign.js +102 -0
  11. package/dist/cjs/networks.js +26 -0
  12. package/dist/cjs/package.json +3 -0
  13. package/dist/cjs/providers/ark.js +530 -0
  14. package/dist/cjs/providers/onchain.js +61 -0
  15. package/dist/cjs/script/address.js +45 -0
  16. package/dist/cjs/script/base.js +51 -0
  17. package/dist/cjs/script/default.js +40 -0
  18. package/dist/cjs/script/tapscript.js +528 -0
  19. package/dist/cjs/script/vhtlc.js +84 -0
  20. package/dist/cjs/tree/signingSession.js +238 -0
  21. package/dist/cjs/tree/validation.js +184 -0
  22. package/dist/cjs/tree/vtxoTree.js +197 -0
  23. package/dist/cjs/utils/bip21.js +114 -0
  24. package/dist/cjs/utils/coinselect.js +73 -0
  25. package/dist/cjs/utils/psbt.js +124 -0
  26. package/dist/cjs/utils/transactionHistory.js +148 -0
  27. package/dist/cjs/utils/txSizeEstimator.js +95 -0
  28. package/dist/cjs/wallet/index.js +8 -0
  29. package/dist/cjs/wallet/serviceWorker/db/vtxo/idb.js +153 -0
  30. package/dist/cjs/wallet/serviceWorker/db/vtxo/index.js +2 -0
  31. package/dist/cjs/wallet/serviceWorker/request.js +75 -0
  32. package/dist/cjs/wallet/serviceWorker/response.js +187 -0
  33. package/dist/cjs/wallet/serviceWorker/wallet.js +332 -0
  34. package/dist/cjs/wallet/serviceWorker/worker.js +452 -0
  35. package/dist/cjs/wallet/wallet.js +720 -0
  36. package/dist/esm/arknote/index.js +81 -0
  37. package/dist/esm/forfeit.js +35 -0
  38. package/dist/esm/identity/inMemoryKey.js +36 -0
  39. package/dist/esm/identity/index.js +1 -0
  40. package/dist/esm/index.js +39 -0
  41. package/dist/esm/musig2/index.js +3 -0
  42. package/dist/esm/musig2/keys.js +21 -0
  43. package/dist/esm/musig2/nonces.js +8 -0
  44. package/dist/esm/musig2/sign.js +63 -0
  45. package/dist/esm/networks.js +22 -0
  46. package/dist/esm/package.json +3 -0
  47. package/dist/esm/providers/ark.js +526 -0
  48. package/dist/esm/providers/onchain.js +57 -0
  49. package/dist/esm/script/address.js +41 -0
  50. package/dist/esm/script/base.js +46 -0
  51. package/dist/esm/script/default.js +37 -0
  52. package/dist/esm/script/tapscript.js +491 -0
  53. package/dist/esm/script/vhtlc.js +81 -0
  54. package/dist/esm/tree/signingSession.js +200 -0
  55. package/dist/esm/tree/validation.js +179 -0
  56. package/dist/esm/tree/vtxoTree.js +157 -0
  57. package/dist/esm/utils/bip21.js +110 -0
  58. package/dist/esm/utils/coinselect.js +69 -0
  59. package/dist/esm/utils/psbt.js +118 -0
  60. package/dist/esm/utils/transactionHistory.js +145 -0
  61. package/dist/esm/utils/txSizeEstimator.js +91 -0
  62. package/dist/esm/wallet/index.js +5 -0
  63. package/dist/esm/wallet/serviceWorker/db/vtxo/idb.js +149 -0
  64. package/dist/esm/wallet/serviceWorker/db/vtxo/index.js +1 -0
  65. package/dist/esm/wallet/serviceWorker/request.js +72 -0
  66. package/dist/esm/wallet/serviceWorker/response.js +184 -0
  67. package/dist/esm/wallet/serviceWorker/wallet.js +328 -0
  68. package/dist/esm/wallet/serviceWorker/worker.js +448 -0
  69. package/dist/esm/wallet/wallet.js +716 -0
  70. package/dist/types/arknote/index.d.ts +17 -0
  71. package/dist/types/forfeit.d.ts +15 -0
  72. package/dist/types/identity/inMemoryKey.d.ts +12 -0
  73. package/dist/types/identity/index.d.ts +7 -0
  74. package/dist/types/index.d.ts +22 -0
  75. package/dist/types/musig2/index.d.ts +4 -0
  76. package/dist/types/musig2/keys.d.ts +9 -0
  77. package/dist/types/musig2/nonces.d.ts +13 -0
  78. package/dist/types/musig2/sign.d.ts +27 -0
  79. package/dist/types/networks.d.ts +16 -0
  80. package/dist/types/providers/ark.d.ts +126 -0
  81. package/dist/types/providers/onchain.d.ts +36 -0
  82. package/dist/types/script/address.d.ts +10 -0
  83. package/dist/types/script/base.d.ts +26 -0
  84. package/dist/types/script/default.d.ts +19 -0
  85. package/dist/types/script/tapscript.d.ts +94 -0
  86. package/dist/types/script/vhtlc.d.ts +31 -0
  87. package/dist/types/tree/signingSession.d.ts +32 -0
  88. package/dist/types/tree/validation.d.ts +22 -0
  89. package/dist/types/tree/vtxoTree.d.ts +32 -0
  90. package/dist/types/utils/bip21.d.ts +21 -0
  91. package/dist/types/utils/coinselect.d.ts +21 -0
  92. package/dist/types/utils/psbt.d.ts +11 -0
  93. package/dist/types/utils/transactionHistory.d.ts +2 -0
  94. package/dist/types/utils/txSizeEstimator.d.ts +27 -0
  95. package/dist/types/wallet/index.d.ts +122 -0
  96. package/dist/types/wallet/serviceWorker/db/vtxo/idb.d.ts +18 -0
  97. package/dist/types/wallet/serviceWorker/db/vtxo/index.d.ts +12 -0
  98. package/dist/types/wallet/serviceWorker/request.d.ts +68 -0
  99. package/dist/types/wallet/serviceWorker/response.d.ts +107 -0
  100. package/dist/types/wallet/serviceWorker/wallet.d.ts +23 -0
  101. package/dist/types/wallet/serviceWorker/worker.d.ts +26 -0
  102. package/dist/types/wallet/wallet.d.ts +42 -0
  103. package/package.json +88 -0
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IndexedDBVtxoRepository = void 0;
4
+ class IndexedDBVtxoRepository {
5
+ constructor() {
6
+ this.db = null;
7
+ }
8
+ static delete() {
9
+ return new Promise((resolve, reject) => {
10
+ try {
11
+ const request = indexedDB.deleteDatabase(IndexedDBVtxoRepository.DB_NAME);
12
+ request.onblocked = () => {
13
+ // If blocked, wait a bit and try again
14
+ setTimeout(() => {
15
+ const retryRequest = indexedDB.deleteDatabase(IndexedDBVtxoRepository.DB_NAME);
16
+ retryRequest.onsuccess = () => resolve();
17
+ retryRequest.onerror = () => reject(retryRequest.error ||
18
+ new Error("Failed to delete database"));
19
+ }, 100);
20
+ };
21
+ request.onsuccess = () => {
22
+ resolve();
23
+ };
24
+ request.onerror = () => {
25
+ reject(request.error || new Error("Failed to delete database"));
26
+ };
27
+ }
28
+ catch (error) {
29
+ reject(error instanceof Error
30
+ ? error
31
+ : new Error("Failed to delete database"));
32
+ }
33
+ });
34
+ }
35
+ async close() {
36
+ if (this.db) {
37
+ this.db.close();
38
+ this.db = null;
39
+ }
40
+ }
41
+ async open() {
42
+ return new Promise((resolve, reject) => {
43
+ const request = indexedDB.open(IndexedDBVtxoRepository.DB_NAME, IndexedDBVtxoRepository.DB_VERSION);
44
+ request.onerror = () => {
45
+ reject(request.error);
46
+ };
47
+ request.onsuccess = () => {
48
+ this.db = request.result;
49
+ resolve();
50
+ };
51
+ request.onupgradeneeded = (event) => {
52
+ const db = event.target.result;
53
+ if (!db.objectStoreNames.contains(IndexedDBVtxoRepository.STORE_NAME)) {
54
+ const store = db.createObjectStore(IndexedDBVtxoRepository.STORE_NAME, {
55
+ keyPath: ["txid", "vout"],
56
+ });
57
+ store.createIndex("state", "virtualStatus.state", {
58
+ unique: false,
59
+ });
60
+ store.createIndex("spentBy", "spentBy", {
61
+ unique: false,
62
+ });
63
+ }
64
+ };
65
+ });
66
+ }
67
+ async addOrUpdate(vtxos) {
68
+ if (!this.db) {
69
+ throw new Error("Database not opened");
70
+ }
71
+ return new Promise((resolve, reject) => {
72
+ const transaction = this.db.transaction(IndexedDBVtxoRepository.STORE_NAME, "readwrite");
73
+ const store = transaction.objectStore(IndexedDBVtxoRepository.STORE_NAME);
74
+ const requests = vtxos.map((vtxo) => {
75
+ return new Promise((resolveRequest, rejectRequest) => {
76
+ const request = store.put(vtxo);
77
+ request.onsuccess = () => resolveRequest();
78
+ request.onerror = () => rejectRequest(request.error);
79
+ });
80
+ });
81
+ Promise.all(requests)
82
+ .then(() => resolve())
83
+ .catch(reject);
84
+ });
85
+ }
86
+ async deleteAll() {
87
+ if (!this.db) {
88
+ throw new Error("Database not opened");
89
+ }
90
+ return new Promise((resolve, reject) => {
91
+ const transaction = this.db.transaction(IndexedDBVtxoRepository.STORE_NAME, "readwrite");
92
+ const store = transaction.objectStore(IndexedDBVtxoRepository.STORE_NAME);
93
+ const request = store.clear();
94
+ request.onsuccess = () => resolve();
95
+ request.onerror = () => reject(request.error);
96
+ });
97
+ }
98
+ async getSpendableVtxos() {
99
+ if (!this.db) {
100
+ throw new Error("Database not opened");
101
+ }
102
+ return new Promise((resolve, reject) => {
103
+ const transaction = this.db.transaction(IndexedDBVtxoRepository.STORE_NAME, "readonly");
104
+ const store = transaction.objectStore(IndexedDBVtxoRepository.STORE_NAME);
105
+ const spentByIndex = store.index("spentBy");
106
+ // Get vtxos where spentBy is empty string
107
+ const request = spentByIndex.getAll(IDBKeyRange.only(""));
108
+ request.onsuccess = () => {
109
+ resolve(request.result);
110
+ };
111
+ request.onerror = () => reject(request.error);
112
+ });
113
+ }
114
+ async getAllVtxos() {
115
+ if (!this.db) {
116
+ throw new Error("Database not opened");
117
+ }
118
+ return new Promise((resolve, reject) => {
119
+ const transaction = this.db.transaction(IndexedDBVtxoRepository.STORE_NAME, "readonly");
120
+ const store = transaction.objectStore(IndexedDBVtxoRepository.STORE_NAME);
121
+ const spentByIndex = store.index("spentBy");
122
+ // Get vtxos where spentBy is empty string
123
+ const spendableRequest = spentByIndex.getAll(IDBKeyRange.only(""));
124
+ // Get all vtxos where spentBy is populated
125
+ const spentRequest = spentByIndex.getAll(IDBKeyRange.lowerBound("", true));
126
+ Promise.all([
127
+ new Promise((resolveSpendable, rejectSpendable) => {
128
+ spendableRequest.onsuccess = () => {
129
+ resolveSpendable(spendableRequest.result);
130
+ };
131
+ spendableRequest.onerror = () => rejectSpendable(spendableRequest.error);
132
+ }),
133
+ new Promise((resolveSpent, rejectSpent) => {
134
+ spentRequest.onsuccess = () => {
135
+ resolveSpent(spentRequest.result);
136
+ };
137
+ spentRequest.onerror = () => rejectSpent(spentRequest.error);
138
+ }),
139
+ ])
140
+ .then(([spendableVtxos, spentVtxos]) => {
141
+ resolve({
142
+ spendable: spendableVtxos,
143
+ spent: spentVtxos,
144
+ });
145
+ })
146
+ .catch(reject);
147
+ });
148
+ }
149
+ }
150
+ exports.IndexedDBVtxoRepository = IndexedDBVtxoRepository;
151
+ IndexedDBVtxoRepository.DB_NAME = "wallet-db";
152
+ IndexedDBVtxoRepository.STORE_NAME = "vtxos";
153
+ IndexedDBVtxoRepository.DB_VERSION = 1;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Request = void 0;
4
+ var Request;
5
+ (function (Request) {
6
+ function isBase(message) {
7
+ return (typeof message === "object" && message !== null && "type" in message);
8
+ }
9
+ Request.isBase = isBase;
10
+ function isInitWallet(message) {
11
+ return (message.type === "INIT_WALLET" &&
12
+ "privateKey" in message &&
13
+ typeof message.privateKey === "string" &&
14
+ "arkServerUrl" in message &&
15
+ typeof message.arkServerUrl === "string" &&
16
+ "network" in message &&
17
+ typeof message.network === "string" &&
18
+ ("arkServerPublicKey" in message
19
+ ? typeof message.arkServerPublicKey === "string" ||
20
+ message.arkServerPublicKey === undefined
21
+ : true));
22
+ }
23
+ Request.isInitWallet = isInitWallet;
24
+ function isSettle(message) {
25
+ return message.type === "SETTLE";
26
+ }
27
+ Request.isSettle = isSettle;
28
+ function isGetAddress(message) {
29
+ return message.type === "GET_ADDRESS";
30
+ }
31
+ Request.isGetAddress = isGetAddress;
32
+ function isGetAddressInfo(message) {
33
+ return message.type === "GET_ADDRESS_INFO";
34
+ }
35
+ Request.isGetAddressInfo = isGetAddressInfo;
36
+ function isGetBalance(message) {
37
+ return message.type === "GET_BALANCE";
38
+ }
39
+ Request.isGetBalance = isGetBalance;
40
+ function isGetCoins(message) {
41
+ return message.type === "GET_COINS";
42
+ }
43
+ Request.isGetCoins = isGetCoins;
44
+ function isGetVtxos(message) {
45
+ return message.type === "GET_VTXOS";
46
+ }
47
+ Request.isGetVtxos = isGetVtxos;
48
+ function isGetVirtualCoins(message) {
49
+ return message.type === "GET_VIRTUAL_COINS";
50
+ }
51
+ Request.isGetVirtualCoins = isGetVirtualCoins;
52
+ function isGetBoardingUtxos(message) {
53
+ return message.type === "GET_BOARDING_UTXOS";
54
+ }
55
+ Request.isGetBoardingUtxos = isGetBoardingUtxos;
56
+ function isSendBitcoin(message) {
57
+ return (message.type === "SEND_BITCOIN" &&
58
+ "params" in message &&
59
+ message.params !== null &&
60
+ typeof message.params === "object" &&
61
+ "address" in message.params &&
62
+ typeof message.params.address === "string" &&
63
+ "amount" in message.params &&
64
+ typeof message.params.amount === "number");
65
+ }
66
+ Request.isSendBitcoin = isSendBitcoin;
67
+ function isGetTransactionHistory(message) {
68
+ return message.type === "GET_TRANSACTION_HISTORY";
69
+ }
70
+ Request.isGetTransactionHistory = isGetTransactionHistory;
71
+ function isGetStatus(message) {
72
+ return message.type === "GET_STATUS";
73
+ }
74
+ Request.isGetStatus = isGetStatus;
75
+ })(Request || (exports.Request = Request = {}));
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Response = void 0;
4
+ var Response;
5
+ (function (Response) {
6
+ Response.walletInitialized = (id) => ({
7
+ type: "WALLET_INITIALIZED",
8
+ success: true,
9
+ id,
10
+ });
11
+ function error(id, message) {
12
+ return {
13
+ type: "ERROR",
14
+ success: false,
15
+ message,
16
+ id,
17
+ };
18
+ }
19
+ Response.error = error;
20
+ function settleEvent(id, event) {
21
+ return {
22
+ type: "SETTLE_EVENT",
23
+ success: true,
24
+ event,
25
+ id,
26
+ };
27
+ }
28
+ Response.settleEvent = settleEvent;
29
+ function settleSuccess(id, txid) {
30
+ return {
31
+ type: "SETTLE_SUCCESS",
32
+ success: true,
33
+ txid,
34
+ id,
35
+ };
36
+ }
37
+ Response.settleSuccess = settleSuccess;
38
+ function isSettleSuccess(response) {
39
+ return response.type === "SETTLE_SUCCESS" && response.success;
40
+ }
41
+ Response.isSettleSuccess = isSettleSuccess;
42
+ function isAddress(response) {
43
+ return response.type === "ADDRESS" && response.success === true;
44
+ }
45
+ Response.isAddress = isAddress;
46
+ function addresses(id, addresses) {
47
+ return {
48
+ type: "ADDRESS",
49
+ success: true,
50
+ addresses,
51
+ id,
52
+ };
53
+ }
54
+ Response.addresses = addresses;
55
+ function isAddressInfo(response) {
56
+ return response.type === "ADDRESS_INFO" && response.success === true;
57
+ }
58
+ Response.isAddressInfo = isAddressInfo;
59
+ function addressInfo(id, addressInfo) {
60
+ return {
61
+ type: "ADDRESS_INFO",
62
+ success: true,
63
+ addressInfo,
64
+ id,
65
+ };
66
+ }
67
+ Response.addressInfo = addressInfo;
68
+ function isBalance(response) {
69
+ return response.type === "BALANCE" && response.success === true;
70
+ }
71
+ Response.isBalance = isBalance;
72
+ function balance(id, balance) {
73
+ return {
74
+ type: "BALANCE",
75
+ success: true,
76
+ balance,
77
+ id,
78
+ };
79
+ }
80
+ Response.balance = balance;
81
+ function isCoins(response) {
82
+ return response.type === "COINS" && response.success === true;
83
+ }
84
+ Response.isCoins = isCoins;
85
+ function coins(id, coins) {
86
+ return {
87
+ type: "COINS",
88
+ success: true,
89
+ coins,
90
+ id,
91
+ };
92
+ }
93
+ Response.coins = coins;
94
+ function isVtxos(response) {
95
+ return response.type === "VTXOS" && response.success === true;
96
+ }
97
+ Response.isVtxos = isVtxos;
98
+ function vtxos(id, vtxos) {
99
+ return {
100
+ type: "VTXOS",
101
+ success: true,
102
+ vtxos,
103
+ id,
104
+ };
105
+ }
106
+ Response.vtxos = vtxos;
107
+ function isVirtualCoins(response) {
108
+ return response.type === "VIRTUAL_COINS" && response.success === true;
109
+ }
110
+ Response.isVirtualCoins = isVirtualCoins;
111
+ function virtualCoins(id, virtualCoins) {
112
+ return {
113
+ type: "VIRTUAL_COINS",
114
+ success: true,
115
+ virtualCoins,
116
+ id,
117
+ };
118
+ }
119
+ Response.virtualCoins = virtualCoins;
120
+ function isBoardingUtxos(response) {
121
+ return response.type === "BOARDING_UTXOS" && response.success === true;
122
+ }
123
+ Response.isBoardingUtxos = isBoardingUtxos;
124
+ function boardingUtxos(id, boardingUtxos) {
125
+ return {
126
+ type: "BOARDING_UTXOS",
127
+ success: true,
128
+ boardingUtxos,
129
+ id,
130
+ };
131
+ }
132
+ Response.boardingUtxos = boardingUtxos;
133
+ function isSendBitcoinSuccess(response) {
134
+ return (response.type === "SEND_BITCOIN_SUCCESS" &&
135
+ response.success === true);
136
+ }
137
+ Response.isSendBitcoinSuccess = isSendBitcoinSuccess;
138
+ function sendBitcoinSuccess(id, txid) {
139
+ return {
140
+ type: "SEND_BITCOIN_SUCCESS",
141
+ success: true,
142
+ txid,
143
+ id,
144
+ };
145
+ }
146
+ Response.sendBitcoinSuccess = sendBitcoinSuccess;
147
+ function isTransactionHistory(response) {
148
+ return (response.type === "TRANSACTION_HISTORY" && response.success === true);
149
+ }
150
+ Response.isTransactionHistory = isTransactionHistory;
151
+ function transactionHistory(id, transactions) {
152
+ return {
153
+ type: "TRANSACTION_HISTORY",
154
+ success: true,
155
+ transactions,
156
+ id,
157
+ };
158
+ }
159
+ Response.transactionHistory = transactionHistory;
160
+ function isWalletStatus(response) {
161
+ return response.type === "WALLET_STATUS" && response.success === true;
162
+ }
163
+ Response.isWalletStatus = isWalletStatus;
164
+ function walletStatus(id, walletInitialized) {
165
+ return {
166
+ type: "WALLET_STATUS",
167
+ success: true,
168
+ status: {
169
+ walletInitialized,
170
+ },
171
+ id,
172
+ };
173
+ }
174
+ Response.walletStatus = walletStatus;
175
+ function isClearResponse(response) {
176
+ return response.type === "CLEAR_RESPONSE";
177
+ }
178
+ Response.isClearResponse = isClearResponse;
179
+ function clearResponse(id, success) {
180
+ return {
181
+ type: "CLEAR_RESPONSE",
182
+ success,
183
+ id,
184
+ };
185
+ }
186
+ Response.clearResponse = clearResponse;
187
+ })(Response || (exports.Response = Response = {}));