forked from DA0-DA0/dao-dao-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprofile.ts
166 lines (155 loc) · 3.19 KB
/
profile.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import { Chain } from '@chain-registry/types'
export type PfpkProfile = {
/**
* Unique ID for this profile. Will be null if no profile has been created.
*/
uuid: string | null
nonce: number
name: string | null
nft: {
chainId: string
imageUrl: string
tokenId: string
collectionAddress: string
} | null
/**
* Map chain ID to public key and address.
*/
chains: Record<
string,
{
publicKey: string
address: string
}
>
}
export type PfpkProfileUpdate = {
nonce: number
name?: string | null
nft?: {
chainId: string
tokenId: string
collectionAddress: string
} | null
}
/**
* Function used to update a profile. Throws an error on failure.
*/
export type PfpkProfileUpdateFunction = (
updates: Omit<PfpkProfileUpdate, 'nonce'>
) => Promise<void>
/**
* The source of the name in the unified profile.
*/
export type UnifiedProfileNameSource = 'pfpk' | 'stargaze'
/**
* A unified profile that uses information from backup sources when missing from
* PFPK.
*/
export type UnifiedProfile = PfpkProfile & {
/**
* The source chain and address used to load the profile.
*/
source: {
/**
* The chain ID of the source.
*/
chainId: string
/**
* The address of the source.
*/
address: string
}
/**
* Image URL to use, which takes into account backup data sources if PFPK does
* not have an NFT set.
*/
imageUrl: string
/**
* The source of the name.
*/
nameSource: UnifiedProfileNameSource
/**
* Backup image URL that will be used if no PFPK NFT is set.
*/
backupImageUrl: string
}
export type KeplrWalletProfile = {
profile:
| {}
| {
imageUrl: string
version: number
}
}
export type ResolvedProfile = {
publicKey: string
address: string
name: string | null
nft: {
chainId: string
collectionAddress: string
tokenId: string
imageUrl: string
} | null
}
export type ProfileChain = {
/**
* The chain ID of the chain.
*/
chainId: string
/**
* The chain object.
*/
chain: Chain
/**
* Whether or not this is a DAO DAO-supported chain.
*/
supported: boolean
/**
* The address for the profile on this chain.
*/
address: string
/**
* The hex public key for the profile on this chain.
*/
publicKey: string
}
export type AddChainsStatus = 'idle' | 'chains' | 'registering'
export type AddChainsChainStatus = 'idle' | 'loading' | 'done'
/**
* Function used to add chains to a profile. Throws an error on failure.
*/
export type AddChainsFunction = (
/**
* Chain IDs to add to the profile.
*/
chainIds: string[],
/**
* Callbacks.
*/
callbacks?: {
/**
* Callback for handling status updates for displaying in the UI while the
* chains are being added.
*/
setChainStatus?: (chainId: string, status: AddChainsChainStatus) => void
}
) => Promise<void>
/**
* Another profile connected on the same wallet. Used in `useManageProfile`.
*/
export type OtherProfile = {
/**
* The chain ID of the chain.
*/
chainId: string
/**
* The address for the profile on this chain.
*/
address: string
/**
* The profile.
*/
profile: UnifiedProfile
}