@capxul/sdk 2.7.0 → 2.8.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/dist/{InMemoryAuthCacheAdapter-B6PHyzCN.mjs → InMemoryAuthCacheAdapter-FptQ2p7C.mjs} +62 -1
- package/dist/{create-capxul-client-DNYuHQGS.mjs → create-capxul-client-YSN2yN8m.mjs} +42 -7
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/node/index.d.mts +1 -1
- package/dist/node/index.mjs +1 -1
- package/dist/{observation-BMW_idMZ.d.mts → observation-YhuU8yQX.d.mts} +1 -1
- package/dist/{signer-BMRxwX13.d.mts → signer-xGhV5Q7i.d.mts} +18 -1
- package/dist/testing/index.d.mts +1 -1
- package/dist/testing/index.mjs +2 -2
- package/package.json +5 -5
package/dist/{InMemoryAuthCacheAdapter-B6PHyzCN.mjs → InMemoryAuthCacheAdapter-FptQ2p7C.mjs}
RENAMED
|
@@ -121,6 +121,58 @@ function chainCauseProperties(chain) {
|
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
124
|
+
* Safe (safe-contracts v1.4.1) revert codes. The contracts revert with these
|
|
125
|
+
* short strings to save gas; the sentence lives in the Safe docs
|
|
126
|
+
* (`docs/error_codes.md`). Every Safe on the Capxul rail is this version.
|
|
127
|
+
*/
|
|
128
|
+
const SAFE_REVERT_REASONS = {
|
|
129
|
+
GS000: "could not finish initialization",
|
|
130
|
+
GS001: "threshold needs to be defined",
|
|
131
|
+
GS010: "not enough gas to execute Safe transaction",
|
|
132
|
+
GS011: "could not pay gas costs with ether",
|
|
133
|
+
GS012: "could not pay gas costs with token",
|
|
134
|
+
GS013: "Safe transaction failed when gasPrice and safeTxGas were 0",
|
|
135
|
+
GS020: "signatures data too short",
|
|
136
|
+
GS021: "invalid contract signature location: inside static part",
|
|
137
|
+
GS022: "invalid contract signature location: length not present",
|
|
138
|
+
GS023: "invalid contract signature location: data not complete",
|
|
139
|
+
GS024: "invalid contract signature provided",
|
|
140
|
+
GS025: "hash has not been approved",
|
|
141
|
+
GS026: "invalid owner provided",
|
|
142
|
+
GS030: "only owners can approve a hash",
|
|
143
|
+
GS031: "method can only be called from this contract",
|
|
144
|
+
GS100: "modules have already been initialized",
|
|
145
|
+
GS101: "invalid module address provided",
|
|
146
|
+
GS102: "module has already been added",
|
|
147
|
+
GS103: "invalid prevModule, module pair provided",
|
|
148
|
+
GS104: "method can only be called from an enabled module",
|
|
149
|
+
GS105: "invalid starting point for fetching paginated modules",
|
|
150
|
+
GS106: "invalid page size for fetching paginated modules",
|
|
151
|
+
GS200: "owners have already been set up",
|
|
152
|
+
GS201: "threshold cannot exceed owner count",
|
|
153
|
+
GS202: "threshold needs to be greater than 0",
|
|
154
|
+
GS203: "invalid owner address provided",
|
|
155
|
+
GS204: "address is already an owner",
|
|
156
|
+
GS205: "invalid prevOwner, owner pair provided",
|
|
157
|
+
GS300: "guard does not implement IERC165",
|
|
158
|
+
GS400: "fallback handler cannot be set to self"
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* `Error(GS205: invalid prevOwner, owner pair provided)`, or the bare selector
|
|
162
|
+
* when the name is unknown. Safe codes travel only as the `message` of an
|
|
163
|
+
* `Error(string)` revert, so only that argument is expanded from
|
|
164
|
+
* {@link SAFE_REVERT_REASONS}; every other argument reads `name=value`, even
|
|
165
|
+
* when a custom error's field happens to hold a `GS` string.
|
|
166
|
+
*/
|
|
167
|
+
function revertSummaryText(revert) {
|
|
168
|
+
if (revert.name === null) return revert.selector === "0x" ? "empty revert" : `unknown selector ${revert.selector}`;
|
|
169
|
+
const args = Object.entries(revert.args).map(([name, value]) => {
|
|
170
|
+
const reason = revert.name === "Error" && name === "message" ? SAFE_REVERT_REASONS[value] : void 0;
|
|
171
|
+
return reason === void 0 ? `${name}=${value}` : `${value}: ${reason}`;
|
|
172
|
+
}).join(", ");
|
|
173
|
+
return `${revert.name}(${args})`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
124
176
|
* The error-tracking fingerprint for a failure: the code, the one-word cause,
|
|
125
177
|
* and the operation. PostHog groups `$exception` rows by this value, so one
|
|
126
178
|
* issue is one cause at one operation instead of every provider failure in
|
|
@@ -138,6 +190,7 @@ const CAPXUL_ERROR_CODES = [
|
|
|
138
190
|
"SMART_ACCOUNT_MISSING",
|
|
139
191
|
"PLAYER_NOT_FOUND",
|
|
140
192
|
"ACCOUNT_NOT_FOUND",
|
|
193
|
+
"ACCOUNT_CLAIMED_BY_OTHER_SIGNER",
|
|
141
194
|
"PROVIDER_ERROR",
|
|
142
195
|
"CAPABILITY_UNAVAILABLE",
|
|
143
196
|
"INVALID_INPUT",
|
|
@@ -237,6 +290,14 @@ const Errors = {
|
|
|
237
290
|
smartAccountMissing: (authUserId) => new CapxulError("SMART_ACCOUNT_MISSING", "Smart account not provisioned", { details: { authUserId } }),
|
|
238
291
|
playerNotFound: (playerId) => new CapxulError("PLAYER_NOT_FOUND", playerId ? `Openfort player ${playerId} not found` : "Openfort player not found", playerId === void 0 ? void 0 : { details: { playerId } }),
|
|
239
292
|
accountNotFound: (accountId) => new CapxulError("ACCOUNT_NOT_FOUND", accountId ? `Openfort account ${accountId} not found` : "Openfort account not found", accountId === void 0 ? void 0 : { details: { accountId } }),
|
|
293
|
+
/**
|
|
294
|
+
* The Safe at this email's address is deployed and its owner is neither the
|
|
295
|
+
* Capxul bootstrap owner nor the caller's signer. The claim
|
|
296
|
+
* `swapOwner(bootstrap → signer)` cannot succeed: only the on-chain owner
|
|
297
|
+
* can hand the account over. Read from `getOwners()` before any
|
|
298
|
+
* UserOperation is built (2026-09-02), so no simulation and no retry.
|
|
299
|
+
*/
|
|
300
|
+
accountClaimedByOtherSigner: (details) => new CapxulError("ACCOUNT_CLAIMED_BY_OTHER_SIGNER", "This account is already owned by a different signer.", { details }),
|
|
240
301
|
providerError: (provider, operation, cause, opts) => {
|
|
241
302
|
const details = {
|
|
242
303
|
...opts?.details,
|
|
@@ -648,4 +709,4 @@ Layer.effect(AuthCachePortTag, Effect.sync(() => new InMemoryAuthCacheAdapter())
|
|
|
648
709
|
cause
|
|
649
710
|
}))));
|
|
650
711
|
//#endregion
|
|
651
|
-
export { toPartyId as A, Errors as B, toDurationMs as C, toJwtToken as D, toEpochSeconds as E, toSessionToken as F, failureFingerprint as G, CHAIN_UPSTREAMS as H, decodeConvexError as I, isFailureMode as K, CAPXUL_ERROR_CODES as L, toPayrollRunId as M, toPublishableKey as N, toKycTier as O, toRoleKey as P, CapxulError as R, toCurrencyCode as S, toEpochMs as T, FAILURE_MODES as U, isCapxulError as V, chainCauseProperties as W, toAppId as _, AuthCacheError as a, toChainId as b, BYTES32_RE as c, WEI_RE as d, ZERO_BYTES32 as f, toAllowedOrigin as g, toAddress as h, parseCachedJwt as i, toPayrollGroupId as j, toOrgId as k, EVM_ADDRESS_RE as l, toAccountId as m, BrowserAuthCacheAdapter as n, AuthCachePortTag as o, currencySymbolFor as p, parseAuthSession as r, APP_ID_RE as s, InMemoryAuthCacheAdapter as t, SUPPORTED_CURRENCY_CODES as u, toAuthUserId as v, toEmail as w, toCountryCode as x, toBudgetId as y, EXPECTED_OPERATION_OUTCOMES as z };
|
|
712
|
+
export { toPartyId as A, Errors as B, toDurationMs as C, toJwtToken as D, toEpochSeconds as E, toSessionToken as F, failureFingerprint as G, CHAIN_UPSTREAMS as H, decodeConvexError as I, isFailureMode as K, CAPXUL_ERROR_CODES as L, toPayrollRunId as M, toPublishableKey as N, toKycTier as O, toRoleKey as P, CapxulError as R, toCurrencyCode as S, toEpochMs as T, FAILURE_MODES as U, isCapxulError as V, chainCauseProperties as W, toAppId as _, AuthCacheError as a, toChainId as b, BYTES32_RE as c, WEI_RE as d, ZERO_BYTES32 as f, toAllowedOrigin as g, toAddress as h, parseCachedJwt as i, toPayrollGroupId as j, toOrgId as k, EVM_ADDRESS_RE as l, toAccountId as m, BrowserAuthCacheAdapter as n, AuthCachePortTag as o, currencySymbolFor as p, revertSummaryText as q, parseAuthSession as r, APP_ID_RE as s, InMemoryAuthCacheAdapter as t, SUPPORTED_CURRENCY_CODES as u, toAuthUserId as v, toEmail as w, toCountryCode as x, toBudgetId as y, EXPECTED_OPERATION_OUTCOMES as z };
|
|
@@ -1,15 +1,31 @@
|
|
|
1
|
-
import { A as toPartyId, B as Errors, G as failureFingerprint, H as CHAIN_UPSTREAMS, K as isFailureMode, M as toPayrollRunId, P as toRoleKey, R as CapxulError, S as toCurrencyCode, U as FAILURE_MODES$1, V as isCapxulError, W as chainCauseProperties, b as toChainId, c as BYTES32_RE, d as WEI_RE, f as ZERO_BYTES32, h as toAddress, j as toPayrollGroupId, k as toOrgId, l as EVM_ADDRESS_RE$1, m as toAccountId, n as BrowserAuthCacheAdapter, s as APP_ID_RE, t as InMemoryAuthCacheAdapter, u as SUPPORTED_CURRENCY_CODES, v as toAuthUserId, w as toEmail, x as toCountryCode, y as toBudgetId, z as EXPECTED_OPERATION_OUTCOMES } from "./InMemoryAuthCacheAdapter-
|
|
1
|
+
import { A as toPartyId, B as Errors, G as failureFingerprint, H as CHAIN_UPSTREAMS, K as isFailureMode, M as toPayrollRunId, P as toRoleKey, R as CapxulError, S as toCurrencyCode, U as FAILURE_MODES$1, V as isCapxulError, W as chainCauseProperties, b as toChainId, c as BYTES32_RE, d as WEI_RE, f as ZERO_BYTES32, h as toAddress, j as toPayrollGroupId, k as toOrgId, l as EVM_ADDRESS_RE$1, m as toAccountId, n as BrowserAuthCacheAdapter, q as revertSummaryText, s as APP_ID_RE, t as InMemoryAuthCacheAdapter, u as SUPPORTED_CURRENCY_CODES, v as toAuthUserId, w as toEmail, x as toCountryCode, y as toBudgetId, z as EXPECTED_OPERATION_OUTCOMES } from "./InMemoryAuthCacheAdapter-FptQ2p7C.mjs";
|
|
2
2
|
import { concat, encodeAbiParameters, encodeFunctionData, encodePacked, formatUnits, getContractAddress, keccak256, padHex, parseUnits, recoverAddress, stringToHex, toBytes, toEventSelector, toFunctionSelector, toFunctionSignature } from "viem";
|
|
3
3
|
import { Context, Data, Deferred, Duration, Effect, Exit, Fiber, Layer, Queue, Ref, Result, Schema, SchemaGetter, Scope } from "effect";
|
|
4
4
|
import { makeFunctionReference } from "convex/server";
|
|
5
5
|
//#region src/domain/identity/model.ts
|
|
6
6
|
const WRONG = { refused: "WRONG_STATE" };
|
|
7
7
|
/** org-lifecycle.ts:173-184, lifted verbatim. */
|
|
8
|
+
/**
|
|
9
|
+
* Causes that do not change on a retry: the same request reverts, is refused,
|
|
10
|
+
* or fails the same pre-flight again. A retry re-enters the same lane and
|
|
11
|
+
* fails the same way (the GS205 loop of 2026-09-02).
|
|
12
|
+
*/
|
|
13
|
+
const DEFINITIVE_PROVIDER_MODES = /* @__PURE__ */ new Set([
|
|
14
|
+
"auth-origin-mismatch",
|
|
15
|
+
"app-env-allowlist",
|
|
16
|
+
"no-secure-context",
|
|
17
|
+
"revert",
|
|
18
|
+
"insufficient-balance",
|
|
19
|
+
"insufficient-allowance",
|
|
20
|
+
"rejected",
|
|
21
|
+
"unauthorized"
|
|
22
|
+
]);
|
|
8
23
|
const isRetryable = (failure) => {
|
|
9
24
|
if (failure.code === "CANCELLED" || failure.code === "SIGNER_REJECTED") return true;
|
|
10
25
|
if (failure.code === "PROVIDER_ERROR") {
|
|
11
|
-
const
|
|
12
|
-
|
|
26
|
+
const chainRetryable = failure.error?.chain?.retryable;
|
|
27
|
+
if (chainRetryable !== void 0) return chainRetryable;
|
|
28
|
+
return !DEFINITIVE_PROVIDER_MODES.has(failure.mode);
|
|
13
29
|
}
|
|
14
30
|
return failure.code === "NETWORK_ERROR" || failure.code === "UNKNOWN";
|
|
15
31
|
};
|
|
@@ -4495,7 +4511,7 @@ const moneyExecutionContract = {
|
|
|
4495
4511
|
};
|
|
4496
4512
|
//#endregion
|
|
4497
4513
|
//#region package.json
|
|
4498
|
-
var version = "2.
|
|
4514
|
+
var version = "2.8.0";
|
|
4499
4515
|
//#endregion
|
|
4500
4516
|
//#region src/telemetry/stack-frame-parser.ts
|
|
4501
4517
|
/**
|
|
@@ -4888,7 +4904,7 @@ function postHogExceptionProperties(failure, properties) {
|
|
|
4888
4904
|
$exception_level: "error",
|
|
4889
4905
|
$exception_fingerprint: failureFingerprint(failure.errorKind, isFailureMode(mode) ? mode : void 0, failure.operation),
|
|
4890
4906
|
$issue_name: issueName(failure, isFailureMode(mode) ? mode : void 0),
|
|
4891
|
-
$issue_description: failure
|
|
4907
|
+
$issue_description: issueDescription(failure, message),
|
|
4892
4908
|
$exception_list: [{
|
|
4893
4909
|
type: failure.errorKind,
|
|
4894
4910
|
value: message,
|
|
@@ -4912,6 +4928,22 @@ function postHogExceptionProperties(failure, properties) {
|
|
|
4912
4928
|
}]
|
|
4913
4929
|
};
|
|
4914
4930
|
}
|
|
4931
|
+
/**
|
|
4932
|
+
* The decoded revert leads the description: the provider's own message masks
|
|
4933
|
+
* the raw revert data (`reason: [REDACTED]`), and the name plus arguments
|
|
4934
|
+
* (`Error(message=GS205)`) is what tells one revert from another.
|
|
4935
|
+
*/
|
|
4936
|
+
function issueDescription(failure, message) {
|
|
4937
|
+
const detail = failure.detail;
|
|
4938
|
+
const providerMessage = detail?.chain_provider_message;
|
|
4939
|
+
if (detail?.chain_revert_name === void 0) return providerMessage ?? message;
|
|
4940
|
+
const revert = revertSummaryText({
|
|
4941
|
+
name: detail.chain_revert_name === "unknown" ? null : detail.chain_revert_name,
|
|
4942
|
+
selector: detail.chain_revert_selector ?? "0x",
|
|
4943
|
+
args: detail.chain_revert_args ?? {}
|
|
4944
|
+
});
|
|
4945
|
+
return providerMessage === void 0 ? revert : `${revert}; ${providerMessage}`;
|
|
4946
|
+
}
|
|
4915
4947
|
function issueName(failure, mode) {
|
|
4916
4948
|
const upstream = failure.detail?.chain_upstream;
|
|
4917
4949
|
const method = failure.detail?.chain_method;
|
|
@@ -5050,12 +5082,13 @@ function sanitizeChainDetail(source, detail) {
|
|
|
5050
5082
|
for (const key of [
|
|
5051
5083
|
"chain_upstream",
|
|
5052
5084
|
"chain_method",
|
|
5053
|
-
"chain_revert_name"
|
|
5054
|
-
"chain_revert_selector"
|
|
5085
|
+
"chain_revert_name"
|
|
5055
5086
|
]) {
|
|
5056
5087
|
const value = source[key];
|
|
5057
5088
|
if (typeof value === "string" && ENUMERATED_DETAIL_RE.test(value)) detail[key] = value;
|
|
5058
5089
|
}
|
|
5090
|
+
const selector = source.chain_revert_selector;
|
|
5091
|
+
if (typeof selector === "string" && REVERT_SELECTOR_RE.test(selector)) detail.chain_revert_selector = selector;
|
|
5059
5092
|
if (typeof source.chain_retryable === "boolean") detail.chain_retryable = source.chain_retryable;
|
|
5060
5093
|
const chainHttpStatus = source.chain_http_status;
|
|
5061
5094
|
if (typeof chainHttpStatus === "number" && Number.isInteger(chainHttpStatus) && chainHttpStatus >= 100 && chainHttpStatus <= 599) detail.chain_http_status = chainHttpStatus;
|
|
@@ -5081,6 +5114,8 @@ function sanitizeFailureDetail(input) {
|
|
|
5081
5114
|
}
|
|
5082
5115
|
/** Enumerated codes only (`convex`, `no-secure-context`, `bootstrap-encode`); free text fails. */
|
|
5083
5116
|
const ENUMERATED_DETAIL_RE = /^[A-Za-z][A-Za-z0-9_.-]{0,63}$/u;
|
|
5117
|
+
/** A four-byte revert selector, or the bare `0x` of an empty revert. */
|
|
5118
|
+
const REVERT_SELECTOR_RE = /^0x(?:[0-9a-fA-F]{8})?$/u;
|
|
5084
5119
|
function normalizeSdkVersion(value) {
|
|
5085
5120
|
return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,127}$/u.test(value) ? value : "unknown";
|
|
5086
5121
|
}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as OrgId, C as Address, N as CountryCode, O as AuthSession, S as AccountId, U as PayrollGroupId, V as PartyId, W as PayrollRunId, Y as RoleKey, a as SignerStatusStore, at as CapxulErrorDetails, c as AccountProviderSource, ct as isCapxulError, d as eip1193AccountProvider, dt as ChainUpstream, et as toAddress, f as localPrivateKeyAccountProvider, ft as FAILURE_MODES, g as SmartAccount, h as Session, i as SignerStatus, it as CapxulErrorCode, j as BudgetId, k as AuthUserId, l as AccountRequirement, lt as CHAIN_UPSTREAMS, m as Profile, mt as RevertSummary, n as CapxulSigner, nt as CAPXUL_ERROR_CODES, o as injectedWalletSigner, ot as Errors, p as CapxulResult, pt as FailureMode, r as Eip1193RequestProvider, rt as CapxulError, s as AccountProvider, t as CapxulDigestSigner, tt as toCountryCode, u as Eip1193Provider, ut as ChainCause, x as Account, z as Money } from "./signer-
|
|
2
|
-
import { $ as OrganizationPaymentsMethods, $n as IdentityState, $t as MeMethods, A as OrgView, An as AccountSetupStep, At as ActivityFilter, B as PayrollGroupInput, Bn as SubmittedPermissionExecution, Bt as ActivitySummaryTotal, C as DetectPendingOrgInvitationsResult, Cn as RecipientResolutionKind, Ct as AddressBookMethods, D as OrgMethods, Dn as TargetsMethods, Dt as ActivityAnnotation, E as MemberView, En as TargetReference, Et as InboxMethods, F as RoleSpendCap, Fn as OrgLifecycle, Ft as ActivityPage, G as PayrollRun, Gn as RequestStatus, Gt as DestinationKind, H as PayrollGroupsMethods, Hn as PAYMENT_DIRECTIONS, Ht as DepositInstructions, I as RoleView, In as OrgSetupStep, It as ActivityRange, J as PayrollRuns, Jt as DestinationRail, K as PayrollRunItemInput, Kn as CAPXUL_PAYMENTS_V2_ADDRESS, Kt as DestinationListInput, L as AuthorizeRunInput, Ln as ActorRef, Lt as ActivityReference, M as OrganizationAuditLogItem, Mn as IdentityMethods, Mt as ActivityKind, N as ResendInviteTokenInput, Nn as SmartAccountMethods, Nt as ActivityListParams, O as OrgScopedMethods, On as fingerprintPaymentIntent, Ot as ActivityAnnotationInput, P as RoleDefinition, Pn as AuthMethods, Pt as ActivityMethods, Q as OrganizationPaymentItemInput, Qn as IdentityEvent, Qt as HandlesMethods, R as PayrollEngagementTerms, Rn as CurrentHoldings, Rt as ActivitySummary, S as CreateOrgInput, Sn as RecipientResolution, St as AddressBookLabelInput, T as MemberStatus, Tn as ResolvedTarget, Tt as InboxItem, U as PayrollMethods, Un as PAYMENT_STATUSES, Ut as Destination, V as PayrollGroupMember, Vn as InboxStatus, Vt as ActorReference, W as PayrollOptions, Wn as PaymentStatus$1, Wt as DestinationAddInput, X as OrganizationPaymentBatchInput, Xn as TelemetryPort, Xt as DestinationsMethods, Y as PayrollTermsUnit, Yt as DestinationRemoveInput, Z as OrganizationPaymentInput, Zn as Destination$1, Zt as FinancialOpsMethods, _ as SystemMethods, _n as PaymentStatus, _t as ActorRequest, a as SdkFailureObservation, an as OfframpStatus, ar as isRestoring, at as PermissionReplaceInput, b as CurrentUserContext, bn as PaymentsMethods, bt as AddressBookAddInput, c as PostHogObservabilityOptions, cn as Payment, ct as Budget, d as CreateCapxulClientInput, dn as PaymentDocumentKind, dt as OrgMeOptions, en as MeProfile, er as OrgLane, et as PermissionAssignInput, f as IdentityProfileDetails, fn as PaymentDocumentRef, ft as AccountsMethods, g as Holding, gn as PaymentMoney, gt as ActorRelationshipMethods, h as HoldingsMethods, hn as PaymentDocumentsMethods, ht as ActorProfileMethods, i as ObservationDelivery, in as OfframpQuoteInput, ir as isClaimed, it as PermissionOptions, j as OrganizationAccount, jn as isSettingUpLifecycle, jt as ActivityItem, k as OrgTemplate, kn as AccountLifecycle, kt as ActivityDetail, l as postHogObservability, ln as PaymentActivityEvidence, lt as OrgMe, m as IdentityRuntimeSendResult, mn as PaymentDocumentVerification, mt as ActorProfile, n as ObservationAdapter, nn as OfframpMethods, nr as StateLabel, nt as PermissionCreateInput, o as HostObservability, on as Payee, or as IdentityTransition, ot as PermissionRevokeInput, p as IdentityRuntime, pn as PaymentDocumentRender, pt as AccountMethods, q as PayrollRunStatus, qt as DestinationPayload, r as ObservationContext, rn as OfframpQuote, rr as destination, rt as PermissionMethods, s as PostHogObservabilityClient, sn as PayeesMethods, sr as InvocationControls, st as PermissionReadResult, t as CAPXUL_SDK_EXPECTED_OUTCOME_EVENT, tn as MovementActivityEvidence, tr as Readiness, tt as PermissionChangeInput, u as CapxulClient, un as PaymentDirection, ut as OrgMeMethod, v as SystemHealth, vn as PaymentTiming, vt as ActorRequestIssueInput, w as InviteMemberInput, wn as Ref, wt as InboxApproveInput, x as CurrentUserMethods, xn as PaymentsPayInput, xt as AddressBookEntry, y as MediaMethods, yn as PaymentType, yt as ActorRequestsMethods, z as PayrollGroup, zn as Permission, zt as ActivitySummaryParams } from "./observation-
|
|
1
|
+
import { B as OrgId, C as Address, N as CountryCode, O as AuthSession, S as AccountId, U as PayrollGroupId, V as PartyId, W as PayrollRunId, Y as RoleKey, a as SignerStatusStore, at as CapxulErrorDetails, c as AccountProviderSource, ct as isCapxulError, d as eip1193AccountProvider, dt as ChainUpstream, et as toAddress, f as localPrivateKeyAccountProvider, ft as FAILURE_MODES, g as SmartAccount, h as Session, i as SignerStatus, it as CapxulErrorCode, j as BudgetId, k as AuthUserId, l as AccountRequirement, lt as CHAIN_UPSTREAMS, m as Profile, mt as RevertSummary, n as CapxulSigner, nt as CAPXUL_ERROR_CODES, o as injectedWalletSigner, ot as Errors, p as CapxulResult, pt as FailureMode, r as Eip1193RequestProvider, rt as CapxulError, s as AccountProvider, t as CapxulDigestSigner, tt as toCountryCode, u as Eip1193Provider, ut as ChainCause, x as Account, z as Money } from "./signer-xGhV5Q7i.mjs";
|
|
2
|
+
import { $ as OrganizationPaymentsMethods, $n as IdentityState, $t as MeMethods, A as OrgView, An as AccountSetupStep, At as ActivityFilter, B as PayrollGroupInput, Bn as SubmittedPermissionExecution, Bt as ActivitySummaryTotal, C as DetectPendingOrgInvitationsResult, Cn as RecipientResolutionKind, Ct as AddressBookMethods, D as OrgMethods, Dn as TargetsMethods, Dt as ActivityAnnotation, E as MemberView, En as TargetReference, Et as InboxMethods, F as RoleSpendCap, Fn as OrgLifecycle, Ft as ActivityPage, G as PayrollRun, Gn as RequestStatus, Gt as DestinationKind, H as PayrollGroupsMethods, Hn as PAYMENT_DIRECTIONS, Ht as DepositInstructions, I as RoleView, In as OrgSetupStep, It as ActivityRange, J as PayrollRuns, Jt as DestinationRail, K as PayrollRunItemInput, Kn as CAPXUL_PAYMENTS_V2_ADDRESS, Kt as DestinationListInput, L as AuthorizeRunInput, Ln as ActorRef, Lt as ActivityReference, M as OrganizationAuditLogItem, Mn as IdentityMethods, Mt as ActivityKind, N as ResendInviteTokenInput, Nn as SmartAccountMethods, Nt as ActivityListParams, O as OrgScopedMethods, On as fingerprintPaymentIntent, Ot as ActivityAnnotationInput, P as RoleDefinition, Pn as AuthMethods, Pt as ActivityMethods, Q as OrganizationPaymentItemInput, Qn as IdentityEvent, Qt as HandlesMethods, R as PayrollEngagementTerms, Rn as CurrentHoldings, Rt as ActivitySummary, S as CreateOrgInput, Sn as RecipientResolution, St as AddressBookLabelInput, T as MemberStatus, Tn as ResolvedTarget, Tt as InboxItem, U as PayrollMethods, Un as PAYMENT_STATUSES, Ut as Destination, V as PayrollGroupMember, Vn as InboxStatus, Vt as ActorReference, W as PayrollOptions, Wn as PaymentStatus$1, Wt as DestinationAddInput, X as OrganizationPaymentBatchInput, Xn as TelemetryPort, Xt as DestinationsMethods, Y as PayrollTermsUnit, Yt as DestinationRemoveInput, Z as OrganizationPaymentInput, Zn as Destination$1, Zt as FinancialOpsMethods, _ as SystemMethods, _n as PaymentStatus, _t as ActorRequest, a as SdkFailureObservation, an as OfframpStatus, ar as isRestoring, at as PermissionReplaceInput, b as CurrentUserContext, bn as PaymentsMethods, bt as AddressBookAddInput, c as PostHogObservabilityOptions, cn as Payment, ct as Budget, d as CreateCapxulClientInput, dn as PaymentDocumentKind, dt as OrgMeOptions, en as MeProfile, er as OrgLane, et as PermissionAssignInput, f as IdentityProfileDetails, fn as PaymentDocumentRef, ft as AccountsMethods, g as Holding, gn as PaymentMoney, gt as ActorRelationshipMethods, h as HoldingsMethods, hn as PaymentDocumentsMethods, ht as ActorProfileMethods, i as ObservationDelivery, in as OfframpQuoteInput, ir as isClaimed, it as PermissionOptions, j as OrganizationAccount, jn as isSettingUpLifecycle, jt as ActivityItem, k as OrgTemplate, kn as AccountLifecycle, kt as ActivityDetail, l as postHogObservability, ln as PaymentActivityEvidence, lt as OrgMe, m as IdentityRuntimeSendResult, mn as PaymentDocumentVerification, mt as ActorProfile, n as ObservationAdapter, nn as OfframpMethods, nr as StateLabel, nt as PermissionCreateInput, o as HostObservability, on as Payee, or as IdentityTransition, ot as PermissionRevokeInput, p as IdentityRuntime, pn as PaymentDocumentRender, pt as AccountMethods, q as PayrollRunStatus, qt as DestinationPayload, r as ObservationContext, rn as OfframpQuote, rr as destination, rt as PermissionMethods, s as PostHogObservabilityClient, sn as PayeesMethods, sr as InvocationControls, st as PermissionReadResult, t as CAPXUL_SDK_EXPECTED_OUTCOME_EVENT, tn as MovementActivityEvidence, tr as Readiness, tt as PermissionChangeInput, u as CapxulClient, un as PaymentDirection, ut as OrgMeMethod, v as SystemHealth, vn as PaymentTiming, vt as ActorRequestIssueInput, w as InviteMemberInput, wn as Ref, wt as InboxApproveInput, x as CurrentUserMethods, xn as PaymentsPayInput, xt as AddressBookEntry, y as MediaMethods, yn as PaymentType, yt as ActorRequestsMethods, z as PayrollGroup, zn as Permission, zt as ActivitySummaryParams } from "./observation-YhuU8yQX.mjs";
|
|
3
3
|
import { Hex } from "viem";
|
|
4
4
|
import { Context, Effect, Layer } from "effect";
|
|
5
5
|
import { FunctionReference } from "convex/server";
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as postHogFailureObservation, B as injectedWalletSigner, C as fingerprintPaymentIntent, D as failureEvidenceProps, E as failureDetail, F as isSettingUpLifecycle, G as PAYMENT_DIRECTIONS, H as OBSERVATION_CONTEXT_HEADER, I as formatTraceparent, J as BootstrapEnvelope, K as PAYMENT_STATUSES, L as copyInvocationObservation, M as captureExceptionSync, N as version, O as observationContextProps, P as fromWei, Q as BASE_SEPOLIA_CHAIN_ID, R as readInvocationObservation, S as AuthClientPortTag, T as CAPXUL_SDK_EXPECTED_OUTCOME_EVENT, U as encodeObservationContextHeader, V as signerFailure, W as sanitizeObservationContext, X as CAPXUL_PAYMENTS_V2_ADDRESS, Y as EngineeringTelemetryBootstrapPolicy, Z as normalizeBindingEmail, _ as ClockPortTag, a as TelemetryPortTag, b as authClientPortFromPromiseAdapter, c as smartAccountErrorFromCapxul, d as wireChainId, et as destination, f as IdentityPortTag, g as ClockError, h as convexCallErrorFromCapxul, i as PostHogTelemetryLayer, j as captureException, k as observeFailedResult, l as AccountReadPortTag, m as ConvexCallPortTag, n as postHogProductTelemetry, nt as isRestoring, p as identityErrorFromCapxul, q as CAPXUL_FUNCTIONS, r as detectAuthCacheAdapter, s as SmartAccountPortTag, t as assembleCapxulClient, tt as isClaimed, u as accountReadErrorFromCapxul, v as BootstrapPortTag, w as toWei, x as AuthClientError, y as bootstrapErrorFromCapxul, z as causeChain } from "./create-capxul-client-
|
|
2
|
-
import { B as Errors, C as toDurationMs, D as toJwtToken, E as toEpochSeconds, F as toSessionToken, H as CHAIN_UPSTREAMS, I as decodeConvexError, L as CAPXUL_ERROR_CODES, N as toPublishableKey, O as toKycTier, P as toRoleKey, R as CapxulError, S as toCurrencyCode, T as toEpochMs, U as FAILURE_MODES, V as isCapxulError, b as toChainId, g as toAllowedOrigin, h as toAddress, k as toOrgId, m as toAccountId, o as AuthCachePortTag, p as currencySymbolFor, v as toAuthUserId, w as toEmail, x as toCountryCode } from "./InMemoryAuthCacheAdapter-
|
|
1
|
+
import { A as postHogFailureObservation, B as injectedWalletSigner, C as fingerprintPaymentIntent, D as failureEvidenceProps, E as failureDetail, F as isSettingUpLifecycle, G as PAYMENT_DIRECTIONS, H as OBSERVATION_CONTEXT_HEADER, I as formatTraceparent, J as BootstrapEnvelope, K as PAYMENT_STATUSES, L as copyInvocationObservation, M as captureExceptionSync, N as version, O as observationContextProps, P as fromWei, Q as BASE_SEPOLIA_CHAIN_ID, R as readInvocationObservation, S as AuthClientPortTag, T as CAPXUL_SDK_EXPECTED_OUTCOME_EVENT, U as encodeObservationContextHeader, V as signerFailure, W as sanitizeObservationContext, X as CAPXUL_PAYMENTS_V2_ADDRESS, Y as EngineeringTelemetryBootstrapPolicy, Z as normalizeBindingEmail, _ as ClockPortTag, a as TelemetryPortTag, b as authClientPortFromPromiseAdapter, c as smartAccountErrorFromCapxul, d as wireChainId, et as destination, f as IdentityPortTag, g as ClockError, h as convexCallErrorFromCapxul, i as PostHogTelemetryLayer, j as captureException, k as observeFailedResult, l as AccountReadPortTag, m as ConvexCallPortTag, n as postHogProductTelemetry, nt as isRestoring, p as identityErrorFromCapxul, q as CAPXUL_FUNCTIONS, r as detectAuthCacheAdapter, s as SmartAccountPortTag, t as assembleCapxulClient, tt as isClaimed, u as accountReadErrorFromCapxul, v as BootstrapPortTag, w as toWei, x as AuthClientError, y as bootstrapErrorFromCapxul, z as causeChain } from "./create-capxul-client-YSN2yN8m.mjs";
|
|
2
|
+
import { B as Errors, C as toDurationMs, D as toJwtToken, E as toEpochSeconds, F as toSessionToken, H as CHAIN_UPSTREAMS, I as decodeConvexError, L as CAPXUL_ERROR_CODES, N as toPublishableKey, O as toKycTier, P as toRoleKey, R as CapxulError, S as toCurrencyCode, T as toEpochMs, U as FAILURE_MODES, V as isCapxulError, b as toChainId, g as toAllowedOrigin, h as toAddress, k as toOrgId, m as toAccountId, o as AuthCachePortTag, p as currencySymbolFor, v as toAuthUserId, w as toEmail, x as toCountryCode } from "./InMemoryAuthCacheAdapter-FptQ2p7C.mjs";
|
|
3
3
|
import { keccak256, recoverAddress, stringToHex } from "viem";
|
|
4
4
|
import { Cause, Context, Data, Duration, Effect, Exit, Layer, Result, Schedule, SchemaIssue, SchemaParser, Scope, Tracer } from "effect";
|
|
5
5
|
import { getFunctionName, makeFunctionReference } from "convex/server";
|
package/dist/node/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as AuthSession, _ as AuthCacheError, b as CachedJwt, n as CapxulSigner, v as AuthCachePort, y as AuthCachePortTag } from "../signer-
|
|
1
|
+
import { O as AuthSession, _ as AuthCacheError, b as CachedJwt, n as CapxulSigner, v as AuthCachePort, y as AuthCachePortTag } from "../signer-xGhV5Q7i.mjs";
|
|
2
2
|
import { Hex } from "viem";
|
|
3
3
|
import { Effect, FileSystem, Layer, Path } from "effect";
|
|
4
4
|
//#region src/adapters/auth-cache/FileSystemAuthCacheAdapter.d.ts
|
package/dist/node/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as AuthCacheError, h as toAddress, i as parseCachedJwt, n as BrowserAuthCacheAdapter, o as AuthCachePortTag, r as parseAuthSession, t as InMemoryAuthCacheAdapter } from "../InMemoryAuthCacheAdapter-
|
|
1
|
+
import { a as AuthCacheError, h as toAddress, i as parseCachedJwt, n as BrowserAuthCacheAdapter, o as AuthCachePortTag, r as parseAuthSession, t as InMemoryAuthCacheAdapter } from "../InMemoryAuthCacheAdapter-FptQ2p7C.mjs";
|
|
2
2
|
import { Effect, FileSystem, Layer, Path } from "effect";
|
|
3
3
|
import { privateKeyToAccount } from "viem/accounts";
|
|
4
4
|
import * as os from "node:os";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as WeiAmount, A as BlockNumber, B as OrgId, C as Address$1, D as AppId, E as AnonymousDistinctId, F as DocumentHash, G as PermissionAssignmentId, H as PaymentCommandId, I as DurationMs, J as PublishableKey, K as PermissionId, L as Email, M as ChainId, N as CountryCode, O as AuthSession, P as CurrencyCode, Q as TxHash, R as EpochMs, T as AllowedOrigin, U as PayrollGroupId, V as PartyId, W as PayrollRunId, X as SessionToken, Y as RoleKey, Z as SmartAccount, a as SignerStatusStore, at as CapxulErrorDetails, b as CachedJwt, c as AccountProviderSource, g as SmartAccount$1, h as Session$1, it as CapxulErrorCode, j as BudgetId, k as AuthUserId, l as AccountRequirement, m as Profile$1, n as CapxulSigner, p as CapxulResult, pt as FailureMode, q as Profile, rt as CapxulError, st as Failure, v as AuthCachePort, w as AllowanceKey, x as Account$1, z as Money } from "./signer-
|
|
1
|
+
import { $ as WeiAmount, A as BlockNumber, B as OrgId, C as Address$1, D as AppId, E as AnonymousDistinctId, F as DocumentHash, G as PermissionAssignmentId, H as PaymentCommandId, I as DurationMs, J as PublishableKey, K as PermissionId, L as Email, M as ChainId, N as CountryCode, O as AuthSession, P as CurrencyCode, Q as TxHash, R as EpochMs, T as AllowedOrigin, U as PayrollGroupId, V as PartyId, W as PayrollRunId, X as SessionToken, Y as RoleKey, Z as SmartAccount, a as SignerStatusStore, at as CapxulErrorDetails, b as CachedJwt, c as AccountProviderSource, g as SmartAccount$1, h as Session$1, it as CapxulErrorCode, j as BudgetId, k as AuthUserId, l as AccountRequirement, m as Profile$1, n as CapxulSigner, p as CapxulResult, pt as FailureMode, q as Profile, rt as CapxulError, st as Failure, v as AuthCachePort, w as AllowanceKey, x as Account$1, z as Money } from "./signer-xGhV5Q7i.mjs";
|
|
2
2
|
import { Address, Hex } from "viem";
|
|
3
3
|
import { Context, Effect, Layer, Schema, Scope, Tracer } from "effect";
|
|
4
4
|
import { FunctionReference } from "convex/server";
|
|
@@ -63,7 +63,7 @@ type ChainCause = {
|
|
|
63
63
|
};
|
|
64
64
|
//#endregion
|
|
65
65
|
//#region ../errors/src/errors.d.ts
|
|
66
|
-
declare const CAPXUL_ERROR_CODES: readonly ["NOT_AUTHENTICATED", "EMAIL_DELIVERY_FAILED", "PROFILE_NOT_FOUND", "SMART_ACCOUNT_MISSING", "PLAYER_NOT_FOUND", "ACCOUNT_NOT_FOUND", "PROVIDER_ERROR", "CAPABILITY_UNAVAILABLE", "INVALID_INPUT", "ENV_MISSING", "NOT_IMPLEMENTED", "VERIFICATION_REQUIRED", "INSUFFICIENT_BALANCE", "INVALID_RECIPIENT", "ROLE_PERMISSION_DENIED", "TRANSACTION_FAILED", "RATE_LIMITED", "NETWORK_ERROR", "UNKNOWN", "OTP_EXPIRED", "SIGNER_REJECTED", "CANCELLED", "WRONG_STATE", "STALE_EPOCH", "SUPERSEDED", "WORK_DIED", "ACTOR_STOPPED"];
|
|
66
|
+
declare const CAPXUL_ERROR_CODES: readonly ["NOT_AUTHENTICATED", "EMAIL_DELIVERY_FAILED", "PROFILE_NOT_FOUND", "SMART_ACCOUNT_MISSING", "PLAYER_NOT_FOUND", "ACCOUNT_NOT_FOUND", "ACCOUNT_CLAIMED_BY_OTHER_SIGNER", "PROVIDER_ERROR", "CAPABILITY_UNAVAILABLE", "INVALID_INPUT", "ENV_MISSING", "NOT_IMPLEMENTED", "VERIFICATION_REQUIRED", "INSUFFICIENT_BALANCE", "INVALID_RECIPIENT", "ROLE_PERMISSION_DENIED", "TRANSACTION_FAILED", "RATE_LIMITED", "NETWORK_ERROR", "UNKNOWN", "OTP_EXPIRED", "SIGNER_REJECTED", "CANCELLED", "WRONG_STATE", "STALE_EPOCH", "SUPERSEDED", "WORK_DIED", "ACTOR_STOPPED"];
|
|
67
67
|
type CapxulErrorCode = (typeof CAPXUL_ERROR_CODES)[number];
|
|
68
68
|
/**
|
|
69
69
|
* The one failure representation carried by domain state, actor work, and
|
|
@@ -113,6 +113,23 @@ declare const Errors: {
|
|
|
113
113
|
readonly smartAccountMissing: (authUserId: string) => CapxulError;
|
|
114
114
|
readonly playerNotFound: (playerId?: string) => CapxulError;
|
|
115
115
|
readonly accountNotFound: (accountId?: string) => CapxulError;
|
|
116
|
+
/**
|
|
117
|
+
* The Safe at this email's address is deployed and its owner is neither the
|
|
118
|
+
* Capxul bootstrap owner nor the caller's signer. The claim
|
|
119
|
+
* `swapOwner(bootstrap → signer)` cannot succeed: only the on-chain owner
|
|
120
|
+
* can hand the account over. Read from `getOwners()` before any
|
|
121
|
+
* UserOperation is built (2026-09-02), so no simulation and no retry.
|
|
122
|
+
*/
|
|
123
|
+
readonly accountClaimedByOtherSigner: (details: {
|
|
124
|
+
readonly safeAddress: string;
|
|
125
|
+
readonly onChainOwner: string;
|
|
126
|
+
/** A bounded sample of the `getOwners()` answer, for a Safe that is not single-owner. */
|
|
127
|
+
readonly owners?: readonly string[];
|
|
128
|
+
/** The full size of that answer, when the sample is shorter. */
|
|
129
|
+
readonly ownerCount?: number;
|
|
130
|
+
readonly expectedOwner: string;
|
|
131
|
+
readonly signerAddress: string;
|
|
132
|
+
}) => CapxulError;
|
|
116
133
|
readonly providerError: (provider: string, operation: string, cause: unknown, opts?: {
|
|
117
134
|
readonly failure_mode?: FailureMode;
|
|
118
135
|
readonly httpStatus?: number;
|
package/dist/testing/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Jn as TelemetryGroupInput, Yn as TelemetryIdentifyInput, n as ObservationAdapter, or as IdentityTransition, qn as TelemetryEvent, u as CapxulClient } from "../observation-
|
|
1
|
+
import { Jn as TelemetryGroupInput, Yn as TelemetryIdentifyInput, n as ObservationAdapter, or as IdentityTransition, qn as TelemetryEvent, u as CapxulClient } from "../observation-YhuU8yQX.mjs";
|
|
2
2
|
import { Effect, Layer } from "effect";
|
|
3
3
|
//#region src/testing/telemetry/RecordingTelemetryAdapter.d.ts
|
|
4
4
|
type RecordingTelemetryOperation = {
|
package/dist/testing/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $ as deriveCapxulSafeAddress, P as fromWei, b as authClientPortFromPromiseAdapter, c as smartAccountErrorFromCapxul, d as wireChainId, h as convexCallErrorFromCapxul, o as redactTelemetryEvent, p as identityErrorFromCapxul, t as assembleCapxulClient, u as accountReadErrorFromCapxul, w as toWei, y as bootstrapErrorFromCapxul } from "../create-capxul-client-
|
|
2
|
-
import { B as Errors, C as toDurationMs, D as toJwtToken, E as toEpochSeconds, F as toSessionToken, N as toPublishableKey, O as toKycTier, R as CapxulError, T as toEpochMs, _ as toAppId, b as toChainId, g as toAllowedOrigin, h as toAddress, m as toAccountId, t as InMemoryAuthCacheAdapter, v as toAuthUserId, w as toEmail, x as toCountryCode } from "../InMemoryAuthCacheAdapter-
|
|
1
|
+
import { $ as deriveCapxulSafeAddress, P as fromWei, b as authClientPortFromPromiseAdapter, c as smartAccountErrorFromCapxul, d as wireChainId, h as convexCallErrorFromCapxul, o as redactTelemetryEvent, p as identityErrorFromCapxul, t as assembleCapxulClient, u as accountReadErrorFromCapxul, w as toWei, y as bootstrapErrorFromCapxul } from "../create-capxul-client-YSN2yN8m.mjs";
|
|
2
|
+
import { B as Errors, C as toDurationMs, D as toJwtToken, E as toEpochSeconds, F as toSessionToken, N as toPublishableKey, O as toKycTier, R as CapxulError, T as toEpochMs, _ as toAppId, b as toChainId, g as toAllowedOrigin, h as toAddress, m as toAccountId, t as InMemoryAuthCacheAdapter, v as toAuthUserId, w as toEmail, x as toCountryCode } from "../InMemoryAuthCacheAdapter-FptQ2p7C.mjs";
|
|
3
3
|
import { keccak256 } from "viem";
|
|
4
4
|
import { Effect, Result, Semaphore } from "effect";
|
|
5
5
|
import { getFunctionName } from "convex/server";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capxul/sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/Xelmar-tech/infrastructure.git",
|
|
@@ -47,12 +47,12 @@
|
|
|
47
47
|
"vite": "npm:@voidzero-dev/vite-plus-core@0.3.0",
|
|
48
48
|
"vite-plus": "0.3.0",
|
|
49
49
|
"vitest": "4.1.11",
|
|
50
|
-
"@capxul/
|
|
51
|
-
"@capxul/wire": "0.5.1",
|
|
50
|
+
"@capxul/types": "0.2.1",
|
|
52
51
|
"@capxul/errors": "0.0.2",
|
|
52
|
+
"@capxul/wire": "0.5.1",
|
|
53
53
|
"@capxul/typescript-config": "0.0.0",
|
|
54
|
-
"@capxul/
|
|
55
|
-
"@capxul/
|
|
54
|
+
"@capxul/observability": "2.8.0",
|
|
55
|
+
"@capxul/config": "0.2.1"
|
|
56
56
|
},
|
|
57
57
|
"_permissionlessPinReason": "permissionless.toSafeSmartAccount is pinned to 0.3.4 for live Safe deployment E2E. Counterfactual address fixtures captured 2026-05-17 in packages/backend/convex/_shared/__tests__/counterfactual.test.ts and packages/config/tests/safe.test.ts must be re-verified before upgrading.",
|
|
58
58
|
"scripts": {
|