@ksangkuk10/wallet-controller 1.7.14

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 (124) hide show
  1. package/README.md +7 -0
  2. package/_commonjs/controller.js +704 -0
  3. package/_commonjs/env.js +9 -0
  4. package/_commonjs/exception/isError.js +15 -0
  5. package/_commonjs/exception/mapExtensionTxError.js +46 -0
  6. package/_commonjs/exception/mapWalletConnectError.js +69 -0
  7. package/_commonjs/getChainOptions.js +57 -0
  8. package/_commonjs/index.js +22 -0
  9. package/_commonjs/modules/connect-modal/index.js +80 -0
  10. package/_commonjs/modules/connect-modal/style.js +161 -0
  11. package/_commonjs/modules/extension-router/ExtensionRouter.js +241 -0
  12. package/_commonjs/modules/extension-router/index.js +19 -0
  13. package/_commonjs/modules/extension-router/modal.js +80 -0
  14. package/_commonjs/modules/extension-router/modal.style.js +161 -0
  15. package/_commonjs/modules/extension-router/multiChannel.js +18 -0
  16. package/_commonjs/modules/extension-router/session.js +37 -0
  17. package/_commonjs/modules/extension-router/types.js +16 -0
  18. package/_commonjs/modules/legacy-extension/LegacyExtensionConnector.js +143 -0
  19. package/_commonjs/modules/legacy-extension/createFixedExtension.js +236 -0
  20. package/_commonjs/modules/legacy-extension/index.js +19 -0
  21. package/_commonjs/modules/readonly-wallet/connect.js +24 -0
  22. package/_commonjs/modules/readonly-wallet/index.js +20 -0
  23. package/_commonjs/modules/readonly-wallet/modal.js +123 -0
  24. package/_commonjs/modules/readonly-wallet/modal.style.js +204 -0
  25. package/_commonjs/modules/readonly-wallet/storage.js +40 -0
  26. package/_commonjs/modules/readonly-wallet/types.js +3 -0
  27. package/_commonjs/modules/walletconnect/connect.js +421 -0
  28. package/_commonjs/modules/walletconnect/errors.js +51 -0
  29. package/_commonjs/modules/walletconnect/impl/socket-transport/index.js +204 -0
  30. package/_commonjs/modules/walletconnect/impl/socket-transport/network.js +30 -0
  31. package/_commonjs/modules/walletconnect/index.js +22 -0
  32. package/_commonjs/modules/walletconnect/modal.js +147 -0
  33. package/_commonjs/modules/walletconnect/modal.style.js +138 -0
  34. package/_commonjs/modules/walletconnect/types.js +13 -0
  35. package/_commonjs/operators/getExtensions.js +55 -0
  36. package/_commonjs/operators/toConnectedWallet.js +24 -0
  37. package/_commonjs/operators/toLcdClient.js +15 -0
  38. package/_commonjs/utils/browser-check.js +47 -0
  39. package/_commonjs/utils/checkExtensionReady.js +28 -0
  40. package/_commonjs/utils/sortConnections.js +13 -0
  41. package/_commonjs/verifyBytes.js +19 -0
  42. package/controller.d.ts +220 -0
  43. package/controller.js +697 -0
  44. package/env.d.ts +2 -0
  45. package/env.js +5 -0
  46. package/exception/isError.d.ts +3 -0
  47. package/exception/isError.js +11 -0
  48. package/exception/mapExtensionTxError.d.ts +5 -0
  49. package/exception/mapExtensionTxError.js +41 -0
  50. package/exception/mapWalletConnectError.d.ts +6 -0
  51. package/exception/mapWalletConnectError.js +63 -0
  52. package/getChainOptions.d.ts +3 -0
  53. package/getChainOptions.js +53 -0
  54. package/index.d.ts +6 -0
  55. package/index.js +6 -0
  56. package/modules/connect-modal/index.d.ts +2 -0
  57. package/modules/connect-modal/index.js +76 -0
  58. package/modules/connect-modal/style.d.ts +1 -0
  59. package/modules/connect-modal/style.js +158 -0
  60. package/modules/extension-router/ExtensionRouter.d.ts +43 -0
  61. package/modules/extension-router/ExtensionRouter.js +237 -0
  62. package/modules/extension-router/index.d.ts +2 -0
  63. package/modules/extension-router/index.js +3 -0
  64. package/modules/extension-router/modal.d.ts +2 -0
  65. package/modules/extension-router/modal.js +76 -0
  66. package/modules/extension-router/modal.style.d.ts +1 -0
  67. package/modules/extension-router/modal.style.js +158 -0
  68. package/modules/extension-router/multiChannel.d.ts +13 -0
  69. package/modules/extension-router/multiChannel.js +14 -0
  70. package/modules/extension-router/session.d.ts +8 -0
  71. package/modules/extension-router/session.js +31 -0
  72. package/modules/extension-router/types.d.ts +35 -0
  73. package/modules/extension-router/types.js +13 -0
  74. package/modules/legacy-extension/LegacyExtensionConnector.d.ts +30 -0
  75. package/modules/legacy-extension/LegacyExtensionConnector.js +139 -0
  76. package/modules/legacy-extension/createFixedExtension.d.ts +46 -0
  77. package/modules/legacy-extension/createFixedExtension.js +232 -0
  78. package/modules/legacy-extension/index.d.ts +2 -0
  79. package/modules/legacy-extension/index.js +3 -0
  80. package/modules/readonly-wallet/connect.d.ts +8 -0
  81. package/modules/readonly-wallet/connect.js +19 -0
  82. package/modules/readonly-wallet/index.d.ts +3 -0
  83. package/modules/readonly-wallet/index.js +4 -0
  84. package/modules/readonly-wallet/modal.d.ts +7 -0
  85. package/modules/readonly-wallet/modal.js +119 -0
  86. package/modules/readonly-wallet/modal.style.d.ts +1 -0
  87. package/modules/readonly-wallet/modal.style.js +201 -0
  88. package/modules/readonly-wallet/storage.d.ts +4 -0
  89. package/modules/readonly-wallet/storage.js +34 -0
  90. package/modules/readonly-wallet/types.d.ts +5 -0
  91. package/modules/readonly-wallet/types.js +2 -0
  92. package/modules/walletconnect/connect.d.ts +42 -0
  93. package/modules/walletconnect/connect.js +390 -0
  94. package/modules/walletconnect/errors.d.ts +22 -0
  95. package/modules/walletconnect/errors.js +41 -0
  96. package/modules/walletconnect/impl/socket-transport/index.d.ts +39 -0
  97. package/modules/walletconnect/impl/socket-transport/index.js +199 -0
  98. package/modules/walletconnect/impl/socket-transport/network.d.ts +8 -0
  99. package/modules/walletconnect/impl/socket-transport/network.js +28 -0
  100. package/modules/walletconnect/index.d.ts +5 -0
  101. package/modules/walletconnect/index.js +6 -0
  102. package/modules/walletconnect/modal.d.ts +12 -0
  103. package/modules/walletconnect/modal.js +143 -0
  104. package/modules/walletconnect/modal.style.d.ts +1 -0
  105. package/modules/walletconnect/modal.style.js +135 -0
  106. package/modules/walletconnect/types.d.ts +24 -0
  107. package/modules/walletconnect/types.js +10 -0
  108. package/operators/getExtensions.d.ts +9 -0
  109. package/operators/getExtensions.js +51 -0
  110. package/operators/toConnectedWallet.d.ts +4 -0
  111. package/operators/toConnectedWallet.js +20 -0
  112. package/operators/toLcdClient.d.ts +4 -0
  113. package/operators/toLcdClient.js +11 -0
  114. package/package.json +550 -0
  115. package/utils/browser-check.d.ts +3 -0
  116. package/utils/browser-check.js +38 -0
  117. package/utils/checkExtensionReady.d.ts +6 -0
  118. package/utils/checkExtensionReady.js +24 -0
  119. package/utils/sortConnections.d.ts +2 -0
  120. package/utils/sortConnections.js +9 -0
  121. package/verifyBytes.d.ts +4 -0
  122. package/verifyBytes.js +15 -0
  123. package/~/.npm/_cacache/content-v2/sha512/ad/b5/8c87dfae7c208906a88f1997b323933e7efb4e481bcfdc559cb13199d077e1b40abcb161561a293ca59cd98aae224cd0877555e6e7a2e11021bc55ebedf4 +0 -0
  124. package/~/.npm/_cacache/index-v5/6a/39/c03f62d7353a7cc1411e180ec37c393f9fedcfd081fa567f67bf32e6fb68 +2 -0
