@medialane/sdk 0.131.0 → 0.132.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/index.cjs +0 -70
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -11
- package/dist/index.d.ts +1 -11
- package/dist/index.js +1 -66
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -480,7 +480,6 @@ declare function createFailoverFetch(urls: string[], options?: FailoverFetchOpti
|
|
|
480
480
|
interface RpcProxyConfig {
|
|
481
481
|
backendUrl: string;
|
|
482
482
|
apiKey: string | undefined;
|
|
483
|
-
checkRateLimit: (ip: string) => boolean;
|
|
484
483
|
fetchImpl?: typeof fetch;
|
|
485
484
|
}
|
|
486
485
|
declare function createRpcProxyHandler(config: RpcProxyConfig): (req: Request) => Promise<Response>;
|
|
@@ -489,7 +488,6 @@ interface BackendProxyConfig {
|
|
|
489
488
|
path: string;
|
|
490
489
|
backendUrl: string;
|
|
491
490
|
apiKey: string | undefined;
|
|
492
|
-
checkRateLimit: (ip: string) => boolean;
|
|
493
491
|
fetchImpl?: typeof fetch;
|
|
494
492
|
forwardCookie?: {
|
|
495
493
|
name: string;
|
|
@@ -513,7 +511,6 @@ declare function validateUrl(raw: string, options?: {
|
|
|
513
511
|
declare function isPrivateOrInsecureUrl(raw: string, requireHttps?: boolean): boolean;
|
|
514
512
|
|
|
515
513
|
interface ImageProxyConfig {
|
|
516
|
-
checkRateLimit: (ip: string) => boolean;
|
|
517
514
|
resolveHostname: (hostname: string) => Promise<string[]>;
|
|
518
515
|
fetchImpl?: typeof fetch;
|
|
519
516
|
userAgent?: string;
|
|
@@ -547,15 +544,8 @@ declare function uploadDirectoryToBackend(config: BackendMetadataConfig, files:
|
|
|
547
544
|
}>;
|
|
548
545
|
declare function getBackendSignedUrl(config: BackendMetadataConfig, kind?: "image" | "document" | "media"): Promise<string>;
|
|
549
546
|
|
|
550
|
-
declare function createRateLimiter(windowMs: number, max: number): (key: string) => boolean;
|
|
551
|
-
declare const TRUSTED_APP_IP_HEADER = "x-medialane-client-ip";
|
|
552
|
-
declare function requestIp(req: Request): string;
|
|
553
|
-
|
|
554
547
|
declare function isSameOrigin(req: Request): boolean;
|
|
555
548
|
|
|
556
|
-
declare function isSpoofableForwardingHeader(name: string): boolean;
|
|
557
|
-
declare function trustedClientIp(req: Request): string;
|
|
558
|
-
|
|
559
549
|
declare const IDENTITY_TTL_SECONDS = 86400;
|
|
560
550
|
declare const ACCOUNT_SESSION_TTL_SECONDS: number;
|
|
561
551
|
interface SiwsIdentity {
|
|
@@ -623,4 +613,4 @@ declare const IPFS_SAFE_CONTENT_TYPE_PREFIXES: readonly ["image/jpeg", "image/pn
|
|
|
623
613
|
declare function resolveSafeImageContentType(contentType: string): string;
|
|
624
614
|
declare const MAX_IPFS_GATEWAY_RESPONSE_BYTES: number;
|
|
625
615
|
|
|
626
|
-
export { ACCOUNT_SESSION_TTL_SECONDS, ALLOWED_IMAGE_CONTENT_TYPES, type AssetAttribute, type AssetMetadata, type BackendMetadataConfig, type BackendProxyConfig, type BackendUploadResult, type BuildAssetMetadataInput, type CanonicalHash, type CappedBody, Chain, DEFAULT_CURRENCY, type FailoverFetchOptions, type FeeEnv, IDENTITY_TTL_SECONDS, IPFS_SAFE_CONTENT_TYPE_PREFIXES, type ImageProxyConfig, MAX_IMAGE_PROXY_BYTES, MAX_IMAGE_REDIRECTS, MAX_IPFS_GATEWAY_RESPONSE_BYTES, POLICY_REFUSAL_CODES, RESERVED_TRAITS, type RemixPolicy, type RemixPolicyInput, ResolvedFeeConfig, type RpcProxyConfig, STARKNET_COLLECTION_1155_CLASS_HASH, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_1155_FACTORY_CLASS_HASH, STARKNET_COLLECTION_1155_START_BLOCK, STARKNET_COLLECTION_721_CONTRACT, STARKNET_COLLECTION_721_START_BLOCK, STARKNET_CREATOR_COIN_CLASS_HASH, STARKNET_CREATOR_COIN_EKUBO_LAUNCHER, STARKNET_CREATOR_COIN_FACTORY_CLASS_HASH, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_CREATOR_COIN_START_BLOCK, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_COLLECTION_CLASS_HASH, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_EKUBO_CORE, STARKNET_GENESIS_MINT_BR_CONTRACT, STARKNET_GENESIS_MINT_GLOBAL_CONTRACT, STARKNET_GENESIS_MINT_LAUNCH_CONTRACT, STARKNET_IPCOLLECTION_CLASS_HASH, STARKNET_IPNFT_CLASS_HASH, STARKNET_IP_CLUB_COLLECTION_CLASS_HASH, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CLASS_HASH, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_IP_TICKET_COLLECTION_CLASS_HASH, STARKNET_MARKETPLACE_1155_CLASS_HASH, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_1155_START_BLOCK, STARKNET_MARKETPLACE_721_CLASS_HASH, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MARKETPLACE_721_START_BLOCK, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_COLLECTION_CLASS_HASH, STARKNET_POP_FACTORY_CONTRACT, SUPPORTED_TOKENS, SUPPORTED_URL_CHAINS, ServiceCapability, ServiceDefinition, type ServiceId, type SiwsIdentity, type SupportedToken, type SupportedTokenSymbol,
|
|
616
|
+
export { ACCOUNT_SESSION_TTL_SECONDS, ALLOWED_IMAGE_CONTENT_TYPES, type AssetAttribute, type AssetMetadata, type BackendMetadataConfig, type BackendProxyConfig, type BackendUploadResult, type BuildAssetMetadataInput, type CanonicalHash, type CappedBody, Chain, DEFAULT_CURRENCY, type FailoverFetchOptions, type FeeEnv, IDENTITY_TTL_SECONDS, IPFS_SAFE_CONTENT_TYPE_PREFIXES, type ImageProxyConfig, MAX_IMAGE_PROXY_BYTES, MAX_IMAGE_REDIRECTS, MAX_IPFS_GATEWAY_RESPONSE_BYTES, POLICY_REFUSAL_CODES, RESERVED_TRAITS, type RemixPolicy, type RemixPolicyInput, ResolvedFeeConfig, type RpcProxyConfig, STARKNET_COLLECTION_1155_CLASS_HASH, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_1155_FACTORY_CLASS_HASH, STARKNET_COLLECTION_1155_START_BLOCK, STARKNET_COLLECTION_721_CONTRACT, STARKNET_COLLECTION_721_START_BLOCK, STARKNET_CREATOR_COIN_CLASS_HASH, STARKNET_CREATOR_COIN_EKUBO_LAUNCHER, STARKNET_CREATOR_COIN_FACTORY_CLASS_HASH, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_CREATOR_COIN_START_BLOCK, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_COLLECTION_CLASS_HASH, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_EKUBO_CORE, STARKNET_GENESIS_MINT_BR_CONTRACT, STARKNET_GENESIS_MINT_GLOBAL_CONTRACT, STARKNET_GENESIS_MINT_LAUNCH_CONTRACT, STARKNET_IPCOLLECTION_CLASS_HASH, STARKNET_IPNFT_CLASS_HASH, STARKNET_IP_CLUB_COLLECTION_CLASS_HASH, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CLASS_HASH, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_IP_TICKET_COLLECTION_CLASS_HASH, STARKNET_MARKETPLACE_1155_CLASS_HASH, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_1155_START_BLOCK, STARKNET_MARKETPLACE_721_CLASS_HASH, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MARKETPLACE_721_START_BLOCK, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_COLLECTION_CLASS_HASH, STARKNET_POP_FACTORY_CONTRACT, SUPPORTED_TOKENS, SUPPORTED_URL_CHAINS, ServiceCapability, ServiceDefinition, type ServiceId, type SiwsIdentity, type SupportedToken, type SupportedTokenSymbol, assetHref, buildAssetMetadata, chainFromSlug, chainSlug, coinHref, collectionHref, createBackendProxyHandler, createFailoverFetch, createImageProxyHandler, createRpcProxyHandler, encodeU256, formatAmount, getBackendSignedUrl, getDerivativesTerm, getListableTokens, getService, getServicesByCapability, getTokenByAddress, getTokenBySymbol, hasCapability, isPolicyRefusal, isPrivateHost, isPrivateOrInsecureUrl, isSameOrigin, isServiceId, isTransientRpcError, isValidIpfsCidPath, issueAccountSessionToken, issueSiwsToken, listServices, normalizeAddress, normalizeHash, parseAmount, readBodyWithCap, resolveAppFeeConfig, resolveRemixPolicy, resolveSafeImageContentType, shortenAddress, stringifyBigInts, u256ToBigInt, uploadDirectoryToBackend, uploadFileToBackend, uploadJsonToBackend, validateUrl, verifyAccountSessionToken, verifySiwsToken };
|
package/dist/index.d.ts
CHANGED
|
@@ -480,7 +480,6 @@ declare function createFailoverFetch(urls: string[], options?: FailoverFetchOpti
|
|
|
480
480
|
interface RpcProxyConfig {
|
|
481
481
|
backendUrl: string;
|
|
482
482
|
apiKey: string | undefined;
|
|
483
|
-
checkRateLimit: (ip: string) => boolean;
|
|
484
483
|
fetchImpl?: typeof fetch;
|
|
485
484
|
}
|
|
486
485
|
declare function createRpcProxyHandler(config: RpcProxyConfig): (req: Request) => Promise<Response>;
|
|
@@ -489,7 +488,6 @@ interface BackendProxyConfig {
|
|
|
489
488
|
path: string;
|
|
490
489
|
backendUrl: string;
|
|
491
490
|
apiKey: string | undefined;
|
|
492
|
-
checkRateLimit: (ip: string) => boolean;
|
|
493
491
|
fetchImpl?: typeof fetch;
|
|
494
492
|
forwardCookie?: {
|
|
495
493
|
name: string;
|
|
@@ -513,7 +511,6 @@ declare function validateUrl(raw: string, options?: {
|
|
|
513
511
|
declare function isPrivateOrInsecureUrl(raw: string, requireHttps?: boolean): boolean;
|
|
514
512
|
|
|
515
513
|
interface ImageProxyConfig {
|
|
516
|
-
checkRateLimit: (ip: string) => boolean;
|
|
517
514
|
resolveHostname: (hostname: string) => Promise<string[]>;
|
|
518
515
|
fetchImpl?: typeof fetch;
|
|
519
516
|
userAgent?: string;
|
|
@@ -547,15 +544,8 @@ declare function uploadDirectoryToBackend(config: BackendMetadataConfig, files:
|
|
|
547
544
|
}>;
|
|
548
545
|
declare function getBackendSignedUrl(config: BackendMetadataConfig, kind?: "image" | "document" | "media"): Promise<string>;
|
|
549
546
|
|
|
550
|
-
declare function createRateLimiter(windowMs: number, max: number): (key: string) => boolean;
|
|
551
|
-
declare const TRUSTED_APP_IP_HEADER = "x-medialane-client-ip";
|
|
552
|
-
declare function requestIp(req: Request): string;
|
|
553
|
-
|
|
554
547
|
declare function isSameOrigin(req: Request): boolean;
|
|
555
548
|
|
|
556
|
-
declare function isSpoofableForwardingHeader(name: string): boolean;
|
|
557
|
-
declare function trustedClientIp(req: Request): string;
|
|
558
|
-
|
|
559
549
|
declare const IDENTITY_TTL_SECONDS = 86400;
|
|
560
550
|
declare const ACCOUNT_SESSION_TTL_SECONDS: number;
|
|
561
551
|
interface SiwsIdentity {
|
|
@@ -623,4 +613,4 @@ declare const IPFS_SAFE_CONTENT_TYPE_PREFIXES: readonly ["image/jpeg", "image/pn
|
|
|
623
613
|
declare function resolveSafeImageContentType(contentType: string): string;
|
|
624
614
|
declare const MAX_IPFS_GATEWAY_RESPONSE_BYTES: number;
|
|
625
615
|
|
|
626
|
-
export { ACCOUNT_SESSION_TTL_SECONDS, ALLOWED_IMAGE_CONTENT_TYPES, type AssetAttribute, type AssetMetadata, type BackendMetadataConfig, type BackendProxyConfig, type BackendUploadResult, type BuildAssetMetadataInput, type CanonicalHash, type CappedBody, Chain, DEFAULT_CURRENCY, type FailoverFetchOptions, type FeeEnv, IDENTITY_TTL_SECONDS, IPFS_SAFE_CONTENT_TYPE_PREFIXES, type ImageProxyConfig, MAX_IMAGE_PROXY_BYTES, MAX_IMAGE_REDIRECTS, MAX_IPFS_GATEWAY_RESPONSE_BYTES, POLICY_REFUSAL_CODES, RESERVED_TRAITS, type RemixPolicy, type RemixPolicyInput, ResolvedFeeConfig, type RpcProxyConfig, STARKNET_COLLECTION_1155_CLASS_HASH, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_1155_FACTORY_CLASS_HASH, STARKNET_COLLECTION_1155_START_BLOCK, STARKNET_COLLECTION_721_CONTRACT, STARKNET_COLLECTION_721_START_BLOCK, STARKNET_CREATOR_COIN_CLASS_HASH, STARKNET_CREATOR_COIN_EKUBO_LAUNCHER, STARKNET_CREATOR_COIN_FACTORY_CLASS_HASH, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_CREATOR_COIN_START_BLOCK, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_COLLECTION_CLASS_HASH, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_EKUBO_CORE, STARKNET_GENESIS_MINT_BR_CONTRACT, STARKNET_GENESIS_MINT_GLOBAL_CONTRACT, STARKNET_GENESIS_MINT_LAUNCH_CONTRACT, STARKNET_IPCOLLECTION_CLASS_HASH, STARKNET_IPNFT_CLASS_HASH, STARKNET_IP_CLUB_COLLECTION_CLASS_HASH, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CLASS_HASH, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_IP_TICKET_COLLECTION_CLASS_HASH, STARKNET_MARKETPLACE_1155_CLASS_HASH, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_1155_START_BLOCK, STARKNET_MARKETPLACE_721_CLASS_HASH, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MARKETPLACE_721_START_BLOCK, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_COLLECTION_CLASS_HASH, STARKNET_POP_FACTORY_CONTRACT, SUPPORTED_TOKENS, SUPPORTED_URL_CHAINS, ServiceCapability, ServiceDefinition, type ServiceId, type SiwsIdentity, type SupportedToken, type SupportedTokenSymbol,
|
|
616
|
+
export { ACCOUNT_SESSION_TTL_SECONDS, ALLOWED_IMAGE_CONTENT_TYPES, type AssetAttribute, type AssetMetadata, type BackendMetadataConfig, type BackendProxyConfig, type BackendUploadResult, type BuildAssetMetadataInput, type CanonicalHash, type CappedBody, Chain, DEFAULT_CURRENCY, type FailoverFetchOptions, type FeeEnv, IDENTITY_TTL_SECONDS, IPFS_SAFE_CONTENT_TYPE_PREFIXES, type ImageProxyConfig, MAX_IMAGE_PROXY_BYTES, MAX_IMAGE_REDIRECTS, MAX_IPFS_GATEWAY_RESPONSE_BYTES, POLICY_REFUSAL_CODES, RESERVED_TRAITS, type RemixPolicy, type RemixPolicyInput, ResolvedFeeConfig, type RpcProxyConfig, STARKNET_COLLECTION_1155_CLASS_HASH, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_1155_FACTORY_CLASS_HASH, STARKNET_COLLECTION_1155_START_BLOCK, STARKNET_COLLECTION_721_CONTRACT, STARKNET_COLLECTION_721_START_BLOCK, STARKNET_CREATOR_COIN_CLASS_HASH, STARKNET_CREATOR_COIN_EKUBO_LAUNCHER, STARKNET_CREATOR_COIN_FACTORY_CLASS_HASH, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_CREATOR_COIN_START_BLOCK, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_COLLECTION_CLASS_HASH, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_EKUBO_CORE, STARKNET_GENESIS_MINT_BR_CONTRACT, STARKNET_GENESIS_MINT_GLOBAL_CONTRACT, STARKNET_GENESIS_MINT_LAUNCH_CONTRACT, STARKNET_IPCOLLECTION_CLASS_HASH, STARKNET_IPNFT_CLASS_HASH, STARKNET_IP_CLUB_COLLECTION_CLASS_HASH, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CLASS_HASH, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_IP_TICKET_COLLECTION_CLASS_HASH, STARKNET_MARKETPLACE_1155_CLASS_HASH, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_1155_START_BLOCK, STARKNET_MARKETPLACE_721_CLASS_HASH, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MARKETPLACE_721_START_BLOCK, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_COLLECTION_CLASS_HASH, STARKNET_POP_FACTORY_CONTRACT, SUPPORTED_TOKENS, SUPPORTED_URL_CHAINS, ServiceCapability, ServiceDefinition, type ServiceId, type SiwsIdentity, type SupportedToken, type SupportedTokenSymbol, assetHref, buildAssetMetadata, chainFromSlug, chainSlug, coinHref, collectionHref, createBackendProxyHandler, createFailoverFetch, createImageProxyHandler, createRpcProxyHandler, encodeU256, formatAmount, getBackendSignedUrl, getDerivativesTerm, getListableTokens, getService, getServicesByCapability, getTokenByAddress, getTokenBySymbol, hasCapability, isPolicyRefusal, isPrivateHost, isPrivateOrInsecureUrl, isSameOrigin, isServiceId, isTransientRpcError, isValidIpfsCidPath, issueAccountSessionToken, issueSiwsToken, listServices, normalizeAddress, normalizeHash, parseAmount, readBodyWithCap, resolveAppFeeConfig, resolveRemixPolicy, resolveSafeImageContentType, shortenAddress, stringifyBigInts, u256ToBigInt, uploadDirectoryToBackend, uploadFileToBackend, uploadJsonToBackend, validateUrl, verifyAccountSessionToken, verifySiwsToken };
|
package/dist/index.js
CHANGED
|
@@ -1504,41 +1504,6 @@ function createFailoverFetch(urls, options = {}) {
|
|
|
1504
1504
|
return failover;
|
|
1505
1505
|
}
|
|
1506
1506
|
|
|
1507
|
-
// src/server/rate-limit.ts
|
|
1508
|
-
function createRateLimiter(windowMs, max) {
|
|
1509
|
-
const counts = /* @__PURE__ */ new Map();
|
|
1510
|
-
let nextSweepAt = Date.now() + windowMs;
|
|
1511
|
-
return function checkRateLimit(key) {
|
|
1512
|
-
const now = Date.now();
|
|
1513
|
-
if (now >= nextSweepAt) {
|
|
1514
|
-
for (const [k, entry2] of counts) {
|
|
1515
|
-
if (now >= entry2.resetAt) counts.delete(k);
|
|
1516
|
-
}
|
|
1517
|
-
nextSweepAt = now + windowMs;
|
|
1518
|
-
}
|
|
1519
|
-
const entry = counts.get(key);
|
|
1520
|
-
if (!entry || now >= entry.resetAt) {
|
|
1521
|
-
counts.set(key, { count: 1, resetAt: now + windowMs });
|
|
1522
|
-
return true;
|
|
1523
|
-
}
|
|
1524
|
-
if (entry.count >= max) return false;
|
|
1525
|
-
entry.count += 1;
|
|
1526
|
-
return true;
|
|
1527
|
-
};
|
|
1528
|
-
}
|
|
1529
|
-
var TRUSTED_APP_IP_HEADER = "x-medialane-client-ip";
|
|
1530
|
-
function requestIp(req) {
|
|
1531
|
-
const fromEdge = req.headers.get("x-vercel-forwarded-for")?.split(",")[0]?.trim();
|
|
1532
|
-
if (fromEdge) return fromEdge;
|
|
1533
|
-
const forwarded = req.headers.get("x-forwarded-for");
|
|
1534
|
-
if (forwarded) {
|
|
1535
|
-
const hops = forwarded.split(",").map((hop) => hop.trim()).filter(Boolean);
|
|
1536
|
-
const nearest = hops[hops.length - 1];
|
|
1537
|
-
if (nearest) return nearest;
|
|
1538
|
-
}
|
|
1539
|
-
return "unknown";
|
|
1540
|
-
}
|
|
1541
|
-
|
|
1542
1507
|
// src/server/origin.ts
|
|
1543
1508
|
function isSameOrigin(req) {
|
|
1544
1509
|
const origin = req.headers.get("origin");
|
|
@@ -1572,9 +1537,6 @@ function createBackendProxyHandler(config) {
|
|
|
1572
1537
|
if (!isSameOrigin(req)) {
|
|
1573
1538
|
return proxyError(-32600, "Cross-origin requests are not allowed", 403);
|
|
1574
1539
|
}
|
|
1575
|
-
if (!config.checkRateLimit(requestIp(req))) {
|
|
1576
|
-
return proxyError(-32005, "Too many requests", 429);
|
|
1577
|
-
}
|
|
1578
1540
|
if (!config.apiKey) {
|
|
1579
1541
|
return proxyError(-32003, "No API key configured \u2014 request not forwarded", 402);
|
|
1580
1542
|
}
|
|
@@ -1832,9 +1794,6 @@ function createImageProxyHandler(config) {
|
|
|
1832
1794
|
return res;
|
|
1833
1795
|
}
|
|
1834
1796
|
return async function handleImageProxy(req) {
|
|
1835
|
-
if (!config.checkRateLimit(requestIp(req))) {
|
|
1836
|
-
return jsonError("Too many requests", 429);
|
|
1837
|
-
}
|
|
1838
1797
|
const raw = new URL(req.url).searchParams.get("url");
|
|
1839
1798
|
if (!raw) return jsonError("Missing url", 400);
|
|
1840
1799
|
const validated = validateUrl(raw);
|
|
@@ -1916,30 +1875,6 @@ async function getBackendSignedUrl(config, kind = "image") {
|
|
|
1916
1875
|
if (!res.ok || !data.data) throw new Error(data.error ?? "Failed to create upload URL");
|
|
1917
1876
|
return data.data.url;
|
|
1918
1877
|
}
|
|
1919
|
-
|
|
1920
|
-
// src/server/trusted-client-ip.ts
|
|
1921
|
-
var SPOOFABLE_FORWARDING_HEADERS = [
|
|
1922
|
-
"x-forwarded-for",
|
|
1923
|
-
"x-real-ip",
|
|
1924
|
-
"x-client-ip",
|
|
1925
|
-
"true-client-ip",
|
|
1926
|
-
"cf-connecting-ip",
|
|
1927
|
-
TRUSTED_APP_IP_HEADER
|
|
1928
|
-
];
|
|
1929
|
-
function isSpoofableForwardingHeader(name) {
|
|
1930
|
-
return SPOOFABLE_FORWARDING_HEADERS.includes(name.toLowerCase());
|
|
1931
|
-
}
|
|
1932
|
-
function trustedClientIp(req) {
|
|
1933
|
-
const vercel = req.headers.get("x-vercel-forwarded-for")?.split(",")[0]?.trim();
|
|
1934
|
-
if (vercel) return vercel;
|
|
1935
|
-
const forwarded = req.headers.get("x-forwarded-for");
|
|
1936
|
-
if (forwarded) {
|
|
1937
|
-
const hops = forwarded.split(",").map((hop) => hop.trim()).filter(Boolean);
|
|
1938
|
-
const nearest = hops[hops.length - 1];
|
|
1939
|
-
if (nearest) return nearest;
|
|
1940
|
-
}
|
|
1941
|
-
return "unknown";
|
|
1942
|
-
}
|
|
1943
1878
|
var IDENTITY_PREFIX = "siws_";
|
|
1944
1879
|
var ACCOUNT_SESSION_PREFIX = "account_session_";
|
|
1945
1880
|
var IDENTITY_DOMAIN = "siws-identity-v1";
|
|
@@ -2116,6 +2051,6 @@ var UserFacingError = class extends Error {
|
|
|
2116
2051
|
}
|
|
2117
2052
|
};
|
|
2118
2053
|
|
|
2119
|
-
export { ACCOUNT_SESSION_TTL_SECONDS, ALLOWED_IMAGE_CONTENT_TYPES, ApiClient, CHAINS, DEFAULT_CHAIN, DEFAULT_CURRENCY, FeeConfigSchema, IDENTITY_TTL_SECONDS, IPFS_SAFE_CONTENT_TYPE_PREFIXES, MAX_IMAGE_PROXY_BYTES, MAX_IMAGE_REDIRECTS, MAX_IPFS_GATEWAY_RESPONSE_BYTES, MedialaneApiError, OPEN_LICENSES, POLICY_REFUSAL_CODES, PasskeyCancelledError, RESERVED_TRAITS, STARKNET_COLLECTION_1155_CLASS_HASH, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_1155_FACTORY_CLASS_HASH, STARKNET_COLLECTION_1155_START_BLOCK, STARKNET_COLLECTION_721_CONTRACT, STARKNET_COLLECTION_721_START_BLOCK, STARKNET_CREATOR_COIN_CLASS_HASH, STARKNET_CREATOR_COIN_EKUBO_LAUNCHER, STARKNET_CREATOR_COIN_FACTORY_CLASS_HASH, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_CREATOR_COIN_START_BLOCK, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_COLLECTION_CLASS_HASH, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_EKUBO_CORE, STARKNET_GENESIS_MINT_BR_CONTRACT, STARKNET_GENESIS_MINT_GLOBAL_CONTRACT, STARKNET_GENESIS_MINT_LAUNCH_CONTRACT, STARKNET_IPCOLLECTION_CLASS_HASH, STARKNET_IPNFT_CLASS_HASH, STARKNET_IP_CLUB_COLLECTION_CLASS_HASH, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CLASS_HASH, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_IP_TICKET_COLLECTION_CLASS_HASH, STARKNET_MARKETPLACE_1155_CLASS_HASH, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_1155_START_BLOCK, STARKNET_MARKETPLACE_721_CLASS_HASH, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MARKETPLACE_721_START_BLOCK, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_COLLECTION_CLASS_HASH, STARKNET_POP_FACTORY_CONTRACT, SUPPORTED_TOKENS, SUPPORTED_URL_CHAINS,
|
|
2054
|
+
export { ACCOUNT_SESSION_TTL_SECONDS, ALLOWED_IMAGE_CONTENT_TYPES, ApiClient, CHAINS, DEFAULT_CHAIN, DEFAULT_CURRENCY, FeeConfigSchema, IDENTITY_TTL_SECONDS, IPFS_SAFE_CONTENT_TYPE_PREFIXES, MAX_IMAGE_PROXY_BYTES, MAX_IMAGE_REDIRECTS, MAX_IPFS_GATEWAY_RESPONSE_BYTES, MedialaneApiError, OPEN_LICENSES, POLICY_REFUSAL_CODES, PasskeyCancelledError, RESERVED_TRAITS, STARKNET_COLLECTION_1155_CLASS_HASH, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_1155_FACTORY_CLASS_HASH, STARKNET_COLLECTION_1155_START_BLOCK, STARKNET_COLLECTION_721_CONTRACT, STARKNET_COLLECTION_721_START_BLOCK, STARKNET_CREATOR_COIN_CLASS_HASH, STARKNET_CREATOR_COIN_EKUBO_LAUNCHER, STARKNET_CREATOR_COIN_FACTORY_CLASS_HASH, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_CREATOR_COIN_START_BLOCK, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_COLLECTION_CLASS_HASH, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_EKUBO_CORE, STARKNET_GENESIS_MINT_BR_CONTRACT, STARKNET_GENESIS_MINT_GLOBAL_CONTRACT, STARKNET_GENESIS_MINT_LAUNCH_CONTRACT, STARKNET_IPCOLLECTION_CLASS_HASH, STARKNET_IPNFT_CLASS_HASH, STARKNET_IP_CLUB_COLLECTION_CLASS_HASH, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CLASS_HASH, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_IP_TICKET_COLLECTION_CLASS_HASH, STARKNET_MARKETPLACE_1155_CLASS_HASH, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_1155_START_BLOCK, STARKNET_MARKETPLACE_721_CLASS_HASH, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MARKETPLACE_721_START_BLOCK, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_COLLECTION_CLASS_HASH, STARKNET_POP_FACTORY_CONTRACT, SUPPORTED_TOKENS, SUPPORTED_URL_CHAINS, UserFacingError, assetHref, buildAssetMetadata, chainFromSlug, chainSlug, coinHref, collectionHref, createBackendProxyHandler, createFailoverFetch, createImageProxyHandler, createRpcProxyHandler, encodeU256, formatAmount, getBackendSignedUrl, getCoordinates, getDerivativesTerm, getListableTokens, getService, getServicesByCapability, getStarknetCoordinates, getTokenByAddress, getTokenBySymbol, hasCapability, isPolicyRefusal, isPrivateHost, isPrivateOrInsecureUrl, isSameOrigin, isServiceId, isTransientRpcError, isValidIpfsCidPath, issueAccountSessionToken, issueSiwsToken, listServices, normalizeAddress, normalizeHash, parseAmount, readBodyWithCap, resolveAppFeeConfig, resolveConfig, resolveFeeConfig, resolveRemixPolicy, resolveSafeImageContentType, shortenAddress, stringifyBigInts, u256ToBigInt, uploadDirectoryToBackend, uploadFileToBackend, uploadJsonToBackend, validateUrl, verifyAccountSessionToken, verifySiwsToken };
|
|
2120
2055
|
//# sourceMappingURL=index.js.map
|
|
2121
2056
|
//# sourceMappingURL=index.js.map
|