@yallet/rwa-sdk 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +365 -0
- package/dist/credential-nft-server.d.ts +75 -0
- package/dist/credential-nft-server.d.ts.map +1 -0
- package/dist/credential-nft-server.js +122 -0
- package/dist/credential-nft-server.js.map +1 -0
- package/dist/credential-nft.d.ts +31 -0
- package/dist/credential-nft.d.ts.map +1 -0
- package/dist/credential-nft.js +38 -0
- package/dist/credential-nft.js.map +1 -0
- package/dist/encryption.d.ts +107 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +176 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata.d.ts +161 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +180 -0
- package/dist/metadata.js.map +1 -0
- package/dist/minting.d.ts +63 -0
- package/dist/minting.d.ts.map +1 -0
- package/dist/minting.js +194 -0
- package/dist/minting.js.map +1 -0
- package/dist/payloads.d.ts +120 -0
- package/dist/payloads.d.ts.map +1 -0
- package/dist/payloads.js +118 -0
- package/dist/payloads.js.map +1 -0
- package/dist/registry.d.ts +77 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +173 -0
- package/dist/registry.js.map +1 -0
- package/dist/sdk.d.ts +158 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +346 -0
- package/dist/sdk.js.map +1 -0
- package/dist/storage.d.ts +80 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +284 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +278 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/package.json +64 -0
- package/src/credential-nft-server.ts +201 -0
- package/src/credential-nft.ts +64 -0
- package/src/encryption.ts +308 -0
- package/src/index.ts +151 -0
- package/src/metadata.ts +336 -0
- package/src/minting.ts +266 -0
- package/src/payloads.ts +238 -0
- package/src/registry.ts +236 -0
- package/src/sdk.ts +507 -0
- package/src/storage.ts +364 -0
- package/src/types.ts +318 -0
- package/wasm/README.md +33 -0
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yallet RWA SDK - NFT Metadata Module
|
|
3
|
+
*
|
|
4
|
+
* Generates Metaplex-compatible NFT metadata for RWA assets
|
|
5
|
+
*/
|
|
6
|
+
import { AssetType } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Get icon URL for asset type
|
|
9
|
+
*/
|
|
10
|
+
function getAssetTypeIcon(assetType) {
|
|
11
|
+
const icons = {
|
|
12
|
+
[AssetType.NOTE]: 'https://yallet.app/icons/rwa-note.png',
|
|
13
|
+
[AssetType.INVOICE]: 'https://yallet.app/icons/rwa-invoice.png',
|
|
14
|
+
[AssetType.PHOTO]: 'https://yallet.app/icons/rwa-photo.png',
|
|
15
|
+
[AssetType.FILE]: 'https://yallet.app/icons/rwa-file.png',
|
|
16
|
+
[AssetType.CONTACT]: 'https://yallet.app/icons/rwa-contact.png',
|
|
17
|
+
};
|
|
18
|
+
return icons[assetType] || icons[AssetType.FILE];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get default description for asset type
|
|
22
|
+
*/
|
|
23
|
+
function getDefaultDescription(assetType, direction) {
|
|
24
|
+
const descriptions = {
|
|
25
|
+
[AssetType.NOTE]: 'Encrypted note',
|
|
26
|
+
[AssetType.INVOICE]: 'Encrypted invoice',
|
|
27
|
+
[AssetType.PHOTO]: 'Encrypted photo',
|
|
28
|
+
[AssetType.FILE]: 'Encrypted file',
|
|
29
|
+
[AssetType.CONTACT]: 'Encrypted contact',
|
|
30
|
+
};
|
|
31
|
+
const base = descriptions[assetType] || 'Encrypted asset';
|
|
32
|
+
const directionSuffix = direction === 'received' ? ' (Received)' : '';
|
|
33
|
+
return `${base}${directionSuffix} - Decryptable only by the owner`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate a UUID v4
|
|
37
|
+
*/
|
|
38
|
+
function generateUUID() {
|
|
39
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
40
|
+
return crypto.randomUUID();
|
|
41
|
+
}
|
|
42
|
+
// Fallback for environments without crypto.randomUUID
|
|
43
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
44
|
+
const r = (Math.random() * 16) | 0;
|
|
45
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
46
|
+
return v.toString(16);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate Metaplex-compatible NFT metadata
|
|
51
|
+
*
|
|
52
|
+
* @param params - Metadata parameters
|
|
53
|
+
* @returns NFT metadata object
|
|
54
|
+
*/
|
|
55
|
+
export function generateNFTMetadata(params) {
|
|
56
|
+
const { name, description, assetType, encryptedDataUri, owner, direction = 'sent', additionalAttributes = [], externalUrl = 'https://yallet.app',
|
|
57
|
+
// New fields with defaults
|
|
58
|
+
uuid = generateUUID(), timestamp = Math.floor(Date.now() / 1000), previousToken = null, schema = null, mimeType = null, dataSize = null, } = params;
|
|
59
|
+
const finalDescription = description || getDefaultDescription(assetType, direction);
|
|
60
|
+
// Build attributes array with required and optional fields
|
|
61
|
+
const attributes = [
|
|
62
|
+
{ trait_type: 'Asset Type', value: assetType },
|
|
63
|
+
{ trait_type: 'Direction', value: direction },
|
|
64
|
+
{ trait_type: 'Encrypted', value: 'true' },
|
|
65
|
+
{ trait_type: 'Version', value: '1' },
|
|
66
|
+
{ trait_type: 'UUID', value: uuid },
|
|
67
|
+
{ trait_type: 'Timestamp', value: String(timestamp) },
|
|
68
|
+
];
|
|
69
|
+
// Add optional attributes only if they have values
|
|
70
|
+
if (previousToken) {
|
|
71
|
+
attributes.push({ trait_type: 'Previous Token', value: previousToken });
|
|
72
|
+
}
|
|
73
|
+
if (schema) {
|
|
74
|
+
attributes.push({ trait_type: 'Schema', value: schema });
|
|
75
|
+
}
|
|
76
|
+
if (mimeType) {
|
|
77
|
+
attributes.push({ trait_type: 'MIME Type', value: mimeType });
|
|
78
|
+
}
|
|
79
|
+
if (dataSize !== null && dataSize !== undefined) {
|
|
80
|
+
attributes.push({ trait_type: 'Data Size', value: String(dataSize) });
|
|
81
|
+
}
|
|
82
|
+
// Add any additional custom attributes
|
|
83
|
+
attributes.push(...additionalAttributes);
|
|
84
|
+
return {
|
|
85
|
+
name,
|
|
86
|
+
symbol: 'YRWA', // Yallet RWA
|
|
87
|
+
description: finalDescription,
|
|
88
|
+
image: getAssetTypeIcon(assetType),
|
|
89
|
+
external_url: externalUrl,
|
|
90
|
+
attributes,
|
|
91
|
+
properties: {
|
|
92
|
+
files: [
|
|
93
|
+
{
|
|
94
|
+
uri: encryptedDataUri,
|
|
95
|
+
type: mimeType || 'application/octet-stream',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
category: 'document',
|
|
99
|
+
creators: [
|
|
100
|
+
{
|
|
101
|
+
address: owner,
|
|
102
|
+
share: 100,
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
yallet_rwa: {
|
|
107
|
+
version: 1,
|
|
108
|
+
assetType,
|
|
109
|
+
direction,
|
|
110
|
+
encryptedDataUri,
|
|
111
|
+
uuid,
|
|
112
|
+
timestamp,
|
|
113
|
+
previousToken,
|
|
114
|
+
schema,
|
|
115
|
+
mimeType,
|
|
116
|
+
dataSize,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Generate invoice-specific NFT metadata
|
|
122
|
+
*
|
|
123
|
+
* @param invoiceData - Invoice data
|
|
124
|
+
* @param encryptedDataUri - Arweave URI
|
|
125
|
+
* @param owner - Owner's Solana address
|
|
126
|
+
* @param options - Additional options
|
|
127
|
+
* @returns NFT metadata
|
|
128
|
+
*/
|
|
129
|
+
export function generateInvoiceMetadata(invoiceData, encryptedDataUri, owner, options = {}) {
|
|
130
|
+
return generateNFTMetadata({
|
|
131
|
+
name: `Invoice #${invoiceData.invoiceId}`,
|
|
132
|
+
description: invoiceData.description || `Invoice for ${invoiceData.amount} ${invoiceData.currency}`,
|
|
133
|
+
assetType: AssetType.INVOICE,
|
|
134
|
+
encryptedDataUri,
|
|
135
|
+
owner,
|
|
136
|
+
direction: 'sent',
|
|
137
|
+
additionalAttributes: [
|
|
138
|
+
{ trait_type: 'Invoice ID', value: invoiceData.invoiceId },
|
|
139
|
+
{ trait_type: 'Amount', value: `${invoiceData.amount} ${invoiceData.currency}` },
|
|
140
|
+
],
|
|
141
|
+
mimeType: 'application/json',
|
|
142
|
+
schema: options.schema || 'yallet-invoice-v1',
|
|
143
|
+
...options,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parse RWA NFT metadata from on-chain data
|
|
148
|
+
*
|
|
149
|
+
* @param nftData - NFT data from DAS API
|
|
150
|
+
* @returns Parsed RWA metadata
|
|
151
|
+
*/
|
|
152
|
+
export function parseRWAMetadata(nftData) {
|
|
153
|
+
const attributes = nftData.content?.metadata?.attributes || [];
|
|
154
|
+
const getAttr = (traitType) => {
|
|
155
|
+
const attr = attributes.find((a) => (a.trait_type || a.name) === traitType);
|
|
156
|
+
return attr?.value || null;
|
|
157
|
+
};
|
|
158
|
+
const timestampStr = getAttr('Timestamp');
|
|
159
|
+
const dataSizeStr = getAttr('Data Size');
|
|
160
|
+
return {
|
|
161
|
+
id: nftData.id,
|
|
162
|
+
name: nftData.content?.metadata?.name || 'Unnamed',
|
|
163
|
+
description: nftData.content?.metadata?.description || '',
|
|
164
|
+
assetType: getAttr('Asset Type'),
|
|
165
|
+
direction: getAttr('Direction'),
|
|
166
|
+
encrypted: getAttr('Encrypted') === 'true',
|
|
167
|
+
version: getAttr('Version'),
|
|
168
|
+
image: nftData.content?.links?.image || null,
|
|
169
|
+
encryptedDataUri: nftData.content?.metadata?.properties?.files?.[0]?.uri || null,
|
|
170
|
+
owner: nftData.ownership?.owner || null,
|
|
171
|
+
// New fields
|
|
172
|
+
uuid: getAttr('UUID'),
|
|
173
|
+
timestamp: timestampStr ? parseInt(timestampStr, 10) : null,
|
|
174
|
+
previousToken: getAttr('Previous Token'),
|
|
175
|
+
schema: getAttr('Schema'),
|
|
176
|
+
mimeType: getAttr('MIME Type') || nftData.content?.metadata?.properties?.files?.[0]?.type || null,
|
|
177
|
+
dataSize: dataSizeStr ? parseInt(dataSizeStr, 10) : null,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yallet RWA SDK - Minting Module
|
|
3
|
+
*
|
|
4
|
+
* Handles cNFT minting using Metaplex Bubblegum
|
|
5
|
+
*/
|
|
6
|
+
import { type Keypair } from '@metaplex-foundation/umi';
|
|
7
|
+
import { Connection } from '@solana/web3.js';
|
|
8
|
+
import type { TreeConfig, MintResult, SDKConfig } from './types.js';
|
|
9
|
+
export declare class CNFTMinter {
|
|
10
|
+
private umi;
|
|
11
|
+
private connection;
|
|
12
|
+
private config;
|
|
13
|
+
private treeConfig;
|
|
14
|
+
constructor(config: SDKConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Set the signer for minting transactions
|
|
17
|
+
*
|
|
18
|
+
* @param signer - Signer with publicKey and signTransaction
|
|
19
|
+
*/
|
|
20
|
+
setSigner(keypair: Keypair): void;
|
|
21
|
+
/**
|
|
22
|
+
* Set the Merkle tree configuration
|
|
23
|
+
*
|
|
24
|
+
* @param treeConfig - Tree configuration
|
|
25
|
+
*/
|
|
26
|
+
setTreeConfig(treeConfig: TreeConfig): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get or fetch tree configuration
|
|
29
|
+
*/
|
|
30
|
+
getTreeConfig(): Promise<TreeConfig | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Mint a compressed NFT
|
|
33
|
+
*
|
|
34
|
+
* @param params - Minting parameters
|
|
35
|
+
* @returns Mint result
|
|
36
|
+
*/
|
|
37
|
+
mint(params: {
|
|
38
|
+
metadataUri: string;
|
|
39
|
+
name: string;
|
|
40
|
+
symbol?: string;
|
|
41
|
+
recipient: string;
|
|
42
|
+
sellerFeeBasisPoints?: number;
|
|
43
|
+
creators?: Array<{
|
|
44
|
+
address: string;
|
|
45
|
+
share: number;
|
|
46
|
+
}>;
|
|
47
|
+
}): Promise<MintResult>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a new CNFTMinter instance
|
|
51
|
+
*
|
|
52
|
+
* @param config - SDK configuration
|
|
53
|
+
* @returns CNFTMinter instance
|
|
54
|
+
*/
|
|
55
|
+
export declare function createMinter(config: SDKConfig): CNFTMinter;
|
|
56
|
+
/**
|
|
57
|
+
* Estimate minting cost
|
|
58
|
+
*
|
|
59
|
+
* @param connection - Solana connection
|
|
60
|
+
* @returns Estimated cost in lamports
|
|
61
|
+
*/
|
|
62
|
+
export declare function estimateMintCost(connection: Connection): Promise<number>;
|
|
63
|
+
//# sourceMappingURL=minting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minting.d.ts","sourceRoot":"","sources":["../src/minting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAML,KAAK,OAAO,EACb,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,UAAU,EAAgC,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAEV,SAAS,EACV,MAAM,YAAY,CAAC;AAOpB,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,UAAU,CAA2B;gBAEjC,MAAM,EAAE,SAAS;IAQ7B;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIjC;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA6DjD;;;;;OAKG;IACG,IAAI,CAAC,MAAM,EAAE;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,GAAG,OAAO,CAAC,UAAU,CAAC;CAqFxB;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAc9E"}
|
package/dist/minting.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yallet RWA SDK - Minting Module
|
|
3
|
+
*
|
|
4
|
+
* Handles cNFT minting using Metaplex Bubblegum
|
|
5
|
+
*/
|
|
6
|
+
import { publicKey, keypairIdentity, } from '@metaplex-foundation/umi';
|
|
7
|
+
import { createUmi as createUmiDefaults } from '@metaplex-foundation/umi-bundle-defaults';
|
|
8
|
+
import { mplBubblegum, mintV1, } from '@metaplex-foundation/mpl-bubblegum';
|
|
9
|
+
import { Connection } from '@solana/web3.js';
|
|
10
|
+
// ======================================
|
|
11
|
+
// Minter Class
|
|
12
|
+
// ======================================
|
|
13
|
+
export class CNFTMinter {
|
|
14
|
+
umi;
|
|
15
|
+
connection;
|
|
16
|
+
config;
|
|
17
|
+
treeConfig = null;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = config;
|
|
20
|
+
this.connection = new Connection(config.rpcEndpoint);
|
|
21
|
+
// Initialize Umi
|
|
22
|
+
this.umi = createUmiDefaults(config.rpcEndpoint).use(mplBubblegum());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set the signer for minting transactions
|
|
26
|
+
*
|
|
27
|
+
* @param signer - Signer with publicKey and signTransaction
|
|
28
|
+
*/
|
|
29
|
+
setSigner(keypair) {
|
|
30
|
+
this.umi = this.umi.use(keypairIdentity(keypair));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set the Merkle tree configuration
|
|
34
|
+
*
|
|
35
|
+
* @param treeConfig - Tree configuration
|
|
36
|
+
*/
|
|
37
|
+
setTreeConfig(treeConfig) {
|
|
38
|
+
this.treeConfig = treeConfig;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get or fetch tree configuration
|
|
42
|
+
*/
|
|
43
|
+
async getTreeConfig() {
|
|
44
|
+
if (this.treeConfig) {
|
|
45
|
+
return this.treeConfig;
|
|
46
|
+
}
|
|
47
|
+
// Try to fetch from configured address
|
|
48
|
+
if (this.config.merkleTreeAddress) {
|
|
49
|
+
// For now, return a basic config
|
|
50
|
+
// In production, you'd fetch the actual tree data
|
|
51
|
+
return {
|
|
52
|
+
treeAddress: this.config.merkleTreeAddress,
|
|
53
|
+
treeAuthority: this.config.merkleTreeAuthority || this.config.merkleTreeAddress,
|
|
54
|
+
maxDepth: 14,
|
|
55
|
+
capacity: 16384,
|
|
56
|
+
used: 0,
|
|
57
|
+
remaining: 16384,
|
|
58
|
+
usagePercent: 0,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Try to fetch from backend API
|
|
62
|
+
if (this.config.backendApiUrl) {
|
|
63
|
+
try {
|
|
64
|
+
const response = await fetch(`${this.config.backendApiUrl}/api/cnft/active-tree?network=${this.config.network}`);
|
|
65
|
+
if (response.ok) {
|
|
66
|
+
const data = (await response.json());
|
|
67
|
+
if (data.available && data.tree) {
|
|
68
|
+
this.treeConfig = {
|
|
69
|
+
treeAddress: data.tree.address,
|
|
70
|
+
treeAuthority: data.tree.authority,
|
|
71
|
+
maxDepth: data.tree.maxDepth,
|
|
72
|
+
capacity: data.tree.capacity,
|
|
73
|
+
used: data.tree.used,
|
|
74
|
+
remaining: data.tree.remaining,
|
|
75
|
+
usagePercent: parseFloat(data.tree.usagePercent),
|
|
76
|
+
};
|
|
77
|
+
return this.treeConfig;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
console.warn('Failed to fetch tree from backend:', err);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Mint a compressed NFT
|
|
89
|
+
*
|
|
90
|
+
* @param params - Minting parameters
|
|
91
|
+
* @returns Mint result
|
|
92
|
+
*/
|
|
93
|
+
async mint(params) {
|
|
94
|
+
const { metadataUri, name, symbol = 'YRWA', recipient, sellerFeeBasisPoints = 0, creators = [], } = params;
|
|
95
|
+
// Get tree configuration
|
|
96
|
+
const treeConfig = await this.getTreeConfig();
|
|
97
|
+
if (!treeConfig) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: 'No Merkle tree configured. Please set a tree address or backend API.',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const merkleTree = publicKey(treeConfig.treeAddress);
|
|
105
|
+
const leafOwner = publicKey(recipient);
|
|
106
|
+
// Prepare metadata args
|
|
107
|
+
const metadataArgs = {
|
|
108
|
+
name,
|
|
109
|
+
symbol,
|
|
110
|
+
uri: metadataUri,
|
|
111
|
+
sellerFeeBasisPoints,
|
|
112
|
+
primarySaleHappened: false,
|
|
113
|
+
isMutable: true,
|
|
114
|
+
editionNonce: null,
|
|
115
|
+
tokenStandard: null,
|
|
116
|
+
collection: null,
|
|
117
|
+
uses: null,
|
|
118
|
+
tokenProgramVersion: 0, // Original
|
|
119
|
+
creators: creators.map((c) => ({
|
|
120
|
+
address: publicKey(c.address),
|
|
121
|
+
verified: false,
|
|
122
|
+
share: c.share,
|
|
123
|
+
})),
|
|
124
|
+
};
|
|
125
|
+
// Build and send mint instruction
|
|
126
|
+
const { signature } = await mintV1(this.umi, {
|
|
127
|
+
merkleTree,
|
|
128
|
+
leafOwner,
|
|
129
|
+
metadata: metadataArgs,
|
|
130
|
+
}).sendAndConfirm(this.umi);
|
|
131
|
+
// Get the leaf index to compute asset ID
|
|
132
|
+
// Note: In production, you'd parse the transaction logs
|
|
133
|
+
const signatureStr = Buffer.from(signature).toString('base64');
|
|
134
|
+
// Notify backend of successful mint (if configured)
|
|
135
|
+
if (this.config.backendApiUrl) {
|
|
136
|
+
try {
|
|
137
|
+
await fetch(`${this.config.backendApiUrl}/api/cnft/mint-complete`, {
|
|
138
|
+
method: 'POST',
|
|
139
|
+
headers: { 'Content-Type': 'application/json' },
|
|
140
|
+
body: JSON.stringify({
|
|
141
|
+
network: this.config.network,
|
|
142
|
+
treeAddress: treeConfig.treeAddress,
|
|
143
|
+
}),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
console.warn('Failed to notify backend of mint:', err);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
success: true,
|
|
152
|
+
signature: signatureStr,
|
|
153
|
+
// Asset ID would be computed from the leaf index
|
|
154
|
+
// For now, we return the signature
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
error: `Minting failed: ${errorMessage}`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// ======================================
|
|
167
|
+
// Helper Functions
|
|
168
|
+
// ======================================
|
|
169
|
+
/**
|
|
170
|
+
* Create a new CNFTMinter instance
|
|
171
|
+
*
|
|
172
|
+
* @param config - SDK configuration
|
|
173
|
+
* @returns CNFTMinter instance
|
|
174
|
+
*/
|
|
175
|
+
export function createMinter(config) {
|
|
176
|
+
return new CNFTMinter(config);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Estimate minting cost
|
|
180
|
+
*
|
|
181
|
+
* @param connection - Solana connection
|
|
182
|
+
* @returns Estimated cost in lamports
|
|
183
|
+
*/
|
|
184
|
+
export async function estimateMintCost(connection) {
|
|
185
|
+
// cNFT minting is very cheap - typically around 0.00001 SOL
|
|
186
|
+
// The main cost is the priority fee
|
|
187
|
+
const recentPrioritizationFees = await connection.getRecentPrioritizationFees();
|
|
188
|
+
const avgFee = recentPrioritizationFees.reduce((sum, fee) => sum + fee.prioritizationFee, 0) / (recentPrioritizationFees.length || 1);
|
|
189
|
+
// Base transaction fee + priority fee
|
|
190
|
+
const baseFee = 5000; // 0.000005 SOL
|
|
191
|
+
const priorityFee = Math.ceil(avgFee);
|
|
192
|
+
return baseFee + priorityFee;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=minting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minting.js","sourceRoot":"","sources":["../src/minting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yallet RWA SDK - Payload builders
|
|
3
|
+
*
|
|
4
|
+
* Build JSON payloads that match chrome-extension decryption expectations
|
|
5
|
+
* for invoice / statements / receipts / files / messages / pictures.
|
|
6
|
+
*/
|
|
7
|
+
import type { InvoiceData, NoteData, FileData, PhotoData } from './types.js';
|
|
8
|
+
/** Line item shape expected by extension */
|
|
9
|
+
export interface ExtensionLineItem {
|
|
10
|
+
name: string;
|
|
11
|
+
price: number;
|
|
12
|
+
qty: number;
|
|
13
|
+
unit: string;
|
|
14
|
+
total: number;
|
|
15
|
+
}
|
|
16
|
+
/** Invoice payload bundle (extension decrypts and uses invoice + optional pdf) */
|
|
17
|
+
export interface InvoicePayloadBundle {
|
|
18
|
+
invoice: ExtensionInvoicePayload;
|
|
19
|
+
pdf?: string;
|
|
20
|
+
senderProfile?: Record<string, unknown>;
|
|
21
|
+
recipientProfile?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface ExtensionInvoicePayload {
|
|
24
|
+
id?: string;
|
|
25
|
+
uuid?: string;
|
|
26
|
+
invoiceNo: string;
|
|
27
|
+
type?: 'sent' | 'received';
|
|
28
|
+
status?: string;
|
|
29
|
+
billTo?: string;
|
|
30
|
+
poNo?: string;
|
|
31
|
+
dueDate?: string;
|
|
32
|
+
lineItems: ExtensionLineItem[];
|
|
33
|
+
discountRate?: number;
|
|
34
|
+
discountAmount?: number;
|
|
35
|
+
taxRate?: number;
|
|
36
|
+
subtotal: number;
|
|
37
|
+
taxAmount?: number;
|
|
38
|
+
total: number;
|
|
39
|
+
currency: string;
|
|
40
|
+
paymentMethod?: string;
|
|
41
|
+
paymentTerms?: string;
|
|
42
|
+
notePayee?: string;
|
|
43
|
+
createdAt: string;
|
|
44
|
+
}
|
|
45
|
+
/** File payload (extension expects name, fileData base64, type, etc.) */
|
|
46
|
+
export interface ExtensionFilePayload {
|
|
47
|
+
id?: string;
|
|
48
|
+
name: string;
|
|
49
|
+
originalName?: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
tag?: string | null;
|
|
52
|
+
size: number;
|
|
53
|
+
type: string;
|
|
54
|
+
fileData: string;
|
|
55
|
+
createdAt: string;
|
|
56
|
+
}
|
|
57
|
+
/** Note/Message payload (extension: note with title, content, type, replyTo) */
|
|
58
|
+
export interface ExtensionNotePayload {
|
|
59
|
+
id?: string;
|
|
60
|
+
uuid?: string;
|
|
61
|
+
title: string;
|
|
62
|
+
content: string;
|
|
63
|
+
tag?: string | null;
|
|
64
|
+
type?: 'private' | 'sent' | 'received';
|
|
65
|
+
recipientId?: string | null;
|
|
66
|
+
recipientName?: string | null;
|
|
67
|
+
replyTo?: string | null;
|
|
68
|
+
createdAt: string;
|
|
69
|
+
}
|
|
70
|
+
/** Photo payload (extension: imageData base64, mimeType, name) */
|
|
71
|
+
export interface ExtensionPhotoPayload {
|
|
72
|
+
id?: string;
|
|
73
|
+
name: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
tag?: string | null;
|
|
76
|
+
imageData: string;
|
|
77
|
+
mimeType: string;
|
|
78
|
+
dataUrl?: string;
|
|
79
|
+
thumbnail?: string;
|
|
80
|
+
createdAt: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build invoice payload bundle for minting.
|
|
84
|
+
* Matches chrome-extension format so the extension can decrypt and display.
|
|
85
|
+
*/
|
|
86
|
+
export declare function buildInvoicePayload(invoice: InvoiceData, options?: {
|
|
87
|
+
id?: string;
|
|
88
|
+
uuid?: string;
|
|
89
|
+
pdfBase64?: string;
|
|
90
|
+
senderProfile?: Record<string, unknown>;
|
|
91
|
+
recipientProfile?: Record<string, unknown>;
|
|
92
|
+
}): InvoicePayloadBundle;
|
|
93
|
+
/**
|
|
94
|
+
* Build file payload for minting.
|
|
95
|
+
* Matches chrome-extension format (name, fileData base64, type, size).
|
|
96
|
+
*/
|
|
97
|
+
export declare function buildFilePayload(file: FileData, options?: {
|
|
98
|
+
id?: string;
|
|
99
|
+
}): ExtensionFilePayload;
|
|
100
|
+
/**
|
|
101
|
+
* Build message/note payload for minting.
|
|
102
|
+
* Matches chrome-extension format (title, content, replyTo). Type is always 'sent' (institution sends to users).
|
|
103
|
+
*/
|
|
104
|
+
export declare function buildMessagePayload(note: NoteData, options?: {
|
|
105
|
+
id?: string;
|
|
106
|
+
uuid?: string;
|
|
107
|
+
recipientId?: string | null;
|
|
108
|
+
recipientName?: string | null;
|
|
109
|
+
replyTo?: string | null;
|
|
110
|
+
}): ExtensionNotePayload;
|
|
111
|
+
/**
|
|
112
|
+
* Build picture/photo payload for minting.
|
|
113
|
+
* Matches chrome-extension format (imageData base64, mimeType, name).
|
|
114
|
+
*/
|
|
115
|
+
export declare function buildPhotoPayload(photo: PhotoData, options?: {
|
|
116
|
+
id?: string;
|
|
117
|
+
thumbnail?: string;
|
|
118
|
+
dataUrl?: string;
|
|
119
|
+
}): ExtensionPhotoPayload;
|
|
120
|
+
//# sourceMappingURL=payloads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../src/payloads.ts"],"names":[],"mappings":"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"}
|