@wuwei-labs/srsly 2.0.0-beta.44 → 2.0.0-beta.45

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 CHANGED
@@ -80,13 +80,37 @@ const signature = await wallet.sendTransaction(transaction, connection);
80
80
 
81
81
  ## Core Features
82
82
 
83
+ ### Universal Signer Pattern
84
+
85
+ The SDK supports both CLI/Node.js and browser usage patterns through its Universal Signer functionality:
86
+
87
+ **Browser Usage** (String Addresses):
88
+ ```typescript
89
+ // Pass string addresses for browser wallets
90
+ const instruction = await acceptRental({
91
+ borrower: wallet.publicKey.toString(), // String address
92
+ // ... other params
93
+ });
94
+ // Browser wallet handles signing separately
95
+ ```
96
+
97
+ **CLI/Node.js Usage** (Signer Objects):
98
+ ```typescript
99
+ // Pass signer objects for full signing capability
100
+ const instruction = await acceptRental({
101
+ borrower: wallet, // Signer object
102
+ // ... other params
103
+ });
104
+ // Can sign transactions directly
105
+ ```
106
+
83
107
  ### Instruction Building & Format Conversion
84
108
 
85
109
  The SDK creates @solana/kit compatible instructions with seamless web3.js conversion:
86
110
 
87
111
  - **📦 Instruction-Only**: Focus on instruction building, users handle transaction assembly/sending
88
112
  - **🔄 Format Conversion**: Built-in `.web3js(PublicKey)` method for wallet compatibility
89
- - **🎯 String Addresses**: Simple string-based addressing for all inputs
113
+ - **🎯 Universal Signer**: Accepts both string addresses and signer objects
90
114
  - **⚡ Lightweight**: Uses @solana/kit internally with optional web3.js conversion
91
115
 
92
116
  ### Web3.js Format Conversion
@@ -464,3 +488,5 @@ The SDK provides optimized builds for different environments:
464
488
 
