Skip to content

Commit 1c54a88

Browse files
authored
Merge pull request #567 from Orchestra-Labs/main
feat: update aria extension entry
2 parents c5897c3 + 9cb6b05 commit 1c54a88

File tree

4 files changed

+91
-152
lines changed

4 files changed

+91
-152
lines changed
Lines changed: 46 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
1-
import { chainRegistryChainToKeplr } from '@chain-registry/keplr';
2-
import { StdSignature, StdSignDoc } from '@cosmjs/amino';
3-
import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing';
1+
import {
2+
AminoSignResponse,
3+
OfflineAminoSigner,
4+
StdSignDoc,
5+
StdSignature,
6+
} from '@cosmjs/amino';
7+
import {
8+
Algo,
9+
DirectSignResponse,
10+
OfflineDirectSigner,
11+
OfflineSigner,
12+
} from '@cosmjs/proto-signing';
413
import {
514
BroadcastMode,
6-
ChainRecord,
7-
ExtendedHttpEndpoint,
15+
DirectSignDoc,
16+
SignOptions,
817
SignType,
918
SuggestToken,
19+
WalletAccount,
20+
WalletClient,
1021
} from '@cosmos-kit/core';
11-
import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core';
12-
import Long from 'long';
13-
1422
import { Aria } from './types';
1523

