@subwallet/extension-base 0.3.6-0 → 0.3.6-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/{build/background → background}/KoniTypes.d.ts +0 -0
  2. package/{build/background → background}/KoniTypes.js +0 -0
  3. package/{build/background → background}/RequestBytesSign.d.ts +0 -0
  4. package/{build/background → background}/RequestBytesSign.js +0 -0
  5. package/{build/background → background}/RequestExtrinsicSign.d.ts +0 -0
  6. package/{build/background → background}/RequestExtrinsicSign.js +0 -0
  7. package/{build/background → background}/handlers/Extension.d.ts +0 -0
  8. package/{build/background → background}/handlers/Extension.js +0 -0
  9. package/{build/background → background}/handlers/State.d.ts +0 -0
  10. package/{build/background → background}/handlers/State.js +0 -0
  11. package/{build/background → background}/handlers/Tabs.d.ts +0 -0
  12. package/{build/background → background}/handlers/Tabs.js +0 -0
  13. package/{build/background → background}/handlers/helpers.d.ts +0 -0
  14. package/{build/background → background}/handlers/helpers.js +0 -0
  15. package/{build/background → background}/handlers/index.d.ts +0 -0
  16. package/{build/background → background}/handlers/index.js +0 -0
  17. package/{build/background → background}/handlers/subscriptions.d.ts +0 -0
  18. package/{build/background → background}/handlers/subscriptions.js +0 -0
  19. package/{build/background → background}/types.d.ts +0 -0
  20. package/{build/background → background}/types.js +0 -0
  21. package/{build/bundle.d.ts → bundle.d.ts} +0 -0
  22. package/{build/bundle.js → bundle.js} +0 -0
  23. package/{build-cjs → cjs}/background/KoniTypes.js +0 -0
  24. package/{build-cjs → cjs}/background/RequestBytesSign.js +0 -0
  25. package/{build-cjs → cjs}/background/RequestExtrinsicSign.js +0 -0
  26. package/{build-cjs → cjs}/background/handlers/Extension.js +0 -0
  27. package/{build-cjs → cjs}/background/handlers/State.js +0 -0
  28. package/{build-cjs → cjs}/background/handlers/Tabs.js +0 -0
  29. package/{build-cjs → cjs}/background/handlers/helpers.js +0 -0
  30. package/{build-cjs → cjs}/background/handlers/index.js +0 -0
  31. package/{build-cjs → cjs}/background/handlers/subscriptions.js +0 -0
  32. package/{build-cjs → cjs}/background/types.js +0 -0
  33. package/{build-cjs → cjs}/bundle.js +0 -0
  34. package/{build-cjs → cjs}/defaults.js +0 -0
  35. package/{build-cjs → cjs}/detectOther.js +0 -0
  36. package/{build-cjs → cjs}/detectPackage.js +0 -0
  37. package/{build-cjs → cjs}/index.js +0 -0
  38. package/{build/cjs → cjs}/package.json +0 -0
  39. package/{build-cjs → cjs}/packageInfo.js +0 -0
  40. package/{build-cjs → cjs}/page/Accounts.js +0 -0
  41. package/{build-cjs → cjs}/page/Injected.js +0 -0
  42. package/{build-cjs → cjs}/page/Metadata.js +0 -0
  43. package/{build-cjs → cjs}/page/PostMessageProvider.js +0 -0
  44. package/{build-cjs → cjs}/page/Signer.js +0 -0
  45. package/{build-cjs → cjs}/page/index.js +0 -0
  46. package/{build-cjs → cjs}/page/types.js +0 -0
  47. package/{build-cjs → cjs}/stores/Accounts.js +0 -0
  48. package/{build-cjs → cjs}/stores/Base.js +0 -0
  49. package/{build-cjs → cjs}/stores/Metadata.js +0 -0
  50. package/{build-cjs → cjs}/stores/index.js +0 -0
  51. package/{build-cjs → cjs}/types.js +0 -0
  52. package/{build-cjs → cjs}/utils/canDerive.js +0 -0
  53. package/{build-cjs → cjs}/utils/getId.js +0 -0
  54. package/{build-cjs → cjs}/utils/index.js +0 -0
  55. package/{build/defaults.d.ts → defaults.d.ts} +0 -0
  56. package/{build/defaults.js → defaults.js} +0 -0
  57. package/{build/detectOther.d.ts → detectOther.d.ts} +0 -0
  58. package/{build/detectOther.js → detectOther.js} +0 -0
  59. package/{build/detectPackage.d.ts → detectPackage.d.ts} +0 -0
  60. package/{build/detectPackage.js → detectPackage.js} +0 -0
  61. package/{build/index.d.ts → index.d.ts} +0 -0
  62. package/{build/index.js → index.js} +0 -0
  63. package/package.json +171 -7
  64. package/{build/packageInfo.d.ts → packageInfo.d.ts} +0 -0
  65. package/{build/packageInfo.js → packageInfo.js} +0 -0
  66. package/{build/page → page}/Accounts.d.ts +0 -0
  67. package/{build/page → page}/Accounts.js +0 -0
  68. package/{build/page → page}/Injected.d.ts +0 -0
  69. package/{build/page → page}/Injected.js +0 -0
  70. package/{build/page → page}/Metadata.d.ts +0 -0
  71. package/{build/page → page}/Metadata.js +0 -0
  72. package/{build/page → page}/PostMessageProvider.d.ts +0 -0
  73. package/{build/page → page}/PostMessageProvider.js +0 -0
  74. package/{build/page → page}/Signer.d.ts +0 -0
  75. package/{build/page → page}/Signer.js +0 -0
  76. package/{build/page → page}/index.d.ts +0 -0
  77. package/{build/page → page}/index.js +0 -0
  78. package/{build/page → page}/types.d.ts +0 -0
  79. package/{build/page → page}/types.js +0 -0
  80. package/{build/stores → stores}/Accounts.d.ts +0 -0
  81. package/{build/stores → stores}/Accounts.js +0 -0
  82. package/{build/stores → stores}/Base.d.ts +0 -0
  83. package/{build/stores → stores}/Base.js +0 -0
  84. package/{build/stores → stores}/Metadata.d.ts +0 -0
  85. package/{build/stores → stores}/Metadata.js +0 -0
  86. package/{build/stores → stores}/index.d.ts +0 -0
  87. package/{build/stores → stores}/index.js +0 -0
  88. package/{build/types.d.ts → types.d.ts} +0 -0
  89. package/{build/types.js → types.js} +0 -0
  90. package/{build/utils → utils}/canDerive.d.ts +0 -0
  91. package/{build/utils → utils}/canDerive.js +0 -0
  92. package/{build/utils → utils}/getId.d.ts +0 -0
  93. package/{build/utils → utils}/getId.js +0 -0
  94. package/{build/utils → utils}/index.d.ts +0 -0
  95. package/{build/utils → utils}/index.js +0 -0
  96. package/build/LICENSE +0 -201
  97. package/build/README.md +0 -10
  98. package/build/cjs/background/KoniTypes.js +0 -69
  99. package/build/cjs/background/RequestBytesSign.js +0 -27
  100. package/build/cjs/background/RequestExtrinsicSign.js +0 -23
  101. package/build/cjs/background/handlers/Extension.js +0 -764
  102. package/build/cjs/background/handlers/State.js +0 -472
  103. package/build/cjs/background/handlers/Tabs.js +0 -273
  104. package/build/cjs/background/handlers/helpers.js +0 -20
  105. package/build/cjs/background/handlers/index.js +0 -60
  106. package/build/cjs/background/handlers/subscriptions.js +0 -32
  107. package/build/cjs/background/types.js +0 -1
  108. package/build/cjs/bundle.js +0 -13
  109. package/build/cjs/defaults.js +0 -26
  110. package/build/cjs/detectOther.js +0 -17
  111. package/build/cjs/detectPackage.js +0 -14
  112. package/build/cjs/index.js +0 -18
  113. package/build/cjs/packageInfo.js +0 -16
  114. package/build/cjs/page/Accounts.js +0 -31
  115. package/build/cjs/page/Injected.js +0 -30
  116. package/build/cjs/page/Metadata.js +0 -27
  117. package/build/cjs/page/PostMessageProvider.js +0 -184
  118. package/build/cjs/page/Signer.js +0 -44
  119. package/build/cjs/page/index.js +0 -76
  120. package/build/cjs/page/types.js +0 -1
  121. package/build/cjs/stores/Accounts.js +0 -33
  122. package/build/cjs/stores/Base.js +0 -84
  123. package/build/cjs/stores/Metadata.js +0 -23
  124. package/build/cjs/stores/index.js +0 -23
  125. package/build/cjs/types.js +0 -1
  126. package/build/cjs/utils/canDerive.js +0 -12
  127. package/build/cjs/utils/getId.js +0 -16
  128. package/build/cjs/utils/index.js +0 -13
  129. package/build/package.json +0 -210
  130. package/src/background/KoniTypes.ts +0 -537
  131. package/src/background/RequestBytesSign.ts +0 -30
  132. package/src/background/RequestExtrinsicSign.ts +0 -23
  133. package/src/background/handlers/Extension.spec.ts +0 -456
  134. package/src/background/handlers/Extension.ts +0 -627
  135. package/src/background/handlers/State.ts +0 -513
  136. package/src/background/handlers/Tabs.ts +0 -223
  137. package/src/background/handlers/helpers.ts +0 -14
  138. package/src/background/handlers/index.ts +0 -49
  139. package/src/background/handlers/subscriptions.ts +0 -30
  140. package/src/background/types.ts +0 -437
  141. package/src/bundle.ts +0 -4
  142. package/src/defaults.ts +0 -24
  143. package/src/detectOther.ts +0 -8
  144. package/src/detectPackage.ts +0 -11
  145. package/src/index.ts +0 -7
  146. package/src/packageInfo.ts +0 -6
  147. package/src/page/Accounts.ts +0 -27
  148. package/src/page/Injected.ts +0 -27
  149. package/src/page/Metadata.ts +0 -22
  150. package/src/page/PostMessageProvider.ts +0 -178
  151. package/src/page/Signer.ts +0 -45
  152. package/src/page/index.ts +0 -87
  153. package/src/page/types.ts +0 -10
  154. package/src/stores/Accounts.ts +0 -24
  155. package/src/stores/Base.ts +0 -81
  156. package/src/stores/Metadata.ts +0 -13
  157. package/src/stores/index.ts +0 -5
  158. package/src/types.ts +0 -12
  159. package/src/utils/canDerive.ts +0 -8
  160. package/src/utils/getId.ts +0 -10
  161. package/src/utils/index.ts +0 -4
  162. package/tsconfig.build.json +0 -18
  163. package/tsconfig.build.tsbuildinfo +0 -1
  164. package/tsconfig.json +0 -14
