@chipi-stack/backend 14.13.0 → 14.13.1

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/index.js CHANGED
@@ -89,7 +89,7 @@ function hashCall(call) {
89
89
  return poseidonSpan([
90
90
  CALL_TYPE_HASH_REV1,
91
91
  toBigInt(call.contractAddress),
92
- toBigInt(starknet.hash.getSelectorFromName(call.entrypoint)),
92
+ toBigInt(starknet.hash.getSelector(call.entrypoint)),
93
93
  calldataHash
94
94
  ]);
95
95
  }
@@ -572,7 +572,7 @@ function serializeExecuteFromOutsideV2Calldata(params) {
572
572
  out.push(BigInt(oe.calls.length));
573
573
  for (const call of oe.calls) {
574
574
  out.push(BigInt(call.contractAddress));
575
- out.push(BigInt(starknet.hash.getSelectorFromName(call.entrypoint)));
575
+ out.push(BigInt(starknet.hash.getSelector(call.entrypoint)));
576
576
  const callData = Array.isArray(call.calldata) ? call.calldata : [];
577
577
  out.push(BigInt(callData.length));
578
578
  for (const datum of callData) {
@@ -1952,9 +1952,9 @@ var ChipiTransactions = class {
1952
1952
  /**
1953
1953
  * Get on-chain transaction status
1954
1954
  */
1955
- async getTransactionStatus(hash9, bearerToken) {
1955
+ async getTransactionStatus(hash10, bearerToken) {
1956
1956
  return this.client.get({
1957
- endpoint: `${shared.API_ENDPOINTS.TRANSACTIONS}/${hash9}/status`,
1957
+ endpoint: `${shared.API_ENDPOINTS.TRANSACTIONS}/${hash10}/status`,
1958
1958
  bearerToken
1959
1959
  });
1960
1960
  }
@@ -2124,6 +2124,42 @@ var ChipiSkus = class {
2124
2124
 
2125
2125
  // src/sessions.ts
2126
2126
  init_encryption2();
2127
+ var FIELD_PRIME = 2n ** 251n + 17n * 2n ** 192n + 1n;
2128
+ var HEX_FELT = /^0x[0-9a-fA-F]{1,64}$/;
2129
+ var DECIMAL_FELT = /^\d+$/;
2130
+ var CAIRO_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
2131
+ function normalizeEntrypoints(entrypoints) {
2132
+ return entrypoints.map((entry) => {
2133
+ const value = String(entry).trim();
2134
+ if (HEX_FELT.test(value) || DECIMAL_FELT.test(value)) {
2135
+ const felt = BigInt(value);
2136
+ if (felt >= FIELD_PRIME) {
2137
+ throw new shared.ChipiSessionError(
2138
+ `Session entrypoint ${value} is not a valid felt (>= field prime).`,
2139
+ shared.SESSION_ERRORS.SESSION_ENTRYPOINT_NOT_ALLOWED
2140
+ );
2141
+ }
2142
+ return starknet.num.toHex(felt);
2143
+ }
2144
+ if (CAIRO_IDENTIFIER.test(value)) {
2145
+ return starknet.hash.getSelectorFromName(value);
2146
+ }
2147
+ throw new shared.ChipiSessionError(
2148
+ `Session entrypoint "${value}" is neither a selector (0x\u2026) nor a function name.`,
2149
+ shared.SESSION_ERRORS.SESSION_ENTRYPOINT_NOT_ALLOWED
2150
+ );
2151
+ });
2152
+ }
2153
+ function decodeSessionData(result, nowSeconds) {
2154
+ const validUntil = Number(BigInt(result[0]));
2155
+ const maxCalls = Number(BigInt(result[1]));
2156
+ const callsUsed = Number(BigInt(result[2]));
2157
+ const remainingCalls = Math.max(maxCalls - callsUsed, 0);
2158
+ const isActive = validUntil !== 0 && nowSeconds <= validUntil && remainingCalls > 0;
2159
+ return { isActive, validUntil, remainingCalls, allowedEntrypoints: [] };
2160
+ }
2161
+
2162
+ // src/sessions.ts
2127
2163
  var ChipiSessions = class {
2128
2164
  constructor(client) {
2129
2165
  this.client = client;
@@ -2263,13 +2299,14 @@ var ChipiSessions = class {
2263
2299
  maxCalls: sessionConfig.maxCalls,
2264
2300
  allowedEntrypoints: sessionConfig.allowedEntrypoints.length
2265
2301
  });
2302
+ const allowedEntrypoints = normalizeEntrypoints(sessionConfig.allowedEntrypoints);
2266
2303
  const calldata = [
2267
2304
  sessionConfig.sessionPublicKey,
2268
2305
  starknet.num.toHex(sessionConfig.validUntil),
2269
2306
  starknet.num.toHex(sessionConfig.maxCalls),
2270
2307
  // Array: first element is length, then elements
2271
- starknet.num.toHex(sessionConfig.allowedEntrypoints.length),
2272
- ...sessionConfig.allowedEntrypoints
2308
+ starknet.num.toHex(allowedEntrypoints.length),
2309
+ ...allowedEntrypoints
2273
2310
  ];
2274
2311
  const txHash = await executePaymasterTransaction({
2275
2312
  params: {
@@ -2419,11 +2456,10 @@ var ChipiSessions = class {
2419
2456
  allowedEntrypoints: []
2420
2457
  };
2421
2458
  }
2422
- const isActive = resultArray[0] === "0x1";
2423
- const validUntil = Number(BigInt(resultArray[1]));
2424
- const remainingCalls = Number(BigInt(resultArray[2]));
2425
- const entrypointsLen = Number(BigInt(resultArray[3]));
2426
- const allowedEntrypoints = resultArray.slice(4, 4 + entrypointsLen);
2459
+ const { isActive, validUntil, remainingCalls, allowedEntrypoints } = decodeSessionData(
2460
+ resultArray,
2461
+ Math.floor(Date.now() / 1e3)
2462
+ );
2427
2463
  const sessionData = {
2428
2464
  isActive,
2429
2465
  validUntil,
@@ -2434,7 +2470,8 @@ var ChipiSessions = class {
2434
2470
  isActive,
2435
2471
  validUntil: new Date(validUntil * 1e3).toISOString(),
2436
2472
  remainingCalls,
2437
- allowedEntrypointsCount: allowedEntrypoints.length
2473
+ // The struct carries the whitelist length, not the selectors.
2474
+ allowedEntrypointsLen: Number(BigInt(resultArray[3]))
2438
2475
  });
2439
2476
  return sessionData;
2440
2477
  } catch (error) {
@@ -3586,8 +3623,8 @@ var ChipiSDK = class {
3586
3623
  /**
3587
3624
  * Get on-chain transaction status (supports polling for confirmation)
3588
3625
  */
3589
- async getTransactionStatus(hash9, bearerToken) {
3590
- return this.transactions.getTransactionStatus(hash9, this.resolveBearerToken(bearerToken));
3626
+ async getTransactionStatus(hash10, bearerToken) {
3627
+ return this.transactions.getTransactionStatus(hash10, this.resolveBearerToken(bearerToken));
3591
3628
  }
3592
3629
  /**
3593
3630
  * Prepare a wallet upgrade (e.g., READY → CHIPI or CHIPI v29 → v33).