@wuwei-labs/srsly 2.0.0-beta.26 → 2.0.0-beta.28
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 +189 -97
- package/dist/cjs/contract/close.js +33 -24
- package/dist/cjs/contract/close.js.map +1 -1
- package/dist/cjs/contract/create.js +67 -52
- package/dist/cjs/contract/create.js.map +1 -1
- package/dist/cjs/package.json +2 -13
- package/dist/cjs/rental/accept.js +35 -29
- package/dist/cjs/rental/accept.js.map +1 -1
- package/dist/cjs/rental/cancel.js +13 -9
- package/dist/cjs/rental/cancel.js.map +1 -1
- package/dist/cjs/rental/close.js +15 -11
- package/dist/cjs/rental/close.js.map +1 -1
- package/dist/cjs/rental/reset.js +20 -17
- package/dist/cjs/rental/reset.js.map +1 -1
- package/dist/cjs/utils/config.js +0 -88
- package/dist/cjs/utils/config.js.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/instruction-converter.js +49 -0
- package/dist/cjs/utils/instruction-converter.js.map +1 -0
- package/dist/esm/contract/close.js +34 -25
- package/dist/esm/contract/close.js.map +1 -1
- package/dist/esm/contract/create.js +67 -51
- package/dist/esm/contract/create.js.map +1 -1
- package/dist/esm/package.json +2 -13
- package/dist/esm/rental/accept.js +36 -30
- package/dist/esm/rental/accept.js.map +1 -1
- package/dist/esm/rental/cancel.js +13 -9
- package/dist/esm/rental/cancel.js.map +1 -1
- package/dist/esm/rental/close.js +15 -11
- package/dist/esm/rental/close.js.map +1 -1
- package/dist/esm/rental/reset.js +22 -19
- package/dist/esm/rental/reset.js.map +1 -1
- package/dist/esm/utils/config.js +0 -88
- package/dist/esm/utils/config.js.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/instruction-converter.js +45 -0
- package/dist/esm/utils/instruction-converter.js.map +1 -0
- package/dist/types/contract/close.d.ts +12 -11
- package/dist/types/contract/close.d.ts.map +1 -1
- package/dist/types/contract/create.d.ts +49 -65
- package/dist/types/contract/create.d.ts.map +1 -1
- package/dist/types/rental/accept.d.ts +32 -28
- package/dist/types/rental/accept.d.ts.map +1 -1
- package/dist/types/rental/cancel.d.ts +16 -12
- package/dist/types/rental/cancel.d.ts.map +1 -1
- package/dist/types/rental/close.d.ts +16 -13
- package/dist/types/rental/close.d.ts.map +1 -1
- package/dist/types/rental/reset.d.ts +19 -16
- package/dist/types/rental/reset.d.ts.map +1 -1
- package/dist/types/utils/config.d.ts +0 -95
- package/dist/types/utils/config.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/instruction-converter.d.ts +76 -0
- package/dist/types/utils/instruction-converter.d.ts.map +1 -0
- package/dist/types/utils/types.d.ts +0 -8
- package/dist/types/utils/types.d.ts.map +1 -1
- package/package.json +2 -13
- package/dist/cjs/utils/pack-functions.js +0 -148
- package/dist/cjs/utils/pack-functions.js.map +0 -1
- package/dist/cjs/utils/solana-adapter.js +0 -120
- package/dist/cjs/utils/solana-adapter.js.map +0 -1
- package/dist/esm/utils/pack-functions.js +0 -110
- package/dist/esm/utils/pack-functions.js.map +0 -1
- package/dist/esm/utils/solana-adapter.js +0 -82
- package/dist/esm/utils/solana-adapter.js.map +0 -1
- package/dist/types/utils/pack-functions.d.ts +0 -18
- package/dist/types/utils/pack-functions.d.ts.map +0 -1
- package/dist/types/utils/solana-adapter.d.ts +0 -26
- package/dist/types/utils/solana-adapter.d.ts.map +0 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent instruction interface for format conversion between @solana/kit and @solana/web3.js
|
|
3
|
+
*/
|
|
4
|
+
import { ConfigSelector } from './config';
|
|
5
|
+
/**
|
|
6
|
+
* @solana/kit instruction format
|
|
7
|
+
*/
|
|
8
|
+
export interface KitInstruction {
|
|
9
|
+
accounts: Array<{
|
|
10
|
+
address: string;
|
|
11
|
+
role: number;
|
|
12
|
+
}>;
|
|
13
|
+
programAddress: string;
|
|
14
|
+
data: Uint8Array | {
|
|
15
|
+
[key: string]: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @solana/web3.js instruction format
|
|
20
|
+
*/
|
|
21
|
+
export interface Web3jsInstruction {
|
|
22
|
+
keys: Array<{
|
|
23
|
+
pubkey: string;
|
|
24
|
+
isWritable: boolean;
|
|
25
|
+
isSigner: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
programId: string;
|
|
28
|
+
data: Uint8Array | {
|
|
29
|
+
[key: string]: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fluent instruction wrapper that provides format conversion methods
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Default returns kit format
|
|
37
|
+
* const kitInstruction = await createContract(params);
|
|
38
|
+
*
|
|
39
|
+
* // Convert to web3.js format
|
|
40
|
+
* const web3jsInstruction = await createContract(params).web3js();
|
|
41
|
+
*
|
|
42
|
+
* // Use with libraries
|
|
43
|
+
* const transaction = new Transaction().add(web3jsInstruction);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export interface FluentInstruction extends KitInstruction {
|
|
47
|
+
/**
|
|
48
|
+
* Convert instruction to @solana/web3.js format
|
|
49
|
+
* @returns Instruction in @solana/web3.js format
|
|
50
|
+
*/
|
|
51
|
+
web3js(): Web3jsInstruction;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Fluent config selector that adds format conversion methods
|
|
55
|
+
* This allows chaining both configuration and format conversion
|
|
56
|
+
*/
|
|
57
|
+
export interface FluentConfigSelector<T extends FluentInstruction> extends ConfigSelector<T> {
|
|
58
|
+
/**
|
|
59
|
+
* Convert instruction to @solana/web3.js format
|
|
60
|
+
* @returns Promise that resolves to Web3jsInstruction
|
|
61
|
+
*/
|
|
62
|
+
web3js(): Promise<Web3jsInstruction>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a fluent instruction wrapper around a kit instruction
|
|
66
|
+
* @param kitInstruction The base instruction in kit format
|
|
67
|
+
* @returns Fluent instruction with conversion methods
|
|
68
|
+
*/
|
|
69
|
+
export declare function createFluentInstruction(kitInstruction: KitInstruction): FluentInstruction;
|
|
70
|
+
/**
|
|
71
|
+
* Create a fluent config selector that adds format conversion methods
|
|
72
|
+
* @param baseSelector The base ConfigSelector
|
|
73
|
+
* @returns FluentConfigSelector with additional format conversion methods
|
|
74
|
+
*/
|
|
75
|
+
export declare function createFluentConfigSelector<T extends FluentInstruction>(baseSelector: ConfigSelector<T>): FluentConfigSelector<T>;
|
|
76
|
+
//# sourceMappingURL=instruction-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instruction-converter.d.ts","sourceRoot":"","sources":["../../../src/utils/instruction-converter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,UAAU,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;OAGG;IACH,MAAM,IAAI,iBAAiB,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC1F;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,cAAc,GAAG,iBAAiB,CAezF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,iBAAiB,EACpE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,GAC9B,oBAAoB,CAAC,CAAC,CAAC,CAczB"}
|
|
@@ -2,13 +2,5 @@
|
|
|
2
2
|
* Universal types that work with both @solana/kit and @solana/web3.js
|
|
3
3
|
*/
|
|
4
4
|
export type UniversalAddress = string | any;
|
|
5
|
-
export type UniversalTransactionSigner = any;
|
|
6
5
|
export type UniversalInstruction = any;
|
|
7
|
-
export interface PackedTransaction {
|
|
8
|
-
messageBytes: Uint8Array;
|
|
9
|
-
signatures: any[];
|
|
10
|
-
send: (signer: UniversalTransactionSigner) => Promise<string>;
|
|
11
|
-
transaction?: any;
|
|
12
|
-
}
|
|
13
|
-
export type { SolanaLibrary } from './solana-adapter';
|
|
14
6
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,GAAG,CAAC;AAG5C,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,GAAG,CAAC;AAG5C,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wuwei-labs/srsly",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.28",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -63,23 +63,12 @@
|
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@codama/nodes-from-anchor": "^1.1.13",
|
|
65
65
|
"@codama/renderers": "^1.0.21",
|
|
66
|
+
"@solana/kit": "^2.0.0",
|
|
66
67
|
"@types/node": "^24.0.3",
|
|
67
68
|
"codama": "^1.2.13",
|
|
68
69
|
"tsconfig-to-dual-package": "^1.2.0",
|
|
69
70
|
"typedoc": "^0.28.3",
|
|
70
71
|
"typescript": "^5.8.3",
|
|
71
72
|
"vitest": "^3.2.4"
|
|
72
|
-
},
|
|
73
|
-
"peerDependencies": {
|
|
74
|
-
"@solana/kit": ">=2.0.0",
|
|
75
|
-
"@solana/web3.js": ">=1.95.0"
|
|
76
|
-
},
|
|
77
|
-
"peerDependenciesMeta": {
|
|
78
|
-
"@solana/kit": {
|
|
79
|
-
"optional": true
|
|
80
|
-
},
|
|
81
|
-
"@solana/web3.js": {
|
|
82
|
-
"optional": true
|
|
83
|
-
}
|
|
84
73
|
}
|
|
85
74
|
}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Pack function implementations for different Solana libraries
|
|
4
|
-
*/
|
|
5
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
-
var ownKeys = function(o) {
|
|
23
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
-
var ar = [];
|
|
25
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
-
return ar;
|
|
27
|
-
};
|
|
28
|
-
return ownKeys(o);
|
|
29
|
-
};
|
|
30
|
-
return function (mod) {
|
|
31
|
-
if (mod && mod.__esModule) return mod;
|
|
32
|
-
var result = {};
|
|
33
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
-
__setModuleDefault(result, mod);
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
})();
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.packWithKit = packWithKit;
|
|
40
|
-
exports.packWithWeb3js = packWithWeb3js;
|
|
41
|
-
exports.packWithAuto = packWithAuto;
|
|
42
|
-
const config_1 = require("./config");
|
|
43
|
-
/**
|
|
44
|
-
* Pack instruction using @solana/kit
|
|
45
|
-
*/
|
|
46
|
-
async function packWithKit(instruction, feePayer, config) {
|
|
47
|
-
const kit = await Promise.resolve().then(() => __importStar(require('@solana/kit')));
|
|
48
|
-
const { createSolanaRpc, createSolanaRpcSubscriptions, createTransactionMessage, setTransactionMessageFeePayer, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, appendTransactionMessageInstructions, compileTransaction, signTransactionMessageWithSigners, sendAndConfirmTransactionFactory, getSignatureFromTransaction, pipe, address } = kit;
|
|
49
|
-
const resolvedAddresses = (0, config_1.resolveProgramAddresses)(config);
|
|
50
|
-
if (!resolvedAddresses.rpcUrl) {
|
|
51
|
-
throw new Error('RPC URL is required for creating transactions. Please set it via setConfig({ rpcUrl: "..." })');
|
|
52
|
-
}
|
|
53
|
-
// Create RPC connection to get latest blockhash
|
|
54
|
-
const rpc = createSolanaRpc(resolvedAddresses.rpcUrl);
|
|
55
|
-
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
|
|
56
|
-
// Convert feePayer to proper Address type
|
|
57
|
-
const feePayerAddress = typeof feePayer === 'string' ? address(feePayer) : feePayer;
|
|
58
|
-
// Build unsigned transaction message
|
|
59
|
-
const transactionMessage = pipe(createTransactionMessage({ version: 0 }), (msg) => setTransactionMessageFeePayer(feePayerAddress, msg), (msg) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, msg), (msg) => appendTransactionMessageInstructions([instruction], msg));
|
|
60
|
-
// Compile to unsigned transaction
|
|
61
|
-
const unsignedTransaction = compileTransaction(transactionMessage);
|
|
62
|
-
return {
|
|
63
|
-
messageBytes: new Uint8Array(unsignedTransaction.messageBytes),
|
|
64
|
-
signatures: [], // Empty for unsigned transactions
|
|
65
|
-
send: async (signer) => {
|
|
66
|
-
// Create RPC connections for sending
|
|
67
|
-
const sendRpc = createSolanaRpc(resolvedAddresses.rpcUrl);
|
|
68
|
-
const rpcSubscriptions = createSolanaRpcSubscriptions(resolvedAddresses.rpcUrl.replace('https:', 'wss:').replace('http:', 'ws:'));
|
|
69
|
-
// Build transaction message with signer
|
|
70
|
-
const signerTransactionMessage = pipe(createTransactionMessage({ version: 0 }), (msg) => setTransactionMessageFeePayerSigner(signer, msg), (msg) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, msg), (msg) => appendTransactionMessageInstructions([instruction], msg));
|
|
71
|
-
// Sign transaction
|
|
72
|
-
const signedTransaction = await signTransactionMessageWithSigners(signerTransactionMessage);
|
|
73
|
-
// Send and confirm transaction
|
|
74
|
-
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
|
|
75
|
-
rpc: sendRpc,
|
|
76
|
-
rpcSubscriptions: rpcSubscriptions
|
|
77
|
-
});
|
|
78
|
-
try {
|
|
79
|
-
await sendAndConfirmTransaction(signedTransaction, {
|
|
80
|
-
commitment: config.transactionOptions?.commitment || 'confirmed',
|
|
81
|
-
skipPreflight: config.transactionOptions?.skipPreflight || false
|
|
82
|
-
});
|
|
83
|
-
// Extract and return the signature
|
|
84
|
-
const signature = getSignatureFromTransaction(signedTransaction);
|
|
85
|
-
return signature;
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
throw new Error(`Transaction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Pack instruction using @solana/web3.js
|
|
95
|
-
*/
|
|
96
|
-
async function packWithWeb3js(instruction, feePayer, config) {
|
|
97
|
-
const web3 = await Promise.resolve().then(() => __importStar(require('@solana/web3.js')));
|
|
98
|
-
const { Connection, Transaction, PublicKey, sendAndConfirmTransaction } = web3;
|
|
99
|
-
const resolvedAddresses = (0, config_1.resolveProgramAddresses)(config);
|
|
100
|
-
if (!resolvedAddresses.rpcUrl) {
|
|
101
|
-
throw new Error('RPC URL is required for creating transactions. Please set it via setConfig({ rpcUrl: "..." })');
|
|
102
|
-
}
|
|
103
|
-
const connection = new Connection(resolvedAddresses.rpcUrl, 'confirmed');
|
|
104
|
-
// Convert feePayer to PublicKey
|
|
105
|
-
const feePayerPubkey = typeof feePayer === 'string' ? new PublicKey(feePayer) : feePayer;
|
|
106
|
-
// Create transaction and add instruction
|
|
107
|
-
const transaction = new Transaction();
|
|
108
|
-
transaction.add(instruction);
|
|
109
|
-
transaction.feePayer = feePayerPubkey;
|
|
110
|
-
// Get recent blockhash
|
|
111
|
-
const { blockhash } = await connection.getLatestBlockhash();
|
|
112
|
-
transaction.recentBlockhash = blockhash;
|
|
113
|
-
return {
|
|
114
|
-
messageBytes: transaction.serializeMessage(),
|
|
115
|
-
signatures: [],
|
|
116
|
-
transaction, // Include the actual Transaction object
|
|
117
|
-
send: async (signer) => {
|
|
118
|
-
// Sign and send transaction
|
|
119
|
-
transaction.sign(signer);
|
|
120
|
-
const signature = await sendAndConfirmTransaction(connection, transaction, [signer], {
|
|
121
|
-
commitment: config.transactionOptions?.commitment || 'confirmed',
|
|
122
|
-
skipPreflight: config.transactionOptions?.skipPreflight || false
|
|
123
|
-
});
|
|
124
|
-
return signature;
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Auto-detect and pack with the best available library
|
|
130
|
-
*/
|
|
131
|
-
async function packWithAuto(instruction, feePayer, config) {
|
|
132
|
-
// Prefer @solana/kit if available
|
|
133
|
-
try {
|
|
134
|
-
await Promise.resolve().then(() => __importStar(require('@solana/kit')));
|
|
135
|
-
return await packWithKit(instruction, feePayer, config);
|
|
136
|
-
}
|
|
137
|
-
catch {
|
|
138
|
-
// Fallback to @solana/web3.js
|
|
139
|
-
try {
|
|
140
|
-
await Promise.resolve().then(() => __importStar(require('@solana/web3.js')));
|
|
141
|
-
return await packWithWeb3js(instruction, feePayer, config);
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
throw new Error('No Solana library found. Please install either @solana/kit (recommended) or @solana/web3.js as a peer dependency.');
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=pack-functions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pack-functions.js","sourceRoot":"","sources":["../../../src/utils/pack-functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Solana library adapter for handling both @solana/kit and @solana/web3.js
|
|
4
|
-
*/
|
|
5
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
-
var ownKeys = function(o) {
|
|
23
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
-
var ar = [];
|
|
25
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
-
return ar;
|
|
27
|
-
};
|
|
28
|
-
return ownKeys(o);
|
|
29
|
-
};
|
|
30
|
-
return function (mod) {
|
|
31
|
-
if (mod && mod.__esModule) return mod;
|
|
32
|
-
var result = {};
|
|
33
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
-
__setModuleDefault(result, mod);
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
})();
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.detectSolanaLibraries = detectSolanaLibraries;
|
|
40
|
-
exports.validateSolanaLibraryAvailability = validateSolanaLibraryAvailability;
|
|
41
|
-
exports.getSolanaLibrary = getSolanaLibrary;
|
|
42
|
-
/**
|
|
43
|
-
* Detects which Solana libraries are available
|
|
44
|
-
*/
|
|
45
|
-
async function detectSolanaLibraries() {
|
|
46
|
-
let hasKit = false;
|
|
47
|
-
let hasWeb3js = false;
|
|
48
|
-
try {
|
|
49
|
-
await Promise.resolve().then(() => __importStar(require('@solana/kit')));
|
|
50
|
-
hasKit = true;
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// @solana/kit not available
|
|
54
|
-
}
|
|
55
|
-
try {
|
|
56
|
-
await Promise.resolve().then(() => __importStar(require('@solana/web3.js')));
|
|
57
|
-
hasWeb3js = true;
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// @solana/web3.js not available
|
|
61
|
-
}
|
|
62
|
-
// Prefer @solana/kit if available, fallback to web3.js
|
|
63
|
-
const preferred = hasKit ? 'kit' : hasWeb3js ? 'web3js' : 'auto';
|
|
64
|
-
return { hasKit, hasWeb3js, preferred };
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Validates that at least one Solana library is available
|
|
68
|
-
*/
|
|
69
|
-
async function validateSolanaLibraryAvailability() {
|
|
70
|
-
const detection = await detectSolanaLibraries();
|
|
71
|
-
if (!detection.hasKit && !detection.hasWeb3js) {
|
|
72
|
-
throw new Error('No Solana library found. Please install either @solana/kit (recommended) or @solana/web3.js as a peer dependency.');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Gets the appropriate Solana library based on preference and availability
|
|
77
|
-
*/
|
|
78
|
-
async function getSolanaLibrary(preference = 'auto') {
|
|
79
|
-
const detection = await detectSolanaLibraries();
|
|
80
|
-
let selectedLibrary;
|
|
81
|
-
switch (preference) {
|
|
82
|
-
case 'kit':
|
|
83
|
-
if (!detection.hasKit) {
|
|
84
|
-
throw new Error('@solana/kit is required but not available. Please install it as a peer dependency.');
|
|
85
|
-
}
|
|
86
|
-
selectedLibrary = 'kit';
|
|
87
|
-
break;
|
|
88
|
-
case 'web3js':
|
|
89
|
-
if (!detection.hasWeb3js) {
|
|
90
|
-
throw new Error('@solana/web3.js is required but not available. Please install it as a peer dependency.');
|
|
91
|
-
}
|
|
92
|
-
selectedLibrary = 'web3js';
|
|
93
|
-
break;
|
|
94
|
-
case 'auto':
|
|
95
|
-
default:
|
|
96
|
-
selectedLibrary = detection.preferred;
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
const result = {
|
|
100
|
-
library: selectedLibrary
|
|
101
|
-
};
|
|
102
|
-
if (selectedLibrary === 'kit' || detection.hasKit) {
|
|
103
|
-
try {
|
|
104
|
-
result.kit = await Promise.resolve().then(() => __importStar(require('@solana/kit')));
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// Handle import error gracefully
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (selectedLibrary === 'web3js' || detection.hasWeb3js) {
|
|
111
|
-
try {
|
|
112
|
-
result.web3js = await Promise.resolve().then(() => __importStar(require('@solana/web3.js')));
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// Handle import error gracefully
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return result;
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=solana-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solana-adapter.js","sourceRoot":"","sources":["../../../src/utils/solana-adapter.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaH,sDAsBC;AAKD,8EAQC;AAKD,4CAmDC;AA9FD;;GAEG;AACI,KAAK,UAAU,qBAAqB;IACzC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC;QACH,wDAAa,aAAa,GAAC,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,wDAAa,iBAAiB,GAAC,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAkB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iCAAiC;IACrD,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAEhD,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,aAA4B,MAAM;IAKvE,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAEhD,IAAI,eAA8B,CAAC;IAEnC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACxG,CAAC;YACD,eAAe,GAAG,KAAK,CAAC;YACxB,MAAM;QAER,KAAK,QAAQ;YACX,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;YAC5G,CAAC;YACD,eAAe,GAAG,QAAQ,CAAC;YAC3B,MAAM;QAER,KAAK,MAAM,CAAC;QACZ;YACE,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC;YACtC,MAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAwD;QAClE,OAAO,EAAE,eAAe;KACzB,CAAC;IAEF,IAAI,eAAe,KAAK,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,GAAG,wDAAa,aAAa,GAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,eAAe,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,GAAG,wDAAa,iBAAiB,GAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pack function implementations for different Solana libraries
|
|
3
|
-
*/
|
|
4
|
-
import { resolveProgramAddresses } from './config';
|
|
5
|
-
/**
|
|
6
|
-
* Pack instruction using @solana/kit
|
|
7
|
-
*/
|
|
8
|
-
export async function packWithKit(instruction, feePayer, config) {
|
|
9
|
-
const kit = await import('@solana/kit');
|
|
10
|
-
const { createSolanaRpc, createSolanaRpcSubscriptions, createTransactionMessage, setTransactionMessageFeePayer, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, appendTransactionMessageInstructions, compileTransaction, signTransactionMessageWithSigners, sendAndConfirmTransactionFactory, getSignatureFromTransaction, pipe, address } = kit;
|
|
11
|
-
const resolvedAddresses = resolveProgramAddresses(config);
|
|
12
|
-
if (!resolvedAddresses.rpcUrl) {
|
|
13
|
-
throw new Error('RPC URL is required for creating transactions. Please set it via setConfig({ rpcUrl: "..." })');
|
|
14
|
-
}
|
|
15
|
-
// Create RPC connection to get latest blockhash
|
|
16
|
-
const rpc = createSolanaRpc(resolvedAddresses.rpcUrl);
|
|
17
|
-
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
|
|
18
|
-
// Convert feePayer to proper Address type
|
|
19
|
-
const feePayerAddress = typeof feePayer === 'string' ? address(feePayer) : feePayer;
|
|
20
|
-
// Build unsigned transaction message
|
|
21
|
-
const transactionMessage = pipe(createTransactionMessage({ version: 0 }), (msg) => setTransactionMessageFeePayer(feePayerAddress, msg), (msg) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, msg), (msg) => appendTransactionMessageInstructions([instruction], msg));
|
|
22
|
-
// Compile to unsigned transaction
|
|
23
|
-
const unsignedTransaction = compileTransaction(transactionMessage);
|
|
24
|
-
return {
|
|
25
|
-
messageBytes: new Uint8Array(unsignedTransaction.messageBytes),
|
|
26
|
-
signatures: [], // Empty for unsigned transactions
|
|
27
|
-
send: async (signer) => {
|
|
28
|
-
// Create RPC connections for sending
|
|
29
|
-
const sendRpc = createSolanaRpc(resolvedAddresses.rpcUrl);
|
|
30
|
-
const rpcSubscriptions = createSolanaRpcSubscriptions(resolvedAddresses.rpcUrl.replace('https:', 'wss:').replace('http:', 'ws:'));
|
|
31
|
-
// Build transaction message with signer
|
|
32
|
-
const signerTransactionMessage = pipe(createTransactionMessage({ version: 0 }), (msg) => setTransactionMessageFeePayerSigner(signer, msg), (msg) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, msg), (msg) => appendTransactionMessageInstructions([instruction], msg));
|
|
33
|
-
// Sign transaction
|
|
34
|
-
const signedTransaction = await signTransactionMessageWithSigners(signerTransactionMessage);
|
|
35
|
-
// Send and confirm transaction
|
|
36
|
-
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
|
|
37
|
-
rpc: sendRpc,
|
|
38
|
-
rpcSubscriptions: rpcSubscriptions
|
|
39
|
-
});
|
|
40
|
-
try {
|
|
41
|
-
await sendAndConfirmTransaction(signedTransaction, {
|
|
42
|
-
commitment: config.transactionOptions?.commitment || 'confirmed',
|
|
43
|
-
skipPreflight: config.transactionOptions?.skipPreflight || false
|
|
44
|
-
});
|
|
45
|
-
// Extract and return the signature
|
|
46
|
-
const signature = getSignatureFromTransaction(signedTransaction);
|
|
47
|
-
return signature;
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
throw new Error(`Transaction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Pack instruction using @solana/web3.js
|
|
57
|
-
*/
|
|
58
|
-
export async function packWithWeb3js(instruction, feePayer, config) {
|
|
59
|
-
const web3 = await import('@solana/web3.js');
|
|
60
|
-
const { Connection, Transaction, PublicKey, sendAndConfirmTransaction } = web3;
|
|
61
|
-
const resolvedAddresses = resolveProgramAddresses(config);
|
|
62
|
-
if (!resolvedAddresses.rpcUrl) {
|
|
63
|
-
throw new Error('RPC URL is required for creating transactions. Please set it via setConfig({ rpcUrl: "..." })');
|
|
64
|
-
}
|
|
65
|
-
const connection = new Connection(resolvedAddresses.rpcUrl, 'confirmed');
|
|
66
|
-
// Convert feePayer to PublicKey
|
|
67
|
-
const feePayerPubkey = typeof feePayer === 'string' ? new PublicKey(feePayer) : feePayer;
|
|
68
|
-
// Create transaction and add instruction
|
|
69
|
-
const transaction = new Transaction();
|
|
70
|
-
transaction.add(instruction);
|
|
71
|
-
transaction.feePayer = feePayerPubkey;
|
|
72
|
-
// Get recent blockhash
|
|
73
|
-
const { blockhash } = await connection.getLatestBlockhash();
|
|
74
|
-
transaction.recentBlockhash = blockhash;
|
|
75
|
-
return {
|
|
76
|
-
messageBytes: transaction.serializeMessage(),
|
|
77
|
-
signatures: [],
|
|
78
|
-
transaction, // Include the actual Transaction object
|
|
79
|
-
send: async (signer) => {
|
|
80
|
-
// Sign and send transaction
|
|
81
|
-
transaction.sign(signer);
|
|
82
|
-
const signature = await sendAndConfirmTransaction(connection, transaction, [signer], {
|
|
83
|
-
commitment: config.transactionOptions?.commitment || 'confirmed',
|
|
84
|
-
skipPreflight: config.transactionOptions?.skipPreflight || false
|
|
85
|
-
});
|
|
86
|
-
return signature;
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Auto-detect and pack with the best available library
|
|
92
|
-
*/
|
|
93
|
-
export async function packWithAuto(instruction, feePayer, config) {
|
|
94
|
-
// Prefer @solana/kit if available
|
|
95
|
-
try {
|
|
96
|
-
await import('@solana/kit');
|
|
97
|
-
return await packWithKit(instruction, feePayer, config);
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
// Fallback to @solana/web3.js
|
|
101
|
-
try {
|
|
102
|
-
await import('@solana/web3.js');
|
|
103
|
-
return await packWithWeb3js(instruction, feePayer, config);
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
throw new Error('No Solana library found. Please install either @solana/kit (recommended) or @solana/web3.js as a peer dependency.');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=pack-functions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pack-functions.js","sourceRoot":"","sources":["../../../src/utils/pack-functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Solana library adapter for handling both @solana/kit and @solana/web3.js
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Detects which Solana libraries are available
|
|
6
|
-
*/
|
|
7
|
-
export async function detectSolanaLibraries() {
|
|
8
|
-
let hasKit = false;
|
|
9
|
-
let hasWeb3js = false;
|
|
10
|
-
try {
|
|
11
|
-
await import('@solana/kit');
|
|
12
|
-
hasKit = true;
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
// @solana/kit not available
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
await import('@solana/web3.js');
|
|
19
|
-
hasWeb3js = true;
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
// @solana/web3.js not available
|
|
23
|
-
}
|
|
24
|
-
// Prefer @solana/kit if available, fallback to web3.js
|
|
25
|
-
const preferred = hasKit ? 'kit' : hasWeb3js ? 'web3js' : 'auto';
|
|
26
|
-
return { hasKit, hasWeb3js, preferred };
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Validates that at least one Solana library is available
|
|
30
|
-
*/
|
|
31
|
-
export async function validateSolanaLibraryAvailability() {
|
|
32
|
-
const detection = await detectSolanaLibraries();
|
|
33
|
-
if (!detection.hasKit && !detection.hasWeb3js) {
|
|
34
|
-
throw new Error('No Solana library found. Please install either @solana/kit (recommended) or @solana/web3.js as a peer dependency.');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Gets the appropriate Solana library based on preference and availability
|
|
39
|
-
*/
|
|
40
|
-
export async function getSolanaLibrary(preference = 'auto') {
|
|
41
|
-
const detection = await detectSolanaLibraries();
|
|
42
|
-
let selectedLibrary;
|
|
43
|
-
switch (preference) {
|
|
44
|
-
case 'kit':
|
|
45
|
-
if (!detection.hasKit) {
|
|
46
|
-
throw new Error('@solana/kit is required but not available. Please install it as a peer dependency.');
|
|
47
|
-
}
|
|
48
|
-
selectedLibrary = 'kit';
|
|
49
|
-
break;
|
|
50
|
-
case 'web3js':
|
|
51
|
-
if (!detection.hasWeb3js) {
|
|
52
|
-
throw new Error('@solana/web3.js is required but not available. Please install it as a peer dependency.');
|
|
53
|
-
}
|
|
54
|
-
selectedLibrary = 'web3js';
|
|
55
|
-
break;
|
|
56
|
-
case 'auto':
|
|
57
|
-
default:
|
|
58
|
-
selectedLibrary = detection.preferred;
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
const result = {
|
|
62
|
-
library: selectedLibrary
|
|
63
|
-
};
|
|
64
|
-
if (selectedLibrary === 'kit' || detection.hasKit) {
|
|
65
|
-
try {
|
|
66
|
-
result.kit = await import('@solana/kit');
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// Handle import error gracefully
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (selectedLibrary === 'web3js' || detection.hasWeb3js) {
|
|
73
|
-
try {
|
|
74
|
-
result.web3js = await import('@solana/web3.js');
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
// Handle import error gracefully
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=solana-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solana-adapter.js","sourceRoot":"","sources":["../../../src/utils/solana-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAkB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC;IACrD,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAEhD,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,aAA4B,MAAM;IAKvE,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAEhD,IAAI,eAA8B,CAAC;IAEnC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACxG,CAAC;YACD,eAAe,GAAG,KAAK,CAAC;YACxB,MAAM;QAER,KAAK,QAAQ;YACX,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;YAC5G,CAAC;YACD,eAAe,GAAG,QAAQ,CAAC;YAC3B,MAAM;QAER,KAAK,MAAM,CAAC;QACZ;YACE,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC;YACtC,MAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAwD;QAClE,OAAO,EAAE,eAAe;KACzB,CAAC;IAEF,IAAI,eAAe,KAAK,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,eAAe,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pack function implementations for different Solana libraries
|
|
3
|
-
*/
|
|
4
|
-
import { UniversalAddress, PackedTransaction } from './types';
|
|
5
|
-
import { ConfigOptions } from './config';
|
|
6
|
-
/**
|
|
7
|
-
* Pack instruction using @solana/kit
|
|
8
|
-
*/
|
|
9
|
-
export declare function packWithKit(instruction: any, feePayer: UniversalAddress, config: ConfigOptions): Promise<PackedTransaction>;
|
|
10
|
-
/**
|
|
11
|
-
* Pack instruction using @solana/web3.js
|
|
12
|
-
*/
|
|
13
|
-
export declare function packWithWeb3js(instruction: any, feePayer: UniversalAddress, config: ConfigOptions): Promise<PackedTransaction>;
|
|
14
|
-
/**
|
|
15
|
-
* Auto-detect and pack with the best available library
|
|
16
|
-
*/
|
|
17
|
-
export declare function packWithAuto(instruction: any, feePayer: UniversalAddress, config: ConfigOptions): Promise<PackedTransaction>;
|
|
18
|
-
//# sourceMappingURL=pack-functions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pack-functions.d.ts","sourceRoot":"","sources":["../../../src/utils/pack-functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,aAAa,EAA2B,MAAM,UAAU,CAAC;AAElE;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAmF5B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAkD5B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAc5B"}
|