@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.
- package/README.md +107 -106
- package/dist/auth/central.d.ts +1 -0
- package/dist/dapp.d.ts +8 -0
- package/dist/web3-bs.esm.js +107 -14
- package/dist/web3-bs.esm.js.map +1 -1
- package/dist/web3-bs.umd.js +109 -13
- package/dist/web3-bs.umd.js.map +1 -1
- package/package.json +3 -2
package/dist/web3-bs.umd.js
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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;
|