@leather.io/provider 1.1.4 → 1.2.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.
- package/dist/injected-provider.js +3 -0
- package/dist/mobile.js +3 -0
- package/dist/mobile.js.map +1 -1
- package/package.json +3 -3
|
@@ -373,6 +373,9 @@ function initInpageProvider({ onDispatch, env }) {
|
|
|
373
373
|
}
|
|
374
374
|
|
|
375
375
|
// src/mobile.ts
|
|
376
|
+
window.onMessageFromRN = function(str) {
|
|
377
|
+
window.postMessage(str, window.location.origin);
|
|
378
|
+
};
|
|
376
379
|
initInpageProvider({
|
|
377
380
|
onDispatch(rpcRequest) {
|
|
378
381
|
window.ReactNativeWebView.postMessage(JSON.stringify(rpcRequest));
|
package/dist/mobile.js
CHANGED
|
@@ -373,6 +373,9 @@ function initInpageProvider({ onDispatch, env }) {
|
|
|
373
373
|
}
|
|
374
374
|
|
|
375
375
|
// src/mobile.ts
|
|
376
|
+
window.onMessageFromRN = function(str) {
|
|
377
|
+
window.postMessage(str, window.location.origin);
|
|
378
|
+
};
|
|
376
379
|
initInpageProvider({
|
|
377
380
|
onDispatch(rpcRequest) {
|
|
378
381
|
window.ReactNativeWebView.postMessage(JSON.stringify(rpcRequest));
|
package/dist/mobile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/add-leather-to-providers.ts","../src/crypto-random-uuid-polyfill.ts","../src/legacy-requests.ts","../src/index.ts","../src/mobile.ts"],"sourcesContent":["import type { RpcMethodNames } from '@leather.io/rpc';\n\ninterface WalletProvider {\n id: string;\n name: string;\n icon: string;\n webUrl?: string;\n chromeWebStoreUrl?: string;\n mozillaAddOnsUrl?: string;\n googlePlayStoreUrl?: string;\n iOSAppStoreUrl?: string;\n methods?: string[];\n}\n\n// https://wbips.netlify.app/wbips/WBIP004\nexport function addLeatherToProviders() {\n const win = window as unknown as Window & { btc_providers?: WalletProvider[] };\n\n if (!win.btc_providers) win.btc_providers = [];\n\n win.btc_providers.push({\n id: 'LeatherProvider',\n name: 'Leather',\n icon: 'data:image/svg;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYuODM4NyIgZmlsbD0iIzEyMTAwRiIvPgo8cGF0aCBkPSJNNzQuOTE3MSA1Mi43MTE0QzgyLjQ3NjYgNTEuNTQwOCA5My40MDg3IDQzLjU4MDQgOTMuNDA4NyAzNy4zNzYxQzkzLjQwODcgMzUuNTAzMSA5MS44OTY4IDM0LjIxNTQgODkuNjg3MSAzNC4yMTU0Qzg1LjUwMDQgMzQuMjE1NCA3OC40MDYxIDQwLjUzNjggNzQuOTE3MSA1Mi43MTE0Wk0zOS45MTEgODMuNDk5MUMzMC4wMjU2IDgzLjQ5OTEgMjkuMjExNSA5My4zMzI0IDM5LjA5NjkgOTMuMzMyNEM0My41MTYzIDkzLjMzMjQgNDguODY2MSA5MS41NzY0IDUxLjY1NzMgODguNDE1N0M0Ny41ODY4IDg0LjkwMzggNDQuMjE0MSA4My40OTkxIDM5LjkxMSA4My40OTkxWk0xMDIuODI5IDc5LjI4NDhDMTAzLjQxIDk1Ljc5MDcgOTUuMDM2OSAxMDUuMDM5IDgwLjg0ODQgMTA1LjAzOUM3Mi40NzQ4IDEwNS4wMzkgNjguMjg4MSAxMDEuODc4IDU5LjMzMyA5Ni4wMjQ4QzU0LjY4MSAxMDEuMTc2IDQ1Ljg0MjMgMTA1LjAzOSAzOC41MTU0IDEwNS4wMzlDMTMuMjc4NSAxMDUuMDM5IDE0LjMyNTIgNzIuODQ2MyA0MC4wMjczIDcyLjg0NjNDNDUuMzc3MSA3Mi44NDYzIDQ5LjkxMjggNzQuMjUxMSA1NS43Mjc3IDc3Ljg4TDU5LjU2NTYgNjQuNDE3N0M0My43NDg5IDYwLjA4NjQgMzUuODQwNSA0Ny45MTE4IDQzLjYzMjYgMzAuNDY5M0g1Ni4xOTI5QzQ5LjIxNSA0Mi4wNTg2IDUzLjk4MzIgNTEuNjU3OCA2Mi44MjIgNTIuNzExNEM2Ny41OTAzIDM1LjczNzIgNzcuODI0NiAyMi41MDkgOTEuNDMxNiAyMi41MDlDOTkuMTA3NCAyMi41MDkgMTA1LjE1NSAyNy41NDI4IDEwNS4xNTUgMzYuNjczN0MxMDUuMTU1IDUxLjMwNjYgODYuMDgxOSA2My4yNDcxIDcxLjY2MDcgNjQuNDE3N0w2NS43Mjk1IDg1LjM3MjFDNzIuNDc0OCA5My4yMTUzIDkxLjE5OSAxMDAuODI0IDkxLjE5OSA3OS4yODQ4SDEwMi44MjlaIiBmaWxsPSIjRjdGNUYzIi8+Cjwvc3ZnPgo=',\n\n webUrl: 'https://leather.io',\n\n chromeWebStoreUrl:\n 'https://chromewebstore.google.com/detail/leather/ldinpeekobnhjjdofggfgjlcehhmanlj',\n\n methods: [\n 'open',\n 'getInfo',\n 'supportedMethods',\n 'openSwap',\n 'getAddresses',\n 'stx_updateProfile',\n 'stx_signMessage',\n 'stx_transferStx',\n 'stx_transferSip10Ft',\n 'stx_transferSip9Nft',\n 'stx_signTransaction',\n 'stx_signStructuredMessage',\n 'stx_getAddresses',\n 'stx_deployContract',\n 'stx_callContract',\n 'signPsbt',\n 'signMessage',\n 'sendTransfer',\n // Better to import a type than a variable from @leather.io/rpc to save a lot of space in the injected provider script\n ] satisfies RpcMethodNames[],\n });\n}\n","function generateUUID() {\n const array = new Uint8Array(16);\n crypto.getRandomValues(array);\n\n // Format it as a UUID (RFC 4122 version 4)\n return [...array]\n .map((b, i) => ([4, 6, 8, 10].includes(i) ? '-' : '') + (b % 16).toString(16))\n .join('');\n}\n\n// polyfill crypto.randomUUID\ncrypto.randomUUID = crypto.randomUUID ?? generateUUID;\n","import { StacksProvider } from '@stacks/connect';\nimport {\n FinishedTxPayload,\n PsbtData,\n SignatureData,\n SponsoredFinishedTxPayload,\n} from '@stacks/connect-jwt';\nimport { PublicProfile } from '@stacks/profile';\n\nimport type { Platform } from './types';\n\n/**\n * Inpage Script (LeatherProvider) <-> Content Script\n */\nenum DomEventName {\n request = 'request',\n authenticationRequest = 'hiroWalletStacksAuthenticationRequest',\n signatureRequest = 'hiroWalletSignatureRequest',\n structuredDataSignatureRequest = 'hiroWalletStructuredDataSignatureRequest',\n transactionRequest = 'hiroWalletStacksTransactionRequest',\n profileUpdateRequest = 'hiroWalletProfileUpdateRequest',\n psbtRequest = 'hiroWalletPsbtRequest',\n}\n\ninterface AuthenticationRequestEventDetails {\n authenticationRequest: string;\n}\n\ninterface SignatureRequestEventDetails {\n signatureRequest: string;\n}\n\ninterface TransactionRequestEventDetails {\n transactionRequest: string;\n}\n\ninterface ProfileUpdateRequestEventDetails {\n profileUpdateRequest: string;\n}\n\ninterface PsbtRequestEventDetails {\n psbtRequest: string;\n}\n\nconst MESSAGE_SOURCE = 'stacks-wallet';\n\nenum ExternalMethods {\n transactionRequest = 'hiroWalletTransactionRequest',\n transactionResponse = 'hiroWalletTransactionResponse',\n authenticationRequest = 'hiroWalletAuthenticationRequest',\n authenticationResponse = 'hiroWalletAuthenticationResponse',\n signatureRequest = 'hiroWalletSignatureRequest',\n signatureResponse = 'hiroWalletSignatureResponse',\n structuredDataSignatureRequest = 'hiroWalletStructuredDataSignatureRequest',\n structuredDataSignatureResponse = 'hiroWalletStructuredDataSignatureResponse',\n profileUpdateRequest = 'hiroWalletProfileUpdateRequest',\n profileUpdateResponse = 'hiroWalletProfileUpdateResponse',\n psbtRequest = 'hiroWalletPsbtRequest',\n psbtResponse = 'hiroWalletPsbtResponse',\n}\n\nenum InternalMethods {\n RequestDerivedStxAccounts = 'RequestDerivedStxAccounts',\n OriginatingTabClosed = 'OriginatingTabClosed',\n AccountChanged = 'AccountChanged',\n AddressMonitorUpdated = 'AddressMonitorUpdated',\n}\n\ntype ExtensionMethods = ExternalMethods | InternalMethods;\n\ninterface BaseMessage {\n source: typeof MESSAGE_SOURCE;\n method: ExtensionMethods;\n}\n\n/**\n * Content Script <-> Background Script\n */\ninterface Message<Methods extends ExtensionMethods, Payload = undefined> extends BaseMessage {\n method: Methods;\n payload: Payload;\n}\n\ntype AuthenticationResponseMessage = Message<\n ExternalMethods.authenticationResponse,\n {\n authenticationRequest: string;\n authenticationResponse: string;\n }\n>;\n\ntype SignatureResponseMessage = Message<\n ExternalMethods.signatureResponse,\n {\n signatureRequest: string;\n signatureResponse: SignatureData | string;\n }\n>;\n\ntype ProfileUpdateResponseMessage = Message<\n ExternalMethods.profileUpdateResponse,\n {\n profileUpdateRequest: string;\n profileUpdateResponse: PublicProfile | string;\n }\n>;\n\ntype PsbtResponseMessage = Message<\n ExternalMethods.psbtResponse,\n {\n psbtRequest: string;\n psbtResponse: PsbtData | string;\n }\n>;\n\ntype TxResult = SponsoredFinishedTxPayload | FinishedTxPayload;\n\ntype TransactionResponseMessage = Message<\n ExternalMethods.transactionResponse,\n {\n transactionRequest: string;\n transactionResponse: TxResult | string;\n }\n>;\n\ntype LegacyMessageToContentScript =\n | AuthenticationResponseMessage\n | TransactionResponseMessage\n | SignatureResponseMessage\n | ProfileUpdateResponseMessage\n | PsbtResponseMessage;\n\nfunction isValidEvent(event: MessageEvent, method: LegacyMessageToContentScript['method']) {\n const { data } = event;\n const correctSource = data.source === MESSAGE_SOURCE;\n const correctMethod = data.method === method;\n return correctSource && correctMethod && !!data.payload;\n}\n\ntype CallableMethods = keyof typeof ExternalMethods;\n\ninterface ExtensionResponse {\n source: 'blockstack-extension';\n method: CallableMethods;\n [key: string]: any;\n}\n\nasync function callAndReceive(\n methodName: CallableMethods | 'getURL',\n opts: any = {}\n): Promise<ExtensionResponse> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject('Unable to get response from Blockstack extension');\n }, 1000);\n function waitForResponse(event: MessageEvent) {\n if (\n event.data.source === 'blockstack-extension' &&\n event.data.method === `${methodName}Response`\n ) {\n clearTimeout(timeout);\n window.removeEventListener('message', waitForResponse);\n resolve(event.data);\n }\n }\n window.addEventListener('message', waitForResponse);\n window.postMessage(\n {\n method: methodName,\n source: 'blockstack-app',\n ...opts,\n },\n window.location.origin\n );\n });\n}\n\ntype LegacyRequests = Omit<StacksProvider, 'request' | 'getProductInfo'>;\n\nfunction placeholderLegacyRequests(): LegacyRequests {\n return {\n getURL: () => {\n // TODO: deprecated\n throw new Error('This function i deprecated');\n },\n structuredDataSignatureRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n\n signatureRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n\n authenticationRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n\n transactionRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n psbtRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n profileUpdateRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n };\n}\n\nfunction legacyRequests(): LegacyRequests {\n return {\n getURL: async () => {\n const { url } = await callAndReceive('getURL');\n return url;\n },\n structuredDataSignatureRequest: async signatureRequest => {\n const event = new CustomEvent<SignatureRequestEventDetails>(\n DomEventName.structuredDataSignatureRequest,\n {\n detail: { signatureRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<SignatureResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.signatureResponse)) return;\n if (event.data.payload?.signatureRequest !== signatureRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.signatureResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.signatureResponse);\n return;\n }\n if (typeof event.data.payload.signatureResponse !== 'string') {\n resolve(event.data.payload.signatureResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n\n signatureRequest: async signatureRequest => {\n const event = new CustomEvent<SignatureRequestEventDetails>(DomEventName.signatureRequest, {\n detail: { signatureRequest },\n });\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<SignatureResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.signatureResponse)) return;\n if (event.data.payload?.signatureRequest !== signatureRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.signatureResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.signatureResponse);\n return;\n }\n if (typeof event.data.payload.signatureResponse !== 'string') {\n resolve(event.data.payload.signatureResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n\n authenticationRequest: async authenticationRequest => {\n // eslint-disable-next-line no-console\n console.warn(`\n WARNING: Legacy Leather request detected\n\n Leather now uses an RPC-style API, that can be used directly,\n rather than through libraries such as Stacks Connect. For example,\n to get a user's addresses, you should use the\n LeatherProvider.request('getAddresses') method.\n\n See our docs for more information https://leather.gitbook.io/\n `);\n const event = new CustomEvent<AuthenticationRequestEventDetails>(\n DomEventName.authenticationRequest,\n {\n detail: { authenticationRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<AuthenticationResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.authenticationResponse)) return;\n if (event.data.payload?.authenticationRequest !== authenticationRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.authenticationResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.authenticationResponse);\n return;\n }\n resolve(event.data.payload.authenticationResponse);\n }\n window.addEventListener('message', handleMessage);\n });\n },\n\n transactionRequest: async transactionRequest => {\n const event = new CustomEvent<TransactionRequestEventDetails>(\n DomEventName.transactionRequest,\n {\n detail: { transactionRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<TransactionResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.transactionResponse)) return;\n if (event.data.payload?.transactionRequest !== transactionRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.transactionResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.transactionResponse);\n return;\n }\n if (typeof event.data.payload.transactionResponse !== 'string') {\n resolve(event.data.payload.transactionResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n psbtRequest: async psbtRequest => {\n const event = new CustomEvent<PsbtRequestEventDetails>(DomEventName.psbtRequest, {\n detail: { psbtRequest },\n });\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<PsbtResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.psbtResponse)) return;\n if (event.data.payload?.psbtRequest !== psbtRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.psbtResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.psbtResponse);\n return;\n }\n if (typeof event.data.payload.psbtResponse !== 'string') {\n resolve(event.data.payload.psbtResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n profileUpdateRequest: async profileUpdateRequest => {\n const event = new CustomEvent<ProfileUpdateRequestEventDetails>(\n DomEventName.profileUpdateRequest,\n {\n detail: { profileUpdateRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<ProfileUpdateResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.profileUpdateResponse)) return;\n if (event.data.payload?.profileUpdateRequest !== profileUpdateRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.profileUpdateResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.profileUpdateResponse);\n return;\n }\n if (typeof event.data.payload.profileUpdateResponse !== 'string') {\n resolve(event.data.payload.profileUpdateResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n };\n}\n\nexport function getLegacyRequests(platform: Platform) {\n switch (platform) {\n case 'extension':\n return legacyRequests();\n case 'mobile':\n default:\n return placeholderLegacyRequests();\n }\n}\n","import type { StacksProvider } from '@stacks/connect';\n\nimport {\n type LeatherRpcMethodMap,\n type RpcMethodNames,\n type RpcParameter,\n RpcRequests,\n type RpcResponses,\n} from '@leather.io/rpc';\n\nimport { addLeatherToProviders } from './add-leather-to-providers';\nimport './crypto-random-uuid-polyfill';\nimport { getLegacyRequests } from './legacy-requests';\nimport { Platform } from './types';\n\ninterface initInpageProviderArgs {\n onDispatch(rpcRequest: RpcRequests): void;\n env: { branch: string; commitSha: string; version: string; platform: Platform };\n}\n\nexport function initInpageProvider({ onDispatch, env }: initInpageProviderArgs) {\n addLeatherToProviders();\n\n interface LeatherProviderOverrides extends StacksProvider {\n isLeather: true;\n }\n\n const provider: LeatherProviderOverrides = {\n isLeather: true,\n\n ...getLegacyRequests(env.platform),\n\n getProductInfo() {\n return {\n version: env.version,\n name: 'Leather',\n meta: {\n tag: env.branch,\n commit: env.commitSha,\n },\n };\n },\n\n request(\n method: RpcMethodNames,\n params?: RpcParameter\n ): Promise<LeatherRpcMethodMap[RpcMethodNames]['response']> {\n const id: string = crypto.randomUUID();\n const rpcRequest: RpcRequests = {\n jsonrpc: '2.0',\n id,\n method,\n params: (params ?? {}) as any,\n };\n\n onDispatch(rpcRequest);\n\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<RpcResponses>) {\n const response =\n typeof event.data === 'object' ? event.data : JSON.parse(event.data as any);\n if (response.id !== id) return;\n window.removeEventListener('message', handleMessage);\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n if ('error' in response) return reject(response);\n return resolve(response);\n }\n window.addEventListener('message', handleMessage);\n });\n },\n };\n\n function consoleDeprecationNotice(text: string) {\n // eslint-disable-next-line no-console\n console.warn(`Deprecation warning: ${text}`);\n }\n\n function warnAboutDeprecatedProvider(legacyProvider: object) {\n return Object.fromEntries(\n Object.entries(legacyProvider).map(([key, value]) => {\n if (typeof value === 'function') {\n return [\n key,\n (...args: any[]) => {\n switch (key) {\n case 'authenticationRequest':\n consoleDeprecationNotice(\n `Use LeatherProvider.request('getAddresses') instead, see docs https://leather.gitbook.io/developers/bitcoin/connect-users/get-addresses`\n );\n break;\n case 'psbtRequest':\n consoleDeprecationNotice(\n `Use LeatherProvider.request('signPsbt') instead, see docs https://leather.gitbook.io/developers/bitcoin/sign-transactions/partially-signed-bitcoin-transactions-psbts`\n );\n break;\n case 'structuredDataSignatureRequest':\n case 'signatureRequest':\n consoleDeprecationNotice(\n `Use LeatherProvider.request('stx_signMessage') instead`\n );\n break;\n default:\n consoleDeprecationNotice(\n 'The provider object is deprecated. Use `LeatherProvider` instead'\n );\n }\n\n return value(...args);\n },\n ];\n }\n return [key, value];\n })\n );\n }\n\n try {\n // Makes properties immutable to contend with other wallets that use agressive\n // \"prioritisation\" default settings. As other wallet's use this approach,\n // Leather has to use it too, so that the browsers' own internal logic being\n // used to determine content script exeuction order. A more fair way to\n // contend over shared provider space. `StacksProvider` should be considered\n // deprecated and each wallet use their own provider namespace.\n Object.defineProperty(window, 'StacksProvider', {\n get: () => warnAboutDeprecatedProvider(provider),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n set: () => {},\n });\n } catch {\n // eslint-disable-next-line no-console\n console.log('Unable to set StacksProvider');\n }\n\n try {\n Object.defineProperty(window, 'HiroWalletProvider', {\n get: () => warnAboutDeprecatedProvider(provider),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n set: () => {},\n });\n } catch {\n // eslint-disable-next-line no-console\n console.log('Unable to set HiroWalletProvider');\n }\n\n try {\n Object.defineProperty(window, 'LeatherProvider', {\n get: () => provider,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n set: () => {},\n });\n } catch {\n // eslint-disable-next-line no-console\n console.warn('Unable to set LeatherProvider');\n }\n\n // Legacy product provider objects\n if (typeof (window as any).btc === 'undefined') {\n (window as any).btc = warnAboutDeprecatedProvider(provider);\n }\n}\n","import { initInpageProvider } from '.';\n\ninitInpageProvider({\n onDispatch(rpcRequest) {\n (window as any).ReactNativeWebView.postMessage(JSON.stringify(rpcRequest));\n },\n env: {\n platform: 'mobile',\n branch: 'replace_branch',\n commitSha: 'replace_commit_sha',\n version: 'replace_version',\n },\n});\n// note: this is required, or you'll sometimes get silent failures\n// Ref: https://github.com/react-native-webview/react-native-webview/blob/master/docs/Guide.md#the-injectedjavascript-prop\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ntrue;\n"],"mappings":"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","names":["event"]}
|
|
1
|
+
{"version":3,"sources":["../src/add-leather-to-providers.ts","../src/crypto-random-uuid-polyfill.ts","../src/legacy-requests.ts","../src/index.ts","../src/mobile.ts"],"sourcesContent":["import type { RpcMethodNames } from '@leather.io/rpc';\n\ninterface WalletProvider {\n id: string;\n name: string;\n icon: string;\n webUrl?: string;\n chromeWebStoreUrl?: string;\n mozillaAddOnsUrl?: string;\n googlePlayStoreUrl?: string;\n iOSAppStoreUrl?: string;\n methods?: string[];\n}\n\n// https://wbips.netlify.app/wbips/WBIP004\nexport function addLeatherToProviders() {\n const win = window as unknown as Window & { btc_providers?: WalletProvider[] };\n\n if (!win.btc_providers) win.btc_providers = [];\n\n win.btc_providers.push({\n id: 'LeatherProvider',\n name: 'Leather',\n icon: 'data:image/svg;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYuODM4NyIgZmlsbD0iIzEyMTAwRiIvPgo8cGF0aCBkPSJNNzQuOTE3MSA1Mi43MTE0QzgyLjQ3NjYgNTEuNTQwOCA5My40MDg3IDQzLjU4MDQgOTMuNDA4NyAzNy4zNzYxQzkzLjQwODcgMzUuNTAzMSA5MS44OTY4IDM0LjIxNTQgODkuNjg3MSAzNC4yMTU0Qzg1LjUwMDQgMzQuMjE1NCA3OC40MDYxIDQwLjUzNjggNzQuOTE3MSA1Mi43MTE0Wk0zOS45MTEgODMuNDk5MUMzMC4wMjU2IDgzLjQ5OTEgMjkuMjExNSA5My4zMzI0IDM5LjA5NjkgOTMuMzMyNEM0My41MTYzIDkzLjMzMjQgNDguODY2MSA5MS41NzY0IDUxLjY1NzMgODguNDE1N0M0Ny41ODY4IDg0LjkwMzggNDQuMjE0MSA4My40OTkxIDM5LjkxMSA4My40OTkxWk0xMDIuODI5IDc5LjI4NDhDMTAzLjQxIDk1Ljc5MDcgOTUuMDM2OSAxMDUuMDM5IDgwLjg0ODQgMTA1LjAzOUM3Mi40NzQ4IDEwNS4wMzkgNjguMjg4MSAxMDEuODc4IDU5LjMzMyA5Ni4wMjQ4QzU0LjY4MSAxMDEuMTc2IDQ1Ljg0MjMgMTA1LjAzOSAzOC41MTU0IDEwNS4wMzlDMTMuMjc4NSAxMDUuMDM5IDE0LjMyNTIgNzIuODQ2MyA0MC4wMjczIDcyLjg0NjNDNDUuMzc3MSA3Mi44NDYzIDQ5LjkxMjggNzQuMjUxMSA1NS43Mjc3IDc3Ljg4TDU5LjU2NTYgNjQuNDE3N0M0My43NDg5IDYwLjA4NjQgMzUuODQwNSA0Ny45MTE4IDQzLjYzMjYgMzAuNDY5M0g1Ni4xOTI5QzQ5LjIxNSA0Mi4wNTg2IDUzLjk4MzIgNTEuNjU3OCA2Mi44MjIgNTIuNzExNEM2Ny41OTAzIDM1LjczNzIgNzcuODI0NiAyMi41MDkgOTEuNDMxNiAyMi41MDlDOTkuMTA3NCAyMi41MDkgMTA1LjE1NSAyNy41NDI4IDEwNS4xNTUgMzYuNjczN0MxMDUuMTU1IDUxLjMwNjYgODYuMDgxOSA2My4yNDcxIDcxLjY2MDcgNjQuNDE3N0w2NS43Mjk1IDg1LjM3MjFDNzIuNDc0OCA5My4yMTUzIDkxLjE5OSAxMDAuODI0IDkxLjE5OSA3OS4yODQ4SDEwMi44MjlaIiBmaWxsPSIjRjdGNUYzIi8+Cjwvc3ZnPgo=',\n\n webUrl: 'https://leather.io',\n\n chromeWebStoreUrl:\n 'https://chromewebstore.google.com/detail/leather/ldinpeekobnhjjdofggfgjlcehhmanlj',\n\n methods: [\n 'open',\n 'getInfo',\n 'supportedMethods',\n 'openSwap',\n 'getAddresses',\n 'stx_updateProfile',\n 'stx_signMessage',\n 'stx_transferStx',\n 'stx_transferSip10Ft',\n 'stx_transferSip9Nft',\n 'stx_signTransaction',\n 'stx_signStructuredMessage',\n 'stx_getAddresses',\n 'stx_deployContract',\n 'stx_callContract',\n 'signPsbt',\n 'signMessage',\n 'sendTransfer',\n // Better to import a type than a variable from @leather.io/rpc to save a lot of space in the injected provider script\n ] satisfies RpcMethodNames[],\n });\n}\n","function generateUUID() {\n const array = new Uint8Array(16);\n crypto.getRandomValues(array);\n\n // Format it as a UUID (RFC 4122 version 4)\n return [...array]\n .map((b, i) => ([4, 6, 8, 10].includes(i) ? '-' : '') + (b % 16).toString(16))\n .join('');\n}\n\n// polyfill crypto.randomUUID\ncrypto.randomUUID = crypto.randomUUID ?? generateUUID;\n","import { StacksProvider } from '@stacks/connect';\nimport {\n FinishedTxPayload,\n PsbtData,\n SignatureData,\n SponsoredFinishedTxPayload,\n} from '@stacks/connect-jwt';\nimport { PublicProfile } from '@stacks/profile';\n\nimport type { Platform } from './types';\n\n/**\n * Inpage Script (LeatherProvider) <-> Content Script\n */\nenum DomEventName {\n request = 'request',\n authenticationRequest = 'hiroWalletStacksAuthenticationRequest',\n signatureRequest = 'hiroWalletSignatureRequest',\n structuredDataSignatureRequest = 'hiroWalletStructuredDataSignatureRequest',\n transactionRequest = 'hiroWalletStacksTransactionRequest',\n profileUpdateRequest = 'hiroWalletProfileUpdateRequest',\n psbtRequest = 'hiroWalletPsbtRequest',\n}\n\ninterface AuthenticationRequestEventDetails {\n authenticationRequest: string;\n}\n\ninterface SignatureRequestEventDetails {\n signatureRequest: string;\n}\n\ninterface TransactionRequestEventDetails {\n transactionRequest: string;\n}\n\ninterface ProfileUpdateRequestEventDetails {\n profileUpdateRequest: string;\n}\n\ninterface PsbtRequestEventDetails {\n psbtRequest: string;\n}\n\nconst MESSAGE_SOURCE = 'stacks-wallet';\n\nenum ExternalMethods {\n transactionRequest = 'hiroWalletTransactionRequest',\n transactionResponse = 'hiroWalletTransactionResponse',\n authenticationRequest = 'hiroWalletAuthenticationRequest',\n authenticationResponse = 'hiroWalletAuthenticationResponse',\n signatureRequest = 'hiroWalletSignatureRequest',\n signatureResponse = 'hiroWalletSignatureResponse',\n structuredDataSignatureRequest = 'hiroWalletStructuredDataSignatureRequest',\n structuredDataSignatureResponse = 'hiroWalletStructuredDataSignatureResponse',\n profileUpdateRequest = 'hiroWalletProfileUpdateRequest',\n profileUpdateResponse = 'hiroWalletProfileUpdateResponse',\n psbtRequest = 'hiroWalletPsbtRequest',\n psbtResponse = 'hiroWalletPsbtResponse',\n}\n\nenum InternalMethods {\n RequestDerivedStxAccounts = 'RequestDerivedStxAccounts',\n OriginatingTabClosed = 'OriginatingTabClosed',\n AccountChanged = 'AccountChanged',\n AddressMonitorUpdated = 'AddressMonitorUpdated',\n}\n\ntype ExtensionMethods = ExternalMethods | InternalMethods;\n\ninterface BaseMessage {\n source: typeof MESSAGE_SOURCE;\n method: ExtensionMethods;\n}\n\n/**\n * Content Script <-> Background Script\n */\ninterface Message<Methods extends ExtensionMethods, Payload = undefined> extends BaseMessage {\n method: Methods;\n payload: Payload;\n}\n\ntype AuthenticationResponseMessage = Message<\n ExternalMethods.authenticationResponse,\n {\n authenticationRequest: string;\n authenticationResponse: string;\n }\n>;\n\ntype SignatureResponseMessage = Message<\n ExternalMethods.signatureResponse,\n {\n signatureRequest: string;\n signatureResponse: SignatureData | string;\n }\n>;\n\ntype ProfileUpdateResponseMessage = Message<\n ExternalMethods.profileUpdateResponse,\n {\n profileUpdateRequest: string;\n profileUpdateResponse: PublicProfile | string;\n }\n>;\n\ntype PsbtResponseMessage = Message<\n ExternalMethods.psbtResponse,\n {\n psbtRequest: string;\n psbtResponse: PsbtData | string;\n }\n>;\n\ntype TxResult = SponsoredFinishedTxPayload | FinishedTxPayload;\n\ntype TransactionResponseMessage = Message<\n ExternalMethods.transactionResponse,\n {\n transactionRequest: string;\n transactionResponse: TxResult | string;\n }\n>;\n\ntype LegacyMessageToContentScript =\n | AuthenticationResponseMessage\n | TransactionResponseMessage\n | SignatureResponseMessage\n | ProfileUpdateResponseMessage\n | PsbtResponseMessage;\n\nfunction isValidEvent(event: MessageEvent, method: LegacyMessageToContentScript['method']) {\n const { data } = event;\n const correctSource = data.source === MESSAGE_SOURCE;\n const correctMethod = data.method === method;\n return correctSource && correctMethod && !!data.payload;\n}\n\ntype CallableMethods = keyof typeof ExternalMethods;\n\ninterface ExtensionResponse {\n source: 'blockstack-extension';\n method: CallableMethods;\n [key: string]: any;\n}\n\nasync function callAndReceive(\n methodName: CallableMethods | 'getURL',\n opts: any = {}\n): Promise<ExtensionResponse> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject('Unable to get response from Blockstack extension');\n }, 1000);\n function waitForResponse(event: MessageEvent) {\n if (\n event.data.source === 'blockstack-extension' &&\n event.data.method === `${methodName}Response`\n ) {\n clearTimeout(timeout);\n window.removeEventListener('message', waitForResponse);\n resolve(event.data);\n }\n }\n window.addEventListener('message', waitForResponse);\n window.postMessage(\n {\n method: methodName,\n source: 'blockstack-app',\n ...opts,\n },\n window.location.origin\n );\n });\n}\n\ntype LegacyRequests = Omit<StacksProvider, 'request' | 'getProductInfo'>;\n\nfunction placeholderLegacyRequests(): LegacyRequests {\n return {\n getURL: () => {\n // TODO: deprecated\n throw new Error('This function i deprecated');\n },\n structuredDataSignatureRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n\n signatureRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n\n authenticationRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n\n transactionRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n psbtRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n profileUpdateRequest: () => {\n // TODO: deprecated\n throw new Error('This function is deprecated');\n },\n };\n}\n\nfunction legacyRequests(): LegacyRequests {\n return {\n getURL: async () => {\n const { url } = await callAndReceive('getURL');\n return url;\n },\n structuredDataSignatureRequest: async signatureRequest => {\n const event = new CustomEvent<SignatureRequestEventDetails>(\n DomEventName.structuredDataSignatureRequest,\n {\n detail: { signatureRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<SignatureResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.signatureResponse)) return;\n if (event.data.payload?.signatureRequest !== signatureRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.signatureResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.signatureResponse);\n return;\n }\n if (typeof event.data.payload.signatureResponse !== 'string') {\n resolve(event.data.payload.signatureResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n\n signatureRequest: async signatureRequest => {\n const event = new CustomEvent<SignatureRequestEventDetails>(DomEventName.signatureRequest, {\n detail: { signatureRequest },\n });\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<SignatureResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.signatureResponse)) return;\n if (event.data.payload?.signatureRequest !== signatureRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.signatureResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.signatureResponse);\n return;\n }\n if (typeof event.data.payload.signatureResponse !== 'string') {\n resolve(event.data.payload.signatureResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n\n authenticationRequest: async authenticationRequest => {\n // eslint-disable-next-line no-console\n console.warn(`\n WARNING: Legacy Leather request detected\n\n Leather now uses an RPC-style API, that can be used directly,\n rather than through libraries such as Stacks Connect. For example,\n to get a user's addresses, you should use the\n LeatherProvider.request('getAddresses') method.\n\n See our docs for more information https://leather.gitbook.io/\n `);\n const event = new CustomEvent<AuthenticationRequestEventDetails>(\n DomEventName.authenticationRequest,\n {\n detail: { authenticationRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<AuthenticationResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.authenticationResponse)) return;\n if (event.data.payload?.authenticationRequest !== authenticationRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.authenticationResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.authenticationResponse);\n return;\n }\n resolve(event.data.payload.authenticationResponse);\n }\n window.addEventListener('message', handleMessage);\n });\n },\n\n transactionRequest: async transactionRequest => {\n const event = new CustomEvent<TransactionRequestEventDetails>(\n DomEventName.transactionRequest,\n {\n detail: { transactionRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<TransactionResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.transactionResponse)) return;\n if (event.data.payload?.transactionRequest !== transactionRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.transactionResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.transactionResponse);\n return;\n }\n if (typeof event.data.payload.transactionResponse !== 'string') {\n resolve(event.data.payload.transactionResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n psbtRequest: async psbtRequest => {\n const event = new CustomEvent<PsbtRequestEventDetails>(DomEventName.psbtRequest, {\n detail: { psbtRequest },\n });\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<PsbtResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.psbtResponse)) return;\n if (event.data.payload?.psbtRequest !== psbtRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.psbtResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.psbtResponse);\n return;\n }\n if (typeof event.data.payload.psbtResponse !== 'string') {\n resolve(event.data.payload.psbtResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n profileUpdateRequest: async profileUpdateRequest => {\n const event = new CustomEvent<ProfileUpdateRequestEventDetails>(\n DomEventName.profileUpdateRequest,\n {\n detail: { profileUpdateRequest },\n }\n );\n document.dispatchEvent(event);\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<ProfileUpdateResponseMessage>) {\n if (!isValidEvent(event, ExternalMethods.profileUpdateResponse)) return;\n if (event.data.payload?.profileUpdateRequest !== profileUpdateRequest) return;\n window.removeEventListener('message', handleMessage);\n if (event.data.payload.profileUpdateResponse === 'cancel') {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(event.data.payload.profileUpdateResponse);\n return;\n }\n if (typeof event.data.payload.profileUpdateResponse !== 'string') {\n resolve(event.data.payload.profileUpdateResponse);\n }\n }\n window.addEventListener('message', handleMessage);\n });\n },\n };\n}\n\nexport function getLegacyRequests(platform: Platform) {\n switch (platform) {\n case 'extension':\n return legacyRequests();\n case 'mobile':\n default:\n return placeholderLegacyRequests();\n }\n}\n","import type { StacksProvider } from '@stacks/connect';\n\nimport {\n type LeatherRpcMethodMap,\n type RpcMethodNames,\n type RpcParameter,\n RpcRequests,\n type RpcResponses,\n} from '@leather.io/rpc';\n\nimport { addLeatherToProviders } from './add-leather-to-providers';\nimport './crypto-random-uuid-polyfill';\nimport { getLegacyRequests } from './legacy-requests';\nimport { Platform } from './types';\n\ninterface initInpageProviderArgs {\n onDispatch(rpcRequest: RpcRequests): void;\n env: { branch: string; commitSha: string; version: string; platform: Platform };\n}\n\nexport function initInpageProvider({ onDispatch, env }: initInpageProviderArgs) {\n addLeatherToProviders();\n\n interface LeatherProviderOverrides extends StacksProvider {\n isLeather: true;\n }\n\n const provider: LeatherProviderOverrides = {\n isLeather: true,\n\n ...getLegacyRequests(env.platform),\n\n getProductInfo() {\n return {\n version: env.version,\n name: 'Leather',\n meta: {\n tag: env.branch,\n commit: env.commitSha,\n },\n };\n },\n\n request(\n method: RpcMethodNames,\n params?: RpcParameter\n ): Promise<LeatherRpcMethodMap[RpcMethodNames]['response']> {\n const id: string = crypto.randomUUID();\n const rpcRequest: RpcRequests = {\n jsonrpc: '2.0',\n id,\n method,\n params: (params ?? {}) as any,\n };\n\n onDispatch(rpcRequest);\n\n return new Promise((resolve, reject) => {\n function handleMessage(event: MessageEvent<RpcResponses>) {\n const response =\n typeof event.data === 'object' ? event.data : JSON.parse(event.data as any);\n if (response.id !== id) return;\n window.removeEventListener('message', handleMessage);\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n if ('error' in response) return reject(response);\n return resolve(response);\n }\n window.addEventListener('message', handleMessage);\n });\n },\n };\n\n function consoleDeprecationNotice(text: string) {\n // eslint-disable-next-line no-console\n console.warn(`Deprecation warning: ${text}`);\n }\n\n function warnAboutDeprecatedProvider(legacyProvider: object) {\n return Object.fromEntries(\n Object.entries(legacyProvider).map(([key, value]) => {\n if (typeof value === 'function') {\n return [\n key,\n (...args: any[]) => {\n switch (key) {\n case 'authenticationRequest':\n consoleDeprecationNotice(\n `Use LeatherProvider.request('getAddresses') instead, see docs https://leather.gitbook.io/developers/bitcoin/connect-users/get-addresses`\n );\n break;\n case 'psbtRequest':\n consoleDeprecationNotice(\n `Use LeatherProvider.request('signPsbt') instead, see docs https://leather.gitbook.io/developers/bitcoin/sign-transactions/partially-signed-bitcoin-transactions-psbts`\n );\n break;\n case 'structuredDataSignatureRequest':\n case 'signatureRequest':\n consoleDeprecationNotice(\n `Use LeatherProvider.request('stx_signMessage') instead`\n );\n break;\n default:\n consoleDeprecationNotice(\n 'The provider object is deprecated. Use `LeatherProvider` instead'\n );\n }\n\n return value(...args);\n },\n ];\n }\n return [key, value];\n })\n );\n }\n\n try {\n // Makes properties immutable to contend with other wallets that use agressive\n // \"prioritisation\" default settings. As other wallet's use this approach,\n // Leather has to use it too, so that the browsers' own internal logic being\n // used to determine content script exeuction order. A more fair way to\n // contend over shared provider space. `StacksProvider` should be considered\n // deprecated and each wallet use their own provider namespace.\n Object.defineProperty(window, 'StacksProvider', {\n get: () => warnAboutDeprecatedProvider(provider),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n set: () => {},\n });\n } catch {\n // eslint-disable-next-line no-console\n console.log('Unable to set StacksProvider');\n }\n\n try {\n Object.defineProperty(window, 'HiroWalletProvider', {\n get: () => warnAboutDeprecatedProvider(provider),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n set: () => {},\n });\n } catch {\n // eslint-disable-next-line no-console\n console.log('Unable to set HiroWalletProvider');\n }\n\n try {\n Object.defineProperty(window, 'LeatherProvider', {\n get: () => provider,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n set: () => {},\n });\n } catch {\n // eslint-disable-next-line no-console\n console.warn('Unable to set LeatherProvider');\n }\n\n // Legacy product provider objects\n if (typeof (window as any).btc === 'undefined') {\n (window as any).btc = warnAboutDeprecatedProvider(provider);\n }\n}\n","import { initInpageProvider } from '.';\n\n// WebView on Android doesn't support window.addEventListener('message') directly\n(window as any).onMessageFromRN = function (str: string) {\n window.postMessage(str, window.location.origin);\n};\n\ninitInpageProvider({\n onDispatch(rpcRequest) {\n (window as any).ReactNativeWebView.postMessage(JSON.stringify(rpcRequest));\n },\n env: {\n platform: 'mobile',\n branch: 'replace_branch',\n commitSha: 'replace_commit_sha',\n version: 'replace_version',\n },\n});\n// note: this is required, or you'll sometimes get silent failures\n// Ref: https://github.com/react-native-webview/react-native-webview/blob/master/docs/Guide.md#the-injectedjavascript-prop\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ntrue;\n"],"mappings":"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","names":["event"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@leather.io/provider",
|
|
3
3
|
"author": "leather-wallet",
|
|
4
4
|
"description": "LeatherProvider package for Leather",
|
|
5
|
-
"version": "1.1
|
|
5
|
+
"version": "1.2.1",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"exports": {
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"@stacks/profile": "6.15.0",
|
|
18
18
|
"@stacks/transactions": "7.0.5",
|
|
19
19
|
"zod": "3.24.1",
|
|
20
|
-
"@leather.io/rpc": "2.9.2",
|
|
21
20
|
"@leather.io/models": "0.30.0",
|
|
22
|
-
"@leather.io/
|
|
21
|
+
"@leather.io/rpc": "2.9.3",
|
|
22
|
+
"@leather.io/utils": "0.31.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"prettier": "3.5.1",
|