@@ -16,7 +16,7 @@ import { justHash } from '@/utils/ipfs';
1616export const SQUARE = '::'
1717export const DEFAULT_IPFS_PROVIDER = 'https://ipfs.io/' ;
1818
19- export type ProviderKeyType = IPFSProviders | ArweaveProviders
19+ export type ProviderKeyType = IPFSProviders
2020export type ArweaveProviders = 'permafrost' | 'arweave'
2121export type IPFSProviders = 'pinata' | 'cloudflare' | 'ipfs' | 'dweb' | 'kodadot'
2222
@@ -29,10 +29,12 @@ export const ipfsProviders: Record<IPFSProviders, string> = {
2929}
3030
3131export const arweaveProviders : Record < ArweaveProviders , string > = {
32- permafrost : process . env . FROST_URL + '/meta/' ,
33- arweave : 'https://arweave.net/' ,
32+ permafrost : process . env . VUE_APP_PERMAFROST_URL + '/meta/' ,
33+ arweave : process . env . VUE_APP_AR_URL || 'https://arweave.net/' ,
3434}
3535
36+ export type SanitizerFunc = ( url : string ) => string
37+
3638
3739
3840export const ipfsHashToUrl = ( ipfsHash ?: string , provider ?: ProviderKeyType ) => {
@@ -43,7 +45,8 @@ export const ipfsHashToUrl = (ipfsHash?: string, provider?: ProviderKeyType) =>
4345 return ipfsHash
4446}
4547
46- const resolveProvider = ( key : ProviderKeyType = 'kodadot' ) : string => ipfsProviders [ key as IPFSProviders ] || arweaveProviders [ key as ArweaveProviders ]
48+ const resolveProvider = ( key : ProviderKeyType = 'kodadot' ) : string => ipfsProviders [ key ]
49+ const resolveArProvider = ( key : ArweaveProviders = 'arweave' ) : string => arweaveProviders [ key ]
4750
4851export const zip = < T1 , T2 , T3 > ( a : T1 [ ] , b : T2 [ ] , cb ?: ( el : ( T1 | T2 ) [ ] ) => T3 ) : T3 [ ] | ( T1 | T2 ) [ ] [ ] => {
4952 const res = a . map ( ( k , i ) => [ k , b [ i ] ] ) ;
@@ -65,19 +68,19 @@ export const fetchCollectionMetadata = (
6568
6669export const fetchNFTMetadata = (
6770 rmrk : NFT ,
68- provider ?: ProviderKeyType
69- ) : Promise < NFTMetadata > => fetchMetadata < NFTMetadata > ( rmrk , provider )
71+ sanitizer : SanitizerFunc = sanitizeIpfsUrl
72+ ) : Promise < NFTMetadata > => fetchMetadata < NFTMetadata > ( rmrk , sanitizer )
7073
7174export const fetchMetadata = async < T > (
7275 rmrk : RmrkType | CollectionOrNFT ,
73- provider ?: ProviderKeyType
76+ sanitizer : SanitizerFunc = sanitizeIpfsUrl
7477) : Promise < T > => {
7578 try {
7679 if ( ! rmrk . metadata ) {
7780 return emptyObject < T > ( ) ;
7881 }
7982
80- const { status, data } = await api . get ( sanitizeIpfsUrl ( rmrk . metadata , provider ) ) ;
83+ const { status, data } = await api . get ( sanitizer ( rmrk . metadata ) ) ;
8184 console . log ( 'IPFS data' , status , data ) ;
8285 if ( status < 400 ) {
8386 return data as T ;
@@ -119,14 +122,27 @@ const unSanitizeUrl = (url: string, prefix: string) => {
119122
120123const ar = / ^ a r : \/ \/ /
121124
122- export const sanitizeArweaveUrl = ( url : string , provider ?: ProviderKeyType ) => {
125+ export const sanitizeArweaveUrl = ( url : string , provider ?: ArweaveProviders ) => {
123126 if ( ar . test ( url ) ) {
124- return url . replace ( ar , provider || 'arweave' )
127+ return url . replace ( ar , resolveArProvider ( provider ) )
125128 }
126129
127130 return url
128131}
129132
133+ export const isIpfsUrl = ( url : string ) => {
134+ return / ^ i p f s : \/ \/ / . test ( url )
135+ }
136+
137+
138+ export const getSanitizer = ( url : string , ipfsProvider ?: ProviderKeyType , arProvider ?: ArweaveProviders ) : SanitizerFunc => {
139+ if ( isIpfsUrl ( url ) ) {
140+ return link => sanitizeIpfsUrl ( link , ipfsProvider )
141+ }
142+
143+ return link => sanitizeArweaveUrl ( link , arProvider )
144+ }
145+
130146export const sanitizeIpfsUrl = ( ipfsUrl : string , provider ?: ProviderKeyType ) => {
131147 const rr = / ^ i p f s : \/ \/ i p f s / ;
132148 if ( rr . test ( ipfsUrl ) ) {
@@ -138,7 +154,7 @@ export const sanitizeIpfsUrl = (ipfsUrl: string, provider?: ProviderKeyType) =>
138154 return ipfsUrl . replace ( 'ipfs://' , `${ resolveProvider ( provider ) } ipfs/` ) ;
139155 }
140156
141- return sanitizeArweaveUrl ( ipfsUrl , provider ) ;
157+ return sanitizeArweaveUrl ( ipfsUrl , provider as ArweaveProviders ) ;
142158} ;
143159
144160export function sanitizeImage < T extends RmrkWithMetaType > ( instance : T , provider ?: ProviderKeyType ) : T {
0 commit comments