Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.

Commit 233dc4f

Browse files
committed
Flexed last things
1 parent b4a2a36 commit 233dc4f

File tree

5 files changed

+43
-23
lines changed

5 files changed

+43
-23
lines changed

src/components/rmrk/Create/PermaMint.vue

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
label="Drop your NFT here or click to upload. We support various media types (BMP, GIF, JPEG, PNG, SVG, TIFF, WEBP)"
2525
expanded
2626
preview
27-
accept="image/png, image/jpeg, image/gif"
27+
accept="image/png, image/jpeg, image/gif, video/quicktime, image/svg+xml"
2828
/>
2929

3030
<b-field grouped :label="$i18n.t('Name')">
@@ -207,7 +207,7 @@ export default class PermaMint extends Mixins(
207207
private nsfw: boolean = false;
208208
private price: number = 0;
209209
private estimated: string = '';
210-
private hasCarbonOffset: boolean = true;
210+
private hasCarbonOffset: boolean = false;
211211
protected arweaveUpload = false;
212212
213213
protected updateMeta(value: number) {
@@ -432,16 +432,19 @@ export default class PermaMint extends Mixins(
432432
throw new ReferenceError('No file found!');
433433
}
434434
435+
const { name, description } = this.rmrkMint
436+
435437
this.meta = {
436-
...this.rmrkMint,
438+
description,
437439
...this.meta,
440+
name,
438441
attributes: [
439-
...(this.rmrkMint?.tags || []),
442+
...(this.rmrkMint?.tags.map(t => t.trait_type ? t : ({ ...t, trait_type: '' })) || []),
440443
...this.nsfwAttribute(),
441444
...this.offsetAttribute()
442445
],
443446
external_url: `https://nft.kodadot.xyz`,
444-
type: this.file.type
447+
type: this.file.type,
445448
};
446449
447450
try {

src/components/rmrk/Gallery/GalleryItem.vue

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ import { Component, Vue } from 'vue-property-decorator';
119119
// import MarkdownItVueLight from 'markdown-it-vue';
120120
import 'markdown-it-vue/dist/markdown-it-vue-light.css'
121121
import { NFT, NFTMetadata, Emote } from '../service/scheme';
122-
import { sanitizeIpfsUrl, resolveMedia } from '../utils';
122+
import { sanitizeIpfsUrl, resolveMedia, isIpfsUrl, sanitizeArweaveUrl, getSanitizer } from '../utils';
123123
import { emptyObject } from '@/utils/empty';
124124
125125
import AvailableActions from './AvailableActions.vue';
@@ -232,10 +232,14 @@ export default class GalleryItem extends Vue {
232232
233233
if (this.nft['metadata'] && !this.meta['image']) {
234234
const m = await get(this.nft.metadata)
235-
const meta = m ? m : await fetchNFTMetadata(this.nft, 'permafrost')
235+
236+
const meta = m ? m : await fetchNFTMetadata(this.nft, getSanitizer(this.nft.metadata, undefined, 'permafrost'));
237+
console.log(meta);
238+
239+
const imageSanitizer = getSanitizer(meta.image);
236240
this.meta = {
237241
...meta,
238-
image: sanitizeIpfsUrl(meta.image || '', 'arweave'),
242+
image: imageSanitizer(meta.image),
239243
animation_url: sanitizeIpfsUrl(meta.animation_url || '', 'pinata')
240244
}
241245

src/components/rmrk/utils.ts

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { justHash } from '@/utils/ipfs';
1616
export const SQUARE = '::'
1717
export const DEFAULT_IPFS_PROVIDER = 'https://ipfs.io/';
1818

19-
export type ProviderKeyType = IPFSProviders | ArweaveProviders
19+
export type ProviderKeyType = IPFSProviders
2020
export type ArweaveProviders = 'permafrost' | 'arweave'
2121
export type IPFSProviders = 'pinata' | 'cloudflare' | 'ipfs' | 'dweb' | 'kodadot'
2222

@@ -29,10 +29,12 @@ export const ipfsProviders: Record<IPFSProviders, string> = {
2929
}
3030

3131
export 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

3840
export 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

4851
export 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

6669
export 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

7174
export 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

120123
const ar = /^ar:\/\//
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 /^ipfs:\/\//.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+
130146
export const sanitizeIpfsUrl = (ipfsUrl: string, provider?: ProviderKeyType) => {
131147
const rr = /^ipfs:\/\/ipfs/;
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

144160
export function sanitizeImage<T extends RmrkWithMetaType>(instance: T, provider?: ProviderKeyType): T {

src/proxy.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,6 @@ export const permaStore = async (nftMeta: NFTMetadata, file: Blob, collection: s
125125

126126
formData.append('collection', collection);
127127

128-
formData.append('collection', collection);
129-
formData.append('instance', '1');
130-
131128
try {
132129
const { status, data } = await Axios.post(PERMAFROST_URL + '/store', formData, {
133130
headers: {

src/router/rmrk.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export default [
6262
component: SimpleMint
6363
},
6464
{
65-
path: '/rmrk/permamint',
65+
path: '/permafrost/create',
6666
name: 'permafrost',
6767
component: PermaMint
6868
},

0 commit comments

Comments
 (0)