@@ -0,0 +1,35 @@
1
+ import { XplaWebExtensionFeatures, WebExtensionNetworkInfo, WebExtensionWalletInfo } from '@ksangkuk10/web-extension-interface';
2
+ import { ExtensionInfo } from './multiChannel';
3
+ export declare enum ExtensionRouterConnectorType {
4
+ LEGACY = "LEGACY",
5
+ WEB_EXTENSION = "WEB_EXTENSION"
6
+ }
7
+ export declare enum ExtensionRouterStatus {
8
+ INITIALIZING = "INITIALIZING",
9
+ NO_AVAILABLE = "NO_AVAILABLE",
10
+ WALLET_NOT_CONNECTED = "WALLET_NOT_CONNECTED",
11
+ WALLET_CONNECTED = "WALLET_CONNECTED"
12
+ }
13
+ export interface ExtensionRouterInitializing {
14
+ type: ExtensionRouterStatus.INITIALIZING;
15
+ network: WebExtensionNetworkInfo;
16
+ }
17
+ export interface ExtensionRouterNoAvailable {
18
+ type: ExtensionRouterStatus.NO_AVAILABLE;
19
+ network: WebExtensionNetworkInfo;
20
+ isConnectorExists: boolean;
21
+ isApproved?: boolean;
22
+ }
23
+ export interface ExtensionRouterWalletNotConnected {
24
+ type: ExtensionRouterStatus.WALLET_NOT_CONNECTED;
25
+ network: WebExtensionNetworkInfo;
26
+ }
27
+ export interface ExtensionRouterWalletConnected {
28
+ type: ExtensionRouterStatus.WALLET_CONNECTED;
29
+ network: WebExtensionNetworkInfo;
30
+ wallet: WebExtensionWalletInfo;
31
+ connectorType: ExtensionRouterConnectorType;
32
+ supportFeatures: Set<XplaWebExtensionFeatures>;
33
+ extensionInfo: ExtensionInfo;
34
+ }
35
+ export type ExtensionRouterStates = ExtensionRouterInitializing | ExtensionRouterNoAvailable | ExtensionRouterWalletNotConnected | ExtensionRouterWalletConnected;
@@ -0,0 +1,13 @@
1
+ export var ExtensionRouterConnectorType;
2
+ (function (ExtensionRouterConnectorType) {
3
+ ExtensionRouterConnectorType["LEGACY"] = "LEGACY";
4
+ ExtensionRouterConnectorType["WEB_EXTENSION"] = "WEB_EXTENSION";
5
+ })(ExtensionRouterConnectorType || (ExtensionRouterConnectorType = {}));
6
+ export var ExtensionRouterStatus;
7
+ (function (ExtensionRouterStatus) {
8
+ ExtensionRouterStatus["INITIALIZING"] = "INITIALIZING";
9
+ ExtensionRouterStatus["NO_AVAILABLE"] = "NO_AVAILABLE";
10
+ ExtensionRouterStatus["WALLET_NOT_CONNECTED"] = "WALLET_NOT_CONNECTED";
11
+ ExtensionRouterStatus["WALLET_CONNECTED"] = "WALLET_CONNECTED";
12
+ })(ExtensionRouterStatus || (ExtensionRouterStatus = {}));
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9leHRlbnNpb24tcm91dGVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBTixJQUFZLDRCQUdYO0FBSEQsV0FBWSw0QkFBNEI7SUFDdEMsaURBQWlCLENBQUE7SUFDakIsK0RBQStCLENBQUE7QUFDakMsQ0FBQyxFQUhXLDRCQUE0QixLQUE1Qiw0QkFBNEIsUUFHdkM7QUFFRCxNQUFNLENBQU4sSUFBWSxxQkFLWDtBQUxELFdBQVkscUJBQXFCO0lBQy9CLHNEQUE2QixDQUFBO0lBQzdCLHNEQUE2QixDQUFBO0lBQzdCLHNFQUE2QyxDQUFBO0lBQzdDLDhEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFMVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBS2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgWHBsYVdlYkV4dGVuc2lvbkZlYXR1cmVzLFxuICBXZWJFeHRlbnNpb25OZXR3b3JrSW5mbyxcbiAgV2ViRXh0ZW5zaW9uV2FsbGV0SW5mbyxcbn0gZnJvbSAnQGtzYW5na3VrMTAvd2ViLWV4dGVuc2lvbi1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uSW5mbyB9IGZyb20gJy4vbXVsdGlDaGFubmVsJztcblxuZXhwb3J0IGVudW0gRXh0ZW5zaW9uUm91dGVyQ29ubmVjdG9yVHlwZSB7XG4gIExFR0FDWSA9ICdMRUdBQ1knLFxuICBXRUJfRVhURU5TSU9OID0gJ1dFQl9FWFRFTlNJT04nLFxufVxuXG5leHBvcnQgZW51bSBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMge1xuICBJTklUSUFMSVpJTkcgPSAnSU5JVElBTElaSU5HJyxcbiAgTk9fQVZBSUxBQkxFID0gJ05PX0FWQUlMQUJMRScsXG4gIFdBTExFVF9OT1RfQ09OTkVDVEVEID0gJ1dBTExFVF9OT1RfQ09OTkVDVEVEJyxcbiAgV0FMTEVUX0NPTk5FQ1RFRCA9ICdXQUxMRVRfQ09OTkVDVEVEJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25Sb3V0ZXJJbml0aWFsaXppbmcge1xuICB0eXBlOiBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMuSU5JVElBTElaSU5HO1xuICBuZXR3b3JrOiBXZWJFeHRlbnNpb25OZXR3b3JrSW5mbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25Sb3V0ZXJOb0F2YWlsYWJsZSB7XG4gIHR5cGU6IEV4dGVuc2lvblJvdXRlclN0YXR1cy5OT19BVkFJTEFCTEU7XG4gIG5ldHdvcms6IFdlYkV4dGVuc2lvbk5ldHdvcmtJbmZvO1xuICBpc0Nvbm5lY3RvckV4aXN0czogYm9vbGVhbjtcbiAgaXNBcHByb3ZlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uUm91dGVyV2FsbGV0Tm90Q29ubmVjdGVkIHtcbiAgdHlwZTogRXh0ZW5zaW9uUm91dGVyU3RhdHVzLldBTExFVF9OT1RfQ09OTkVDVEVEO1xuICBuZXR3b3JrOiBXZWJFeHRlbnNpb25OZXR3b3JrSW5mbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25Sb3V0ZXJXYWxsZXRDb25uZWN0ZWQge1xuICB0eXBlOiBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMuV0FMTEVUX0NPTk5FQ1RFRDtcbiAgbmV0d29yazogV2ViRXh0ZW5zaW9uTmV0d29ya0luZm87XG4gIHdhbGxldDogV2ViRXh0ZW5zaW9uV2FsbGV0SW5mbztcbiAgY29ubmVjdG9yVHlwZTogRXh0ZW5zaW9uUm91dGVyQ29ubmVjdG9yVHlwZTtcbiAgc3VwcG9ydEZlYXR1cmVzOiBTZXQ8WHBsYVdlYkV4dGVuc2lvbkZlYXR1cmVzPjtcbiAgZXh0ZW5zaW9uSW5mbzogRXh0ZW5zaW9uSW5mbztcbn1cblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uUm91dGVyU3RhdGVzID1cbiAgfCBFeHRlbnNpb25Sb3V0ZXJJbml0aWFsaXppbmdcbiAgfCBFeHRlbnNpb25Sb3V0ZXJOb0F2YWlsYWJsZVxuICB8IEV4dGVuc2lvblJvdXRlcldhbGxldE5vdENvbm5lY3RlZFxuICB8IEV4dGVuc2lvblJvdXRlcldhbGxldENvbm5lY3RlZDtcbiJdfQ==
@@ -0,0 +1,30 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { XplaWebExtensionConnector, XplaWebExtensionFeatures, WebExtensionPostPayload, WebExtensionSignBytesPayload, WebExtensionSignPayload, WebExtensionStates, WebExtensionTxResult } from '@ksangkuk10/web-extension-interface';
4
+ import { CreateTxOptions, SignMode } from '@xpla/xpla.js';
5
+ import { Observer, Subscribable } from 'rxjs';
6
+ export declare class LegacyExtensionConnector implements XplaWebExtensionConnector {
7
+ private identifier;
8
+ private _states;
9
+ private _extension;
10
+ private hostWindow;
11
+ private statesSubscription;
12
+ supportFeatures(): XplaWebExtensionFeatures[];
13
+ constructor(identifier: string);
14
+ open: (hostWindow: Window, statesObserver: Observer<WebExtensionStates>) => void;
15
+ close: () => void;
16
+ requestApproval: () => void;
17
+ refetchStates: () => void;
18
+ post: (xplaAddress: string, tx: CreateTxOptions) => Subscribable<WebExtensionTxResult<WebExtensionPostPayload>>;
19
+ sign: (xplaAddress: string, tx: CreateTxOptions & {
20
+ sequence?: number;
21
+ accountNumber?: number;
22
+ signMode?: SignMode;
23
+ }) => Subscribable<WebExtensionTxResult<WebExtensionSignPayload>>;
24
+ signBytes: (xplaAddress: string, bytes: Buffer) => Subscribable<WebExtensionTxResult<WebExtensionSignBytesPayload>>;
25
+ hasCW20Tokens: () => never;
26
+ addCW20Tokens: () => never;
27
+ hasNetwork: () => never;
28
+ addNetwork: () => never;
29
+ recheckStates: () => Promise<void>;
30
+ }
@@ -0,0 +1,139 @@
1
+ import { WebExtensionStatus, WebExtensionTxStatus, } from '@ksangkuk10/web-extension-interface';
2
+ import { AccAddress } from '@xpla/xpla.js';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { filter } from 'rxjs/operators';
5
+ import { createFixedExtension } from './createFixedExtension';
6
+ const supportFeatures = [
7
+ 'post',
8
+ 'sign',
9
+ 'sign-bytes',
10
+ ];
11
+ export class LegacyExtensionConnector {
12
+ supportFeatures() {
13
+ return supportFeatures;
14
+ }
15
+ constructor(identifier) {
16
+ this.identifier = identifier;
17
+ this.hostWindow = null;
18
+ this.statesSubscription = null;
19
+ this.open = (hostWindow, statesObserver) => {
20
+ this.hostWindow = hostWindow;
21
+ this.statesSubscription = this._states
22
+ .pipe(filter((states) => !!states))
23
+ .subscribe(statesObserver);
24
+ this.refetchStates();
25
+ };
26
+ this.close = () => {
27
+ this._extension.disconnect();
28
+ };
29
+ this.requestApproval = () => {
30
+ this.recheckStates();
31
+ };
32
+ this.refetchStates = () => {
33
+ this.recheckStates();
34
+ };
35
+ this.post = (xplaAddress, tx) => {
36
+ const subject = new BehaviorSubject({
37
+ status: WebExtensionTxStatus.PROGRESS,
38
+ });
39
+ this._extension
40
+ .post(tx)
41
+ .then(({ payload }) => {
42
+ subject.next({
43
+ status: WebExtensionTxStatus.SUCCEED,
44
+ payload: payload.result,
45
+ });
46
+ subject.complete();
47
+ })
48
+ .catch((error) => subject.error(error));
49
+ return subject.asObservable();
50
+ };
51
+ this.sign = (xplaAddress, tx) => {
52
+ const subject = new BehaviorSubject({
53
+ status: WebExtensionTxStatus.PROGRESS,
54
+ });
55
+ this._extension
56
+ .sign(tx)
57
+ .then(({ payload }) => {
58
+ subject.next({
59
+ status: WebExtensionTxStatus.SUCCEED,
60
+ payload: payload.result,
61
+ });
62
+ subject.complete();
63
+ })
64
+ .catch((error) => subject.error(error));
65
+ return subject.asObservable();
66
+ };
67
+ this.signBytes = (xplaAddress, bytes) => {
68
+ const subject = new BehaviorSubject({
69
+ status: WebExtensionTxStatus.PROGRESS,
70
+ });
71
+ this._extension
72
+ .signBytes(bytes)
73
+ .then(({ payload }) => {
74
+ subject.next({
75
+ status: WebExtensionTxStatus.SUCCEED,
76
+ payload: {
77
+ recid: payload.result.recid,
78
+ signature: payload.result.signature,
79
+ public_key: {
80
+ '@type': '/cosmos.crypto.secp256k1.PubKey',
81
+ 'key': payload.result.public_key,
82
+ },
83
+ },
84
+ });
85
+ })
86
+ .catch((error) => subject.error(error));
87
+ return subject.asObservable();
88
+ };
89
+ this.hasCW20Tokens = () => {
90
+ throw new Error('[LegacyExtensionConnector] does not support hasCW20Tokens()');
91
+ };
92
+ this.addCW20Tokens = () => {
93
+ throw new Error('[LegacyExtensionConnector] does not support addCW20Tokens()');
94
+ };
95
+ this.hasNetwork = () => {
96
+ throw new Error('[LegacyExtensionConnector] does not support hasNetwork()');
97
+ };
98
+ this.addNetwork = () => {
99
+ throw new Error('[LegacyExtensionConnector] does not support addNetwork()');
100
+ };
101
+ // ---------------------------------------------
102
+ // internal
103
+ // ---------------------------------------------
104
+ this.recheckStates = async () => {
105
+ if (this._extension.inTransactionProgress()) {
106
+ return;
107
+ }
108
+ const infoResult = await this._extension.info();
109
+ const connectResult = await this._extension.connect();
110
+ if (connectResult.address && AccAddress.validate(connectResult.address)) {
111
+ this._states.next({
112
+ type: WebExtensionStatus.READY,
113
+ network: infoResult,
114
+ focusedWalletAddress: connectResult.address,
115
+ wallets: [
116
+ {
117
+ name: '',
118
+ xplaAddress: connectResult.address,
119
+ design: 'xpla',
120
+ },
121
+ ],
122
+ });
123
+ }
124
+ else {
125
+ this._states.next({
126
+ type: WebExtensionStatus.READY,
127
+ network: infoResult,
128
+ focusedWalletAddress: undefined,
129
+ wallets: [],
130
+ });
131
+ }
132
+ };
133
+ this._states = new BehaviorSubject({
134
+ type: WebExtensionStatus.INITIALIZING,
135
+ });
136
+ this._extension = createFixedExtension(identifier);
137
+ }
138
+ }
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVnYWN5RXh0ZW5zaW9uQ29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0Brc2FuZ2t1azEwL3dhbGxldC1jb250cm9sbGVyL21vZHVsZXMvbGVnYWN5LWV4dGVuc2lvbi9MZWdhY3lFeHRlbnNpb25Db25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQU9MLGtCQUFrQixFQUVsQixvQkFBb0IsR0FDckIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUF3QyxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFrQixNQUFNLHdCQUF3QixDQUFDO0FBRTlFLE1BQU0sZUFBZSxHQUErQjtJQUNsRCxNQUFNO0lBQ04sTUFBTTtJQUNOLFlBQVk7Q0FDYixDQUFDO0FBRUYsTUFBTSxPQUFPLHdCQUF3QjtJQU1uQyxlQUFlO1FBQ2IsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQW9CLFVBQWtCO1FBQWxCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFQOUIsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFDakMsdUJBQWtCLEdBQXdCLElBQUksQ0FBQztRQWN2RCxTQUFJLEdBQUcsQ0FBQyxVQUFrQixFQUFFLGNBQTRDLEVBQUUsRUFBRTtZQUMxRSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU87aUJBQ25DLElBQUksQ0FDSCxNQUFNLENBQ0osQ0FBQyxNQUFpQyxFQUFnQyxFQUFFLENBQ2xFLENBQUMsQ0FBQyxNQUFNLENBQ1gsQ0FDRjtpQkFDQSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7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QU8sRUFBRSxVQUFVO29CQUNuQixvQkFBb0IsRUFBRSxhQUFhLENBQUMsT0FBTztvQkFDM0MsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxFQUFFOzRCQUNSLFdBQVcsRUFBRSxhQUFhLENBQUMsT0FBTzs0QkFDbEMsTUFBTSxFQUFFLE1BQU07eUJBQ2Y7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLO29CQUM5QixPQUFPLEVBQUUsVUFBVTtvQkFDbkIsb0JBQW9CLEVBQUUsU0FBUztvQkFDL0IsT0FBTyxFQUFFLEVBQUU7aUJBQ1osQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUM7UUF2S0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBcUI7WUFDckQsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFlBQVk7U0FDdEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBbUtGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmV0d29ya0luZm8gfSBmcm9tICdAa3NhbmdrdWsxMC93YWxsZXQtdHlwZXMnO1xuaW1wb3J0IHtcbiAgWHBsYVdlYkV4dGVuc2lvbkNvbm5lY3RvcixcbiAgWHBsYVdlYkV4dGVuc2lvbkZlYXR1cmVzLFxuICBXZWJFeHRlbnNpb25Qb3N0UGF5bG9hZCxcbiAgV2ViRXh0ZW5zaW9uU2lnbkJ5dGVzUGF5bG9hZCxcbiAgV2ViRXh0ZW5zaW9uU2lnblBheWxvYWQsXG4gIFdlYkV4dGVuc2lvblN0YXRlcyxcbiAgV2ViRXh0ZW5zaW9uU3RhdHVzLFxuICBXZWJFeHRlbnNpb25UeFJlc3VsdCxcbiAgV2ViRXh0ZW5zaW9uVHhTdGF0dXMsXG59IGZyb20gJ0Brc2FuZ2t1azEwL3dlYi1leHRlbnNpb24taW50ZXJmYWNlJztcbmltcG9ydCB7IEFjY0FkZHJlc3MsIENyZWF0ZVR4T3B0aW9ucywgU2lnbk1vZGUgfSBmcm9tICdAeHBsYS94cGxhLmpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2ZXIsIFN1YnNjcmliYWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjcmVhdGVGaXhlZEV4dGVuc2lvbiwgRml4ZWRFeHRlbnNpb24gfSBmcm9tICcuL2NyZWF0ZUZpeGVkRXh0ZW5zaW9uJztcblxuY29uc3Qgc3VwcG9ydEZlYXR1cmVzOiBYcGxhV2ViRXh0ZW5zaW9uRmVhdHVyZXNbXSA9IFtcbiAgJ3Bvc3QnLFxuICAnc2lnbicsXG4gICdzaWduLWJ5dGVzJyxcbl07XG5cbmV4cG9ydCBjbGFzcyBMZWdhY3lFeHRlbnNpb25Db25uZWN0b3IgaW1wbGVtZW50cyBYcGxhV2ViRXh0ZW5zaW9uQ29ubmVjdG9yIHtcbiAgcHJpdmF0ZSBfc3RhdGVzOiBCZWhhdmlvclN1YmplY3Q8V2ViRXh0ZW5zaW9uU3RhdGVzPjtcbiAgcHJpdmF0ZSBfZXh0ZW5zaW9uOiBGaXhlZEV4dGVuc2lvbjtcbiAgcHJpdmF0ZSBob3N0V2luZG93OiBXaW5kb3cgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0ZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHN1cHBvcnRGZWF0dXJlcygpIHtcbiAgICByZXR1cm4gc3VwcG9ydEZlYXR1cmVzO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zdGF0ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdlYkV4dGVuc2lvblN0YXRlcz4oe1xuICAgICAgdHlwZTogV2ViRXh0ZW5zaW9uU3RhdHVzLklOSVRJQUxJWklORyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2V4dGVuc2lvbiA9IGNyZWF0ZUZpeGVkRXh0ZW5zaW9uKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgb3BlbiA9IChob3N0V2luZG93OiBXaW5kb3csIHN0YXRlc09ic2VydmVyOiBPYnNlcnZlcjxXZWJFeHRlbnNpb25TdGF0ZXM+KSA9PiB7XG4gICAgdGhpcy5ob3N0V2luZG93ID0gaG9zdFdpbmRvdztcbiAgICB0aGlzLnN0YXRlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX3N0YXRlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoc3RhdGVzOiBXZWJFeHRlbnNpb25TdGF0ZXMgfCBudWxsKTogc3RhdGVzIGlzIFdlYkV4dGVuc2lvblN0YXRlcyA9PlxuICAgICAgICAgICAgISFzdGF0ZXMsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHN0YXRlc09ic2VydmVyKTtcblxuICAgIHRoaXMucmVmZXRjaFN0YXRlcygpO1xuICB9O1xuXG4gIGNsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMuX2V4dGVuc2lvbi5kaXNjb25uZWN0KCk7XG4gIH07XG5cbiAgcmVxdWVzdEFwcHJvdmFsID0gKCkgPT4ge1xuICAgIHRoaXMucmVjaGVja1N0YXRlcygpO1xuICB9O1xuXG4gIHJlZmV0Y2hTdGF0ZXMgPSAoKSA9PiB7XG4gICAgdGhpcy5yZWNoZWNrU3RhdGVzKCk7XG4gIH07XG5cbiAgcG9zdCA9IChcbiAgICB4cGxhQWRkcmVzczogc3RyaW5nLFxuICAgIHR4OiBDcmVhdGVUeE9wdGlvbnMsXG4gICk6IFN1YnNjcmliYWJsZTxXZWJFeHRlbnNpb25UeFJlc3VsdDxXZWJFeHRlbnNpb25Qb3N0UGF5bG9hZD4+ID0+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICAgIFdlYkV4dGVuc2lvblR4UmVzdWx0PFdlYkV4dGVuc2lvblBvc3RQYXlsb2FkPlxuICAgID4oe1xuICAgICAgc3RhdHVzOiBXZWJFeHRlbnNpb25UeFN0YXR1cy5QUk9HUkVTUyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2V4dGVuc2lvblxuICAgICAgLnBvc3QodHgpXG4gICAgICAudGhlbigoeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgc3ViamVjdC5uZXh0KHtcbiAgICAgICAgICBzdGF0dXM6IFdlYkV4dGVuc2lvblR4U3RhdHVzLlNVQ0NFRUQsXG4gICAgICAgICAgcGF5bG9hZDogcGF5bG9hZC5yZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gc3ViamVjdC5lcnJvcihlcnJvcikpO1xuXG4gICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH07XG5cbiAgc2lnbiA9IChcbiAgICB4cGxhQWRkcmVzczogc3RyaW5nLFxuICAgIHR4OiBDcmVhdGVUeE9wdGlvbnMgJiB7XG4gICAgICBzZXF1ZW5jZT86IG51bWJlcjtcbiAgICAgIGFjY291bnROdW1iZXI/OiBudW1iZXI7XG4gICAgICBzaWduTW9kZT86IFNpZ25Nb2RlO1xuICAgIH0sXG4gICk6IFN1YnNjcmliYWJsZTxXZWJFeHRlbnNpb25UeFJlc3VsdDxXZWJFeHRlbnNpb25TaWduUGF5bG9hZD4+ID0+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICAgIFdlYkV4dGVuc2lvblR4UmVzdWx0PFdlYkV4dGVuc2lvblNpZ25QYXlsb2FkPlxuICAgID4oe1xuICAgICAgc3RhdHVzOiBXZWJFeHRlbnNpb25UeFN0YXR1cy5QUk9HUkVTUyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2V4dGVuc2lvblxuICAgICAgLnNpZ24odHgpXG4gICAgICAudGhlbigoeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgc3ViamVjdC5uZXh0KHtcbiAgICAgICAgICBzdGF0dXM6IFdlYkV4dGVuc2lvblR4U3RhdHVzLlNVQ0NFRUQsXG4gICAgICAgICAgcGF5bG9hZDogcGF5bG9hZC5yZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gc3ViamVjdC5lcnJvcihlcnJvcikpO1xuXG4gICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH07XG5cbiAgc2lnbkJ5dGVzID0gKFxuICAgIHhwbGFBZGRyZXNzOiBzdHJpbmcsXG4gICAgYnl0ZXM6IEJ1ZmZlcixcbiAgKTogU3Vic2NyaWJhYmxlPFdlYkV4dGVuc2lvblR4UmVzdWx0PFdlYkV4dGVuc2lvblNpZ25CeXRlc1BheWxvYWQ+PiA9PiB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgICBXZWJFeHRlbnNpb25UeFJlc3VsdDxXZWJFeHRlbnNpb25TaWduQnl0ZXNQYXlsb2FkPlxuICAgID4oe1xuICAgICAgc3RhdHVzOiBXZWJFeHRlbnNpb25UeFN0YXR1cy5QUk9HUkVTUyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2V4dGVuc2lvblxuICAgICAgLnNpZ25CeXRlcyhieXRlcylcbiAgICAgIC50aGVuKCh7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgICBzdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIHN0YXR1czogV2ViRXh0ZW5zaW9uVHhTdGF0dXMuU1VDQ0VFRCxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICByZWNpZDogcGF5bG9hZC5yZXN1bHQucmVjaWQsXG4gICAgICAgICAgICBzaWduYXR1cmU6IHBheWxvYWQucmVzdWx0LnNpZ25hdHVyZSxcbiAgICAgICAgICAgIHB1YmxpY19rZXk6IHtcbiAgICAgICAgICAgICAgJ0B0eXBlJzogJy9jb3Ntb3MuY3J5cHRvLnNlY3AyNTZrMS5QdWJLZXknLFxuICAgICAgICAgICAgICAna2V5JzogcGF5bG9hZC5yZXN1bHQucHVibGljX2tleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gc3ViamVjdC5lcnJvcihlcnJvcikpO1xuXG4gICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH07XG5cbiAgaGFzQ1cyMFRva2VucyA9ICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnW0xlZ2FjeUV4dGVuc2lvbkNvbm5lY3Rvcl0gZG9lcyBub3Qgc3VwcG9ydCBoYXNDVzIwVG9rZW5zKCknLFxuICAgICk7XG4gIH07XG5cbiAgYWRkQ1cyMFRva2VucyA9ICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnW0xlZ2FjeUV4dGVuc2lvbkNvbm5lY3Rvcl0gZG9lcyBub3Qgc3VwcG9ydCBhZGRDVzIwVG9rZW5zKCknLFxuICAgICk7XG4gIH07XG5cbiAgaGFzTmV0d29yayA9ICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tMZWdhY3lFeHRlbnNpb25Db25uZWN0b3JdIGRvZXMgbm90IHN1cHBvcnQgaGFzTmV0d29yaygpJyk7XG4gIH07XG5cbiAgYWRkTmV0d29yayA9ICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tMZWdhY3lFeHRlbnNpb25Db25uZWN0b3JdIGRvZXMgbm90IHN1cHBvcnQgYWRkTmV0d29yaygpJyk7XG4gIH07XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIGludGVybmFsXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICByZWNoZWNrU3RhdGVzID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLl9leHRlbnNpb24uaW5UcmFuc2FjdGlvblByb2dyZXNzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmZvUmVzdWx0OiBOZXR3b3JrSW5mbyA9IGF3YWl0IHRoaXMuX2V4dGVuc2lvbi5pbmZvKCk7XG4gICAgY29uc3QgY29ubmVjdFJlc3VsdDogeyBhZGRyZXNzPzogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLl9leHRlbnNpb24uY29ubmVjdCgpO1xuXG4gICAgaWYgKGNvbm5lY3RSZXN1bHQuYWRkcmVzcyAmJiBBY2NBZGRyZXNzLnZhbGlkYXRlKGNvbm5lY3RSZXN1bHQuYWRkcmVzcykpIHtcbiAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHtcbiAgICAgICAgdHlwZTogV2ViRXh0ZW5zaW9uU3RhdHVzLlJFQURZLFxuICAgICAgICBuZXR3b3JrOiBpbmZvUmVzdWx0LFxuICAgICAgICBmb2N1c2VkV2FsbGV0QWRkcmVzczogY29ubmVjdFJlc3VsdC5hZGRyZXNzLFxuICAgICAgICB3YWxsZXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICB4cGxhQWRkcmVzczogY29ubmVjdFJlc3VsdC5hZGRyZXNzLFxuICAgICAgICAgICAgZGVzaWduOiAneHBsYScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdGF0ZXMubmV4dCh7XG4gICAgICAgIHR5cGU6IFdlYkV4dGVuc2lvblN0YXR1cy5SRUFEWSxcbiAgICAgICAgbmV0d29yazogaW5mb1Jlc3VsdCxcbiAgICAgICAgZm9jdXNlZFdhbGxldEFkZHJlc3M6IHVuZGVmaW5lZCxcbiAgICAgICAgd2FsbGV0czogW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,46 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { NetworkInfo } from '@ksangkuk10/wallet-types';
4
+ import { CreateTxOptions, SignMode, Tx } from '@xpla/xpla.js';
5
+ type ConnectResponse = {
6
+ address?: string;
7
+ };
8
+ type PostResponse = {
9
+ payload: {
10
+ result: {
11
+ height: number;
12
+ raw_log: string;
13
+ txhash: string;
14
+ };
15
+ };
16
+ };
17
+ type SignResponse = {
18
+ payload: {
19
+ result: Tx.Data;
20
+ };
21
+ };
22
+ type SignBytesResponse = {
23
+ payload: {
24
+ result: {
25
+ public_key: string;
26
+ recid: number;
27
+ signature: string;
28
+ };
29
+ };
30
+ };
31
+ type InfoResponse = NetworkInfo;
32
+ export interface FixedExtension {
33
+ post: (data: CreateTxOptions) => Promise<PostResponse>;
34
+ sign: (data: CreateTxOptions & {
35
+ sequence?: number;
36
+ accountNumber?: number;
37
+ signMode?: SignMode;
38
+ }) => Promise<SignResponse>;
39
+ signBytes: (bytes: Buffer) => Promise<SignBytesResponse>;
40
+ info: () => Promise<InfoResponse>;
41
+ connect: () => Promise<ConnectResponse>;
42
+ inTransactionProgress: () => boolean;
43
+ disconnect: () => void;
44
+ }
45
+ export declare function createFixedExtension(identifier: string): FixedExtension;
46
+ export {};
@@ -0,0 +1,232 @@
1
+ import { WebExtensionCreateTxFailed, WebExtensionTxFailed, WebExtensionTxUnspecifiedError, WebExtensionUserDenied, } from '@ksangkuk10/web-extension-interface';
2
+ import { Extension } from '@xpla/xpla.js';
3
+ function getErrorMessage(error) {
4
+ try {
5
+ if (typeof error.message === 'string') {
6
+ return error.message;
7
+ }
8
+ else {
9
+ return JSON.stringify(error);
10
+ }
11
+ }
12
+ catch (_a) {
13
+ return String(error);
14
+ }
15
+ }
16
+ function toExplicitError(error) {
17
+ if (error && 'code' in error) {
18
+ switch (error.code) {
19
+ // @see https://github.com/terra-project/station/blob/main/src/extension/Confirm.tsx#L182
20
+ case 1:
21
+ return new WebExtensionUserDenied();
22
+ // @see https://github.com/terra-project/station/blob/main/src/extension/Confirm.tsx#L137
23
+ case 2:
24
+ if (error.data) {
25
+ const { txhash } = error.data;
26
+ return new WebExtensionTxFailed(txhash, getErrorMessage(error), null);
27
+ }
28
+ else {
29
+ return new WebExtensionTxFailed(undefined, getErrorMessage(error), null);
30
+ }
31
+ // @see https://github.com/terra-project/station/blob/main/src/extension/Confirm.tsx#L153
32
+ case 3:
33
+ return new WebExtensionCreateTxFailed(getErrorMessage(error));
34
+ default:
35
+ return new WebExtensionTxUnspecifiedError(getErrorMessage(error));
36
+ }
37
+ }
38
+ else {
39
+ return new WebExtensionTxUnspecifiedError(getErrorMessage(error));
40
+ }
41
+ }
42
+ function isValidResult({ error, ...payload }) {
43
+ if (typeof payload.success !== 'boolean') {
44
+ return false;
45
+ }
46
+ else if (typeof payload.result === 'undefined' &&
47
+ typeof error === 'undefined') {
48
+ return false;
49
+ }
50
+ return true;
51
+ }
52
+ const pool = new Map();
53
+ export function createFixedExtension(identifier) {
54
+ if (pool.has(identifier)) {
55
+ return pool.get(identifier);
56
+ }
57
+ const extension = new Extension(identifier);
58
+ let _inTransactionProgress = false;
59
+ const postResolvers = new Map();
60
+ const signResolvers = new Map();
61
+ const signBytesResolvers = new Map();
62
+ const infoResolvers = new Set();
63
+ const connectResolvers = new Set();
64
+ extension.on('onPost', (result) => {
65
+ if (!result || !isValidResult(result)) {
66
+ return;
67
+ }
68
+ const { error, ...payload } = result;
69
+ if (!postResolvers.has(payload.id)) {
70
+ return;
71
+ }
72
+ const [resolve, reject] = postResolvers.get(payload.id);
73
+ if (!payload.success) {
74
+ reject(toExplicitError(error));
75
+ }
76
+ else if (resolve) {
77
+ resolve({ name: 'onPost', payload });
78
+ }
79
+ postResolvers.delete(payload.id);
80
+ if (postResolvers.size === 0) {
81
+ _inTransactionProgress = false;
82
+ }
83
+ });
84
+ extension.on('onSign', (result) => {
85
+ if (!result || !isValidResult(result)) {
86
+ return;
87
+ }
88
+ const { error, ...payload } = result;
89
+ if (signResolvers.has(payload.id)) {
90
+ const [resolve, reject] = signResolvers.get(payload.id);
91
+ if (!payload.success) {
92
+ reject(toExplicitError(error));
93
+ }
94
+ else if (resolve) {
95
+ resolve({ name: 'onSign', payload });
96
+ }
97
+ signResolvers.delete(payload.id);
98
+ if (signResolvers.size === 0) {
99
+ _inTransactionProgress = false;
100
+ }
101
+ }
102
+ else if (signBytesResolvers.has(payload.id)) {
103
+ const [resolve, reject] = signBytesResolvers.get(payload.id);
104
+ if (!payload.success) {
105
+ reject(toExplicitError(error));
106
+ }
107
+ else if (resolve) {
108
+ resolve({ name: 'onSignBytes', payload });
109
+ }
110
+ signBytesResolvers.delete(payload.id);
111
+ if (signBytesResolvers.size === 0) {
112
+ _inTransactionProgress = false;
113
+ }
114
+ }
115
+ });
116
+ extension.on('onInfo', (result) => {
117
+ if (!result)
118
+ return;
119
+ const { error, ...payload } = result;
120
+ for (const [resolve, reject] of infoResolvers) {
121
+ if (error) {
122
+ reject(error);
123
+ }
124
+ else {
125
+ resolve(payload);
126
+ }
127
+ }
128
+ infoResolvers.clear();
129
+ });
130
+ extension.on('onConnect', (result) => {
131
+ if (!result)
132
+ return;
133
+ const { error, ...payload } = result;
134
+ for (const [resolve, reject] of connectResolvers) {
135
+ if (error) {
136
+ reject(error);
137
+ }
138
+ else {
139
+ resolve(payload);
140
+ }
141
+ }
142
+ connectResolvers.clear();
143
+ });
144
+ function post(data) {
145
+ return new Promise((...resolver) => {
146
+ _inTransactionProgress = true;
147
+ const id = extension.post({
148
+ ...data,
149
+ purgeQueue: true,
150
+ });
151
+ postResolvers.set(id, resolver);
152
+ setTimeout(() => {
153
+ if (postResolvers.has(id)) {
154
+ postResolvers.delete(id);
155
+ if (postResolvers.size === 0) {
156
+ _inTransactionProgress = false;
157
+ }
158
+ }
159
+ }, 1000 * 120);
160
+ });
161
+ }
162
+ function sign(data) {
163
+ return new Promise((...resolver) => {
164
+ _inTransactionProgress = true;
165
+ const id = extension.sign({
166
+ ...data,
167
+ purgeQueue: true,
168
+ });
169
+ signResolvers.set(id, resolver);
170
+ setTimeout(() => {
171
+ if (signResolvers.has(id)) {
172
+ signResolvers.delete(id);
173
+ if (signResolvers.size === 0) {
174
+ _inTransactionProgress = false;
175
+ }
176
+ }
177
+ }, 1000 * 120);
178
+ });
179
+ }
180
+ function signBytes(bytes) {
181
+ return new Promise((...resolver) => {
182
+ _inTransactionProgress = true;
183
+ const id = extension.signBytes({
184
+ bytes,
185
+ purgeQueue: true,
186
+ });
187
+ signBytesResolvers.set(id, resolver);
188
+ setTimeout(() => {
189
+ if (signBytesResolvers.has(id)) {
190
+ signBytesResolvers.delete(id);
191
+ if (signBytesResolvers.size === 0) {
192
+ _inTransactionProgress = false;
193
+ }
194
+ }
195
+ }, 1000 * 120);
196
+ });
197
+ }
198
+ function connect() {
199
+ return new Promise((...resolver) => {
200
+ connectResolvers.add(resolver);
201
+ extension.connect();
202
+ });
203
+ }
204
+ function info() {
205
+ return new Promise((...resolver) => {
206
+ infoResolvers.add(resolver);
207
+ extension.info();
208
+ });
209
+ }
210
+ function disconnect() {
211
+ connectResolvers.clear();
212
+ infoResolvers.clear();
213
+ postResolvers.clear();
214
+ signResolvers.clear();
215
+ signBytesResolvers.clear();
216
+ }
217
+ function inTransactionProgress() {
218
+ return _inTransactionProgress;
219
+ }
220
+ const result = {
221
+ post,
222
+ sign,
223
+ signBytes,
224
+ connect,
225
+ info,
226
+ disconnect,
227
+ inTransactionProgress,
228
+ };
229
+ pool.set(identifier, result);
230
+ return result;
231
+ }
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRml4ZWRFeHRlbnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9sZWdhY3ktZXh0ZW5zaW9uL2NyZWF0ZUZpeGVkRXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsb0JBQW9CLEVBQ3BCLDhCQUE4QixFQUM5QixzQkFBc0IsR0FDdkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQW1CLFNBQVMsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUE0Q3pFLFNBQVMsZUFBZSxDQUFDLEtBQVU7SUFDakMsSUFBSTtRQUNGLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUNyQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdEI7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtLQUNGO0lBQUMsV0FBTTtRQUNOLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQVU7SUFDakMsSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtRQUM1QixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDbEIseUZBQXlGO1lBQ3pGLEtBQUssQ0FBQztnQkFDSixPQUFPLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN0Qyx5RkFBeUY7WUFDekYsS0FBSyxDQUFDO2dCQUNKLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtvQkFDZCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDOUIsT0FBTyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUs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QUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxVQUFVO1FBQ2pCLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTLHFCQUFxQjtRQUM1QixPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBbUI7UUFDN0IsSUFBSTtRQUNKLElBQUk7UUFDSixTQUFTO1FBQ1QsT0FBTztRQUNQLElBQUk7UUFDSixVQUFVO1FBQ1YscUJBQXFCO0tBQ3RCLENBQUM7SUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU3QixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmV0d29ya0luZm8gfSBmcm9tICdAa3NhbmdrdWsxMC93YWxsZXQtdHlwZXMnO1xuaW1wb3J0IHtcbiAgV2ViRXh0ZW5zaW9uQ3JlYXRlVHhGYWlsZWQsXG4gIFdlYkV4dGVuc2lvblR4RmFpbGVkLFxuICBXZWJFeHRlbnNpb25UeFVuc3BlY2lmaWVkRXJyb3IsXG4gIFdlYkV4dGVuc2lvblVzZXJEZW5pZWQsXG59IGZyb20gJ0Brc2FuZ2t1azEwL3dlYi1leHRlbnNpb24taW50ZXJmYWNlJztcbmltcG9ydCB7IENyZWF0ZVR4T3B0aW9ucywgRXh0ZW5zaW9uLCBTaWduTW9kZSwgVHggfSBmcm9tICdAeHBsYS94cGxhLmpzJztcblxudHlwZSBDb25uZWN0UmVzcG9uc2UgPSB7IGFkZHJlc3M/OiBzdHJpbmcgfTtcbnR5cGUgUG9zdFJlc3BvbnNlID0ge1xuICBwYXlsb2FkOiB7XG4gICAgcmVzdWx0OiB7XG4gICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICAgIHJhd19sb2c6IHN0cmluZztcbiAgICAgIHR4aGFzaDogc3RyaW5nO1xuICAgIH07XG4gIH07XG59O1xudHlwZSBTaWduUmVzcG9uc2UgPSB7XG4gIHBheWxvYWQ6IHtcbiAgICByZXN1bHQ6IFR4LkRhdGE7XG4gIH07XG59O1xudHlwZSBTaWduQnl0ZXNSZXNwb25zZSA9IHtcbiAgcGF5bG9hZDoge1xuICAgIHJlc3VsdDoge1xuICAgICAgcHVibGljX2tleTogc3RyaW5nO1xuICAgICAgcmVjaWQ6IG51bWJlcjtcbiAgICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59O1xudHlwZSBJbmZvUmVzcG9uc2UgPSBOZXR3b3JrSW5mbztcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZEV4dGVuc2lvbiB7XG4gIHBvc3Q6IChkYXRhOiBDcmVhdGVUeE9wdGlvbnMpID0+IFByb21pc2U8UG9zdFJlc3BvbnNlPjtcbiAgc2lnbjogKFxuICAgIGRhdGE6IENyZWF0ZVR4T3B0aW9ucyAmIHtcbiAgICAgIHNlcXVlbmNlPzogbnVtYmVyO1xuICAgICAgYWNjb3VudE51bWJlcj86IG51bWJlcjtcbiAgICAgIHNpZ25Nb2RlPzogU2lnbk1vZGU7XG4gICAgfVxuICApID0+IFByb21pc2U8U2lnblJlc3BvbnNlPjtcbiAgc2lnbkJ5dGVzOiAoYnl0ZXM6IEJ1ZmZlcikgPT4gUHJvbWlzZTxTaWduQnl0ZXNSZXNwb25zZT47XG4gIGluZm86ICgpID0+IFByb21pc2U8SW5mb1Jlc3BvbnNlPjtcbiAgY29ubmVjdDogKCkgPT4gUHJvbWlzZTxDb25uZWN0UmVzcG9uc2U+O1xuICBpblRyYW5zYWN0aW9uUHJvZ3Jlc3M6ICgpID0+IGJvb2xlYW47XG4gIGRpc2Nvbm5lY3Q6ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVycm9yKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRXhwbGljaXRFcnJvcihlcnJvcjogYW55KSB7XG4gIGlmIChlcnJvciAmJiAnY29kZScgaW4gZXJyb3IpIHtcbiAgICBzd2l0Y2ggKGVycm9yLmNvZGUpIHtcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlcnJhLXByb2plY3Qvc3RhdGlvbi9ibG9iL21haW4vc3JjL2V4dGVuc2lvbi9Db25maXJtLnRzeCNMMTgyXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBuZXcgV2ViRXh0ZW5zaW9uVXNlckRlbmllZCgpO1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVycmEtcHJvamVjdC9zdGF0aW9uL2Jsb2IvbWFpbi9zcmMvZXh0ZW5zaW9uL0NvbmZpcm0udHN4I0wxMzdcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKGVycm9yLmRhdGEpIHtcbiAgICAgICAgICBjb25zdCB7IHR4aGFzaCB9ID0gZXJyb3IuZGF0YTtcbiAgICAgICAgICByZXR1cm4gbmV3IFdlYkV4dGVuc2lvblR4RmFpbGVkKHR4aGFzaCwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBXZWJFeHRlbnNpb25UeEZhaWxlZChcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGdldEVycm9yTWVzc2FnZShlcnJvciksXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlcnJhLXByb2plY3Qvc3RhdGlvbi9ibG9iL21haW4vc3JjL2V4dGVuc2lvbi9Db25maXJtLnRzeCNMMTUzXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBuZXcgV2ViRXh0ZW5zaW9uQ3JlYXRlVHhGYWlsZWQoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IFdlYkV4dGVuc2lvblR4VW5zcGVjaWZpZWRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBXZWJFeHRlbnNpb25UeFVuc3BlY2lmaWVkRXJyb3IoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFJlc3VsdCh7IGVycm9yLCAuLi5wYXlsb2FkIH06IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHBheWxvYWQuc3VjY2VzcyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBwYXlsb2FkLnJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY29uc3QgcG9vbCA9IG5ldyBNYXA8c3RyaW5nLCBGaXhlZEV4dGVuc2lvbj4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpeGVkRXh0ZW5zaW9uKGlkZW50aWZpZXI6IHN0cmluZyk6IEZpeGVkRXh0ZW5zaW9uIHtcbiAgaWYgKHBvb2wuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgcmV0dXJuIHBvb2wuZ2V0KGlkZW50aWZpZXIpITtcbiAgfVxuXG4gIGNvbnN0IGV4dGVuc2lvbiA9IG5ldyBFeHRlbnNpb24oaWRlbnRpZmllcik7XG5cbiAgbGV0IF9pblRyYW5zYWN0aW9uUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICBjb25zdCBwb3N0UmVzb2x2ZXJzID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgWyhkYXRhOiBhbnkpID0+IHZvaWQsIChlcnJvcjogYW55KSA9PiB2b2lkXVxuICA+KCk7XG5cbiAgY29uc3Qgc2lnblJlc29sdmVycyA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIFsoZGF0YTogYW55KSA9PiB2b2lkLCAoZXJyb3I6IGFueSkgPT4gdm9pZF1cbiAgPigpO1xuXG4gIGNvbnN0IHNpZ25CeXRlc1Jlc29sdmVycyA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIFsoZGF0YTogYW55KSA9PiB2b2lkLCAoZXJyb3I6IGFueSkgPT4gdm9pZF1cbiAgPigpO1xuXG4gIGNvbnN0IGluZm9SZXNvbHZlcnMgPSBuZXcgU2V0PFsoZGF0YTogYW55KSA9PiB2b2lkLCAoZXJyb3I6IGFueSkgPT4gdm9pZF0+KCk7XG5cbiAgY29uc3QgY29ubmVjdFJlc29sdmVycyA9IG5ldyBTZXQ8XG4gICAgWyhkYXRhOiBhbnkpID0+IHZvaWQsIChlcnJvcjogYW55KSA9PiB2b2lkXVxuICA+KCk7XG5cbiAgZXh0ZW5zaW9uLm9uKCdvblBvc3QnLCAocmVzdWx0KSA9PiB7XG4gICAgaWYgKCFyZXN1bHQgfHwgIWlzVmFsaWRSZXN1bHQocmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZXJyb3IsIC4uLnBheWxvYWQgfSA9IHJlc3VsdDtcblxuICAgIGlmICghcG9zdFJlc29sdmVycy5oYXMocGF5bG9hZC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbcmVzb2x2ZSwgcmVqZWN0XSA9IHBvc3RSZXNvbHZlcnMuZ2V0KHBheWxvYWQuaWQpITtcblxuICAgIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgICByZWplY3QodG9FeHBsaWNpdEVycm9yKGVycm9yKSk7XG4gICAgfSBlbHNlIGlmIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHsgbmFtZTogJ29uUG9zdCcsIHBheWxvYWQgfSk7XG4gICAgfVxuXG4gICAgcG9zdFJlc29sdmVycy5kZWxldGUocGF5bG9hZC5pZCk7XG5cbiAgICBpZiAocG9zdFJlc29sdmVycy5zaXplID09PSAwKSB7XG4gICAgICBfaW5UcmFuc2FjdGlvblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICBleHRlbnNpb24ub24oJ29uU2lnbicsIChyZXN1bHQpID0+IHtcbiAgICBpZiAoIXJlc3VsdCB8fCAhaXNWYWxpZFJlc3VsdChyZXN1bHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBlcnJvciwgLi4ucGF5bG9hZCB9ID0gcmVzdWx0O1xuXG4gICAgaWYgKHNpZ25SZXNvbHZlcnMuaGFzKHBheWxvYWQuaWQpKSB7XG4gICAgICBjb25zdCBbcmVzb2x2ZSwgcmVqZWN0XSA9IHNpZ25SZXNvbHZlcnMuZ2V0KHBheWxvYWQuaWQpITtcblxuICAgICAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVqZWN0KHRvRXhwbGljaXRFcnJvcihlcnJvcikpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoeyBuYW1lOiAnb25TaWduJywgcGF5bG9hZCB9KTtcbiAgICAgIH1cblxuICAgICAgc2lnblJlc29sdmVycy5kZWxldGUocGF5bG9hZC5pZCk7XG5cbiAgICAgIGlmIChzaWduUmVzb2x2ZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgX2luVHJhbnNhY3Rpb25Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2lnbkJ5dGVzUmVzb2x2ZXJzLmhhcyhwYXlsb2FkLmlkKSkge1xuICAgICAgY29uc3QgW3Jlc29sdmUsIHJlamVjdF0gPSBzaWduQnl0ZXNSZXNvbHZlcnMuZ2V0KHBheWxvYWQuaWQpITtcblxuICAgICAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVqZWN0KHRvRXhwbGljaXRFcnJvcihlcnJvcikpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoeyBuYW1lOiAnb25TaWduQnl0ZXMnLCBwYXlsb2FkIH0pO1xuICAgICAgfVxuXG4gICAgICBzaWduQnl0ZXNSZXNvbHZlcnMuZGVsZXRlKHBheWxvYWQuaWQpO1xuXG4gICAgICBpZiAoc2lnbkJ5dGVzUmVzb2x2ZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgX2luVHJhbnNhY3Rpb25Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXh0ZW5zaW9uLm9uKCdvbkluZm8nLCAocmVzdWx0KSA9PiB7XG4gICAgaWYgKCFyZXN1bHQpIHJldHVybjtcbiAgICBjb25zdCB7IGVycm9yLCAuLi5wYXlsb2FkIH0gPSByZXN1bHQ7XG5cbiAgICBmb3IgKGNvbnN0IFtyZXNvbHZlLCByZWplY3RdIG9mIGluZm9SZXNvbHZlcnMpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShwYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbmZvUmVzb2x2ZXJzLmNsZWFyKCk7XG4gIH0pO1xuXG4gIGV4dGVuc2lvbi5vbignb25Db25uZWN0JywgKHJlc3VsdCkgPT4ge1xuICAgIGlmICghcmVzdWx0KSByZXR1cm47XG4gICAgY29uc3QgeyBlcnJvciwgLi4ucGF5bG9hZCB9ID0gcmVzdWx0O1xuXG4gICAgZm9yIChjb25zdCBbcmVzb2x2ZSwgcmVqZWN0XSBvZiBjb25uZWN0UmVzb2x2ZXJzKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUocGF5bG9hZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29ubmVjdFJlc29sdmVycy5jbGVhcigpO1xuICB9KTtcblxuICBmdW5jdGlvbiBwb3N0KGRhdGE6IG9iamVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxQb3N0UmVzcG9uc2U+KCguLi5yZXNvbHZlcikgPT4ge1xuICAgICAgX2luVHJhbnNhY3Rpb25Qcm9ncmVzcyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGlkID0gZXh0ZW5zaW9uLnBvc3Qoe1xuICAgICAgICAuLi4oZGF0YSBhcyBhbnkpLFxuICAgICAgICBwdXJnZVF1ZXVlOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHBvc3RSZXNvbHZlcnMuc2V0KGlkLCByZXNvbHZlcik7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAocG9zdFJlc29sdmVycy5oYXMoaWQpKSB7XG4gICAgICAgICAgcG9zdFJlc29sdmVycy5kZWxldGUoaWQpO1xuXG4gICAgICAgICAgaWYgKHBvc3RSZXNvbHZlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgX2luVHJhbnNhY3Rpb25Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMTAwMCAqIDEyMCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduKGRhdGE6IG9iamVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTaWduUmVzcG9uc2U+KCguLi5yZXNvbHZlcikgPT4ge1xuICAgICAgX2luVHJhbnNhY3Rpb25Qcm9ncmVzcyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGlkID0gZXh0ZW5zaW9uLnNpZ24oe1xuICAgICAgICAuLi4oZGF0YSBhcyBhbnkpLFxuICAgICAgICBwdXJnZVF1ZXVlOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHNpZ25SZXNvbHZlcnMuc2V0KGlkLCByZXNvbHZlcik7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2lnblJlc29sdmVycy5oYXMoaWQpKSB7XG4gICAgICAgICAgc2lnblJlc29sdmVycy5kZWxldGUoaWQpO1xuXG4gICAgICAgICAgaWYgKHNpZ25SZXNvbHZlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgX2luVHJhbnNhY3Rpb25Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMTAwMCAqIDEyMCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduQnl0ZXMoYnl0ZXM6IEJ1ZmZlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTaWduQnl0ZXNSZXNwb25zZT4oKC4uLnJlc29sdmVyKSA9PiB7XG4gICAgICBfaW5UcmFuc2FjdGlvblByb2dyZXNzID0gdHJ1ZTtcblxuICAgICAgY29uc3QgaWQgPSBleHRlbnNpb24uc2lnbkJ5dGVzKHtcbiAgICAgICAgYnl0ZXMsXG4gICAgICAgIHB1cmdlUXVldWU6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgc2lnbkJ5dGVzUmVzb2x2ZXJzLnNldChpZCwgcmVzb2x2ZXIpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHNpZ25CeXRlc1Jlc29sdmVycy5oYXMoaWQpKSB7XG4gICAgICAgICAgc2lnbkJ5dGVzUmVzb2x2ZXJzLmRlbGV0ZShpZCk7XG5cbiAgICAgICAgICBpZiAoc2lnbkJ5dGVzUmVzb2x2ZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIF9pblRyYW5zYWN0aW9uUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDAgKiAxMjApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q29ubmVjdFJlc3BvbnNlPigoLi4ucmVzb2x2ZXIpID0+IHtcbiAgICAgIGNvbm5lY3RSZXNvbHZlcnMuYWRkKHJlc29sdmVyKTtcbiAgICAgIGV4dGVuc2lvbi5jb25uZWN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbmZvKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJbmZvUmVzcG9uc2U+KCguLi5yZXNvbHZlcikgPT4ge1xuICAgICAgaW5mb1Jlc29sdmVycy5hZGQocmVzb2x2ZXIpO1xuICAgICAgZXh0ZW5zaW9uLmluZm8oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG4gICAgY29ubmVjdFJlc29sdmVycy5jbGVhcigpO1xuICAgIGluZm9SZXNvbHZlcnMuY2xlYXIoKTtcbiAgICBwb3N0UmVzb2x2ZXJzLmNsZWFyKCk7XG4gICAgc2lnblJlc29sdmVycy5jbGVhcigpO1xuICAgIHNpZ25CeXRlc1Jlc29sdmVycy5jbGVhcigpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5UcmFuc2FjdGlvblByb2dyZXNzKCkge1xuICAgIHJldHVybiBfaW5UcmFuc2FjdGlvblByb2dyZXNzO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBGaXhlZEV4dGVuc2lvbiA9IHtcbiAgICBwb3N0LFxuICAgIHNpZ24sXG4gICAgc2lnbkJ5dGVzLFxuICAgIGNvbm5lY3QsXG4gICAgaW5mbyxcbiAgICBkaXNjb25uZWN0LFxuICAgIGluVHJhbnNhY3Rpb25Qcm9ncmVzcyxcbiAgfTtcblxuICBwb29sLnNldChpZGVudGlmaWVyLCByZXN1bHQpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './LegacyExtensionConnector';
2
+ export * from './createFixedExtension';
@@ -0,0 +1,3 @@
1
+ export * from './LegacyExtensionConnector';
2
+ export * from './createFixedExtension';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9sZWdhY3ktZXh0ZW5zaW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vTGVnYWN5RXh0ZW5zaW9uQ29ubmVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlRml4ZWRFeHRlbnNpb24nO1xuIl19
@@ -0,0 +1,8 @@
1
+ import { ReadonlyWalletSession } from './types';
2
+ export interface ReadonlyWalletController extends ReadonlyWalletSession {
3
+ disconnect: () => void;
4
+ }
5
+ export interface ReadonlyWalletOptions extends ReadonlyWalletSession {
6
+ }
7
+ export declare function connectIfSessionExists(): ReadonlyWalletController | null;
8
+ export declare function connect(options: ReadonlyWalletOptions): ReadonlyWalletController;
@@ -0,0 +1,19 @@
1
+ import { clearStoredSession, getStoredSession, storeSession } from './storage';
2
+ export function connectIfSessionExists() {
3
+ const storedSession = getStoredSession();
4
+ if (!!storedSession) {
5
+ return connect(storedSession);
6
+ }
7
+ return null;
8
+ }
9
+ export function connect(options) {
10
+ storeSession(options);
11
+ function disconnect() {
12
+ clearStoredSession();
13
+ }
14
+ return {
15
+ ...options,
16
+ disconnect,
17
+ };
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Aa3NhbmdrdWsxMC93YWxsZXQtY29udHJvbGxlci9tb2R1bGVzL3JlYWRvbmx5LXdhbGxldC9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTL0UsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXpDLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRTtRQUNuQixPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUMvQjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQ3JCLE9BQThCO0lBRTlCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV0QixTQUFTLFVBQVU7UUFDakIsa0JBQWtCLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTztRQUNMLEdBQUcsT0FBTztRQUNWLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyU3RvcmVkU2Vzc2lvbiwgZ2V0U3RvcmVkU2Vzc2lvbiwgc3RvcmVTZXNzaW9uIH0gZnJvbSAnLi9zdG9yYWdlJztcbmltcG9ydCB7IFJlYWRvbmx5V2FsbGV0U2Vzc2lvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRvbmx5V2FsbGV0Q29udHJvbGxlciBleHRlbmRzIFJlYWRvbmx5V2FsbGV0U2Vzc2lvbiB7XG4gIGRpc2Nvbm5lY3Q6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZG9ubHlXYWxsZXRPcHRpb25zIGV4dGVuZHMgUmVhZG9ubHlXYWxsZXRTZXNzaW9uIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0SWZTZXNzaW9uRXhpc3RzKCk6IFJlYWRvbmx5V2FsbGV0Q29udHJvbGxlciB8IG51bGwge1xuICBjb25zdCBzdG9yZWRTZXNzaW9uID0gZ2V0U3RvcmVkU2Vzc2lvbigpO1xuXG4gIGlmICghIXN0b3JlZFNlc3Npb24pIHtcbiAgICByZXR1cm4gY29ubmVjdChzdG9yZWRTZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdChcbiAgb3B0aW9uczogUmVhZG9ubHlXYWxsZXRPcHRpb25zLFxuKTogUmVhZG9ubHlXYWxsZXRDb250cm9sbGVyIHtcbiAgc3RvcmVTZXNzaW9uKG9wdGlvbnMpO1xuXG4gIGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG4gICAgY2xlYXJTdG9yZWRTZXNzaW9uKCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZGlzY29ubmVjdCxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './connect';
3
+ export * from './modal';
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './connect';
3
+ export * from './modal';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9yZWFkb25seS13YWxsZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGFsJztcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { NetworkInfo } from '@ksangkuk10/wallet-types';
2
+ import { ReadonlyWalletSession } from './types';
3
+ interface Options {
4
+ networks: NetworkInfo[];
5
+ }
6
+ export declare function readonlyWalletModal({ networks, }: Options): Promise<ReadonlyWalletSession | null>;
7
+ export {};