465
489
  - **NPM Package**: [@wuwei-labs/srsly](https://www.npmjs.com/package/@wuwei-labs/srsly)
466
490
  - **TypeDoc Documentation**: [API Reference](https://wuwei-labs.github.io/srsly/)
491
+ - **Browser Usage Examples**: [Browser Integration Guide](./examples/browser-usage.md)
492
+ - **Universal Signer Tests**: [Test Examples](./tests/features/universal-signer.test.mjs)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wuwei-labs/srsly",
3
- "version": "2.0.0-beta.44",
3
+ "version": "2.0.0-beta.45",
4
4
  "description": "",
5
5
  "source": "./src/index.ts",
6
6
  "sideEffects": false,
@@ -9,6 +9,7 @@ const instruction_converter_1 = require("../utils/instruction-converter");
9
9
  const fetch_accounts_1 = require("../utils/fetch-accounts");
10
10
  const paymentFrequency_1 = require("../utils/paymentFrequency");
11
11
  const pda_1 = require("../utils/pda");
12
+ const signer_1 = require("../utils/signer");
12
13
  /**
13
14
  * Internal function to accept a rental instruction with configuration options.
14
15
  *
@@ -24,7 +25,7 @@ const pda_1 = require("../utils/pda");
24
25
  * @throws Error when contract is not found, duration constraints are violated, or account derivation fails
25
26
  */
26
27
  async function _acceptRental(params, config) {
27
- const { borrower, borrowerProfile, borrowerFaction, contract, duration, } = params;
28
+ const { borrowerProfile, borrowerFaction, contract, duration, } = params;
28
29
  // Get the resolved addresses from config (including network-specific addresses)
29
30
  // Use global config as fallback, same pattern as constants.ts
30
31
  const globalConfig = (0, config_1.getConfig)();
@@ -33,7 +34,7 @@ async function _acceptRental(params, config) {
33
34
  // Fetch contract state to get payment frequency and validate parameters
34
35
  let contractState;
35
36
  try {
36
- contractState = await (0, fetch_accounts_1.fetchContractState)(resolvedAddresses.rpcUrl, (0, constants_1.toAddress)(contract));
37
+ contractState = await (0, fetch_accounts_1.fetchContractState)(contract);
37
38
  }
38
39
  catch (error) {
39
40
  throw new Error(`Failed to fetch contract state: ${error}`);
@@ -57,15 +58,17 @@ async function _acceptRental(params, config) {
57
58
  // Manually derive ALL game accounts - they all use different program addresses than main SAGE program
58
59
  const { profileFaction, starbase, starbasePlayer } = await (0, utils_1.deriveGameAccounts)((0, constants_1.toAddress)(borrowerProfile), borrowerFaction, resolvedAddresses.gameId, 0, // starbaseSeqId
59
60
  config);
61
+ // Handle borrower using smart signer handler for universal compatibility
62
+ const borrower = (0, signer_1.createTransactionSigner)(params.borrower);
60
63
  // Manually derive PDAs with correct program IDs
61
- const rentalStatePda = await (0, pda_1.deriveRentalState)((0, constants_1.toAddress)(contract), borrower.address, // Extract address from signer
64
+ const rentalStatePda = await (0, pda_1.deriveRentalState)((0, constants_1.toAddress)(contract), borrower.address, // Use TransactionSigner.address for PDA derivation
62
65
  resolvedAddresses.srslyProgramAddress);
63
66
  const rentalAuthorityPda = await (0, pda_1.deriveRentalAuthority)(resolvedAddresses.srslyProgramAddress);
64
67
  // 🔧 FIX: Derive rental thread PDA using Antegen program ID
65
68
  const rentalThreadPda = await (0, pda_1.deriveRentalThread)(rentalAuthorityPda, rentalStatePda, resolvedAddresses.antegenProgramAddress);
66
69
  // Create input with ALL manually derived game accounts - they use different program addresses
67
70
  const input = {
68
- borrower: borrower, // Pass signer directly to Codama
71
+ borrower: borrower, // TransactionSigner for Codama
69
72
  borrowerProfile: (0, constants_1.toAddress)(borrowerProfile), // Ensure string
70
73
  borrowerProfileFaction: (0, constants_1.toAddress)(profileFaction), // Manually derived (Profile program)
71
74
  fleet: (0, constants_1.toAddress)(fleet), // Ensure string
@@ -138,27 +141,36 @@ async function _acceptRental(params, config) {
138
141
  * ```typescript
139
142
  * import { acceptRental, days } from '@srsly/sdk';
140
143
  *
141
- * // Basic rental acceptance
144
+ * // CLI usage with wallet/signer object
142
145
  * const instruction = await acceptRental({
143
- * borrower: wallet, // Borrower's wallet
144
- * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
145
- * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
146
- * contract: "ContractAddr...", // Contract to accept
147
- * duration: days(7) // 7 days rental duration
146
+ * borrower: wallet, // Wallet object for signing
147
+ * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
148
+ * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
149
+ * contract: "ContractAddr...", // Contract to accept
150
+ * duration: days(7) // 7 days rental duration
148
151
  * });
149
152
  *
150
- * // Configure for mainnet
153
+ * // Browser usage with address string
154
+ * const browserInstruction = await acceptRental({
155
+ * borrower: wallet.publicKey.toString(), // Address string for browser
156
+ * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
157
+ * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
158
+ * contract: "ContractAddr...", // Contract to accept
159
+ * duration: days(7) // 7 days rental duration
160
+ * });
161
+ *
162
+ * // Configure for mainnet (both patterns work)
151
163
  * const mainnetInstruction = await acceptRental({
152
- * borrower: wallet,
164
+ * borrower: wallet, // Wallet object (CLI style)
153
165
  * borrowerProfile: "ProfileAddr...",
154
- * borrowerFaction: 1, // Can use numbers: 1=mud, 2=oni, 3=ustur
166
+ * borrowerFaction: 1, // Can use numbers: 1=mud, 2=oni, 3=ustur
155
167
  * contract: "ContractAddr...",
156
168
  * duration: days(7)
157
169
  * }).set({ programs: 'mainnet' });
158
170
  *
159
171
  * // Override specific game configuration
160
172
  * const customInstruction = await acceptRental({
161
- * borrower: wallet,
173
+ * borrower: "BorrowerAddress123...", // Address string (browser style)
162
174
  * borrowerProfile: "ProfileAddr...",
163
175
  * borrowerFaction: 'mud',
164
176
  * contract: "ContractAddr...",
@@ -170,7 +182,7 @@ async function _acceptRental(params, config) {
170
182
  *
171
183
  * // Convert to @solana/web3.js format
172
184
  * const web3jsInstruction = await acceptRental({
173
- * borrower: wallet,
185
+ * borrower: wallet, // Universal: works with both patterns
174
186
  * borrowerProfile: "ProfileAddr...",
175
187
  * borrowerFaction: 'mud',
176
188
  * contract: "ContractAddr...",
@@ -1 +1 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/rental/accept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/rental/accept.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ exports.cancelRental = cancelRental;
4
4
  exports.getCancelRentalInstructionAsync = getCancelRentalInstructionAsync;
5
5
  const config_1 = require("../utils/config");
6
6
  const constants_1 = require("../utils/constants");
7
+ const signer_1 = require("../utils/signer");
7
8
  /**
8
9
  * Internal function to cancel a rental instruction with configuration options.
9
10
  *
@@ -18,13 +19,15 @@ const constants_1 = require("../utils/constants");
18
19
  * @throws Error when instruction generation fails or required parameters are missing
19
20
  */
20
21
  async function _cancelRental(params, config) {
21
- const { borrower, contract, } = params;
22
+ const { contract, } = params;
23
+ // Handle borrower using smart signer handler for universal compatibility
24
+ const borrower = (0, signer_1.createTransactionSigner)(params.borrower);
22
25
  // Get the resolved addresses from config (including network-specific addresses)
23
26
  // Note: resolvedAddresses not currently needed for this instruction but kept for consistency
24
27
  // const resolvedAddresses = resolveProgramAddresses(config || {});
25
28
  // Let codama derive all the optional accounts
26
29
  const input = {
27
- borrower, // Pass signer directly to Codama
30
+ borrower: borrower, // TransactionSigner for Codama
28
31
  contract: (0, constants_1.toAddress)(contract), // Ensure string
29
32
  };
30
33
  // Get network-specific codama functions from centralized config
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/rental/cancel.ts"],"names":[],"mappings":";;AAiJA,oCAIC;AAcD,0EAKC;AAxKD,4CAAoI;AACpI,kDAA+C;AA+B/C;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,aAAa,CAC1B,MAA0B,EAC1B,MAAsB;IAEtB,MAAM,EACJ,QAAQ,EACR,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,gFAAgF;IAChF,6FAA6F;IAC7F,mEAAmE;IAEnE,8CAA8C;IAC9C,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAqB,iCAAiC;QAC9D,QAAQ,EAAE,IAAA,qBAAS,EAAC,QAAQ,CAAC,EAAE,gBAAgB;KAChD,CAAC;IAEF,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,IAAA,kBAAS,EAAC,cAAc,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,IAAA,kBAAS,EAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,EAAE,+BAA+B,EAAE,GAAG,kBAAkB,CAAC;IAC/D,MAAM,EAAE,qBAAqB,EAAE,GAAG,cAAc,CAAC;IAEjD,OAAO,+BAA+B,CACpC,KAAK,EACL,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,SAAgB,YAAY,CAC1B,MAA0B;IAE1B,OAAO,IAAA,6BAAoB,EAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,+BAA+B,CAAC,KAAU,EAAE,OAAa;IACvE,OAAO,IAAA,6BAAoB,EAAC,KAAK,IAAI,EAAE;QACrC,MAAM,kBAAkB,GAAG,IAAA,kBAAS,EAAC,cAAc,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/rental/cancel.ts"],"names":[],"mappings":";;AAoJA,oCAIC;AAcD,0EAKC;AA3KD,4CAAoI;AACpI,kDAA+C;AAC/C,4CAAgF;AA+BhF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,aAAa,CAC1B,MAA0B,EAC1B,MAAsB;IAEtB,MAAM,EACJ,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAA,gCAAuB,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE1D,gFAAgF;IAChF,6FAA6F;IAC7F,mEAAmE;IAEnE,8CAA8C;IAC9C,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,QAAQ,EAAE,+BAA+B;QACnD,QAAQ,EAAE,IAAA,qBAAS,EAAC,QAAQ,CAAC,EAAE,gBAAgB;KAChD,CAAC;IAEF,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,IAAA,kBAAS,EAAC,cAAc,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,IAAA,kBAAS,EAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,EAAE,+BAA+B,EAAE,GAAG,kBAAkB,CAAC;IAC/D,MAAM,EAAE,qBAAqB,EAAE,GAAG,cAAc,CAAC;IAEjD,OAAO,+BAA+B,CACpC,KAAK,EACL,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,SAAgB,YAAY,CAC1B,MAA0B;IAE1B,OAAO,IAAA,6BAAoB,EAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,+BAA+B,CAAC,KAAU,EAAE,OAAa;IACvE,OAAO,IAAA,6BAAoB,EAAC,KAAK,IAAI,EAAE;QACrC,MAAM,kBAAkB,GAAG,IAAA,kBAAS,EAAC,cAAc,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -6,57 +6,39 @@ exports.fetchMultipleContractStates = fetchMultipleContractStates;
6
6
  exports.fetchMultipleRentalStates = fetchMultipleRentalStates;
7
7
  const kit_1 = require("@solana/kit");
8
8
  const accounts_1 = require("../codama/accounts");
9
- /**
10
- * Convenience wrapper functions for fetching account states with RPC URL strings.
11
- * These functions handle creating the RPC connection for you.
12
- */
13
- /**
14
- * Fetches contract state data from the blockchain using a simple RPC URL
15
- *
16
- * @param rpcUrl - The RPC endpoint URL as a string
17
- * @param contractAddress - The contract account address to fetch
18
- * @returns The deserialized contract state data
19
- *
20
- * @example
21
- * ```typescript
22
- * const contractState = await fetchContractState(
23
- * 'https://api.devnet.solana.com',
24
- * 'ContractAddress123...'
25
- * );
26
- *
27
- * console.log('Contract owner:', contractState.data.owner);
28
- * console.log('Contract rate:', contractState.data.rate);
29
- * ```
30
- */
31
- async function fetchContractState(rpcUrl, contractAddress) {
32
- // Create RPC connection
9
+ const config_1 = require("./config");
10
+ const constants_1 = require("./constants");
11
+ // Implementation
12
+ async function fetchContractState(rpcUrlOrAddress, contractAddress) {
13
+ // If only one argument, it's the contract address using default RPC
14
+ if (contractAddress === undefined) {
15
+ const address = (0, constants_1.toAddress)(rpcUrlOrAddress);
16
+ const config = (0, config_1.getConfig)();
17
+ const resolved = await (0, config_1.resolveProgramAddresses)(config);
18
+ const rpc = (0, kit_1.createSolanaRpc)(resolved.rpcUrl);
19
+ return (0, accounts_1.fetchContractState)(rpc, address);
20
+ }
21
+ // If two arguments, first is rpcUrl, second is address
22
+ const rpcUrl = rpcUrlOrAddress;
23
+ const address = (0, constants_1.toAddress)(contractAddress);
33
24
  const rpc = (0, kit_1.createSolanaRpc)(rpcUrl);
34
- // Fetch and return the contract state
35
- return (0, accounts_1.fetchContractState)(rpc, contractAddress);
25
+ return (0, accounts_1.fetchContractState)(rpc, address);
36
26
  }
37
- /**
38
- * Fetches rental state data from the blockchain using a simple RPC URL
39
- *
40
- * @param rpcUrl - The RPC endpoint URL as a string
41
- * @param rentalAddress - The rental account address to fetch
42
- * @returns The deserialized rental state data
43
- *
44
- * @example
45
- * ```typescript
46
- * const rentalState = await fetchRentalState(
47
- * 'https://api.devnet.solana.com',
48
- * 'RentalAddress123...'
49
- * );
50
- *
51
- * console.log('Rental borrower:', rentalState.data.borrower);
52
- * console.log('Rental start:', rentalState.data.start);
53
- * ```
54
- */
55
- async function fetchRentalState(rpcUrl, rentalAddress) {
56
- // Create RPC connection
27
+ // Implementation
28
+ async function fetchRentalState(rpcUrlOrAddress, rentalAddress) {
29
+ // If only one argument, it's the rental address using default RPC
30
+ if (rentalAddress === undefined) {
31
+ const address = (0, constants_1.toAddress)(rpcUrlOrAddress);
32
+ const config = (0, config_1.getConfig)();
33
+ const resolved = await (0, config_1.resolveProgramAddresses)(config);
34
+ const rpc = (0, kit_1.createSolanaRpc)(resolved.rpcUrl);
35
+ return (0, accounts_1.fetchRentalState)(rpc, address);
36
+ }
37
+ // If two arguments, first is rpcUrl, second is address
38
+ const rpcUrl = rpcUrlOrAddress;
39
+ const address = (0, constants_1.toAddress)(rentalAddress);
57
40
  const rpc = (0, kit_1.createSolanaRpc)(rpcUrl);
58
- // Fetch and return the rental state
59
- return (0, accounts_1.fetchRentalState)(rpc, rentalAddress);
41
+ return (0, accounts_1.fetchRentalState)(rpc, address);
60
42
  }
61
43
  /**
62
44
  * Fetches multiple contract states in a single RPC call
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-accounts.js","sourceRoot":"","sources":["../../../src/utils/fetch-accounts.ts"],"names":[],"mappings":";;AA+BA,gDASC;AAoBD,4CASC;AAuBD,kEASC;AAuBD,8DASC;AArID,qCAA4D;AAC5D,iDAK4B;AAE5B;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,eAAkC;IAElC,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,sCAAsC;IACtC,OAAO,IAAA,6BAAwB,EAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,aAAgC;IAEhC,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,oCAAoC;IACpC,OAAO,IAAA,2BAAsB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,2BAA2B,CAC/C,MAAc,EACd,iBAAsC;IAEtC,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,uCAAuC;IACvC,OAAO,IAAA,gCAAqB,EAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,eAAoC;IAEpC,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,qCAAqC;IACrC,OAAO,IAAA,8BAAmB,EAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"fetch-accounts.js","sourceRoot":"","sources":["../../../src/utils/fetch-accounts.ts"],"names":[],"mappings":";;AAwDA,gDAkBC;AA2CD,4CAkBC;AAuBD,kEASC;AAuBD,8DASC;AAvMD,qCAA4D;AAC5D,iDAK4B;AAC5B,qCAA8D;AAC9D,2CAAwC;AA+CxC,iBAAiB;AACV,KAAK,UAAU,kBAAkB,CACtC,eAA2C,EAC3C,eAA4C;IAE5C,oEAAoE;IACpE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,eAA6C,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAA,gCAAuB,EAAC,MAAM,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAA,6BAAwB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,eAAyB,CAAC;IACzC,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,eAAe,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IACpC,OAAO,IAAA,6BAAwB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AA0CD,iBAAiB;AACV,KAAK,UAAU,gBAAgB,CACpC,eAA2C,EAC3C,aAA0C;IAE1C,kEAAkE;IAClE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,eAA6C,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAA,gCAAuB,EAAC,MAAM,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAA,2BAAsB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,eAAyB,CAAC;IACzC,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,aAAa,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IACpC,OAAO,IAAA,2BAAsB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,2BAA2B,CAC/C,MAAc,EACd,iBAAsC;IAEtC,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,uCAAuC;IACvC,OAAO,IAAA,gCAAqB,EAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,eAAoC;IAEpC,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,CAAC;IAEpC,qCAAqC;IACrC,OAAO,IAAA,8BAAmB,EAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC"}
@@ -22,4 +22,5 @@ __exportStar(require("./duration"), exports);
22
22
  __exportStar(require("./instruction-converter"), exports);
23
23
  __exportStar(require("./fetch-accounts"), exports);
24
24
  __exportStar(require("./pda"), exports);
25
+ __exportStar(require("./signer"), exports);
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,6CAA2B;AAC3B,2CAAyB;AACzB,qDAAmC;AACnC,6CAA2B;AAC3B,0DAAwC;AACxC,mDAAiC;AACjC,wCAAsB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,6CAA2B;AAC3B,2CAAyB;AACzB,qDAAmC;AACnC,6CAA2B;AAC3B,0DAAwC;AACxC,mDAAiC;AACjC,wCAAsB;AACtB,2CAAyB"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Universal signer handling utilities for cross-library compatibility
4
+ *
5
+ * This module provides utilities to handle different signer types across
6
+ * @solana/kit, @solana/web3.js, and plain address strings in a unified way.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createTransactionSigner = createTransactionSigner;
10
+ exports.isSignerObject = isSignerObject;
11
+ exports.isAddressString = isAddressString;
12
+ const kit_1 = require("@solana/kit");
13
+ /**
14
+ * Creates TransactionSigner from UniversalSigner input for universal compatibility
15
+ *
16
+ * This function provides universal compatibility by:
17
+ * - Converting string addresses to TransactionSigner using createNoopSigner
18
+ * - Passing through existing TransactionSigner objects unchanged
19
+ * - Safely handling different signer interfaces (kit, web3.js, etc.)
20
+ *
21
+ * The returned TransactionSigner has both .address property and signing capability,
22
+ * making it suitable for both PDA derivation and codama instruction building.
23
+ *
24
+ * @param signer - The signer input (string address or signer object)
25
+ * @returns TransactionSigner that can be used directly for codama and has .address property
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Browser usage with string address
30
+ * const borrower = createTransactionSigner("base58AddressString");
31
+ * // borrower.address → Address object for PDA derivation
32
+ * // borrower → TransactionSigner for codama
33
+ *
34
+ * // CLI usage with wallet object
35
+ * const borrower = createTransactionSigner(wallet);
36
+ * // borrower.address → wallet.address for PDA derivation
37
+ * // borrower → wallet signer for codama
38
+ * ```
39
+ */
40
+ function createTransactionSigner(signer) {
41
+ // Handle string address case (browser usage)
42
+ if (typeof signer === 'string') {
43
+ return (0, kit_1.createNoopSigner)((0, kit_1.address)(signer)); // Returns TransactionSigner with .address property
44
+ }
45
+ // Handle signer object cases (CLI and other wallet interfaces)
46
+ // These should already be TransactionSigner objects with .address property
47
+ return signer;
48
+ }
49
+ /**
50
+ * Type guard to check if a value is a signer object (not a string)
51
+ */
52
+ function isSignerObject(signer) {
53
+ return typeof signer !== 'string';
54
+ }
55
+ /**
56
+ * Type guard to check if a value is an address string
57
+ */
58
+ function isAddressString(signer) {
59
+ return typeof signer === 'string';
60
+ }
61
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/utils/signer.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA2CH,0DASC;AAKD,wCAEC;AAKD,0CAEC;AAhED,qCAAgF;AAchF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,uBAAuB,CAAC,MAAuB;IAC7D,6CAA6C;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAA,sBAAgB,EAAC,IAAA,aAAO,EAAC,MAAM,CAAC,CAAC,CAAC,CAAE,mDAAmD;IAChG,CAAC;IAED,+DAA+D;IAC/D,2EAA2E;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAuB;IACpD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAuB;IACrD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC;AACpC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wuwei-labs/srsly",
3
- "version": "2.0.0-beta.44",
3
+ "version": "2.0.0-beta.45",
4
4
  "description": "",
5
5
  "source": "./src/index.ts",
6
6
  "sideEffects": false,
@@ -5,6 +5,7 @@ import { createFluentInstruction, createSmartFluentConfigSelector } from '../uti
5
5
  import { fetchContractState } from '../utils/fetch-accounts';
6
6
  import { paymentFrequencyStringToSeconds } from '../utils/paymentFrequency';
7
7
  import { deriveRentalThread, deriveRentalState, deriveRentalAuthority } from '../utils/pda';
8
+ import { createTransactionSigner } from '../utils/signer';
8
9
  /**
9
10
  * Internal function to accept a rental instruction with configuration options.
10
11
  *
@@ -20,7 +21,7 @@ import { deriveRentalThread, deriveRentalState, deriveRentalAuthority } from '..
20
21
  * @throws Error when contract is not found, duration constraints are violated, or account derivation fails
21
22
  */
22
23
  async function _acceptRental(params, config) {
23
- const { borrower, borrowerProfile, borrowerFaction, contract, duration, } = params;
24
+ const { borrowerProfile, borrowerFaction, contract, duration, } = params;
24
25
  // Get the resolved addresses from config (including network-specific addresses)
25
26
  // Use global config as fallback, same pattern as constants.ts
26
27
  const globalConfig = getConfig();
@@ -29,7 +30,7 @@ async function _acceptRental(params, config) {
29
30
  // Fetch contract state to get payment frequency and validate parameters
30
31
  let contractState;
31
32
  try {
32
- contractState = await fetchContractState(resolvedAddresses.rpcUrl, toAddress(contract));
33
+ contractState = await fetchContractState(contract);
33
34
  }
34
35
  catch (error) {
35
36
  throw new Error(`Failed to fetch contract state: ${error}`);
@@ -53,15 +54,17 @@ async function _acceptRental(params, config) {
53
54
  // Manually derive ALL game accounts - they all use different program addresses than main SAGE program
54
55
  const { profileFaction, starbase, starbasePlayer } = await deriveGameAccounts(toAddress(borrowerProfile), borrowerFaction, resolvedAddresses.gameId, 0, // starbaseSeqId
55
56
  config);
57
+ // Handle borrower using smart signer handler for universal compatibility
58
+ const borrower = createTransactionSigner(params.borrower);
56
59
  // Manually derive PDAs with correct program IDs
57
- const rentalStatePda = await deriveRentalState(toAddress(contract), borrower.address, // Extract address from signer
60
+ const rentalStatePda = await deriveRentalState(toAddress(contract), borrower.address, // Use TransactionSigner.address for PDA derivation
58
61
  resolvedAddresses.srslyProgramAddress);
59
62
  const rentalAuthorityPda = await deriveRentalAuthority(resolvedAddresses.srslyProgramAddress);
60
63
  // 🔧 FIX: Derive rental thread PDA using Antegen program ID
61
64
  const rentalThreadPda = await deriveRentalThread(rentalAuthorityPda, rentalStatePda, resolvedAddresses.antegenProgramAddress);
62
65
  // Create input with ALL manually derived game accounts - they use different program addresses
63
66
  const input = {
64
- borrower: borrower, // Pass signer directly to Codama
67
+ borrower: borrower, // TransactionSigner for Codama
65
68
  borrowerProfile: toAddress(borrowerProfile), // Ensure string
66
69
  borrowerProfileFaction: toAddress(profileFaction), // Manually derived (Profile program)
67
70
  fleet: toAddress(fleet), // Ensure string
@@ -134,27 +137,36 @@ async function _acceptRental(params, config) {
134
137
  * ```typescript
135
138
  * import { acceptRental, days } from '@srsly/sdk';
136
139
  *
137
- * // Basic rental acceptance
140
+ * // CLI usage with wallet/signer object
138
141
  * const instruction = await acceptRental({
139
- * borrower: wallet, // Borrower's wallet
140
- * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
141
- * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
142
- * contract: "ContractAddr...", // Contract to accept
143
- * duration: days(7) // 7 days rental duration
142
+ * borrower: wallet, // Wallet object for signing
143
+ * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
144
+ * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
145
+ * contract: "ContractAddr...", // Contract to accept
146
+ * duration: days(7) // 7 days rental duration
144
147
  * });
145
148
  *
146
- * // Configure for mainnet
149
+ * // Browser usage with address string
150
+ * const browserInstruction = await acceptRental({
151
+ * borrower: wallet.publicKey.toString(), // Address string for browser
152
+ * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
153
+ * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
154
+ * contract: "ContractAddr...", // Contract to accept
155
+ * duration: days(7) // 7 days rental duration
156
+ * });
157
+ *
158
+ * // Configure for mainnet (both patterns work)
147
159
  * const mainnetInstruction = await acceptRental({
148
- * borrower: wallet,
160
+ * borrower: wallet, // Wallet object (CLI style)
149
161
  * borrowerProfile: "ProfileAddr...",
150
- * borrowerFaction: 1, // Can use numbers: 1=mud, 2=oni, 3=ustur
162
+ * borrowerFaction: 1, // Can use numbers: 1=mud, 2=oni, 3=ustur
151
163
  * contract: "ContractAddr...",
152
164
  * duration: days(7)
153
165
  * }).set({ programs: 'mainnet' });
154
166
  *
155
167
  * // Override specific game configuration
156
168
  * const customInstruction = await acceptRental({
157
- * borrower: wallet,
169
+ * borrower: "BorrowerAddress123...", // Address string (browser style)
158
170
  * borrowerProfile: "ProfileAddr...",
159
171
  * borrowerFaction: 'mud',
160
172
  * contract: "ContractAddr...",
@@ -166,7 +178,7 @@ async function _acceptRental(params, config) {
166
178
  *
167
179
  * // Convert to @solana/web3.js format
168
180
  * const web3jsInstruction = await acceptRental({
169
- * borrower: wallet,
181
+ * borrower: wallet, // Universal: works with both patterns
170
182
  * borrowerProfile: "ProfileAddr...",
171
183
  * borrowerFaction: 'mud',
172
184
  * contract: "ContractAddr...",
@@ -1 +1 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/rental/accept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/rental/accept.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { getModule, createConfigSelector } from '../utils/config';
2
2
  import { toAddress } from '../utils/constants';
3
+ import { createTransactionSigner } from '../utils/signer';
3
4
  /**
4
5
  * Internal function to cancel a rental instruction with configuration options.
5
6
  *
@@ -14,13 +15,15 @@ import { toAddress } from '../utils/constants';
14
15
  * @throws Error when instruction generation fails or required parameters are missing
15
16
  */
16
17
  async function _cancelRental(params, config) {
17
- const { borrower, contract, } = params;
18
+ const { contract, } = params;
19
+ // Handle borrower using smart signer handler for universal compatibility
20
+ const borrower = createTransactionSigner(params.borrower);
18
21
  // Get the resolved addresses from config (including network-specific addresses)
19
22
  // Note: resolvedAddresses not currently needed for this instruction but kept for consistency
20
23
  // const resolvedAddresses = resolveProgramAddresses(config || {});
21
24
  // Let codama derive all the optional accounts
22
25
  const input = {
23
- borrower, // Pass signer directly to Codama
26
+ borrower: borrower, // TransactionSigner for Codama
24
27
  contract: toAddress(contract), // Ensure string
25
28
  };
26
29
  // Get network-specific codama functions from centralized config
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/rental/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAoE,MAAM,iBAAiB,CAAC;AACpI,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA+B/C;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,aAAa,CAC1B,MAA0B,EAC1B,MAAsB;IAEtB,MAAM,EACJ,QAAQ,EACR,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,gFAAgF;IAChF,6FAA6F;IAC7F,mEAAmE;IAEnE,8CAA8C;IAC9C,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAqB,iCAAiC;QAC9D,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB;KAChD,CAAC;IAEF,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,EAAE,+BAA+B,EAAE,GAAG,kBAAkB,CAAC;IAC/D,MAAM,EAAE,qBAAqB,EAAE,GAAG,cAAc,CAAC;IAEjD,OAAO,+BAA+B,CACpC,KAAK,EACL,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA0B;IAE1B,OAAO,oBAAoB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,+BAA+B,CAAC,KAAU,EAAE,OAAa;IACvE,OAAO,oBAAoB,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/rental/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAoE,MAAM,iBAAiB,CAAC;AACpI,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAwB,MAAM,iBAAiB,CAAC;AA+BhF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,aAAa,CAC1B,MAA0B,EAC1B,MAAsB;IAEtB,MAAM,EACJ,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,yEAAyE;IACzE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE1D,gFAAgF;IAChF,6FAA6F;IAC7F,mEAAmE;IAEnE,8CAA8C;IAC9C,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,QAAQ,EAAE,+BAA+B;QACnD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB;KAChD,CAAC;IAEF,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,EAAE,+BAA+B,EAAE,GAAG,kBAAkB,CAAC;IAC/D,MAAM,EAAE,qBAAqB,EAAE,GAAG,cAAc,CAAC;IAEjD,OAAO,+BAA+B,CACpC,KAAK,EACL,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA0B;IAE1B,OAAO,oBAAoB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,+BAA+B,CAAC,KAAU,EAAE,OAAa;IACvE,OAAO,oBAAoB,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,56 +1,38 @@
1
1
  import { createSolanaRpc } from '@solana/kit';
2
2
  import { fetchContractState as fetchContractStateCodama, fetchRentalState as fetchRentalStateCodama, fetchAllContractState, fetchAllRentalState } from '../codama/accounts';
3
- /**
4
- * Convenience wrapper functions for fetching account states with RPC URL strings.
5
- * These functions handle creating the RPC connection for you.
6
- */
7
- /**
8
- * Fetches contract state data from the blockchain using a simple RPC URL
9
- *
10
- * @param rpcUrl - The RPC endpoint URL as a string
11
- * @param contractAddress - The contract account address to fetch
12
- * @returns The deserialized contract state data
13
- *
14
- * @example
15
- * ```typescript
16
- * const contractState = await fetchContractState(
17
- * 'https://api.devnet.solana.com',
18
- * 'ContractAddress123...'
19
- * );
20
- *
21
- * console.log('Contract owner:', contractState.data.owner);
22
- * console.log('Contract rate:', contractState.data.rate);
23
- * ```
24
- */
25
- export async function fetchContractState(rpcUrl, contractAddress) {
26
- // Create RPC connection
3
+ import { getConfig, resolveProgramAddresses } from './config';
4
+ import { toAddress } from './constants';
5
+ // Implementation
6
+ export async function fetchContractState(rpcUrlOrAddress, contractAddress) {
7
+ // If only one argument, it's the contract address using default RPC
8
+ if (contractAddress === undefined) {
9
+ const address = toAddress(rpcUrlOrAddress);
10
+ const config = getConfig();
11
+ const resolved = await resolveProgramAddresses(config);
12
+ const rpc = createSolanaRpc(resolved.rpcUrl);
13
+ return fetchContractStateCodama(rpc, address);
14
+ }
15
+ // If two arguments, first is rpcUrl, second is address
16
+ const rpcUrl = rpcUrlOrAddress;
17
+ const address = toAddress(contractAddress);
27
18
  const rpc = createSolanaRpc(rpcUrl);
28
- // Fetch and return the contract state
29
- return fetchContractStateCodama(rpc, contractAddress);
19
+ return fetchContractStateCodama(rpc, address);
30
20
  }
31
- /**
32
- * Fetches rental state data from the blockchain using a simple RPC URL
33
- *
34
- * @param rpcUrl - The RPC endpoint URL as a string
35
- * @param rentalAddress - The rental account address to fetch
36
- * @returns The deserialized rental state data
37
- *
38
- * @example
39
- * ```typescript
40
- * const rentalState = await fetchRentalState(
41
- * 'https://api.devnet.solana.com',
42
- * 'RentalAddress123...'
43
- * );
44
- *
45
- * console.log('Rental borrower:', rentalState.data.borrower);
46
- * console.log('Rental start:', rentalState.data.start);
47
- * ```
48
- */
49
- export async function fetchRentalState(rpcUrl, rentalAddress) {
50
- // Create RPC connection
21
+ // Implementation
22
+ export async function fetchRentalState(rpcUrlOrAddress, rentalAddress) {
23
+ // If only one argument, it's the rental address using default RPC
24
+ if (rentalAddress === undefined) {
25
+ const address = toAddress(rpcUrlOrAddress);
26
+ const config = getConfig();
27
+ const resolved = await resolveProgramAddresses(config);
28
+ const rpc = createSolanaRpc(resolved.rpcUrl);
29
+ return fetchRentalStateCodama(rpc, address);
30
+ }
31
+ // If two arguments, first is rpcUrl, second is address
32
+ const rpcUrl = rpcUrlOrAddress;
33
+ const address = toAddress(rentalAddress);
51
34
  const rpc = createSolanaRpc(rpcUrl);
52
- // Fetch and return the rental state
53
- return fetchRentalStateCodama(rpc, rentalAddress);
35
+ return fetchRentalStateCodama(rpc, address);
54
36
  }
55
37
  /**
56
38
  * Fetches multiple contract states in a single RPC call
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-accounts.js","sourceRoot":"","sources":["../../../src/utils/fetch-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,IAAI,wBAAwB,EAC9C,gBAAgB,IAAI,sBAAsB,EAC1C,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,eAAkC;IAElC,wBAAwB;IACxB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,sCAAsC;IACtC,OAAO,wBAAwB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,aAAgC;IAEhC,wBAAwB;IACxB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,oCAAoC;IACpC,OAAO,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAc,EACd,iBAAsC;IAEtC,wBAAwB;IACxB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,uCAAuC;IACvC,OAAO,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,eAAoC;IAEpC,wBAAwB;IACxB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,qCAAqC;IACrC,OAAO,mBAAmB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"fetch-accounts.js","sourceRoot":"","sources":["../../../src/utils/fetch-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,IAAI,wBAAwB,EAC9C,gBAAgB,IAAI,sBAAsB,EAC1C,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA+CxC,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,eAA2C,EAC3C,eAA4C;IAE5C,oEAAoE;IACpE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,eAA6C,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,eAAyB,CAAC;IACzC,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AA0CD,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,eAA2C,EAC3C,aAA0C;IAE1C,kEAAkE;IAClE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,SAAS,CAAC,eAA6C,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,eAAyB,CAAC;IACzC,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAc,EACd,iBAAsC;IAEtC,wBAAwB;IACxB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,uCAAuC;IACvC,OAAO,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,eAAoC;IAEpC,wBAAwB;IACxB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,qCAAqC;IACrC,OAAO,mBAAmB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC"}
@@ -6,4 +6,5 @@ export * from "./duration";
6
6
  export * from "./instruction-converter";
7
7
  export * from "./fetch-accounts";
8
8
  export * from "./pda";
9
+ export * from "./signer";
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Universal signer handling utilities for cross-library compatibility
3
+ *
4
+ * This module provides utilities to handle different signer types across
5
+ * @solana/kit, @solana/web3.js, and plain address strings in a unified way.
6
+ */
7
+ import { createNoopSigner, address } from '@solana/kit';
8
+ /**
9
+ * Creates TransactionSigner from UniversalSigner input for universal compatibility
10
+ *
11
+ * This function provides universal compatibility by:
12
+ * - Converting string addresses to TransactionSigner using createNoopSigner
13
+ * - Passing through existing TransactionSigner objects unchanged
14
+ * - Safely handling different signer interfaces (kit, web3.js, etc.)
15
+ *
16
+ * The returned TransactionSigner has both .address property and signing capability,
17
+ * making it suitable for both PDA derivation and codama instruction building.
18
+ *
19
+ * @param signer - The signer input (string address or signer object)
20
+ * @returns TransactionSigner that can be used directly for codama and has .address property
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // Browser usage with string address
25
+ * const borrower = createTransactionSigner("base58AddressString");
26
+ * // borrower.address → Address object for PDA derivation
27
+ * // borrower → TransactionSigner for codama
28
+ *
29
+ * // CLI usage with wallet object
30
+ * const borrower = createTransactionSigner(wallet);
31
+ * // borrower.address → wallet.address for PDA derivation
32
+ * // borrower → wallet signer for codama
33
+ * ```
34
+ */
35
+ export function createTransactionSigner(signer) {
36
+ // Handle string address case (browser usage)
37
+ if (typeof signer === 'string') {
38
+ return createNoopSigner(address(signer)); // Returns TransactionSigner with .address property
39
+ }
40
+ // Handle signer object cases (CLI and other wallet interfaces)
41
+ // These should already be TransactionSigner objects with .address property
42
+ return signer;
43
+ }
44
+ /**
45
+ * Type guard to check if a value is a signer object (not a string)
46
+ */
47
+ export function isSignerObject(signer) {
48
+ return typeof signer !== 'string';
49
+ }
50
+ /**
51
+ * Type guard to check if a value is an address string
52
+ */
53
+ export function isAddressString(signer) {
54
+ return typeof signer === 'string';
55
+ }
56
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/utils/signer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAA0B,MAAM,aAAa,CAAC;AAchF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuB;IAC7D,6CAA6C;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,mDAAmD;IAChG,CAAC;IAED,+DAA+D;IAC/D,2EAA2E;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC;AACpC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type ConfigSelector } from '../utils/config';
2
2
  import { type FluentInstruction, type SmartFluentConfigSelector } from '../utils/instruction-converter';
3
+ import { type UniversalSigner } from '../utils/signer';
3
4
  type UniversalAddress = string;
4
- type UniversalSigner = any;
5
5
  /**
6
6
  * Parameters for accepting a rental contract.
7
7
  *
@@ -13,8 +13,9 @@ type UniversalSigner = any;
13
13
  */
14
14
  export interface AcceptRentalParams {
15
15
  /**
16
- * The borrower who will rent the fleet (must be a signer object).
16
+ * The borrower who will rent the fleet (signer object or base58 string address).
17
17
  * This account will control the fleet during the rental period and make payments.
18
+ * Can be a wallet/signer object (CLI usage) or base58 address string (browser usage).
18
19
  */
19
20
  borrower: UniversalSigner;
20
21
  /**
@@ -96,27 +97,36 @@ export interface AcceptRentalParams {
96
97
  * ```typescript
97
98
  * import { acceptRental, days } from '@srsly/sdk';
98
99
  *
99
- * // Basic rental acceptance
100
+ * // CLI usage with wallet/signer object
100
101
  * const instruction = await acceptRental({
101
- * borrower: wallet, // Borrower's wallet
102
- * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
103
- * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
104
- * contract: "ContractAddr...", // Contract to accept
105
- * duration: days(7) // 7 days rental duration
102
+ * borrower: wallet, // Wallet object for signing
103
+ * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
104
+ * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
105
+ * contract: "ContractAddr...", // Contract to accept
106
+ * duration: days(7) // 7 days rental duration
106
107
  * });
107
108
  *
108
- * // Configure for mainnet
109
+ * // Browser usage with address string
110
+ * const browserInstruction = await acceptRental({
111
+ * borrower: wallet.publicKey.toString(), // Address string for browser
112
+ * borrowerProfile: "ProfileAddr...", // Borrower's Star Atlas profile
113
+ * borrowerFaction: 'mud', // Faction: 'mud', 'oni', or 'ustur'
114
+ * contract: "ContractAddr...", // Contract to accept
115
+ * duration: days(7) // 7 days rental duration
116
+ * });
117
+ *
118
+ * // Configure for mainnet (both patterns work)
109
119
  * const mainnetInstruction = await acceptRental({
110
- * borrower: wallet,
120
+ * borrower: wallet, // Wallet object (CLI style)
111
121
  * borrowerProfile: "ProfileAddr...",
112
- * borrowerFaction: 1, // Can use numbers: 1=mud, 2=oni, 3=ustur
122
+ * borrowerFaction: 1, // Can use numbers: 1=mud, 2=oni, 3=ustur
113
123
  * contract: "ContractAddr...",
114
124
  * duration: days(7)
115
125
  * }).set({ programs: 'mainnet' });
116
126
  *
117
127
  * // Override specific game configuration
118
128
  * const customInstruction = await acceptRental({
119
- * borrower: wallet,
129
+ * borrower: "BorrowerAddress123...", // Address string (browser style)
120
130
  * borrowerProfile: "ProfileAddr...",
121
131
  * borrowerFaction: 'mud',
122
132
  * contract: "ContractAddr...",
@@ -128,7 +138,7 @@ export interface AcceptRentalParams {
128
138
  *
129
139
  * // Convert to @solana/web3.js format
130
140
  * const web3jsInstruction = await acceptRental({
131
- * borrower: wallet,
141
+ * borrower: wallet, // Universal: works with both patterns
132
142
  * borrowerProfile: "ProfileAddr...",
133
143
  * borrowerFaction: 'mud',
134
144
  * contract: "ContractAddr...",
@@ -1 +1 @@
1
- {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../../src/rental/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuE,KAAK,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAG/I,OAAO,EAA4D,KAAK,iBAAiB,EAAE,KAAK,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAMlK,KAAK,gBAAgB,GAAG,MAAM,CAAC;AAC/B,KAAK,eAAe,GAAG,GAAG,CAAC;AAG3B;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,eAAe,EAAE,gBAAgB,CAAC;IAElC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;IAEjC;;;;;;;;OAQG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAE3B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAiID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GACzB,yBAAyB,CAAC,iBAAiB,CAAC,CAG9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAK9F"}
1
+ {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../../src/rental/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuE,KAAK,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAG/I,OAAO,EAA4D,KAAK,iBAAiB,EAAE,KAAK,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAIlK,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGhF,KAAK,gBAAgB,GAAG,MAAM,CAAC;AAG/B;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,eAAe,EAAE,gBAAgB,CAAC;IAElC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;IAEjC;;;;;;;;OAQG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAE3B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAmID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GACzB,yBAAyB,CAAC,iBAAiB,CAAC,CAG9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAK9F"}
@@ -1,6 +1,6 @@
1
1
  import { type ConfigSelector } from '../utils/config';
2
+ import { type UniversalSigner } from '../utils/signer';
2
3
  type UniversalAddress = string;
3
- type UniversalSigner = any;
4
4
  type CancelRentalInstruction = any;
5
5
  /**
6
6
  * Parameters for canceling an active rental.
@@ -13,9 +13,10 @@ type CancelRentalInstruction = any;
13
13
  */
14
14
  export interface CancelRentalParams {
15
15
  /**
16
- * The borrower who wants to cancel the rental (must be a signer object).
16
+ * The borrower who wants to cancel the rental (signer object or base58 string address).
17
17
  * Must be the original borrower who accepted the rental contract.
18
18
  * This account will pay any cancellation penalties.
19
+ * Can be a wallet/signer object (CLI usage) or base58 address string (browser usage).
19
20
  */
20
21
  borrower: UniversalSigner;
21
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../../src/rental/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAIpI,KAAK,gBAAgB,GAAG,MAAM,CAAC;AAC/B,KAAK,eAAe,GAAG,GAAG,CAAC;AAC3B,KAAK,uBAAuB,GAAG,GAAG,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AA8CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GACzB,cAAc,CAAC,uBAAuB,CAAC,CAEzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAK9F"}
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../../src/rental/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAEpI,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGhF,KAAK,gBAAgB,GAAG,MAAM,CAAC;AAC/B,KAAK,uBAAuB,GAAG,GAAG,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAgDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GACzB,cAAc,CAAC,uBAAuB,CAAC,CAEzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAK9F"}
@@ -1,13 +1,28 @@
1
1
  import { type Address } from '@solana/kit';
2
+ import { fetchContractState as fetchContractStateCodama, fetchRentalState as fetchRentalStateCodama } from '../codama/accounts';
2
3
  /**
3
4
  * Convenience wrapper functions for fetching account states with RPC URL strings.
4
5
  * These functions handle creating the RPC connection for you.
5
6
  */
6
7
  /**
7
- * Fetches contract state data from the blockchain using a simple RPC URL
8
+ * Fetches contract state data from the blockchain using RPC URL from global config
9
+ *
10
+ * @param contractAddress - The contract account address to fetch (string or Address)
11
+ * @returns The deserialized contract state data
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Uses RPC URL from global config
16
+ * const contractState = await fetchContractState('ContractAddress123...');
17
+ * console.log('Contract owner:', contractState.data.owner);
18
+ * ```
19
+ */
20
+ export declare function fetchContractState<TAddress extends string = string>(contractAddress: string | Address<TAddress>): Promise<ReturnType<typeof fetchContractStateCodama>>;
21
+ /**
22
+ * Fetches contract state data from the blockchain using a specific RPC URL
8
23
  *
9
24
  * @param rpcUrl - The RPC endpoint URL as a string
10
- * @param contractAddress - The contract account address to fetch
25
+ * @param contractAddress - The contract account address to fetch (string or Address)
11
26
  * @returns The deserialized contract state data
12
27
  *
13
28
  * @example
@@ -21,12 +36,26 @@ import { type Address } from '@solana/kit';
21
36
  * console.log('Contract rate:', contractState.data.rate);
22
37
  * ```
23
38
  */
24
- export declare function fetchContractState<TAddress extends string = string>(rpcUrl: string, contractAddress: Address<TAddress>): Promise<import("@solana/kit").Account<import("../codama/accounts").ContractState, TAddress>>;
39
+ export declare function fetchContractState<TAddress extends string = string>(rpcUrl: string, contractAddress: string | Address<TAddress>): Promise<ReturnType<typeof fetchContractStateCodama>>;
40
+ /**
41
+ * Fetches rental state data from the blockchain using RPC URL from global config
42
+ *
43
+ * @param rentalAddress - The rental account address to fetch (string or Address)
44
+ * @returns The deserialized rental state data
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * // Uses RPC URL from global config
49
+ * const rentalState = await fetchRentalState('RentalAddress123...');
50
+ * console.log('Rental borrower:', rentalState.data.borrower);
51
+ * ```
52
+ */
53
+ export declare function fetchRentalState<TAddress extends string = string>(rentalAddress: string | Address<TAddress>): Promise<ReturnType<typeof fetchRentalStateCodama>>;
25
54
  /**
26
- * Fetches rental state data from the blockchain using a simple RPC URL
55
+ * Fetches rental state data from the blockchain using a specific RPC URL
27
56
  *
28
57
  * @param rpcUrl - The RPC endpoint URL as a string
29
- * @param rentalAddress - The rental account address to fetch
58
+ * @param rentalAddress - The rental account address to fetch (string or Address)
30
59
  * @returns The deserialized rental state data
31
60
  *
32
61
  * @example
@@ -40,7 +69,7 @@ export declare function fetchContractState<TAddress extends string = string>(rpc
40
69
  * console.log('Rental start:', rentalState.data.start);
41
70
  * ```
42
71
  */
43
- export declare function fetchRentalState<TAddress extends string = string>(rpcUrl: string, rentalAddress: Address<TAddress>): Promise<import("@solana/kit").Account<import("../codama/accounts").RentalState, TAddress>>;
72
+ export declare function fetchRentalState<TAddress extends string = string>(rpcUrl: string, rentalAddress: string | Address<TAddress>): Promise<ReturnType<typeof fetchRentalStateCodama>>;
44
73
  /**
45
74
  * Fetches multiple contract states in a single RPC call
46
75
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-accounts.d.ts","sourceRoot":"","sources":["../../../src/utils/fetch-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAQ5D;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACvE,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,gGAOnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACrE,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,8FAOjC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChF,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,wFAOvC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAC9E,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,sFAOrC"}
1
+ {"version":3,"file":"fetch-accounts.d.ts","sourceRoot":"","sources":["../../../src/utils/fetch-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,IAAI,wBAAwB,EAC9C,gBAAgB,IAAI,sBAAsB,EAG3C,MAAM,oBAAoB,CAAC;AAI5B;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACvE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GAC1C,OAAO,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AAExD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACvE,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GAC1C,OAAO,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;AAuBxD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACrE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GACxC,OAAO,CAAC,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACrE,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GACxC,OAAO,CAAC,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC;AAuBtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChF,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,wFAOvC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAC9E,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,sFAOrC"}
@@ -6,4 +6,5 @@ export * from "./duration";
6
6
  export * from "./instruction-converter";
7
7
  export * from "./fetch-accounts";
8
8
  export * from "./pda";
9
+ export * from "./signer";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Universal signer handling utilities for cross-library compatibility
3
+ *
4
+ * This module provides utilities to handle different signer types across
5
+ * @solana/kit, @solana/web3.js, and plain address strings in a unified way.
6
+ */
7
+ import { type TransactionSigner } from '@solana/kit';
8
+ /**
9
+ * Enhanced UniversalSigner type that accepts both signer objects and address strings
10
+ */
11
+ export type UniversalSigner = string | {
12
+ address: string;
13
+ } | {
14
+ publicKey: {
15
+ toString(): string;
16
+ };
17
+ } | {
18
+ publicKey: string;
19
+ } | any;
20
+ /**
21
+ * Creates TransactionSigner from UniversalSigner input for universal compatibility
22
+ *
23
+ * This function provides universal compatibility by:
24
+ * - Converting string addresses to TransactionSigner using createNoopSigner
25
+ * - Passing through existing TransactionSigner objects unchanged
26
+ * - Safely handling different signer interfaces (kit, web3.js, etc.)
27
+ *
28
+ * The returned TransactionSigner has both .address property and signing capability,
29
+ * making it suitable for both PDA derivation and codama instruction building.
30
+ *
31
+ * @param signer - The signer input (string address or signer object)
32
+ * @returns TransactionSigner that can be used directly for codama and has .address property
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * // Browser usage with string address
37
+ * const borrower = createTransactionSigner("base58AddressString");
38
+ * // borrower.address → Address object for PDA derivation
39
+ * // borrower → TransactionSigner for codama
40
+ *
41
+ * // CLI usage with wallet object
42
+ * const borrower = createTransactionSigner(wallet);
43
+ * // borrower.address → wallet.address for PDA derivation
44
+ * // borrower → wallet signer for codama
45
+ * ```
46
+ */
47
+ export declare function createTransactionSigner(signer: UniversalSigner): TransactionSigner;
48
+ /**
49
+ * Type guard to check if a value is a signer object (not a string)
50
+ */
51
+ export declare function isSignerObject(signer: UniversalSigner): signer is Exclude<UniversalSigner, string>;
52
+ /**
53
+ * Type guard to check if a value is an address string
54
+ */
55
+ export declare function isAddressString(signer: UniversalSigner): signer is string;
56
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../src/utils/signer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhF;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CAAE,GACrC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB,GAAG,CAAC;AAGR;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CASlF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAElG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,MAAM,CAEzE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wuwei-labs/srsly",
3
- "version": "2.0.0-beta.44",
3
+ "version": "2.0.0-beta.45",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "types": "./dist/types/index.d.ts",