1624
export class AriaClient implements WalletClient {
@@ -29,14 +37,11 @@ export class AriaClient implements WalletClient {
2937
this._defaultSignOptions = options;
3038
}
3139

32-
constructor(client: Aria) {
40+
constructor(client: any) {
41+
if (!client) throw new Error('Aria client not initialized');
3342
this.client = client;
3443
}
3544

36-
async enable(chainIds: string | string[]) {
37-
await this.client.enable(chainIds);
38-
}
39-
4045
async suggestToken({ chainId, tokens, type }: SuggestToken) {
4146
if (type === 'cw20') {
4247
for (const { contractAddress } of tokens) {
@@ -45,29 +50,6 @@ export class AriaClient implements WalletClient {
4550
}
4651
}
4752

48-
async addChain(chainInfo: ChainRecord) {
49-
const suggestChain = chainRegistryChainToKeplr(
50-
chainInfo.chain,
51-
chainInfo.assetList ? [chainInfo.assetList] : []
52-
);
53-
54-
if (chainInfo.preferredEndpoints?.rest?.[0]) {
55-
(suggestChain.rest as string | ExtendedHttpEndpoint) =
56-
chainInfo.preferredEndpoints?.rest?.[0];
57-
}
58-
59-
if (chainInfo.preferredEndpoints?.rpc?.[0]) {
60-
(suggestChain.rpc as string | ExtendedHttpEndpoint) =
61-
chainInfo.preferredEndpoints?.rpc?.[0];
62-
}
63-
64-
await this.client.experimentalSuggestChain(suggestChain);
65-
}
66-
67-
async disconnect() {
68-
await this.client.disconnect();
69-
}
70-
7153
async getSimpleAccount(chainId: string) {
7254
const { address, username } = await this.getAccount(chainId);
7355
return {
@@ -78,7 +60,7 @@ export class AriaClient implements WalletClient {
7860
};
7961
}
8062

81-
async getAccount(chainId: string) {
63+
async getAccount(chainId: string): Promise<WalletAccount> {
8264
const key = await this.client.getKey(chainId);
8365
return {
8466
username: key.name,
@@ -89,32 +71,12 @@ export class AriaClient implements WalletClient {
8971
};
9072
}
9173

92-
getOfflineSigner(chainId: string, preferredSignType?: SignType) {
93-
switch (preferredSignType) {
94-
case 'amino':
95-
return this.getOfflineSignerAmino(chainId);
96-
case 'direct':
97-
return this.getOfflineSignerDirect(chainId);
98-
default:
99-
return this.getOfflineSignerAmino(chainId);
100-
}
101-
// return this.client.getOfflineSignerAuto(chainId);
102-
}
103-
104-
getOfflineSignerAmino(chainId: string) {
105-
return this.client.getOfflineSignerOnlyAmino(chainId);
106-
}
107-
108-
getOfflineSignerDirect(chainId: string) {
109-
return this.client.getOfflineSigner(chainId) as OfflineDirectSigner;
110-
}
111-
11274
async signAmino(
11375
chainId: string,
11476
signer: string,
11577
signDoc: StdSignDoc,
11678
signOptions?: SignOptions
117-
) {
79+
): Promise<AminoSignResponse> {
11880
return await this.client.signAmino(
11981
chainId,
12082
signer,
@@ -136,19 +98,39 @@ export class AriaClient implements WalletClient {
13698
signer: string,
13799
signDoc: DirectSignDoc,
138100
signOptions?: SignOptions
139-
) {
101+
): Promise<DirectSignResponse> {
140102
return await this.client.signDirect(
141103
chainId,
142104
signer,
143-
{
144-
...signDoc,
145-
accountNumber: Long.fromString(signDoc.accountNumber.toString()),
146-
},
105+
signDoc,
147106
signOptions || this.defaultSignOptions
148107
);
149108
}
150109

110+
getOfflineSigner(
111+
chainId: string,
112+
preferredSignType?: SignType
113+
): OfflineSigner {
114+
switch (preferredSignType) {
115+
case 'amino':
116+
return this.getOfflineSignerAmino(chainId);
117+
case 'direct':
118+
return this.getOfflineSignerDirect(chainId);
119+
default:
120+
return this.getOfflineSignerAmino(chainId);
121+
}
122+
// return this.client.getOfflineSignerAuto(chainId);
123+
}
124+
125+
getOfflineSignerAmino(chainId: string): OfflineAminoSigner {
126+
return this.client.getOfflineSignerOnlyAmino(chainId);
127+
}
128+
129+
getOfflineSignerDirect(chainId: string): OfflineDirectSigner {
130+
return this.client.getOfflineSigner(chainId) as OfflineDirectSigner;
131+
}
132+
151133
async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) {
152-
return await this.client.sendTx(chainId, tx, mode);
134+
return this.client.sendTx(chainId, tx, mode);
153135
}
154136
}

wallets/aria-extension/src/extension/registry.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import { Wallet } from '@cosmos-kit/core';
2-
32
import { ICON } from '../constant';
43

54
export const ariaExtensionInfo: Wallet = {
65
name: 'aria-extension',
76
prettyName: 'Aria',
87
logo: ICON,
98
mode: 'extension',
10-
mobileDisabled: () =>
11-
!('aria' in window || /AriaCosmos/i.test(navigator.userAgent)),
9+
mobileDisabled: () => !('aria' in window),
1210
rejectMessage: {
1311
source: 'Request rejected',
1412
},

wallets/aria-extension/src/extension/types.ts

Lines changed: 36 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,83 +4,61 @@ import {
44
StdSignature,
55
StdSignDoc,
66
} from '@cosmjs/amino';
7-
import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing';
8-
import { DirectSignResponse } from '@cosmjs/proto-signing';
9-
import { BroadcastMode } from '@cosmos-kit/core';
10-
import type { ChainInfo } from '@keplr-wallet/types';
11-
12-
export interface Key {
13-
readonly name: string;
14-
readonly algo: string;
15-
readonly pubKey: Uint8Array;
16-
readonly address: Uint8Array;
17-
readonly bech32Address: string;
18-
readonly isNanoLedger: boolean;
19-
}
20-
export interface AriaSignOptions {
21-
readonly preferNoSetFee?: boolean;
22-
readonly preferNoSetMemo?: boolean;
23-
readonly disableBalanceCheck?: boolean;
24-
}
7+
import { DirectSignResponse, OfflineSigner } from '@cosmjs/proto-signing';
8+
import { BroadcastMode, DirectSignDoc, SignOptions } from '@cosmos-kit/core';
259

2610
export interface Aria {
27-
defaultOptions: {
28-
sign?: AriaSignOptions;
29-
};
30-
disconnect(): Promise<void>;
31-
enable(chainIds: string | string[]): Promise<void>;
32-
suggestToken(chainId: string, contractAddress: string): Promise<void>;
33-
suggestCW20Token(chainId: string, contractAddress: string): Promise<void>;
34-
mode: 'extension';
35-
getKey(chainId: string): Promise<Key>;
36-
getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner;
37-
getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner;
38-
getOfflineSignerAuto(chainId: string): Promise<OfflineSigner>;
11+
// Account Methods
12+
getKey(chainId: string): Promise<{
13+
name: string;
14+
bech32Address: string;
15+
algo: string;
16+
pubKey: Uint8Array;
17+
isNanoLedger: boolean;
18+
}>;
19+
20+
// Signing Methods
3921
signAmino(
4022
chainId: string,
4123
signer: string,
4224
signDoc: StdSignDoc,
43-
signOptions?: AriaSignOptions
25+
signOptions?: SignOptions
4426
): Promise<AminoSignResponse>;
27+
4528
signDirect(
4629
chainId: string,
4730
signer: string,
48-
signDoc: {
49-
/** SignDoc bodyBytes */
50-
bodyBytes?: Uint8Array | null;
51-
/** SignDoc authInfoBytes */
52-
authInfoBytes?: Uint8Array | null;
53-
/** SignDoc chainId */
54-
chainId?: string | null;
55-
/** SignDoc accountNumber */
56-
accountNumber?: Long | null;
57-
},
58-
signOptions?: AriaSignOptions
31+
signDoc: DirectSignDoc,
32+
signOptions?: SignOptions
5933
): Promise<DirectSignResponse>;
34+
6035
signArbitrary(
6136
chainId: string,
6237
signer: string,
6338
data: string | Uint8Array
6439
): Promise<StdSignature>;
65-
getEnigmaPubKey(chainId: string): Promise<Uint8Array>;
66-
getEnigmaTxEncryptionKey(
67-
chainId: string,
68-
nonce: Uint8Array
69-
): Promise<Uint8Array>;
70-
enigmaEncrypt(
71-
chainId: string,
72-
contractCodeHash: string,
73-
msg: object
74-
): Promise<Uint8Array>;
75-
enigmaDecrypt(
76-
chainId: string,
77-
ciphertext: Uint8Array,
78-
nonce: Uint8Array
79-
): Promise<Uint8Array>;
40+
41+
// Transaction Methods
8042
sendTx(
8143
chainId: string,
8244
tx: Uint8Array,
8345
mode: BroadcastMode
8446
): Promise<Uint8Array>;
85-
experimentalSuggestChain(chainInfo: ChainInfo): Promise<void>;
47+
48+
// Signer Methods
49+
getOfflineSigner(chainId: string): OfflineSigner;
50+
getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner;
51+
52+
// Token Support
53+
suggestCW20Token?(chainId: string, contractAddress: string): Promise<void>;
54+
55+
// Optional Methods (if used)
56+
enable?(chainIds: string | string[]): Promise<void>;
57+
disconnect?(): Promise<void>;
58+
}
59+
60+
declare global {
61+
interface Window {
62+
aria?: Aria;
63+
}
8664
}
Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,28 @@
11
import { ClientNotExistError } from '@cosmos-kit/core';
22

3-
import { Aria } from './types';
4-
5-
interface AriaWindow {
6-
aria?: Aria;
7-
}
8-
9-
export const getAriaFromExtension: () => Promise<
10-
Aria | undefined
11-
> = async () => {
3+
export const getAriaFromExtension = async () => {
124
if (typeof window === 'undefined') {
13-
return void 0;
5+
return undefined;
146
}
157

16-
const aria = (window as AriaWindow).aria;
8+
const aria = (window as any).aria;
179

1810
if (aria) {
1911
return aria;
2012
}
2113

22-
if (document.readyState === 'complete') {
23-
if (aria) {
24-
return aria;
25-
} else {
26-
throw ClientNotExistError;
27-
}
28-
}
29-
3014
return new Promise((resolve, reject) => {
31-
const documentStateChange = (event: Event) => {
32-
if (
33-
event.target &&
34-
(event.target as Document).readyState === 'complete'
35-
) {
15+
const checkReadyState = () => {
16+
if (document.readyState === 'complete') {
17+
const aria = (window as any).aria;
3618
if (aria) {
3719
resolve(aria);
3820
} else {
39-
reject(ClientNotExistError.message);
21+
reject(ClientNotExistError);
4022
}
41-
document.removeEventListener('readystatechange', documentStateChange);
4223
}
4324
};
4425

45-
document.addEventListener('readystatechange', documentStateChange);
26+
document.addEventListener('readystatechange', checkReadyState);
4627
});
4728
};

0 commit comments

Comments
 (0)