@tari-project/tarijs 0.3.1 → 0.4.1

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 (199) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  2. package/.github/PULL_REQUEST_TEMPLATE.md +27 -0
  3. package/.github/dependabot.yml +8 -0
  4. package/.github/workflows/ci.yml +25 -0
  5. package/.github/workflows/npm_publish.yml +26 -0
  6. package/.github/workflows/pr_signed_commits_check.yml +19 -0
  7. package/.github/workflows/pr_title.yml +30 -0
  8. package/.moon/toolchain.yml +6 -0
  9. package/.moon/workspace.yml +32 -0
  10. package/.prettierrc +12 -0
  11. package/.prototools +9 -0
  12. package/CODEOWNERS +3 -0
  13. package/README.md +9 -8
  14. package/TODO.md +12 -0
  15. package/package.json +6 -24
  16. package/packages/builders/moon.yml +55 -0
  17. package/packages/builders/package.json +30 -0
  18. package/packages/builders/src/helpers/submitTransaction.ts +97 -0
  19. package/{dist/builders/helpers/workspace.js → packages/builders/src/helpers/workspace.ts} +10 -7
  20. package/packages/builders/src/index.ts +9 -0
  21. package/packages/builders/src/transaction/TransactionBuilder.ts +276 -0
  22. package/packages/builders/src/transaction/TransactionRequest.ts +93 -0
  23. package/packages/builders/src/transaction/index.ts +2 -0
  24. package/packages/builders/tsconfig.json +24 -0
  25. package/packages/metamask_provider/moon.yml +55 -0
  26. package/packages/metamask_provider/package.json +30 -0
  27. package/packages/metamask_provider/src/index.ts +232 -0
  28. package/packages/metamask_provider/src/utils.ts +86 -0
  29. package/packages/metamask_provider/tsconfig.json +21 -0
  30. package/packages/tari_permissions/moon.yml +55 -0
  31. package/packages/tari_permissions/package.json +26 -0
  32. package/packages/tari_permissions/src/index.ts +1 -0
  33. package/packages/tari_permissions/src/tari_permissions.ts +312 -0
  34. package/packages/tari_permissions/tsconfig.json +15 -0
  35. package/packages/tari_provider/moon.yml +55 -0
  36. package/packages/tari_provider/package.json +27 -0
  37. package/packages/tari_provider/src/TariProvider.ts +35 -0
  38. package/packages/tari_provider/src/index.ts +3 -0
  39. package/packages/tari_provider/src/types.ts +82 -0
  40. package/packages/tari_provider/tsconfig.json +11 -0
  41. package/packages/tari_universe/moon.yml +55 -0
  42. package/packages/tari_universe/package.json +31 -0
  43. package/{dist/providers/tari_universe/index.d.ts → packages/tari_universe/src/index.ts} +1 -1
  44. package/packages/tari_universe/src/provider.ts +135 -0
  45. package/{dist/providers/tari_universe/types.d.ts → packages/tari_universe/src/types.ts} +20 -17
  46. package/packages/tari_universe/src/utils.ts +23 -0
  47. package/packages/tari_universe/tsconfig.json +24 -0
  48. package/packages/tarijs/integration-tests/.env +1 -0
  49. package/packages/tarijs/integration-tests/wallet_daemon/json_rpc_provider.spec.ts +191 -0
  50. package/packages/tarijs/moon.yml +63 -0
  51. package/packages/tarijs/package.json +39 -0
  52. package/packages/tarijs/src/index.ts +69 -0
  53. package/packages/tarijs/src/network.ts +8 -0
  54. package/packages/tarijs/src/templates/Account.ts +98 -0
  55. package/packages/tarijs/src/templates/Pool.ts +42 -0
  56. package/packages/tarijs/src/templates/Tariswap.ts +101 -0
  57. package/packages/tarijs/src/templates/TemplateFactory.ts +22 -0
  58. package/packages/tarijs/src/templates/TestFaucet.ts +72 -0
  59. package/{dist/utils.js → packages/tarijs/src/utils.ts} +4 -3
  60. package/packages/tarijs/tsconfig.json +39 -0
  61. package/packages/tarijs/vitest.config.ts +9 -0
  62. package/packages/tarijs_types/moon.yml +55 -0
  63. package/packages/tarijs_types/package.json +27 -0
  64. package/packages/tarijs_types/src/Amount.ts +113 -0
  65. package/packages/tarijs_types/src/Arg.ts +3 -0
  66. package/packages/tarijs_types/src/ComponentAddress.ts +3 -0
  67. package/packages/tarijs_types/src/ConfidentialClaim.ts +9 -0
  68. package/packages/tarijs_types/src/ConfidentialOutput.ts +9 -0
  69. package/packages/tarijs_types/src/ConfidentialOutputStatement.ts +10 -0
  70. package/packages/tarijs_types/src/ConfidentialStatement.ts +9 -0
  71. package/packages/tarijs_types/src/ConfidentialWithdrawProof.ts +8 -0
  72. package/packages/tarijs_types/src/ElgamalVerifiableBalance.ts +4 -0
  73. package/packages/tarijs_types/src/Epoch.ts +3 -0
  74. package/packages/tarijs_types/src/FinalizeResult.ts +17 -0
  75. package/packages/tarijs_types/src/Instruction.ts +29 -0
  76. package/{dist/builders/types/ResourceAddress.js → packages/tarijs_types/src/ResourceAddress.ts} +2 -1
  77. package/{dist/builders/types/SubstateDiff.d.ts → packages/tarijs_types/src/SubstateDiff.ts} +4 -2
  78. package/{dist/builders/types/SubstateRequirement.d.ts → packages/tarijs_types/src/SubstateRequirement.ts} +3 -2
  79. package/{dist/builders/types/TemplateAddress.js → packages/tarijs_types/src/TemplateAddress.ts} +2 -1
  80. package/{dist/builders/types/Transaction.d.ts → packages/tarijs_types/src/Transaction.ts} +9 -8
  81. package/packages/tarijs_types/src/TransactionId.ts +4 -0
  82. package/packages/tarijs_types/src/TransactionResult.ts +26 -0
  83. package/packages/tarijs_types/src/TransactionSignature.ts +4 -0
  84. package/packages/tarijs_types/src/UnsignedTransaction.ts +15 -0
  85. package/{dist/builders/types/VersionedSubstateId.d.ts → packages/tarijs_types/src/VersionedSubstateId.ts} +3 -2
  86. package/packages/tarijs_types/src/ViewableBalanceProof.ts +12 -0
  87. package/{dist/builders/types/Workspace.d.ts → packages/tarijs_types/src/Workspace.ts} +1 -1
  88. package/{dist/builders/types/index.d.ts → packages/tarijs_types/src/index.ts} +4 -3
  89. package/packages/tarijs_types/tsconfig.json +15 -0
  90. package/packages/wallet_daemon/moon.yml +55 -0
  91. package/packages/wallet_daemon/package.json +29 -0
  92. package/{dist/providers/wallet_daemon/index.d.ts → packages/wallet_daemon/src/index.ts} +3 -1
  93. package/packages/wallet_daemon/src/provider.ts +263 -0
  94. package/packages/wallet_daemon/src/webrtc.ts +229 -0
  95. package/packages/wallet_daemon/src/webrtc_transport.ts +27 -0
  96. package/packages/wallet_daemon/tsconfig.json +21 -0
  97. package/packages/walletconnect/moon.yml +55 -0
  98. package/packages/walletconnect/package.json +32 -0
  99. package/packages/walletconnect/src/index.ts +274 -0
  100. package/packages/walletconnect/tsconfig.json +21 -0
  101. package/pnpm-workspace.yaml +14 -0
  102. package/tsconfig.json +42 -0
  103. package/dist/builders/helpers/index.js +0 -2
  104. package/dist/builders/helpers/submitTransaction.d.ts +0 -13
  105. package/dist/builders/helpers/submitTransaction.js +0 -62
  106. package/dist/builders/helpers/workspace.d.ts +0 -23
  107. package/dist/builders/index.d.ts +0 -3
  108. package/dist/builders/index.js +0 -3
  109. package/dist/builders/transaction/TransactionBuilder.d.ts +0 -44
  110. package/dist/builders/transaction/TransactionBuilder.js +0 -164
  111. package/dist/builders/transaction/TransactionRequest.d.ts +0 -27
  112. package/dist/builders/transaction/TransactionRequest.js +0 -67
  113. package/dist/builders/transaction/index.d.ts +0 -2
  114. package/dist/builders/transaction/index.js +0 -2
  115. package/dist/builders/types/Amount.d.ts +0 -23
  116. package/dist/builders/types/Amount.js +0 -93
  117. package/dist/builders/types/Arg.d.ts +0 -1
  118. package/dist/builders/types/Arg.js +0 -1
  119. package/dist/builders/types/Builder.d.ts +0 -47
  120. package/dist/builders/types/Builder.js +0 -1
  121. package/dist/builders/types/ComponentAddress.d.ts +0 -1
  122. package/dist/builders/types/ComponentAddress.js +0 -1
  123. package/dist/builders/types/ConfidentialClaim.d.ts +0 -8
  124. package/dist/builders/types/ConfidentialClaim.js +0 -1
  125. package/dist/builders/types/ConfidentialOutput.d.ts +0 -8
  126. package/dist/builders/types/ConfidentialOutput.js +0 -1
  127. package/dist/builders/types/ConfidentialOutputStatement.d.ts +0 -9
  128. package/dist/builders/types/ConfidentialOutputStatement.js +0 -1
  129. package/dist/builders/types/ConfidentialStatement.d.ts +0 -8
  130. package/dist/builders/types/ConfidentialStatement.js +0 -1
  131. package/dist/builders/types/ConfidentialWithdrawProof.d.ts +0 -7
  132. package/dist/builders/types/ConfidentialWithdrawProof.js +0 -1
  133. package/dist/builders/types/ElgamalVerifiableBalance.d.ts +0 -4
  134. package/dist/builders/types/ElgamalVerifiableBalance.js +0 -1
  135. package/dist/builders/types/Epoch.d.ts +0 -1
  136. package/dist/builders/types/Epoch.js +0 -1
  137. package/dist/builders/types/FinalizeResult.d.ts +0 -20
  138. package/dist/builders/types/FinalizeResult.js +0 -1
  139. package/dist/builders/types/Instruction.d.ts +0 -56
  140. package/dist/builders/types/Instruction.js +0 -1
  141. package/dist/builders/types/ResourceAddress.d.ts +0 -1
  142. package/dist/builders/types/SubstateDiff.js +0 -1
  143. package/dist/builders/types/SubstateRequirement.js +0 -1
  144. package/dist/builders/types/TemplateAddress.d.ts +0 -1
  145. package/dist/builders/types/Transaction.js +0 -1
  146. package/dist/builders/types/TransactionId.d.ts +0 -1
  147. package/dist/builders/types/TransactionId.js +0 -1
  148. package/dist/builders/types/TransactionResult.d.ts +0 -22
  149. package/dist/builders/types/TransactionResult.js +0 -10
  150. package/dist/builders/types/TransactionSignature.d.ts +0 -4
  151. package/dist/builders/types/TransactionSignature.js +0 -1
  152. package/dist/builders/types/UnsignedTransaction.d.ts +0 -12
  153. package/dist/builders/types/UnsignedTransaction.js +0 -1
  154. package/dist/builders/types/VersionedSubstateId.js +0 -1
  155. package/dist/builders/types/ViewableBalanceProof.d.ts +0 -10
  156. package/dist/builders/types/ViewableBalanceProof.js +0 -2
  157. package/dist/builders/types/Workspace.js +0 -1
  158. package/dist/builders/types/index.js +0 -2
  159. package/dist/index.d.ts +0 -13
  160. package/dist/index.js +0 -12
  161. package/dist/providers/index.d.ts +0 -16
  162. package/dist/providers/index.js +0 -1
  163. package/dist/providers/metamask/index.d.ts +0 -30
  164. package/dist/providers/metamask/index.js +0 -168
  165. package/dist/providers/metamask/utils.d.ts +0 -38
  166. package/dist/providers/metamask/utils.js +0 -55
  167. package/dist/providers/tari_universe/index.js +0 -3
  168. package/dist/providers/tari_universe/provider.d.ts +0 -23
  169. package/dist/providers/tari_universe/provider.js +0 -89
  170. package/dist/providers/tari_universe/types.js +0 -1
  171. package/dist/providers/tari_universe/utils.d.ts +0 -2
  172. package/dist/providers/tari_universe/utils.js +0 -16
  173. package/dist/providers/types.d.ts +0 -69
  174. package/dist/providers/types.js +0 -10
  175. package/dist/providers/wallet_daemon/index.js +0 -3
  176. package/dist/providers/wallet_daemon/provider.d.ts +0 -43
  177. package/dist/providers/wallet_daemon/provider.js +0 -198
  178. package/dist/providers/wallet_daemon/tari_permissions.d.ts +0 -216
  179. package/dist/providers/wallet_daemon/tari_permissions.js +0 -282
  180. package/dist/providers/wallet_daemon/webrtc.d.ts +0 -20
  181. package/dist/providers/wallet_daemon/webrtc.js +0 -201
  182. package/dist/providers/wallet_daemon/webrtc_transport.d.ts +0 -10
  183. package/dist/providers/wallet_daemon/webrtc_transport.js +0 -18
  184. package/dist/providers/walletconnect/index.d.ts +0 -23
  185. package/dist/providers/walletconnect/index.js +0 -221
  186. package/dist/templates/Account.d.ts +0 -65
  187. package/dist/templates/Account.js +0 -31
  188. package/dist/templates/Pool.d.ts +0 -30
  189. package/dist/templates/Pool.js +0 -20
  190. package/dist/templates/Tariswap.d.ts +0 -65
  191. package/dist/templates/Tariswap.js +0 -36
  192. package/dist/templates/TemplateFactory.d.ts +0 -9
  193. package/dist/templates/TemplateFactory.js +0 -18
  194. package/dist/templates/TestFaucet.d.ts +0 -49
  195. package/dist/templates/TestFaucet.js +0 -31
  196. package/dist/templates/index.js +0 -5
  197. package/dist/utils.d.ts +0 -2
  198. /package/{dist/builders/helpers/index.d.ts → packages/builders/src/helpers/index.ts} +0 -0
  199. /package/{dist/templates/index.d.ts → packages/tarijs/src/templates/index.ts} +0 -0
