@anuma/sdk 6.44.0 → 7.0.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.cjs CHANGED
@@ -185,9 +185,6 @@ __export(index_exports, {
185
185
  postApiV1WalletsBinding: () => postApiV1WalletsBinding,
186
186
  postApiV1WalletsBindingNonce: () => postApiV1WalletsBindingNonce,
187
187
  postApiV1WebhooksRevenuecat: () => postApiV1WebhooksRevenuecat,
188
- postAuthOauthByProviderExchange: () => postAuthOauthByProviderExchange,
189
- postAuthOauthByProviderRefresh: () => postAuthOauthByProviderRefresh,
190
- postAuthOauthByProviderRevoke: () => postAuthOauthByProviderRevoke,
191
188
  putApiV1AdminAgentsById: () => putApiV1AdminAgentsById,
192
189
  putApiV1AdminAppsByAppIdApiKeysById: () => putApiV1AdminAppsByAppIdApiKeysById,
193
190
  putApiV1AdminAppsById: () => putApiV1AdminAppsById,
@@ -1310,30 +1307,6 @@ var postApiV1WebhooksRevenuecat = (options) => (options?.client ?? client).post(
1310
1307
  });
1311
1308
  var getApiV1ZetaCreditRate = (options) => (options?.client ?? client).get({ url: "/api/v1/zeta/credit-rate", ...options });
1312
1309
  var getApiV1ZetaMarket = (options) => (options?.client ?? client).get({ url: "/api/v1/zeta/market", ...options });
1313
- var postAuthOauthByProviderExchange = (options) => (options.client ?? client).post({
1314
- url: "/auth/oauth/{provider}/exchange",
1315
- ...options,
1316
- headers: {
1317
- "Content-Type": "application/json",
1318
- ...options.headers
1319
- }
1320
- });
1321
- var postAuthOauthByProviderRefresh = (options) => (options.client ?? client).post({
1322
- url: "/auth/oauth/{provider}/refresh",
1323
- ...options,
1324
- headers: {
1325
- "Content-Type": "application/json",
1326
- ...options.headers
1327
- }
1328
- });
1329
- var postAuthOauthByProviderRevoke = (options) => (options.client ?? client).post({
1330
- url: "/auth/oauth/{provider}/revoke",
1331
- ...options,
1332
- headers: {
1333
- "Content-Type": "application/json",
1334
- ...options.headers
1335
- }
1336
- });
1337
1310
  var getHealth = (options) => (options?.client ?? client).get({ url: "/health", ...options });
1338
1311
 
1339
1312
  // src/lib/chat/fileContext.ts
@@ -1376,6 +1349,192 @@ function attachFileContextToLastUserMessage(messages, fileContext) {
1376
1349
  return result;
1377
1350
  }
1378
1351
 
1352
+ // src/lib/logger.ts
1353
+ var consoleLogger = {
1354
+ debug: console.log.bind(console),
1355
+ info: console.info.bind(console),
1356
+ warn: console.warn.bind(console),
1357
+ error: console.error.bind(console)
1358
+ };
1359
+ var noopLogger = {
1360
+ debug: () => {
1361
+ },
1362
+ info: () => {
1363
+ },
1364
+ warn: () => {
1365
+ },
1366
+ error: () => {
1367
+ }
1368
+ };
1369
+ var LOGGER_STATE_KEY = /* @__PURE__ */ Symbol.for("@anuma/sdk/logger/v1");
1370
+ var loggerGlobal = globalThis;
1371
+ var fallbackLoggerState = { logger: consoleLogger };
1372
+ var fallbackWarned = false;
1373
+ function getLoggerState() {
1374
+ try {
1375
+ return loggerGlobal[LOGGER_STATE_KEY] ?? (loggerGlobal[LOGGER_STATE_KEY] = fallbackLoggerState);
1376
+ } catch {
1377
+ if (!fallbackWarned) {
1378
+ fallbackWarned = true;
1379
+ fallbackLoggerState.logger.warn(
1380
+ "@anuma/sdk: the global object rejects new properties. This entrypoint keeps its own logger, so setLogger does not reach other entrypoints."
1381
+ );
1382
+ }
1383
+ return fallbackLoggerState;
1384
+ }
1385
+ }
1386
+ function setLogger(logger) {
1387
+ getLoggerState().logger = logger;
1388
+ }
1389
+ function getLogger() {
1390
+ return getLoggerState().logger;
1391
+ }
1392
+
1393
+ // src/react/useEncryption.ts
1394
+ var EncryptionKeyMissingError = class extends Error {
1395
+ constructor(address, version) {
1396
+ super(
1397
+ `Encryption key (${version}) not found for ${address}. Please sign a message to generate your encryption key.`
1398
+ );
1399
+ this.name = "EncryptionKeyMissingError";
1400
+ this.address = address;
1401
+ this.version = version;
1402
+ }
1403
+ };
1404
+ var encryptionKeyStore = /* @__PURE__ */ new Map();
1405
+ var cryptoKeyCache = /* @__PURE__ */ new Map();
1406
+ var clearAllEncryptionStateCallbacks = /* @__PURE__ */ new Set();
1407
+ function onClearAllEncryptionState(callback) {
1408
+ clearAllEncryptionStateCallbacks.add(callback);
1409
+ return () => {
1410
+ clearAllEncryptionStateCallbacks.delete(callback);
1411
+ };
1412
+ }
1413
+ function getStoredKeyByVersion(address, version) {
1414
+ const keys = encryptionKeyStore.get(address);
1415
+ if (!keys) return null;
1416
+ const value = version === "v2" ? keys.legacy : keys.current;
1417
+ return value ?? null;
1418
+ }
1419
+ function hexNibble(code) {
1420
+ if (code >= 48 && code <= 57) return code - 48;
1421
+ if (code >= 65 && code <= 70) return code - 55;
1422
+ if (code >= 97 && code <= 102) return code - 87;
1423
+ return -1;
1424
+ }
1425
+ function hexToBytes(hex) {
1426
+ if (typeof hex !== "string") {
1427
+ throw new TypeError(
1428
+ "hexToBytes: expected a hex string. Pass raw signature bytes to deriveKeyFromSignatureBytes instead of stringifying them."
1429
+ );
1430
+ }
1431
+ const cleanHex = hex.startsWith("0x") ? hex.slice(2) : hex;
1432
+ if (cleanHex.length === 0 || cleanHex.length % 2 !== 0) {
1433
+ throw new Error(
1434
+ `hexToBytes: invalid hex string (expected a non-empty even length, got ${cleanHex.length})`
1435
+ );
1436
+ }
1437
+ const bytes = new Uint8Array(cleanHex.length / 2);
1438
+ for (let i = 0; i < cleanHex.length; i += 2) {
1439
+ const hi = hexNibble(cleanHex.charCodeAt(i));
1440
+ const lo = hexNibble(cleanHex.charCodeAt(i + 1));
1441
+ if (hi < 0 || lo < 0) {
1442
+ throw new Error(`hexToBytes: invalid hex string (non-hex character at index ${i})`);
1443
+ }
1444
+ bytes[i / 2] = hi << 4 | lo;
1445
+ }
1446
+ return bytes;
1447
+ }
1448
+ var SHARED_TEXT_ENCODER = new TextEncoder();
1449
+ var SHARED_TEXT_DECODER = new TextDecoder();
1450
+ async function getEncryptionKey(address, version = "v3") {
1451
+ const cacheKey = `${address}:${version}`;
1452
+ const cachedKey = cryptoKeyCache.get(cacheKey);
1453
+ if (cachedKey) {
1454
+ return cachedKey;
1455
+ }
1456
+ const keyHex = getStoredKeyByVersion(address, version);
1457
+ if (!keyHex) {
1458
+ throw new EncryptionKeyMissingError(address, version);
1459
+ }
1460
+ const keyBytes = hexToBytes(keyHex);
1461
+ const cryptoKey = await crypto.subtle.importKey(
1462
+ "raw",
1463
+ keyBytes.buffer,
1464
+ { name: "AES-GCM" },
1465
+ false,
1466
+ ["encrypt", "decrypt"]
1467
+ );
1468
+ cryptoKeyCache.set(cacheKey, cryptoKey);
1469
+ return cryptoKey;
1470
+ }
1471
+ async function decryptData(encryptedHex, address, version = "v3") {
1472
+ const key = await getEncryptionKey(address, version);
1473
+ return decryptDataWithKey(encryptedHex, key);
1474
+ }
1475
+ function hasEncryptionKey(address, version) {
1476
+ return getStoredKeyByVersion(address, version ?? "v3") !== null;
1477
+ }
1478
+ async function decryptDataWithKey(encryptedHex, key) {
1479
+ const combined = hexToBytes(encryptedHex);
1480
+ const iv = combined.subarray(0, 12);
1481
+ const encryptedData = combined.subarray(12);
1482
+ const decryptedData = await crypto.subtle.decrypt(
1483
+ {
1484
+ name: "AES-GCM",
1485
+ iv
1486
+ },
1487
+ key,
1488
+ encryptedData
1489
+ );
1490
+ return SHARED_TEXT_DECODER.decode(decryptedData);
1491
+ }
1492
+
1493
+ // src/lib/db/encryption-utils.ts
1494
+ function isEncrypted(value) {
1495
+ const prefix = value.startsWith("enc:v3:") ? "enc:v3:" : value.startsWith("enc:v2:") ? "enc:v2:" : null;
1496
+ if (!prefix) return false;
1497
+ const payload = value.slice(prefix.length);
1498
+ return payload.length >= 56 && /^[0-9a-f]+$/i.test(payload);
1499
+ }
1500
+ function hasEncryptedToolPayload(event) {
1501
+ return [event.arguments, event.output].some(
1502
+ (value) => typeof value === "string" && isEncrypted(value)
1503
+ );
1504
+ }
1505
+ function detectEncryptionVersion(value) {
1506
+ if (value.startsWith("enc:v3:")) {
1507
+ return { version: "v3", encryptedData: value.slice("enc:v3:".length) };
1508
+ }
1509
+ if (value.startsWith("enc:v2:")) {
1510
+ return { version: "v2", encryptedData: value.slice("enc:v2:".length) };
1511
+ }
1512
+ return null;
1513
+ }
1514
+ async function decryptFieldDetailed(value, address) {
1515
+ if (!value) return { status: "plaintext", value };
1516
+ const detected = detectEncryptionVersion(value);
1517
+ if (!detected) return { status: "plaintext", value };
1518
+ if (detected.encryptedData.length < 56 || !/^[0-9a-f]+$/i.test(detected.encryptedData)) {
1519
+ return { status: "invalid_payload", value, version: detected.version };
1520
+ }
1521
+ try {
1522
+ const plaintext = await decryptData(detected.encryptedData, address, detected.version);
1523
+ return { status: "ok", value: plaintext, version: detected.version };
1524
+ } catch (error) {
1525
+ if (error instanceof EncryptionKeyMissingError) {
1526
+ getLogger().warn("Failed to decrypt field (key missing for version):", error.message);
1527
+ return { status: "key_missing", value, version: detected.version };
1528
+ }
1529
+ getLogger().warn("Failed to decrypt field (auth mismatch or crypto error):", error);
1530
+ return { status: "auth_mismatch", value, version: detected.version };
1531
+ }
1532
+ }
1533
+ async function decryptField(value, address) {
1534
+ const result = await decryptFieldDetailed(value, address);
1535
+ return result.value;
1536
+ }
1537
+
1379
1538
  // src/lib/chat/reservationReceipts.ts
1380
1539
  var ACTIONS = [
1381
1540
  {
@@ -1397,7 +1556,8 @@ function extractReservationReceipts(toolCallEvents) {
1397
1556
  for (const event of toolCallEvents ?? []) {
1398
1557
  const action = ACTIONS.find((a) => event.name?.endsWith(a.tool));
1399
1558
  const output = event.output ?? "";
1400
- if (!action || !output || NOT_AN_ATTEMPT.test(output)) continue;
1559
+ if (!action || !output || hasEncryptedToolPayload(event) || NOT_AN_ATTEMPT.test(output))
1560
+ continue;
1401
1561
  const kept = latest.get(action.kind)?.status;
1402
1562
  if (kept === "made") continue;
1403
1563
  const receipt = toReceipt(action, event.arguments ?? "", output);
@@ -1646,187 +1806,6 @@ function getImageModel(r) {
1646
1806
  return r.image_model;
1647
1807
  }
1648
1808
 
1649
- // src/lib/logger.ts
1650
- var consoleLogger = {
1651
- debug: console.log.bind(console),
1652
- info: console.info.bind(console),
1653
- warn: console.warn.bind(console),
1654
- error: console.error.bind(console)
1655
- };
1656
- var noopLogger = {
1657
- debug: () => {
1658
- },
1659
- info: () => {
1660
- },
1661
- warn: () => {
1662
- },
1663
- error: () => {
1664
- }
1665
- };
1666
- var LOGGER_STATE_KEY = /* @__PURE__ */ Symbol.for("@anuma/sdk/logger/v1");
1667
- var loggerGlobal = globalThis;
1668
- var fallbackLoggerState = { logger: consoleLogger };
1669
- var fallbackWarned = false;
1670
- function getLoggerState() {
1671
- try {
1672
- return loggerGlobal[LOGGER_STATE_KEY] ?? (loggerGlobal[LOGGER_STATE_KEY] = fallbackLoggerState);
1673
- } catch {
1674
- if (!fallbackWarned) {
1675
- fallbackWarned = true;
1676
- fallbackLoggerState.logger.warn(
1677
- "@anuma/sdk: the global object rejects new properties. This entrypoint keeps its own logger, so setLogger does not reach other entrypoints."
1678
- );
1679
- }
1680
- return fallbackLoggerState;
1681
- }
1682
- }
1683
- function setLogger(logger) {
1684
- getLoggerState().logger = logger;
1685
- }
1686
- function getLogger() {
1687
- return getLoggerState().logger;
1688
- }
1689
-
1690
- // src/react/useEncryption.ts
1691
- var EncryptionKeyMissingError = class extends Error {
1692
- constructor(address, version) {
1693
- super(
1694
- `Encryption key (${version}) not found for ${address}. Please sign a message to generate your encryption key.`
1695
- );
1696
- this.name = "EncryptionKeyMissingError";
1697
- this.address = address;
1698
- this.version = version;
1699
- }
1700
- };
1701
- var encryptionKeyStore = /* @__PURE__ */ new Map();
1702
- var cryptoKeyCache = /* @__PURE__ */ new Map();
1703
- var clearAllEncryptionStateCallbacks = /* @__PURE__ */ new Set();
1704
- function onClearAllEncryptionState(callback) {
1705
- clearAllEncryptionStateCallbacks.add(callback);
1706
- return () => {
1707
- clearAllEncryptionStateCallbacks.delete(callback);
1708
- };
1709
- }
1710
- function getStoredKeyByVersion(address, version) {
1711
- const keys = encryptionKeyStore.get(address);
1712
- if (!keys) return null;
1713
- const value = version === "v2" ? keys.legacy : keys.current;
1714
- return value ?? null;
1715
- }
1716
- function hexNibble(code) {
1717
- if (code >= 48 && code <= 57) return code - 48;
1718
- if (code >= 65 && code <= 70) return code - 55;
1719
- if (code >= 97 && code <= 102) return code - 87;
1720
- return -1;
1721
- }
1722
- function hexToBytes(hex) {
1723
- if (typeof hex !== "string") {
1724
- throw new TypeError(
1725
- "hexToBytes: expected a hex string. Pass raw signature bytes to deriveKeyFromSignatureBytes instead of stringifying them."
1726
- );
1727
- }
1728
- const cleanHex = hex.startsWith("0x") ? hex.slice(2) : hex;
1729
- if (cleanHex.length === 0 || cleanHex.length % 2 !== 0) {
1730
- throw new Error(
1731
- `hexToBytes: invalid hex string (expected a non-empty even length, got ${cleanHex.length})`
1732
- );
1733
- }
1734
- const bytes = new Uint8Array(cleanHex.length / 2);
1735
- for (let i = 0; i < cleanHex.length; i += 2) {
1736
- const hi = hexNibble(cleanHex.charCodeAt(i));
1737
- const lo = hexNibble(cleanHex.charCodeAt(i + 1));
1738
- if (hi < 0 || lo < 0) {
1739
- throw new Error(`hexToBytes: invalid hex string (non-hex character at index ${i})`);
1740
- }
1741
- bytes[i / 2] = hi << 4 | lo;
1742
- }
1743
- return bytes;
1744
- }
1745
- var SHARED_TEXT_ENCODER = new TextEncoder();
1746
- var SHARED_TEXT_DECODER = new TextDecoder();
1747
- async function getEncryptionKey(address, version = "v3") {
1748
- const cacheKey = `${address}:${version}`;
1749
- const cachedKey = cryptoKeyCache.get(cacheKey);
1750
- if (cachedKey) {
1751
- return cachedKey;
1752
- }
1753
- const keyHex = getStoredKeyByVersion(address, version);
1754
- if (!keyHex) {
1755
- throw new EncryptionKeyMissingError(address, version);
1756
- }
1757
- const keyBytes = hexToBytes(keyHex);
1758
- const cryptoKey = await crypto.subtle.importKey(
1759
- "raw",
1760
- keyBytes.buffer,
1761
- { name: "AES-GCM" },
1762
- false,
1763
- ["encrypt", "decrypt"]
1764
- );
1765
- cryptoKeyCache.set(cacheKey, cryptoKey);
1766
- return cryptoKey;
1767
- }
1768
- async function decryptData(encryptedHex, address, version = "v3") {
1769
- const key = await getEncryptionKey(address, version);
1770
- return decryptDataWithKey(encryptedHex, key);
1771
- }
1772
- function hasEncryptionKey(address, version) {
1773
- return getStoredKeyByVersion(address, version ?? "v3") !== null;
1774
- }
1775
- async function decryptDataWithKey(encryptedHex, key) {
1776
- const combined = hexToBytes(encryptedHex);
1777
- const iv = combined.subarray(0, 12);
1778
- const encryptedData = combined.subarray(12);
1779
- const decryptedData = await crypto.subtle.decrypt(
1780
- {
1781
- name: "AES-GCM",
1782
- iv
1783
- },
1784
- key,
1785
- encryptedData
1786
- );
1787
- return SHARED_TEXT_DECODER.decode(decryptedData);
1788
- }
1789
-
1790
- // src/lib/db/encryption-utils.ts
1791
- function isEncrypted(value) {
1792
- const prefix = value.startsWith("enc:v3:") ? "enc:v3:" : value.startsWith("enc:v2:") ? "enc:v2:" : null;
1793
- if (!prefix) return false;
1794
- const payload = value.slice(prefix.length);
1795
- return payload.length >= 56 && /^[0-9a-f]+$/i.test(payload);
1796
- }
1797
- function detectEncryptionVersion(value) {
1798
- if (value.startsWith("enc:v3:")) {
1799
- return { version: "v3", encryptedData: value.slice("enc:v3:".length) };
1800
- }
1801
- if (value.startsWith("enc:v2:")) {
1802
- return { version: "v2", encryptedData: value.slice("enc:v2:".length) };
1803
- }
1804
- return null;
1805
- }
1806
- async function decryptFieldDetailed(value, address) {
1807
- if (!value) return { status: "plaintext", value };
1808
- const detected = detectEncryptionVersion(value);
1809
- if (!detected) return { status: "plaintext", value };
1810
- if (detected.encryptedData.length < 56 || !/^[0-9a-f]+$/i.test(detected.encryptedData)) {
1811
- return { status: "invalid_payload", value, version: detected.version };
1812
- }
1813
- try {
1814
- const plaintext = await decryptData(detected.encryptedData, address, detected.version);
1815
- return { status: "ok", value: plaintext, version: detected.version };
1816
- } catch (error) {
1817
- if (error instanceof EncryptionKeyMissingError) {
1818
- getLogger().warn("Failed to decrypt field (key missing for version):", error.message);
1819
- return { status: "key_missing", value, version: detected.version };
1820
- }
1821
- getLogger().warn("Failed to decrypt field (auth mismatch or crypto error):", error);
1822
- return { status: "auth_mismatch", value, version: detected.version };
1823
- }
1824
- }
1825
- async function decryptField(value, address) {
1826
- const result = await decryptFieldDetailed(value, address);
1827
- return result.value;
1828
- }
1829
-
1830
1809
  // src/lib/db/chat/lazyDecrypt.ts
1831
1810
  var LRU_CAPACITY = 256;
1832
1811
  var titleCache = /* @__PURE__ */ new Map();
@@ -4100,9 +4079,6 @@ async function selectServerSideTools(options) {
4100
4079
  postApiV1WalletsBinding,
4101
4080
  postApiV1WalletsBindingNonce,
4102
4081
  postApiV1WebhooksRevenuecat,
4103
- postAuthOauthByProviderExchange,
4104
- postAuthOauthByProviderRefresh,
4105
- postAuthOauthByProviderRevoke,
4106
4082
  putApiV1AdminAgentsById,
4107
4083
  putApiV1AdminAppsByAppIdApiKeysById,
4108
4084
  putApiV1AdminAppsById,