@caatinga/client 2.0.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -2
- package/dist/chunk-HKAMQDUV.js +169 -0
- package/dist/index.cjs +192 -54
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +46 -68
- package/dist/react.cjs +252 -0
- package/dist/react.d.cts +32 -0
- package/dist/react.d.ts +32 -0
- package/dist/react.js +68 -0
- package/dist/stellar-wallets-kit.cjs +58 -45
- package/dist/stellar-wallets-kit.d.cts +10 -5
- package/dist/stellar-wallets-kit.d.ts +10 -5
- package/dist/stellar-wallets-kit.js +57 -50
- package/dist/wallet-session-DeLp8S1c.d.ts +56 -0
- package/dist/wallet-session-ed2Dgs9A.d.cts +56 -0
- package/package.json +20 -5
package/README.md
CHANGED
|
@@ -49,6 +49,8 @@ Supported runtime root exports:
|
|
|
49
49
|
- `createDefaultBindingAdapter`
|
|
50
50
|
- `CaatingaContractClient`
|
|
51
51
|
- `buildXdr`
|
|
52
|
+
- `createWalletSession`
|
|
53
|
+
- `WALLET_SESSION_STORAGE_KEY`
|
|
52
54
|
|
|
53
55
|
Supported type-only root exports:
|
|
54
56
|
|
|
@@ -62,12 +64,15 @@ Supported type-only root exports:
|
|
|
62
64
|
- `CaatingaReadOptions`
|
|
63
65
|
- `CaatingaReadResult`
|
|
64
66
|
- `CaatingaWalletAdapter`
|
|
67
|
+
- `CaatingaWalletCapabilities`
|
|
65
68
|
- `CaatingaXdrBuildResult`
|
|
69
|
+
- `WalletSession`, `WalletSessionOptions`, `WalletSessionState`, `WalletSessionStatus`, `WalletSessionStorage`
|
|
66
70
|
|
|
67
|
-
Supported subpath
|
|
71
|
+
Supported subpath exports:
|
|
68
72
|
|
|
69
73
|
- `@caatinga/client/freighter` -> `freighterWalletAdapter` (optional)
|
|
70
74
|
- `@caatinga/client/stellar-wallets-kit` -> `createStellarWalletsKitAdapter` (optional)
|
|
75
|
+
- `@caatinga/client/react` -> `WalletProvider`, `useWallet`, `useWalletSession` (optional, needs `react >= 18`)
|
|
71
76
|
|
|
72
77
|
Primary flow:
|
|
73
78
|
|
|
@@ -122,6 +127,33 @@ export interface CaatingaWalletAdapter {
|
|
|
122
127
|
|
|
123
128
|
The default Freighter adapter is exported from `@caatinga/client/freighter`.
|
|
124
129
|
|
|
130
|
+
## Wallet Session and React Hooks
|
|
131
|
+
|
|
132
|
+
Wrap any adapter with connection state, persistence, and silent restore:
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
import { createWalletSession } from "@caatinga/client";
|
|
136
|
+
|
|
137
|
+
const session = createWalletSession(wallet, { persist: true });
|
|
138
|
+
await session.connect(); // modal when available, else getPublicKey()
|
|
139
|
+
await session.restore(); // silent reconnect on page load — never throws
|
|
140
|
+
session.subscribe(() => console.log(session.getState()));
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
React apps (optional `react >= 18` peer) use the `react` subpath instead of a hand-rolled context:
|
|
144
|
+
|
|
145
|
+
```tsx
|
|
146
|
+
import { WalletProvider, useWallet } from "@caatinga/client/react";
|
|
147
|
+
|
|
148
|
+
<WalletProvider adapter={wallet} options={{ persist: true }}>
|
|
149
|
+
<App />
|
|
150
|
+
</WalletProvider>;
|
|
151
|
+
|
|
152
|
+
const { publicKey, connected, connecting, error, connect, disconnect } = useWallet();
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Full guide: [docs/wallets.md](https://github.com/Dione-b/caatinga/blob/main/docs/wallets.md).
|
|
156
|
+
|
|
125
157
|
## Debug Output Rules
|
|
126
158
|
|
|
127
159
|
- XDR data is omitted by default
|
|
@@ -151,5 +183,5 @@ Common codes include:
|
|
|
151
183
|
|
|
152
184
|
- this package does not replace Stellar CLI, Stellar SDK, Soroban SDK, or generated bindings
|
|
153
185
|
- manual SCVal serialization and manual XDR parsing are out of scope
|
|
154
|
-
-
|
|
186
|
+
- multisig orchestration, backend signing, and non-documented wallet integrations are not part of the supported contract
|
|
155
187
|
- private module paths and undocumented helpers are less stable than the exports listed above
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// src/wallet/with-wallet-timeout.ts
|
|
2
|
+
import { CaatingaError, CaatingaErrorCode } from "@caatinga/core/browser";
|
|
3
|
+
function withWalletTimeout(label, timeoutMs, fn) {
|
|
4
|
+
if (timeoutMs === void 0 || timeoutMs <= 0) {
|
|
5
|
+
return fn();
|
|
6
|
+
}
|
|
7
|
+
let timedOut = false;
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
const timer = setTimeout(() => {
|
|
10
|
+
timedOut = true;
|
|
11
|
+
reject(
|
|
12
|
+
new CaatingaError(
|
|
13
|
+
`Wallet "${label}" timed out after ${timeoutMs}ms.`,
|
|
14
|
+
CaatingaErrorCode.WALLET_TIMEOUT,
|
|
15
|
+
"Ensure the wallet adapter rejects on user dismissal, or increase walletTimeout."
|
|
16
|
+
)
|
|
17
|
+
);
|
|
18
|
+
}, timeoutMs);
|
|
19
|
+
fn().then(
|
|
20
|
+
(value) => {
|
|
21
|
+
if (timedOut) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
clearTimeout(timer);
|
|
25
|
+
resolve(value);
|
|
26
|
+
},
|
|
27
|
+
(error) => {
|
|
28
|
+
if (timedOut) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
clearTimeout(timer);
|
|
32
|
+
reject(error);
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// src/wallet/wallet-session.ts
|
|
39
|
+
var WALLET_SESSION_STORAGE_KEY = "caatinga:wallet-session";
|
|
40
|
+
function defaultStorage() {
|
|
41
|
+
if (typeof window === "undefined") {
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
return window.localStorage;
|
|
46
|
+
} catch {
|
|
47
|
+
return void 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function toError(value) {
|
|
51
|
+
return value instanceof Error ? value : new Error(String(value));
|
|
52
|
+
}
|
|
53
|
+
function createWalletSession(adapter, options = {}) {
|
|
54
|
+
const capabilities = adapter;
|
|
55
|
+
const storage = options.persist ? options.storage ?? defaultStorage() : void 0;
|
|
56
|
+
const storageKey = options.storageKey ?? WALLET_SESSION_STORAGE_KEY;
|
|
57
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
58
|
+
let state = {
|
|
59
|
+
status: "disconnected",
|
|
60
|
+
publicKey: null,
|
|
61
|
+
error: null
|
|
62
|
+
};
|
|
63
|
+
function setState(next) {
|
|
64
|
+
state = next;
|
|
65
|
+
for (const listener of listeners) {
|
|
66
|
+
listener();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function persistConnection() {
|
|
70
|
+
if (!storage) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const payload = { v: 1 };
|
|
74
|
+
const walletId = capabilities.getWalletId?.();
|
|
75
|
+
if (walletId) {
|
|
76
|
+
payload.walletId = walletId;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
storage.setItem(storageKey, JSON.stringify(payload));
|
|
80
|
+
} catch {
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function clearPersisted() {
|
|
84
|
+
try {
|
|
85
|
+
storage?.removeItem(storageKey);
|
|
86
|
+
} catch {
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function readPersisted() {
|
|
90
|
+
if (!storage) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const raw = storage.getItem(storageKey);
|
|
95
|
+
if (!raw) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const parsed = JSON.parse(raw);
|
|
99
|
+
return parsed && parsed.v === 1 ? parsed : null;
|
|
100
|
+
} catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function requestPublicKey(label, viaModal) {
|
|
105
|
+
const request = viaModal && capabilities.openModal ? () => capabilities.openModal() : () => adapter.getPublicKey();
|
|
106
|
+
return withWalletTimeout(label, options.timeout, request);
|
|
107
|
+
}
|
|
108
|
+
async function connect() {
|
|
109
|
+
setState({ status: "connecting", publicKey: null, error: null });
|
|
110
|
+
try {
|
|
111
|
+
const publicKey = await requestPublicKey("connect", true);
|
|
112
|
+
setState({ status: "connected", publicKey, error: null });
|
|
113
|
+
persistConnection();
|
|
114
|
+
return publicKey;
|
|
115
|
+
} catch (error) {
|
|
116
|
+
setState({ status: "disconnected", publicKey: null, error: toError(error) });
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function disconnect() {
|
|
121
|
+
try {
|
|
122
|
+
await capabilities.disconnect?.();
|
|
123
|
+
} finally {
|
|
124
|
+
clearPersisted();
|
|
125
|
+
setState({ status: "disconnected", publicKey: null, error: null });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function restore() {
|
|
129
|
+
if (state.status === "connected") {
|
|
130
|
+
return state.publicKey;
|
|
131
|
+
}
|
|
132
|
+
const persisted = readPersisted();
|
|
133
|
+
if (!persisted) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
setState({ status: "connecting", publicKey: null, error: null });
|
|
137
|
+
try {
|
|
138
|
+
if (persisted.walletId) {
|
|
139
|
+
capabilities.setWallet?.(persisted.walletId);
|
|
140
|
+
}
|
|
141
|
+
const publicKey = await requestPublicKey("restore", false);
|
|
142
|
+
setState({ status: "connected", publicKey, error: null });
|
|
143
|
+
return publicKey;
|
|
144
|
+
} catch {
|
|
145
|
+
clearPersisted();
|
|
146
|
+
setState({ status: "disconnected", publicKey: null, error: null });
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
adapter,
|
|
152
|
+
getState: () => state,
|
|
153
|
+
subscribe(listener) {
|
|
154
|
+
listeners.add(listener);
|
|
155
|
+
return () => {
|
|
156
|
+
listeners.delete(listener);
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
connect,
|
|
160
|
+
disconnect,
|
|
161
|
+
restore
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export {
|
|
166
|
+
withWalletTimeout,
|
|
167
|
+
WALLET_SESSION_STORAGE_KEY,
|
|
168
|
+
createWalletSession
|
|
169
|
+
};
|
package/dist/index.cjs
CHANGED
|
@@ -21,15 +21,181 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
CaatingaContractClient: () => CaatingaContractClient,
|
|
24
|
+
WALLET_SESSION_STORAGE_KEY: () => WALLET_SESSION_STORAGE_KEY,
|
|
24
25
|
buildXdr: () => buildXdr,
|
|
25
26
|
createCaatingaClient: () => createCaatingaClient,
|
|
26
27
|
createDefaultBindingAdapter: () => createDefaultBindingAdapter,
|
|
28
|
+
createWalletSession: () => createWalletSession,
|
|
27
29
|
resolveContractId: () => resolveContractId
|
|
28
30
|
});
|
|
29
31
|
module.exports = __toCommonJS(index_exports);
|
|
30
32
|
|
|
31
|
-
// src/
|
|
33
|
+
// src/wallet/with-wallet-timeout.ts
|
|
32
34
|
var import_browser = require("@caatinga/core/browser");
|
|
35
|
+
function withWalletTimeout(label, timeoutMs, fn) {
|
|
36
|
+
if (timeoutMs === void 0 || timeoutMs <= 0) {
|
|
37
|
+
return fn();
|
|
38
|
+
}
|
|
39
|
+
let timedOut = false;
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
const timer = setTimeout(() => {
|
|
42
|
+
timedOut = true;
|
|
43
|
+
reject(
|
|
44
|
+
new import_browser.CaatingaError(
|
|
45
|
+
`Wallet "${label}" timed out after ${timeoutMs}ms.`,
|
|
46
|
+
import_browser.CaatingaErrorCode.WALLET_TIMEOUT,
|
|
47
|
+
"Ensure the wallet adapter rejects on user dismissal, or increase walletTimeout."
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
}, timeoutMs);
|
|
51
|
+
fn().then(
|
|
52
|
+
(value) => {
|
|
53
|
+
if (timedOut) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
resolve(value);
|
|
58
|
+
},
|
|
59
|
+
(error) => {
|
|
60
|
+
if (timedOut) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
reject(error);
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// src/wallet/wallet-session.ts
|
|
71
|
+
var WALLET_SESSION_STORAGE_KEY = "caatinga:wallet-session";
|
|
72
|
+
function defaultStorage() {
|
|
73
|
+
if (typeof window === "undefined") {
|
|
74
|
+
return void 0;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
return window.localStorage;
|
|
78
|
+
} catch {
|
|
79
|
+
return void 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function toError(value) {
|
|
83
|
+
return value instanceof Error ? value : new Error(String(value));
|
|
84
|
+
}
|
|
85
|
+
function createWalletSession(adapter, options = {}) {
|
|
86
|
+
const capabilities = adapter;
|
|
87
|
+
const storage = options.persist ? options.storage ?? defaultStorage() : void 0;
|
|
88
|
+
const storageKey = options.storageKey ?? WALLET_SESSION_STORAGE_KEY;
|
|
89
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
90
|
+
let state = {
|
|
91
|
+
status: "disconnected",
|
|
92
|
+
publicKey: null,
|
|
93
|
+
error: null
|
|
94
|
+
};
|
|
95
|
+
function setState(next) {
|
|
96
|
+
state = next;
|
|
97
|
+
for (const listener of listeners) {
|
|
98
|
+
listener();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function persistConnection() {
|
|
102
|
+
if (!storage) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const payload = { v: 1 };
|
|
106
|
+
const walletId = capabilities.getWalletId?.();
|
|
107
|
+
if (walletId) {
|
|
108
|
+
payload.walletId = walletId;
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
storage.setItem(storageKey, JSON.stringify(payload));
|
|
112
|
+
} catch {
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function clearPersisted() {
|
|
116
|
+
try {
|
|
117
|
+
storage?.removeItem(storageKey);
|
|
118
|
+
} catch {
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function readPersisted() {
|
|
122
|
+
if (!storage) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const raw = storage.getItem(storageKey);
|
|
127
|
+
if (!raw) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
const parsed = JSON.parse(raw);
|
|
131
|
+
return parsed && parsed.v === 1 ? parsed : null;
|
|
132
|
+
} catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function requestPublicKey(label, viaModal) {
|
|
137
|
+
const request = viaModal && capabilities.openModal ? () => capabilities.openModal() : () => adapter.getPublicKey();
|
|
138
|
+
return withWalletTimeout(label, options.timeout, request);
|
|
139
|
+
}
|
|
140
|
+
async function connect() {
|
|
141
|
+
setState({ status: "connecting", publicKey: null, error: null });
|
|
142
|
+
try {
|
|
143
|
+
const publicKey = await requestPublicKey("connect", true);
|
|
144
|
+
setState({ status: "connected", publicKey, error: null });
|
|
145
|
+
persistConnection();
|
|
146
|
+
return publicKey;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
setState({ status: "disconnected", publicKey: null, error: toError(error) });
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async function disconnect() {
|
|
153
|
+
try {
|
|
154
|
+
await capabilities.disconnect?.();
|
|
155
|
+
} finally {
|
|
156
|
+
clearPersisted();
|
|
157
|
+
setState({ status: "disconnected", publicKey: null, error: null });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async function restore() {
|
|
161
|
+
if (state.status === "connected") {
|
|
162
|
+
return state.publicKey;
|
|
163
|
+
}
|
|
164
|
+
const persisted = readPersisted();
|
|
165
|
+
if (!persisted) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
setState({ status: "connecting", publicKey: null, error: null });
|
|
169
|
+
try {
|
|
170
|
+
if (persisted.walletId) {
|
|
171
|
+
capabilities.setWallet?.(persisted.walletId);
|
|
172
|
+
}
|
|
173
|
+
const publicKey = await requestPublicKey("restore", false);
|
|
174
|
+
setState({ status: "connected", publicKey, error: null });
|
|
175
|
+
return publicKey;
|
|
176
|
+
} catch {
|
|
177
|
+
clearPersisted();
|
|
178
|
+
setState({ status: "disconnected", publicKey: null, error: null });
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
adapter,
|
|
184
|
+
getState: () => state,
|
|
185
|
+
subscribe(listener) {
|
|
186
|
+
listeners.add(listener);
|
|
187
|
+
return () => {
|
|
188
|
+
listeners.delete(listener);
|
|
189
|
+
};
|
|
190
|
+
},
|
|
191
|
+
connect,
|
|
192
|
+
disconnect,
|
|
193
|
+
restore
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// src/artifacts/resolve-contract-id.ts
|
|
198
|
+
var import_browser2 = require("@caatinga/core/browser");
|
|
33
199
|
function resolveContractId(input) {
|
|
34
200
|
if (input.explicitContractId) {
|
|
35
201
|
return input.explicitContractId;
|
|
@@ -39,9 +205,9 @@ function resolveContractId(input) {
|
|
|
39
205
|
return contractId;
|
|
40
206
|
}
|
|
41
207
|
const hint = formatMissingContractArtifactHint(input.artifacts, input.network, input.contract);
|
|
42
|
-
throw new
|
|
208
|
+
throw new import_browser2.CaatingaError(
|
|
43
209
|
`No contract artifact found for "${input.contract}" on "${input.network}".`,
|
|
44
|
-
|
|
210
|
+
import_browser2.CaatingaErrorCode.CONTRACT_ARTIFACT_NOT_FOUND,
|
|
45
211
|
hint
|
|
46
212
|
);
|
|
47
213
|
}
|
|
@@ -72,14 +238,21 @@ function formatMissingContractArtifactHint(artifacts, network, contract) {
|
|
|
72
238
|
}
|
|
73
239
|
|
|
74
240
|
// src/bindings/default-binding-adapter.ts
|
|
75
|
-
var
|
|
241
|
+
var import_browser3 = require("@caatinga/core/browser");
|
|
76
242
|
function createDefaultBindingAdapter(binding) {
|
|
77
243
|
return {
|
|
78
244
|
createClient({ contractId, publicKey, rpcUrl, networkPassphrase }) {
|
|
245
|
+
if (binding.__caatingaPlaceholder) {
|
|
246
|
+
throw new import_browser3.CaatingaError(
|
|
247
|
+
"Placeholder bindings are still in use; the app cannot reach the contract.",
|
|
248
|
+
import_browser3.CaatingaErrorCode.PLACEHOLDER_BINDING,
|
|
249
|
+
"Run `caatinga generate <contract> --network <network>`, then restart the dev server."
|
|
250
|
+
);
|
|
251
|
+
}
|
|
79
252
|
if (!binding.Client) {
|
|
80
|
-
throw new
|
|
253
|
+
throw new import_browser3.CaatingaError(
|
|
81
254
|
"Generated binding does not export Client.",
|
|
82
|
-
|
|
255
|
+
import_browser3.CaatingaErrorCode.BINDING_CLIENT_NOT_FOUND,
|
|
83
256
|
"Regenerate bindings with Stellar CLI."
|
|
84
257
|
);
|
|
85
258
|
}
|
|
@@ -94,9 +267,9 @@ function createDefaultBindingAdapter(binding) {
|
|
|
94
267
|
const candidate = client;
|
|
95
268
|
const fn = candidate[method];
|
|
96
269
|
if (typeof fn !== "function") {
|
|
97
|
-
throw new
|
|
270
|
+
throw new import_browser3.CaatingaError(
|
|
98
271
|
`Binding method "${method}" was not found.`,
|
|
99
|
-
|
|
272
|
+
import_browser3.CaatingaErrorCode.BINDING_METHOD_NOT_FOUND,
|
|
100
273
|
"Check the contract method name or regenerate bindings."
|
|
101
274
|
);
|
|
102
275
|
}
|
|
@@ -112,7 +285,7 @@ var import_browser8 = require("@caatinga/core/browser");
|
|
|
112
285
|
var import_browser7 = require("@caatinga/core/browser");
|
|
113
286
|
|
|
114
287
|
// src/xdr/build-xdr.ts
|
|
115
|
-
var
|
|
288
|
+
var import_browser4 = require("@caatinga/core/browser");
|
|
116
289
|
async function buildXdr(input) {
|
|
117
290
|
try {
|
|
118
291
|
const transaction = input.transaction;
|
|
@@ -122,12 +295,12 @@ async function buildXdr(input) {
|
|
|
122
295
|
try {
|
|
123
296
|
preparedTransaction = await transaction.prepare();
|
|
124
297
|
} catch (error) {
|
|
125
|
-
if (error instanceof
|
|
298
|
+
if (error instanceof import_browser4.CaatingaError) {
|
|
126
299
|
throw error;
|
|
127
300
|
}
|
|
128
|
-
throw new
|
|
301
|
+
throw new import_browser4.CaatingaError(
|
|
129
302
|
`Failed to prepare XDR for "${input.contractName}.${input.method}".`,
|
|
130
|
-
|
|
303
|
+
import_browser4.CaatingaErrorCode.XDR_PREPARE_FAILED,
|
|
131
304
|
`RPC: ${input.rpcUrl}. Check connectivity, simulation errors, and binding compatibility.`,
|
|
132
305
|
error
|
|
133
306
|
);
|
|
@@ -145,12 +318,12 @@ async function buildXdr(input) {
|
|
|
145
318
|
...input.debug ? { raw: preparedTransaction } : {}
|
|
146
319
|
};
|
|
147
320
|
} catch (error) {
|
|
148
|
-
if (error instanceof
|
|
321
|
+
if (error instanceof import_browser4.CaatingaError) {
|
|
149
322
|
throw error;
|
|
150
323
|
}
|
|
151
|
-
throw new
|
|
324
|
+
throw new import_browser4.CaatingaError(
|
|
152
325
|
`Failed to build XDR for "${input.contractName}.${input.method}".`,
|
|
153
|
-
|
|
326
|
+
import_browser4.CaatingaErrorCode.XDR_BUILD_FAILED,
|
|
154
327
|
"Check the generated binding transaction object.",
|
|
155
328
|
error
|
|
156
329
|
);
|
|
@@ -159,52 +332,15 @@ async function buildXdr(input) {
|
|
|
159
332
|
function readXdr(transaction) {
|
|
160
333
|
const candidate = transaction;
|
|
161
334
|
if (typeof candidate.toXDR !== "function") {
|
|
162
|
-
throw new
|
|
335
|
+
throw new import_browser4.CaatingaError(
|
|
163
336
|
"Binding transaction object does not expose toXDR().",
|
|
164
|
-
|
|
337
|
+
import_browser4.CaatingaErrorCode.XDR_BUILD_FAILED,
|
|
165
338
|
"Regenerate bindings or provide a compatible binding adapter."
|
|
166
339
|
);
|
|
167
340
|
}
|
|
168
341
|
return candidate.toXDR();
|
|
169
342
|
}
|
|
170
343
|
|
|
171
|
-
// src/wallet/with-wallet-timeout.ts
|
|
172
|
-
var import_browser4 = require("@caatinga/core/browser");
|
|
173
|
-
function withWalletTimeout(label, timeoutMs, fn) {
|
|
174
|
-
if (timeoutMs === void 0 || timeoutMs <= 0) {
|
|
175
|
-
return fn();
|
|
176
|
-
}
|
|
177
|
-
let timedOut = false;
|
|
178
|
-
return new Promise((resolve, reject) => {
|
|
179
|
-
const timer = setTimeout(() => {
|
|
180
|
-
timedOut = true;
|
|
181
|
-
reject(
|
|
182
|
-
new import_browser4.CaatingaError(
|
|
183
|
-
`Wallet "${label}" timed out after ${timeoutMs}ms.`,
|
|
184
|
-
import_browser4.CaatingaErrorCode.WALLET_TIMEOUT,
|
|
185
|
-
"Ensure the wallet adapter rejects on user dismissal, or increase walletTimeout."
|
|
186
|
-
)
|
|
187
|
-
);
|
|
188
|
-
}, timeoutMs);
|
|
189
|
-
fn().then(
|
|
190
|
-
(value) => {
|
|
191
|
-
if (timedOut) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
clearTimeout(timer);
|
|
195
|
-
resolve(value);
|
|
196
|
-
},
|
|
197
|
-
(error) => {
|
|
198
|
-
if (timedOut) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
clearTimeout(timer);
|
|
202
|
-
reject(error);
|
|
203
|
-
}
|
|
204
|
-
);
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
|
|
208
344
|
// src/client/invoke-args.ts
|
|
209
345
|
function splitArgsAndOptions(argsOrOptions, maybeOptions) {
|
|
210
346
|
return {
|
|
@@ -529,8 +665,10 @@ function createCaatingaClient(config) {
|
|
|
529
665
|
// Annotate the CommonJS export names for ESM import in node:
|
|
530
666
|
0 && (module.exports = {
|
|
531
667
|
CaatingaContractClient,
|
|
668
|
+
WALLET_SESSION_STORAGE_KEY,
|
|
532
669
|
buildXdr,
|
|
533
670
|
createCaatingaClient,
|
|
534
671
|
createDefaultBindingAdapter,
|
|
672
|
+
createWalletSession,
|
|
535
673
|
resolveContractId
|
|
536
674
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { a as CaatingaBindingAdapter, b as CaatingaClientConfig, c as CaatingaContractRegistration, d as CaatingaXdrBuildResult, e as CaatingaInvokeOptions, f as CaatingaInvokeResult, g as CaatingaReadOptions, h as CaatingaReadResult } from './types-D4XEyX4J.cjs';
|
|
2
2
|
export { i as CaatingaInvokeStatus, j as CaatingaNetwork, C as CaatingaWalletAdapter } from './types-D4XEyX4J.cjs';
|
|
3
|
+
export { C as CaatingaWalletCapabilities, W as WALLET_SESSION_STORAGE_KEY, a as WalletSession, b as WalletSessionOptions, c as WalletSessionState, d as WalletSessionStatus, e as WalletSessionStorage, f as createWalletSession } from './wallet-session-ed2Dgs9A.cjs';
|
|
3
4
|
import { CaatingaArtifacts } from '@caatinga/core/browser';
|
|
4
5
|
|
|
5
6
|
declare function resolveContractId(input: {
|
|
@@ -16,6 +17,12 @@ interface BindingWithClient {
|
|
|
16
17
|
rpcUrl: string;
|
|
17
18
|
networkPassphrase: string;
|
|
18
19
|
}) => unknown;
|
|
20
|
+
/**
|
|
21
|
+
* Set by the scaffolded placeholder binding (`src/contracts/generated/.../index.ts`)
|
|
22
|
+
* that ships with templates so they type-check before `caatinga generate`. Real
|
|
23
|
+
* Stellar CLI bindings never set this, so its presence means generate hasn't run.
|
|
24
|
+
*/
|
|
25
|
+
__caatingaPlaceholder?: boolean;
|
|
19
26
|
}
|
|
20
27
|
declare function createDefaultBindingAdapter(binding: BindingWithClient): CaatingaBindingAdapter;
|
|
21
28
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { a as CaatingaBindingAdapter, b as CaatingaClientConfig, c as CaatingaContractRegistration, d as CaatingaXdrBuildResult, e as CaatingaInvokeOptions, f as CaatingaInvokeResult, g as CaatingaReadOptions, h as CaatingaReadResult } from './types-D4XEyX4J.js';
|
|
2
2
|
export { i as CaatingaInvokeStatus, j as CaatingaNetwork, C as CaatingaWalletAdapter } from './types-D4XEyX4J.js';
|
|
3
|
+
export { C as CaatingaWalletCapabilities, W as WALLET_SESSION_STORAGE_KEY, a as WalletSession, b as WalletSessionOptions, c as WalletSessionState, d as WalletSessionStatus, e as WalletSessionStorage, f as createWalletSession } from './wallet-session-DeLp8S1c.js';
|
|
3
4
|
import { CaatingaArtifacts } from '@caatinga/core/browser';
|
|
4
5
|
|
|
5
6
|
declare function resolveContractId(input: {
|
|
@@ -16,6 +17,12 @@ interface BindingWithClient {
|
|
|
16
17
|
rpcUrl: string;
|
|
17
18
|
networkPassphrase: string;
|
|
18
19
|
}) => unknown;
|
|
20
|
+
/**
|
|
21
|
+
* Set by the scaffolded placeholder binding (`src/contracts/generated/.../index.ts`)
|
|
22
|
+
* that ships with templates so they type-check before `caatinga generate`. Real
|
|
23
|
+
* Stellar CLI bindings never set this, so its presence means generate hasn't run.
|
|
24
|
+
*/
|
|
25
|
+
__caatingaPlaceholder?: boolean;
|
|
19
26
|
}
|
|
20
27
|
declare function createDefaultBindingAdapter(binding: BindingWithClient): CaatingaBindingAdapter;
|
|
21
28
|
|