Skip to content

Commit 6072379

Browse files
committed
support newest cosmiframe with regex origins and chain ID signer overrides
1 parent 5e3afcb commit 6072379

File tree

10 files changed

+68
-79
lines changed

10 files changed

+68
-79
lines changed

packages/core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
"@cosmjs/cosmwasm-stargate": "^0.32.3",
8080
"@cosmjs/proto-signing": "^0.32.3",
8181
"@cosmjs/stargate": "^0.32.3",
82-
"@dao-dao/cosmiframe": "^0.1.0",
82+
"@dao-dao/cosmiframe": "^1.0.0-rc.1",
8383
"@walletconnect/types": "2.11.0",
8484
"bowser": "2.11.0",
8585
"cosmjs-types": "^0.9.0",

packages/core/src/cosmiframe/cosmiframe.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { Origin } from '@dao-dao/cosmiframe';
2+
13
import { cosmiframeExtensionInfo, CosmiframeWallet } from './extension';
24

3-
export const makeCosmiframeWallet = (allowedParentOrigins: string[]) =>
5+
export const makeCosmiframeWallet = (allowedParentOrigins: Origin[]) =>
46
new CosmiframeWallet({
57
...cosmiframeExtensionInfo,
68
allowedParentOrigins,
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import { Origin } from '@dao-dao/cosmiframe';
2+
13
import { Wallet } from '../../types';
24

35
export type CosmiframeWalletInfo = Wallet & {
4-
allowedParentOrigins: string[];
6+
allowedParentOrigins: Origin[];
57
};

packages/core/src/manager.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable @typescript-eslint/no-non-null-assertion */
22
import type { AssetList, Chain } from '@chain-registry/types';
3-
import { isInIframe } from '@dao-dao/cosmiframe';
3+
import { isInIframe, Origin } from '@dao-dao/cosmiframe';
44
import Bowser from 'bowser';
55
import EventEmitter from 'events';
66

@@ -52,7 +52,13 @@ export class WalletManager extends StateBase {
5252
logger: Logger,
5353
throwErrors: boolean | 'connect_only',
5454
subscribeConnectEvents = true,
55-
allowedCosmiframeParentOrigins?: string[],
55+
allowedCosmiframeParentOrigins: Origin[] = [
56+
/^https?:\/\/localhost(:\d+)?/,
57+
/^https:\/\/(.+\.)?osmosis\.zone/,
58+
/^https:\/\/(.+\.)?daodao\.zone/,
59+
/^https:\/\/.+-da0da0\.vercel\.app/,
60+
/^https:\/\/(.+\.)?abstract\.money/,
61+
],
5662
assetLists?: AssetList[],
5763
defaultNameService?: NameServiceName,
5864
walletConnectOptions?: WalletConnectOptions,
@@ -87,8 +93,8 @@ export class WalletManager extends StateBase {
8793
];
8894
wallets.forEach(
8995
({ walletName }) =>
90-
(this._reconnectMap[walletName] = () =>
91-
this._reconnect(walletName, true))
96+
(this._reconnectMap[walletName] = () =>
97+
this._reconnect(walletName, true))
9298
);
9399
this.init(
94100
chains,

packages/react-lite/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
"dependencies": {
8181
"@chain-registry/types": "^0.46.11",
8282
"@cosmos-kit/core": "^2.15.0",
83-
"@dao-dao/cosmiframe": "^0.1.0"
83+
"@dao-dao/cosmiframe": "^1.0.0-rc.1"
8484
},
8585
"resolutions": {
8686
"@types/react": "^18.2"

packages/react-lite/src/hooks/useIframe.ts

+30-11
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from '@cosmos-kit/core';
1010
import {
1111
Cosmiframe,
12+
Origin,
1213
OverrideHandler,
1314
ParentMetadata,
1415
} from '@dao-dao/cosmiframe';
@@ -20,6 +21,12 @@ export type FunctionKeys<T> = {
2021
[K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? K : never;
2122
}[keyof T];
2223

24+
export type UseIframeSignerOverrides = Partial<{
25+
[K in keyof (OfflineAminoSigner & OfflineDirectSigner)]: (
26+
...params: Parameters<(OfflineAminoSigner & OfflineDirectSigner)[K]>
27+
) => OverrideHandler | Promise<OverrideHandler>;
28+
}>;
29+
2330
export type UseIframeOptions = {
2431
/**
2532
* Optionally attempt to use a specific wallet. Otherwise get the first active
@@ -47,16 +54,15 @@ export type UseIframeOptions = {
4754
* should handle the function. By default, if nothing is returned, an error
4855
* will be thrown with the message "Handled by outer wallet."
4956
*/
50-
signerOverrides?: Partial<{
51-
[K in keyof (OfflineAminoSigner & OfflineDirectSigner)]: (
52-
...params: Parameters<(OfflineAminoSigner & OfflineDirectSigner)[K]>
53-
) => OverrideHandler | Promise<OverrideHandler>;
54-
}>;
57+
signerOverrides?:
58+
| UseIframeSignerOverrides
59+
| ((chainId: string) => UseIframeSignerOverrides)
60+
| ((chainId: string) => Promise<UseIframeSignerOverrides>);
5561
/**
5662
* Optionally only respond to requests from iframes of specific origin. If
5763
* undefined or empty, all origins are allowed.
5864
*/
59-
origins?: string[];
65+
origins?: Origin[];
6066
};
6167

6268
export type UseIframeReturn = {
@@ -151,13 +157,21 @@ export const useIframe = ({
151157
target: wallet?.client || {},
152158
getOfflineSignerDirect:
153159
wallet?.client.getOfflineSignerDirect.bind(wallet.client) ||
154-
(() => Promise.reject(COSMIFRAME_NOT_CONNECTED_MESSAGE)),
160+
(() =>
161+
Promise.reject(
162+
COSMIFRAME_NOT_CONNECTED_MESSAGE +
163+
' No direct signer client function found.'
164+
)),
155165
getOfflineSignerAmino:
156166
wallet?.client.getOfflineSignerAmino.bind(wallet.client) ||
157-
(() => Promise.reject(COSMIFRAME_NOT_CONNECTED_MESSAGE)),
167+
(() =>
168+
Promise.reject(
169+
COSMIFRAME_NOT_CONNECTED_MESSAGE +
170+
' No amino signer client function found.'
171+
)),
158172
nonSignerOverrides: () => ({
159173
...walletClientOverridesRef.current,
160-
// Override connect to return wallet info.
174+
// Override connect to return specific error.
161175
connect: async (...params) => {
162176
if (walletClientOverridesRef.current?.connect) {
163177
return await walletClientOverridesRef.current.connect(
@@ -169,12 +183,17 @@ export const useIframe = ({
169183
} else {
170184
return {
171185
type: 'error',
172-
error: COSMIFRAME_NOT_CONNECTED_MESSAGE,
186+
error:
187+
COSMIFRAME_NOT_CONNECTED_MESSAGE +
188+
' No connect client function found or override provided.',
173189
};
174190
}
175191
},
176192
}),
177-
signerOverrides: () => signerOverridesRef.current,
193+
signerOverrides: async (chainId) =>
194+
typeof signerOverridesRef.current === 'function'
195+
? signerOverridesRef.current(chainId)
196+
: signerOverridesRef.current,
178197
origins,
179198
metadata: {
180199
name:

packages/react-lite/src/provider.tsx

+6-14
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
WalletModalProps,
1616
WalletRepo,
1717
} from '@cosmos-kit/core';
18+
import { Origin } from '@dao-dao/cosmiframe';
1819
import { createContext, ReactNode, useEffect, useMemo, useState } from 'react';
1920

2021
export const walletContext = createContext<{
@@ -35,16 +36,7 @@ export function ChainProvider({
3536
endpointOptions,
3637
sessionOptions,
3738
logLevel = 'WARN',
38-
allowedIframeParentOrigins = [
39-
'http://localhost:3000',
40-
'https://localhost:3000',
41-
'https://app.osmosis.zone',
42-
'https://daodao.zone',
43-
'https://dao.daodao.zone',
44-
'https://my.abstract.money',
45-
'https://apps.abstract.money',
46-
'https://console.abstract.money',
47-
],
39+
allowedIframeParentOrigins,
4840
children,
4941
}: {
5042
chains: (Chain | ChainName)[];
@@ -63,9 +55,9 @@ export function ChainProvider({
6355
* Origins to allow wrapping this app in an iframe and connecting to this
6456
* Cosmos Kit instance.
6557
*
66-
* Defaults to Osmosis and DAO DAO.
58+
* Defaults to localhost, Osmosis, DAO DAO, and Abstract.
6759
*/
68-
allowedIframeParentOrigins?: string[];
60+
allowedIframeParentOrigins?: Origin[];
6961
children: ReactNode;
7062
}) {
7163
const logger = useMemo(() => new Logger(logLevel), []);
@@ -143,10 +135,10 @@ export function ChainProvider({
143135
}, []);
144136

145137
useEffect(() => {
146-
walletManager && walletManager.onMounted();
138+
walletManager?.onMounted();
147139
return () => {
148140
setViewOpen(false);
149-
walletManager && walletManager.onUnmounted();
141+
walletManager?.onUnmounted();
150142
};
151143
}, [render, walletManager]);
152144

packages/react/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@
7676
},
7777
"devDependencies": {
7878
"@types/react": "^18.2",
79-
"@types/react-dom": "^18.2"
79+
"@types/react-dom": "^18.2",
80+
"@dao-dao/cosmiframe": "^1.0.0-rc.1"
8081
},
8182
"dependencies": {
8283
"@chain-registry/types": "^0.46.11",

packages/react/src/provider.tsx

+5-13
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ import {
1313
WalletModalProps,
1414
} from '@cosmos-kit/core';
1515
import { ChainProvider as ChainProviderLite } from '@cosmos-kit/react-lite';
16+
import { Origin } from '@dao-dao/cosmiframe';
1617
import { ReactNode, useCallback, useMemo } from 'react';
1718

19+
import { SelectedWalletRepoProvider } from './context';
1820
import { ThemeCustomizationProps, WalletModal } from './modal';
1921
import { defaultModalViews } from './modal/components/views';
20-
import { SelectedWalletRepoProvider } from './context';
2122

2223
export const ChainProvider = ({
2324
chains,
@@ -33,16 +34,7 @@ export const ChainProvider = ({
3334
endpointOptions,
3435
sessionOptions,
3536
logLevel = 'WARN',
36-
allowedIframeParentOrigins = [
37-
'http://localhost:3000',
38-
'https://localhost:3000',
39-
'https://app.osmosis.zone',
40-
'https://daodao.zone',
41-
'https://dao.daodao.zone',
42-
'https://my.abstract.money',
43-
'https://apps.abstract.money',
44-
'https://console.abstract.money'
45-
],
37+
allowedIframeParentOrigins,
4638
children,
4739
modalTheme = {},
4840
modalOptions,
@@ -64,9 +56,9 @@ export const ChainProvider = ({
6456
* Origins to allow wrapping this app in an iframe and connecting to this
6557
* Cosmos Kit instance.
6658
*
67-
* Defaults to Osmosis and DAO DAO.
59+
* Defaults to Osmosis, DAO DAO, and Abstract.
6860
*/
69-
allowedIframeParentOrigins?: string[];
61+
allowedIframeParentOrigins?: Origin[];
7062
children: ReactNode;
7163
modalTheme?: ThemeCustomizationProps;
7264
modalOptions?: ModalOptions;

yarn.lock

+7-32
Original file line numberDiff line numberDiff line change
@@ -1581,10 +1581,10 @@
15811581
node-appwrite "^14.0.0"
15821582
ses "^0.18.4"
15831583

1584-
"@dao-dao/cosmiframe@^0.1.0":
1585-
version "0.1.0"
1586-
resolved "https://registry.yarnpkg.com/@dao-dao/cosmiframe/-/cosmiframe-0.1.0.tgz#5ba241d0c14a45d62df60cff7d48ba26844ebeac"
1587-
integrity sha512-NW4pGt1ctqDfhn/A6RU2vwnFEu3O4aBNnBMrGnw31n+L35drYNEsA9ZB7KZsHmRRlkNx+jSuJSv2Fv0BFBDDJQ==
1584+
"@dao-dao/cosmiframe@^1.0.0-rc.1":
1585+
version "1.0.0-rc.1"
1586+
resolved "https://registry.yarnpkg.com/@dao-dao/cosmiframe/-/cosmiframe-1.0.0-rc.1.tgz#51d4d1801605b8abfd01ae0425c797b6b876991e"
1587+
integrity sha512-XftJPwbqgS1RWg9SUNBI58vTGnjINZ995OYRwDuUZ6CsuENS2DifAzqgzDgdac+0o5Hqvy/5Aq+HN1Jl/dptTw==
15881588
dependencies:
15891589
uuid "^9.0.1"
15901590

@@ -18024,16 +18024,7 @@ string-length@^4.0.1:
1802418024
char-regex "^1.0.2"
1802518025
strip-ansi "^6.0.0"
1802618026

18027-
"string-width-cjs@npm:string-width@^4.2.0":
18028-
version "4.2.3"
18029-
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
18030-
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
18031-
dependencies:
18032-
emoji-regex "^8.0.0"
18033-
is-fullwidth-code-point "^3.0.0"
18034-
strip-ansi "^6.0.1"
18035-
18036-
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
18027+
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
1803718028
version "4.2.3"
1803818029
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1803918030
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -18149,7 +18140,7 @@ stringify-entities@^4.0.0:
1814918140
character-entities-html4 "^2.0.0"
1815018141
character-entities-legacy "^3.0.0"
1815118142

18152-
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
18143+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1815318144
version "6.0.1"
1815418145
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1815518146
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -18177,13 +18168,6 @@ strip-ansi@^5.1.0:
1817718168
dependencies:
1817818169
ansi-regex "^4.1.0"
1817918170

18180-
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
18181-
version "6.0.1"
18182-
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
18183-
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
18184-
dependencies:
18185-
ansi-regex "^5.0.1"
18186-
1818718171
strip-ansi@^7.0.1:
1818818172
version "7.1.0"
1818918173
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -19739,7 +19723,7 @@ wordwrap@^1.0.0:
1973919723
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1974019724
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
1974119725

19742-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
19726+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
1974319727
version "7.0.0"
1974419728
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1974519729
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -19757,15 +19741,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0:
1975719741
string-width "^4.1.0"
1975819742
strip-ansi "^6.0.0"
1975919743

19760-
wrap-ansi@^7.0.0:
19761-
version "7.0.0"
19762-
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
19763-
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
19764-
dependencies:
19765-
ansi-styles "^4.0.0"
19766-
string-width "^4.1.0"
19767-
strip-ansi "^6.0.0"
19768-
1976919744
wrap-ansi@^8.1.0:
1977019745
version "8.1.0"
1977119746
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"

0 commit comments

Comments
 (0)