@yeying-community/web3-bs 1.0.6 → 1.0.7

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.
@@ -1137,6 +1137,16 @@
1137
1137
  function resolveSessionTokenKey(options) {
1138
1138
  return options?.sessionTokenStorageKey || DEFAULT_SESSION_TOKEN_KEY;
1139
1139
  }
1140
+ function resolveAccessToken(options) {
1141
+ if (typeof options?.accessToken === 'string') {
1142
+ const token = options.accessToken.trim();
1143
+ return token || null;
1144
+ }
1145
+ if (options?.accessToken === null) {
1146
+ return null;
1147
+ }
1148
+ return getAccessToken(options);
1149
+ }
1140
1150
  function shouldStoreSessionToken(options) {
1141
1151
  return options?.storeSessionToken !== false;
1142
1152
  }
@@ -1184,6 +1194,9 @@
1184
1194
  }
1185
1195
  return undefined;
1186
1196
  }
1197
+ function parseIssuerDidField(obj) {
1198
+ return parseStringField(obj, ['issuerDid', 'issuer', 'did']);
1199
+ }
1187
1200
  function readStoredSessionToken(options) {
1188
1201
  if (!shouldStoreSessionToken(options))
1189
1202
  return null;
@@ -1240,11 +1253,16 @@
1240
1253
  const fetcher = resolveFetcher(options);
1241
1254
  const credentials = resolveCredentials(options);
1242
1255
  const url = joinUrl$1(resolveBaseUrl(options), options.issuerPath || DEFAULT_ISSUER_PATH);
1256
+ const token = resolveAccessToken(options);
1257
+ const headers = new Headers({
1258
+ accept: 'application/json',
1259
+ });
1260
+ if (token) {
1261
+ headers.set('Authorization', `Bearer ${token}`);
1262
+ }
1243
1263
  const response = await fetcher(url, {
1244
1264
  method: 'GET',
1245
- headers: {
1246
- accept: 'application/json',
1247
- },
1265
+ headers,
1248
1266
  credentials,
1249
1267
  });
1250
1268
  const payload = await parseJsonBody(response);
@@ -1254,7 +1272,7 @@
1254
1272
  const data = parseEnvelopeData(payload);
1255
1273
  return {
1256
1274
  enabled: typeof data.enabled === 'boolean' ? data.enabled : undefined,
1257
- issuerDid: parseStringField(data, ['issuerDid']),
1275
+ issuerDid: parseIssuerDidField(data),
1258
1276
  defaultAudience: parseStringField(data, ['defaultAudience']),
1259
1277
  defaultCapabilities: parseCapabilitiesField(data, ['defaultCapabilities']),
1260
1278
  response: payload,
@@ -1267,13 +1285,18 @@
1267
1285
  }
1268
1286
  const fetcher = resolveFetcher(options);
1269
1287
  const credentials = resolveCredentials(options);
1288
+ const accessToken = resolveAccessToken(options);
1270
1289
  const url = joinUrl$1(resolveBaseUrl(options), options.sessionPath || DEFAULT_SESSION_PATH);
1290
+ const headers = new Headers({
1291
+ 'Content-Type': 'application/json',
1292
+ accept: 'application/json',
1293
+ });
1294
+ if (accessToken) {
1295
+ headers.set('Authorization', `Bearer ${accessToken}`);
1296
+ }
1271
1297
  const response = await fetcher(url, {
1272
1298
  method: 'POST',
1273
- headers: {
1274
- 'Content-Type': 'application/json',
1275
- accept: 'application/json',
1276
- },
1299
+ headers,
1277
1300
  credentials,
1278
1301
  body: JSON.stringify({
1279
1302
  subject,
@@ -1294,7 +1317,7 @@
1294
1317
  subject: parseStringField(data, ['subject']) || subject,
1295
1318
  sessionToken,
1296
1319
  expiresAt: parseNumberField(data, ['expiresAt']),
1297
- issuerDid: parseStringField(data, ['issuerDid']),
1320
+ issuerDid: parseIssuerDidField(data),
1298
1321
  response: payload,
1299
1322
  };
1300
1323
  }
@@ -1335,13 +1358,13 @@
1335
1358
  }
1336
1359
  return {
1337
1360
  ucan,
1338
- issuerDid: parseStringField(data, ['issuerDid']),
1361
+ issuerDid: parseIssuerDidField(data),
1339
1362
  subject: parseStringField(data, ['subject']),
1340
1363
  audience: parseStringField(data, ['audience']),
1341
1364
  capabilities: parseCapabilitiesField(data, ['capabilities']),
1342
- exp: parseNumberField(data, ['exp']),
1343
- nbf: parseNumberField(data, ['nbf']),
1344
- iat: parseNumberField(data, ['iat']),
1365
+ exp: parseNumberField(data, ['exp', 'expiresAt']),
1366
+ nbf: parseNumberField(data, ['nbf', 'notBefore']),
1367
+ iat: parseNumberField(data, ['iat', 'issuedAt']),
1345
1368
  response: payload,
1346
1369
  };
1347
1370
  }
@@ -1614,6 +1637,13 @@
1614
1637
  const tokenCache = new Map();
1615
1638
  const TOKEN_SKEW_MS = 5000;
1616
1639
  const DEFAULT_APP_ACTION = 'write';
1640
+ const LOOPBACK_HOST_ALIASES = new Set([
1641
+ 'localhost',
1642
+ '127.0.0.1',
1643
+ '::1',
1644
+ '0:0:0:0:0:0:0:1',
1645
+ '0.0.0.0',
1646
+ ]);
1617
1647
  function normalizeAppDir(path) {
1618
1648
  const trimmed = path.trim();
1619
1649
  if (!trimmed)
@@ -1625,6 +1655,69 @@
1625
1655
  function sanitizeAppId(appId) {
1626
1656
  return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');
1627
1657
  }
1658
+ function parseHostPort(rawHost) {
1659
+ const host = rawHost.trim();
1660
+ if (!host)
1661
+ return { hostname: '', port: '' };
1662
+ const bracketMatch = host.match(/^\[([^\]]+)\](?::([0-9]+))?$/);
1663
+ if (bracketMatch) {
1664
+ return {
1665
+ hostname: bracketMatch[1] || '',
1666
+ port: bracketMatch[2] || '',
1667
+ };
1668
+ }
1669
+ const firstColon = host.indexOf(':');
1670
+ const lastColon = host.lastIndexOf(':');
1671
+ if (firstColon > -1 && firstColon === lastColon) {
1672
+ const hostname = host.slice(0, firstColon).trim();
1673
+ const port = host.slice(firstColon + 1).trim();
1674
+ if (/^[0-9]+$/.test(port)) {
1675
+ return { hostname, port };
1676
+ }
1677
+ }
1678
+ return { hostname: host, port: '' };
1679
+ }
1680
+ function normalizeAppHostnameForAppId(hostname) {
1681
+ const normalized = (hostname || '').trim().toLowerCase();
1682
+ if (!normalized)
1683
+ return '';
1684
+ const bare = normalized.replace(/^\[(.*)\]$/, '$1');
1685
+ if (LOOPBACK_HOST_ALIASES.has(normalized) || LOOPBACK_HOST_ALIASES.has(bare)) {
1686
+ return 'localhost';
1687
+ }
1688
+ return bare;
1689
+ }
1690
+ function buildSanitizedAppId(hostname, port) {
1691
+ const normalizedHostname = normalizeAppHostnameForAppId(hostname);
1692
+ if (!normalizedHostname)
1693
+ return '';
1694
+ const normalizedPort = port === undefined || port === null ? '' : String(port).trim();
1695
+ const host = normalizedPort
1696
+ ? `${normalizedHostname}:${normalizedPort}`
1697
+ : normalizedHostname;
1698
+ return sanitizeAppId(host);
1699
+ }
1700
+ function deriveAppIdFromHost(host) {
1701
+ const parsed = parseHostPort(host || '');
1702
+ return buildSanitizedAppId(parsed.hostname, parsed.port);
1703
+ }
1704
+ function deriveAppIdFromLocation(locationLike) {
1705
+ const source = locationLike ||
1706
+ (typeof window !== 'undefined' ? window.location : undefined);
1707
+ if (!source)
1708
+ return '';
1709
+ const hostname = typeof source.hostname === 'string' ? source.hostname : '';
1710
+ const port = source.port;
1711
+ if (hostname) {
1712
+ const appId = buildSanitizedAppId(hostname, port);
1713
+ if (appId)
1714
+ return appId;
1715
+ }
1716
+ if (typeof source.host === 'string') {
1717
+ return deriveAppIdFromHost(source.host);
1718
+ }
1719
+ return '';
1720
+ }
1628
1721
  function normalizeAction(action) {
1629
1722
  const trimmed = (action || '').trim();
1630
1723
  return trimmed ? trimmed : null;
@@ -1862,6 +1955,8 @@
1862
1955
  exports.createRootUcan = createRootUcan;
1863
1956
  exports.createUcanSession = createUcanSession;
1864
1957
  exports.createWebDavClient = createWebDavClient;
1958
+ exports.deriveAppIdFromHost = deriveAppIdFromHost;
1959
+ exports.deriveAppIdFromLocation = deriveAppIdFromLocation;
1865
1960
  exports.getAccessToken = getAccessToken;
1866
1961
  exports.getAccounts = getAccounts;
1867
1962
  exports.getBalance = getBalance;
@@ -1881,6 +1976,7 @@
1881
1976
  exports.issueCentralUcan = issueCentralUcan;
1882
1977
  exports.loginWithChallenge = loginWithChallenge;
1883
1978
  exports.logout = logout;
1979
+ exports.normalizeAppHostnameForAppId = normalizeAppHostnameForAppId;
1884
1980
  exports.normalizeUcanCapabilities = normalizeUcanCapabilities;
1885
1981
  exports.normalizeUcanCapability = normalizeUcanCapability;
1886
1982
  exports.onAccountsChanged = onAccountsChanged;