@@ -0,0 +1,232 @@
1
+ import { TariProvider } from "@tari-project/tari-provider";
2
+ import {
3
+ SubmitTransactionRequest,
4
+ TransactionResult,
5
+ TransactionStatus,
6
+ SubmitTransactionResponse,
7
+ VaultBalances,
8
+ TemplateDefinition,
9
+ Substate,
10
+ ListSubstatesResponse,
11
+ Account
12
+ } from "@tari-project/tari-provider";
13
+ import { MetaMaskInpageProvider } from "@metamask/providers";
14
+ import { connectSnap, getSnap, isFlask, Snap } from "./utils";
15
+ import { SubstateType } from "@tari-project/typescript-bindings";
16
+
17
+ export const MetamaskNotInstalled = "METAMASK_NOT_INSTALLED";
18
+ export const MetamaskIsNotFlask = "METAMASK_IS_NOT_FLASK";
19
+ export const TariSnapNotInstalled = "TARI_SNAP_NOT_INSTALLED";
20
+
21
+ type Maybe<T> = T | null | undefined;
22
+
23
+ export class MetamaskTariProvider implements TariProvider {
24
+ public providerName = "Metamask";
25
+ snapId: string;
26
+ snapVersion: string | undefined;
27
+ metamask: MetaMaskInpageProvider;
28
+ snap?: Snap;
29
+ metamaskConnected: boolean;
30
+
31
+ constructor(snapId: string, metamask: MetaMaskInpageProvider) {
32
+ this.snapId = snapId;
33
+ this.snapVersion = undefined;
34
+ this.metamask = metamask;
35
+ this.metamaskConnected = false;
36
+ }
37
+
38
+ async connect(): Promise<void> {
39
+ // check that the metamask provider is valid
40
+ if (!this.metamask || !this.metamask.isMetaMask) {
41
+ throw MetamaskNotInstalled;
42
+ }
43
+
44
+ // check that flask is installed
45
+ if (!isFlask(this.metamask)) {
46
+ throw MetamaskIsNotFlask;
47
+ }
48
+
49
+ // connect to the tari snap
50
+ // this will request MetaMask the installation of the tari snap if it's not already installed
51
+ await connectSnap(this.metamask, { [this.snapId]: { version: this.snapVersion } });
52
+
53
+ // store the tari snap reference
54
+ const snap = await getSnap(this.metamask, this.snapId);
55
+ if (!snap) {
56
+ // this should olny happen if the user didn't accept the tari snap in the previous step
57
+ throw TariSnapNotInstalled;
58
+ }
59
+ this.snap = snap;
60
+ this.metamaskConnected = true;
61
+ }
62
+
63
+ public isConnected(): boolean {
64
+ return this.metamaskConnected;
65
+ }
66
+
67
+ public async createFreeTestCoins(account_id: number): Promise<Account> {
68
+ const res = (await this.metamaskRequest("getFreeTestCoins", {
69
+ amount: 1000000,
70
+ account_id,
71
+ fee: 2000,
72
+ })) as any;
73
+ return {
74
+ account_id,
75
+ address: res.address,
76
+ public_key: res.public_key,
77
+ resources: [],
78
+ };
79
+ }
80
+
81
+ async getAccount(): Promise<Account> {
82
+ return (await this.metamaskRequest("getAccountData", { account_id: 0 })) as any;
83
+ }
84
+
85
+ async getSubstate(substate_address: string): Promise<Substate> {
86
+ const {
87
+ substate,
88
+ address: substate_id,
89
+ version,
90
+ } = await this.metamaskRequest<any>("getSubstate", { substate_address });
91
+ return { value: substate, address: { substate_id, version } };
92
+ }
93
+
94
+ async listSubstates(
95
+ filter_by_template: string | null,
96
+ filter_by_type: SubstateType | null,
97
+ limit: number | null,
98
+ offset: number | null,
99
+ ): Promise<ListSubstatesResponse> {
100
+ const res = (await this.metamaskRequest("listSubstates", {
101
+ filter_by_template,
102
+ filter_by_type,
103
+ limit,
104
+ offset,
105
+ })) as any;
106
+
107
+ return res;
108
+ }
109
+
110
+ async submitTransaction(req: SubmitTransactionRequest): Promise<SubmitTransactionResponse> {
111
+ const params = {
112
+ instructions: req.instructions,
113
+ fee_instructions: req.fee_instructions,
114
+ input_refs: req.input_refs,
115
+ required_substates: req.required_substates || [],
116
+ is_dry_run: req.is_dry_run,
117
+ };
118
+
119
+ const resp = await this.metamaskRequest<any>("sendTransaction", params);
120
+ if (!resp) {
121
+ throw new Error("Failed to submit transaction to metamask snap: empty response");
122
+ }
123
+ if (resp.error) {
124
+ throw new Error(`Failed to submit transaction to metamask snap: ${resp.error}`);
125
+ }
126
+ return { transaction_id: resp.transaction_id };
127
+ }
128
+
129
+ public async getTransactionResult(transactionId: string): Promise<TransactionResult> {
130
+ // This request returns the response from the indexer get_transaction_result request
131
+ const resp: Maybe<any> = await this.metamaskRequest("getTransactionResult", { transaction_id: transactionId });
132
+
133
+ if (!resp) {
134
+ throw new Error("Failed to get transaction result from metamask snap: empty response");
135
+ }
136
+
137
+ if (resp.result === "Pending") {
138
+ return {
139
+ transaction_id: transactionId,
140
+ status: TransactionStatus.Pending,
141
+ result: null,
142
+ } as TransactionResult;
143
+ }
144
+
145
+ if (!resp?.result?.Finalized) {
146
+ throw new Error("Transaction result was not pending nor finalized");
147
+ }
148
+
149
+ const newStatus = convertToStatus(resp.result.Finalized);
150
+
151
+ return {
152
+ transaction_id: transactionId,
153
+ status: newStatus,
154
+ result: resp.result.Finalized.execution_result.finalize,
155
+ } as TransactionResult;
156
+ }
157
+
158
+ public async getPublicKey(_branch: string, index: number): Promise<string> {
159
+ const resp: Maybe<any> = await this.metamaskRequest("getPublicKey", { index });
160
+
161
+ if (!resp) {
162
+ throw new Error("Failed to get public key from metamask snap: empty response");
163
+ }
164
+
165
+ return resp.public_key;
166
+ }
167
+
168
+ public async getConfidentialVaultBalances(
169
+ viewKeyId: number,
170
+ vaultId: string,
171
+ min: number | null = null,
172
+ max: number | null = null,
173
+ ): Promise<VaultBalances> {
174
+ const res = (await this.metamaskRequest("getConfidentialVaultBalances", {
175
+ view_key_id: viewKeyId,
176
+ vault_id: vaultId,
177
+ minimum_expected_value: min,
178
+ maximum_expected_value: max,
179
+ })) as any;
180
+
181
+ return { balances: res as unknown as Map<string, number | null> };
182
+ }
183
+
184
+ getTemplateDefinition(template_address: string): Promise<TemplateDefinition> {
185
+ return this.metamaskRequest("getTemplateDefinition", { template_address }).then((resp) => {
186
+ if (!resp) {
187
+ throw new Error("Template not found");
188
+ }
189
+
190
+ return (resp as { definition: TemplateDefinition }).definition;
191
+ });
192
+ }
193
+
194
+ private async metamaskRequest<T>(method: string, params: Object): Promise<T> {
195
+ console.log("Metamask request:", method, params);
196
+ const resp = await this.metamask.request({
197
+ method: "wallet_invokeSnap",
198
+ params: {
199
+ snapId: this.snapId,
200
+ request: {
201
+ method,
202
+ params,
203
+ },
204
+ },
205
+ });
206
+
207
+ console.log("Metamask response:", resp);
208
+
209
+ if (!resp) {
210
+ throw new Error("Metamask request failed: empty response");
211
+ }
212
+
213
+ return resp as T;
214
+ }
215
+ }
216
+
217
+ function convertToStatus(result: any): TransactionStatus {
218
+ // Ref: https://github.com/tari-project/tari-dan/blob/bb0b31139b770aacd7bb49af865543aa4a9e2de4/dan_layer/wallet/sdk/src/apis/transaction.rs
219
+ if (result.final_decision !== "Commit") {
220
+ return TransactionStatus.Rejected;
221
+ }
222
+
223
+ // if (!result?.result?.Finalized) {
224
+ // throw new Error("Transaction result was finalized but no result was returned");
225
+ // }
226
+ //
227
+ // if (result.finalize.AcceptFeeRejectRest) {
228
+ // return TransactionStatus.OnlyFeeAccepted;
229
+ // }
230
+
231
+ return TransactionStatus.Accepted;
232
+ }
@@ -0,0 +1,86 @@
1
+ import { MetaMaskInpageProvider } from '@metamask/providers';
2
+
3
+
4
+ export type GetSnapsResponse = Record<string, Snap>;
5
+
6
+ export type Snap = {
7
+ permissionName: string;
8
+ id: string;
9
+ version: string;
10
+ initialPermissions: Record<string, unknown>;
11
+ };
12
+
13
+ /**
14
+ * Get the installed snaps in MetaMask.
15
+ *
16
+ * @param provider - The MetaMask inpage provider.
17
+ * @returns The snaps installed in MetaMask.
18
+ */
19
+ export const getSnaps = async (
20
+ provider: MetaMaskInpageProvider,
21
+ ): Promise<GetSnapsResponse> =>
22
+ (await provider.request({
23
+ method: 'wallet_getSnaps',
24
+ })) as unknown as GetSnapsResponse;
25
+
26
+
27
+ /**
28
+ * Connect a snap to MetaMask.
29
+ *
30
+ * @param snapId - The ID of the snap.
31
+ * @param params - The params to pass with the snap to connect.
32
+ */
33
+ export const connectSnap = async (
34
+ provider: MetaMaskInpageProvider,
35
+ snaps: Record<string, {version?: string}>,
36
+ ) => {
37
+ await provider.request({
38
+ method: 'wallet_requestSnaps',
39
+ params: snaps,
40
+ });
41
+ };
42
+
43
+ /**
44
+ * Get the snap from MetaMask.
45
+ *
46
+ * @param version - The version of the snap to install (optional).
47
+ * @returns The snap object returned by the extension.
48
+ */
49
+ export const getSnap = async (
50
+ provider: MetaMaskInpageProvider,
51
+ snapId: string,
52
+ version?: string
53
+ ): Promise<Snap | undefined> => {
54
+ try {
55
+ const snaps = await getSnaps(provider);
56
+
57
+ return Object.values(snaps).find(
58
+ (snap) =>
59
+ snap.id === snapId && (!version || snap.version === version),
60
+ );
61
+ } catch (e) {
62
+ console.log('Failed to obtain installed snap', e);
63
+ return undefined;
64
+ }
65
+ };
66
+
67
+ export const isLocalSnap = (snapId: string) => snapId.startsWith('local:');
68
+
69
+ /**
70
+ * Detect if the wallet injecting the ethereum object is MetaMask Flask.
71
+ *
72
+ * @returns True if the MetaMask version is Flask, false otherwise.
73
+ */
74
+ export const isFlask = async (provider: MetaMaskInpageProvider) => {
75
+ try {
76
+ const clientVersion = await provider.request({
77
+ method: 'web3_clientVersion',
78
+ });
79
+
80
+ const isFlaskDetected = (clientVersion as string[])?.includes('flask');
81
+
82
+ return Boolean(provider && isFlaskDetected);
83
+ } catch {
84
+ return false;
85
+ }
86
+ };
@@ -0,0 +1,21 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "ES2020",
5
+ "target": "ESNext",
6
+ "moduleResolution": "Bundler",
7
+ "outDir": "./dist",
8
+ "rootDir": "./src"
9
+ },
10
+ "include": [
11
+ "src/**/*"
12
+ ],
13
+ "references": [
14
+ {
15
+ "path": "../tari_provider"
16
+ },
17
+ {
18
+ "path": "../tarijs_types"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,55 @@
1
+ language: "typescript"
2
+ platform: "node"
3
+ type: "library"
4
+
5
+ fileGroups:
6
+ configs:
7
+ - "tsconfig.json"
8
+ - "package.json"
9
+ - "eslint.config.ts"
10
+ sources:
11
+ - "src/**/*"
12
+ tests:
13
+ - "integration-tests/**/*"
14
+
15
+ tasks:
16
+ build:
17
+ command: "pnpm run build"
18
+ inputs:
19
+ - "@files(sources)"
20
+ - "@files(configs)"
21
+ outputs:
22
+ - "dist"
23
+ format:
24
+ command: "pnpm run format"
25
+ inputs:
26
+ - "@files(sources)"
27
+ - "@files(configs)"
28
+ - "@files(tests)"
29
+ options:
30
+ runInCI: false
31
+ lint:
32
+ command: "pnpm run lint:fix"
33
+ inputs:
34
+ - "@files(sources)"
35
+ - "@files(configs)"
36
+ - "@files(tests)"
37
+ options:
38
+ runInCI: false
39
+ deps:
40
+ - "build"
41
+
42
+ lintCheck:
43
+ command: "pnpm run lint"
44
+ inputs:
45
+ - "@files(sources)"
46
+ - "@files(configs)"
47
+ - "@files(tests)"
48
+ deps:
49
+ - "build"
50
+ formatCheck:
51
+ command: "pnpm run format:check"
52
+ inputs:
53
+ - "@files(sources)"
54
+ - "@files(configs)"
55
+ - "@files(tests)"
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@tari-project/tari-permissions",
3
+ "version": "0.4.0",
4
+ "description": "",
5
+ "type": "module",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc -b"
11
+ },
12
+ "keywords": [],
13
+ "author": "",
14
+ "license": "ISC",
15
+ "dependencies": {
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "catalog:",
19
+ "typescript": "catalog:"
20
+ },
21
+ "files": [
22
+ "/dist"
23
+ ],
24
+ "main": "dist/index.js",
25
+ "types": "dist/index.d.ts"
26
+ }
@@ -0,0 +1 @@
1
+ export * from './tari_permissions';