@@ -1,223 +0,0 @@
1
- // Copyright 2019-2022 @subwallet/extension authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import type { InjectedAccount, InjectedMetadataKnown, MetadataDef, ProviderMeta } from '@subwallet/extension-inject/types';
5
- import type { KeyringPair } from '@polkadot/keyring/types';
6
- import type { JsonRpcResponse } from '@polkadot/rpc-provider/types';
7
- import type { SignerPayloadJSON, SignerPayloadRaw } from '@polkadot/types/types';
8
- import type { SubjectInfo } from '@polkadot/ui-keyring/observable/types';
9
- import type { MessageTypes, RequestAccountList, RequestAuthorizeTab, RequestRpcSend, RequestRpcSubscribe, RequestRpcUnsubscribe, RequestTypes, ResponseRpcListProviders, ResponseSigning, ResponseTypes, SubscriptionMessageTypes } from '../types';
10
-
11
- import { PHISHING_PAGE_REDIRECT } from '@subwallet/extension-base/defaults';
12
- import { canDerive } from '@subwallet/extension-base/utils';
13
-
14
- import { checkIfDenied } from '@polkadot/phishing';
15
- import keyring from '@polkadot/ui-keyring';
16
- import { accounts as accountsObservable } from '@polkadot/ui-keyring/observable/accounts';
17
- import { assert, isNumber } from '@polkadot/util';
18
-
19
- import RequestBytesSign from '../RequestBytesSign';
20
- import RequestExtrinsicSign from '../RequestExtrinsicSign';
21
- import { withErrorLog } from './helpers';
22
- import State from './State';
23
- import { createSubscription, unsubscribe } from './subscriptions';
24
-
25
- function transformAccounts (accounts: SubjectInfo, anyType = false): InjectedAccount[] {
26
- return Object
27
- .values(accounts)
28
- .filter(({ json: { meta: { isHidden } } }) => !isHidden)
29
- .filter(({ type }) => anyType ? true : canDerive(type))
30
- .filter(({ type }) => (type !== 'ethereum')) // Quick fix DApp not allow EVM
31
- .sort((a, b) => (a.json.meta.whenCreated || 0) - (b.json.meta.whenCreated || 0))
32
- .map(({ json: { address, meta: { genesisHash, name } }, type }): InjectedAccount => ({
33
- address,
34
- genesisHash,
35
- name,
36
- type
37
- }));
38
- }
39
-
40
- export default class Tabs {
41
- readonly #state: State;
42
-
43
- constructor (state: State) {
44
- this.#state = state;
45
- }
46
-
47
- private authorize (url: string, request: RequestAuthorizeTab): Promise<boolean> {
48
- return this.#state.authorizeUrl(url, request);
49
- }
50
-
51
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
- private accountsList (url: string, { anyType }: RequestAccountList): InjectedAccount[] {
53
- return transformAccounts(accountsObservable.subject.getValue(), anyType);
54
- }
55
-
56
- // FIXME This looks very much like what we have in Extension
57
- private accountsSubscribe (url: string, id: string, port: chrome.runtime.Port): boolean {
58
- const cb = createSubscription<'pub(accounts.subscribe)'>(id, port);
59
- const subscription = accountsObservable.subject.subscribe((accounts: SubjectInfo): void =>
60
- cb(transformAccounts(accounts))
61
- );
62
-
63
- port.onDisconnect.addListener((): void => {
64
- unsubscribe(id);
65
- subscription.unsubscribe();
66
- });
67
-
68
- return true;
69
- }
70
-
71
- private getSigningPair (address: string): KeyringPair {
72
- const pair = keyring.getPair(address);
73
-
74
- assert(pair, 'Unable to find keypair');
75
-
76
- return pair;
77
- }
78
-
79
- private bytesSign (url: string, request: SignerPayloadRaw): Promise<ResponseSigning> {
80
- const address = request.address;
81
- const pair = this.getSigningPair(address);
82
-
83
- return this.#state.sign(url, new RequestBytesSign(request), { address, ...pair.meta });
84
- }
85
-
86
- private extrinsicSign (url: string, request: SignerPayloadJSON): Promise<ResponseSigning> {
87
- const address = request.address;
88
- const pair = this.getSigningPair(address);
89
-
90
- return this.#state.sign(url, new RequestExtrinsicSign(request), { address, ...pair.meta });
91
- }
92
-
93
- private metadataProvide (url: string, request: MetadataDef): Promise<boolean> {
94
- return this.#state.injectMetadata(url, request);
95
- }
96
-
97
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
98
- private metadataList (url: string): InjectedMetadataKnown[] {
99
- return this.#state.knownMetadata.map(({ genesisHash, specVersion }) => ({
100
- genesisHash,
101
- specVersion
102
- }));
103
- }
104
-
105
- private rpcListProviders (): Promise<ResponseRpcListProviders> {
106
- return this.#state.rpcListProviders();
107
- }
108
-
109
- private rpcSend (request: RequestRpcSend, port: chrome.runtime.Port): Promise<JsonRpcResponse> {
110
- return this.#state.rpcSend(request, port);
111
- }
112
-
113
- private rpcStartProvider (key: string, port: chrome.runtime.Port): Promise<ProviderMeta> {
114
- return this.#state.rpcStartProvider(key, port);
115
- }
116
-
117
- private async rpcSubscribe (request: RequestRpcSubscribe, id: string, port: chrome.runtime.Port): Promise<boolean> {
118
- const innerCb = createSubscription<'pub(rpc.subscribe)'>(id, port);
119
- const cb = (_error: Error | null, data: SubscriptionMessageTypes['pub(rpc.subscribe)']): void => innerCb(data);
120
- const subscriptionId = await this.#state.rpcSubscribe(request, cb, port);
121
-
122
- port.onDisconnect.addListener((): void => {
123
- unsubscribe(id);
124
- withErrorLog(() => this.rpcUnsubscribe({ ...request, subscriptionId }, port));
125
- });
126
-
127
- return true;
128
- }
129
-
130
- private rpcSubscribeConnected (request: null, id: string, port: chrome.runtime.Port): Promise<boolean> {
131
- const innerCb = createSubscription<'pub(rpc.subscribeConnected)'>(id, port);
132
- const cb = (_error: Error | null, data: SubscriptionMessageTypes['pub(rpc.subscribeConnected)']): void => innerCb(data);
133
-
134
- this.#state.rpcSubscribeConnected(request, cb, port);
135
-
136
- port.onDisconnect.addListener((): void => {
137
- unsubscribe(id);
138
- });
139
-
140
- return Promise.resolve(true);
141
- }
142
-
143
- private async rpcUnsubscribe (request: RequestRpcUnsubscribe, port: chrome.runtime.Port): Promise<boolean> {
144
- return this.#state.rpcUnsubscribe(request, port);
145
- }
146
-
147
- private redirectPhishingLanding (phishingWebsite: string): void {
148
- const nonFragment = phishingWebsite.split('#')[0];
149
- const encodedWebsite = encodeURIComponent(nonFragment);
150
- const url = `${chrome.extension.getURL('index.html')}#${PHISHING_PAGE_REDIRECT}/${encodedWebsite}`;
151
-
152
- chrome.tabs.query({ url: nonFragment }, (tabs) => {
153
- tabs
154
- .map(({ id }) => id)
155
- .filter((id): id is number => isNumber(id))
156
- .forEach((id) =>
157
- withErrorLog(() => chrome.tabs.update(id, { url }))
158
- );
159
- });
160
- }
161
-
162
- protected async redirectIfPhishing (url: string): Promise<boolean> {
163
- const isInDenyList = await checkIfDenied(url);
164
-
165
- if (isInDenyList) {
166
- this.redirectPhishingLanding(url);
167
-
168
- return true;
169
- }
170
-
171
- return false;
172
- }
173
-
174
- public async handle<TMessageType extends MessageTypes> (id: string, type: TMessageType, request: RequestTypes[TMessageType], url: string, port: chrome.runtime.Port): Promise<ResponseTypes[keyof ResponseTypes]> {
175
- if (type === 'pub(phishing.redirectIfDenied)') {
176
- return this.redirectIfPhishing(url);
177
- }
178
-
179
- switch (type) {
180
- case 'pub(authorize.tab)':
181
- return this.authorize(url, request as RequestAuthorizeTab);
182
-
183
- case 'pub(accounts.list)':
184
- return this.accountsList(url, request as RequestAccountList);
185
-
186
- case 'pub(accounts.subscribe)':
187
- return this.accountsSubscribe(url, id, port);
188
-
189
- case 'pub(bytes.sign)':
190
- return this.bytesSign(url, request as SignerPayloadRaw);
191
-
192
- case 'pub(extrinsic.sign)':
193
- return this.extrinsicSign(url, request as SignerPayloadJSON);
194
-
195
- case 'pub(metadata.list)':
196
- return this.metadataList(url);
197
-
198
- case 'pub(metadata.provide)':
199
- return this.metadataProvide(url, request as MetadataDef);
200
-
201
- case 'pub(rpc.listProviders)':
202
- return this.rpcListProviders();
203
-
204
- case 'pub(rpc.send)':
205
- return this.rpcSend(request as RequestRpcSend, port);
206
-
207
- case 'pub(rpc.startProvider)':
208
- return this.rpcStartProvider(request as string, port);
209
-
210
- case 'pub(rpc.subscribe)':
211
- return this.rpcSubscribe(request as RequestRpcSubscribe, id, port);
212
-
213
- case 'pub(rpc.subscribeConnected)':
214
- return this.rpcSubscribeConnected(request as null, id, port);
215
-
216
- case 'pub(rpc.unsubscribe)':
217
- return this.rpcUnsubscribe(request as RequestRpcUnsubscribe, port);
218
-
219
- default:
220
- throw new Error(`Unable to handle message of type ${type}`);
221
- }
222
- }
223
- }
@@ -1,14 +0,0 @@
1
- // Copyright 2019-2022 @subwallet/extension authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- export function withErrorLog (fn: () => unknown): void {
5
- try {
6
- const p = fn();
7
-
8
- if (p && typeof p === 'object' && typeof (p as Promise<unknown>).catch === 'function') {
9
- (p as Promise<unknown>).catch(console.error);
10
- }
11
- } catch (e) {
12
- console.error(e);
13
- }
14
- }
@@ -1,49 +0,0 @@
1
- // Copyright 2019-2022 @subwallet/extension authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import type { MessageTypes, TransportRequestMessage } from '../types';
5
-
6
- import { assert } from '@polkadot/util';
7
-
8
- import { PORT_EXTENSION } from '../../defaults';
9
- import Extension from './Extension';
10
- import State from './State';
11
- import Tabs from './Tabs';
12
-
13
- const state = new State();
14
- const extension = new Extension(state);
15
- const tabs = new Tabs(state);
16
-
17
- export default function handler<TMessageType extends MessageTypes> ({ id, message, request }: TransportRequestMessage<TMessageType>, port: chrome.runtime.Port, extensionPortName = PORT_EXTENSION): void {
18
- const isExtension = port.name === extensionPortName;
19
- const sender = port.sender as chrome.runtime.MessageSender;
20
- const from = isExtension
21
- ? 'extension'
22
- : (sender.tab && sender.tab.url) || sender.url || '<unknown>';
23
- const source = `${from}: ${id}: ${message}`;
24
-
25
- console.log(` [in] ${source}`); // :: ${JSON.stringify(request)}`);
26
-
27
- const promise = isExtension
28
- ? extension.handle(id, message, request, port)
29
- : tabs.handle(id, message, request, from, port);
30
-
31
- promise
32
- .then((response): void => {
33
- console.log(`[out] ${source}`); // :: ${JSON.stringify(response)}`);
34
-
35
- // between the start and the end of the promise, the user may have closed
36
- // the tab, in which case port will be undefined
37
- assert(port, 'Port has been disconnected');
38
-
39
- port.postMessage({ id, response });
40
- })
41
- .catch((error: Error): void => {
42
- console.log(`[err] ${source}:: ${error.message}`);
43
-
44
- // only send message back to port if it's still connected
45
- if (port) {
46
- port.postMessage({ error: error.message, id });
47
- }
48
- });
49
- }
@@ -1,30 +0,0 @@
1
- // Copyright 2019-2022 @subwallet/extension authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import type { MessageTypesWithSubscriptions, SubscriptionMessageTypes } from '../types';
5
-
6
- type Subscriptions = Record<string, chrome.runtime.Port>;
7
-
8
- const subscriptions: Subscriptions = {};
9
-
10
- // return a subscription callback, that will send the data to the caller via the port
11
- export function createSubscription<TMessageType extends MessageTypesWithSubscriptions> (id: string, port: chrome.runtime.Port): (data: SubscriptionMessageTypes[TMessageType]) => void {
12
- subscriptions[id] = port;
13
-
14
- return (subscription: unknown): void => {
15
- if (subscriptions[id]) {
16
- port.postMessage({ id, subscription });
17
- }
18
- };
19
- }
20
-
21
- // clear a previous subscriber
22
- export function unsubscribe (id: string): void {
23
- if (subscriptions[id]) {
24
- console.log(`Unsubscribing from ${id}`);
25
-
26
- delete subscriptions[id];
27
- } else {
28
- console.error(`Unable to unsubscribe from ${id}`);
29
- }
30
- }