@ramp-kit/server
Advanced tools
+13
-5
| import { type Server } from "node:http"; | ||
| import { type ProxyConfig } from "./proxy.js"; | ||
| import { type MantecaProxyConfig, type ProxyConfig } from "./proxy.js"; | ||
| import { type WebhookConfig } from "./webhooks.js"; | ||
@@ -8,3 +8,6 @@ export * from "./proxy.js"; | ||
| export interface RampServerConfig { | ||
| proxy: ProxyConfig; | ||
| /** Etherfuse proxy (key held server-side). */ | ||
| proxy?: ProxyConfig; | ||
| /** Manteca proxy (md-api-key held server-side). */ | ||
| manteca?: MantecaProxyConfig; | ||
| /** Optional webhook receiver; omit to run proxy-only. */ | ||
@@ -14,3 +17,4 @@ webhooks?: WebhookConfig; | ||
| /** | ||
| * Standalone production backend: | ||
| * Standalone production backend — your app's ramp API. Partner keys stay | ||
| * here; your end users never see or need one. | ||
| * | ||
@@ -25,2 +29,6 @@ * ```ts | ||
| * }, | ||
| * manteca: { | ||
| * apiKey: process.env.MANTECA_API_KEY!, | ||
| * environment: "production", | ||
| * }, | ||
| * webhooks: { | ||
@@ -33,7 +41,7 @@ * etherfuseSecret: process.env.ETHERFUSE_WEBHOOK_SECRET!, | ||
| * | ||
| * The frontend then points the provider at this server: | ||
| * The frontend then points providers at this server with an empty key: | ||
| * `new EtherfuseProvider({ apiKey: "", baseUrl: "https://api.myapp.com/etherfuse" })` | ||
| * — the key never ships to the browser. | ||
| * `new MantecaProvider({ apiKey: "", baseUrl: "https://api.myapp.com/manteca" })` | ||
| */ | ||
| export declare function createRampServer(config: RampServerConfig): Server; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAEvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAEhC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAiBjE"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAEvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAEhC,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAqBjE"} |
+16
-6
| import { createServer } from "node:http"; | ||
| import { createRampProxy } from "./proxy.js"; | ||
| import { createMantecaProxy, createRampProxy, } from "./proxy.js"; | ||
| import { createEtherfuseWebhookHandler, } from "./webhooks.js"; | ||
@@ -8,3 +8,4 @@ export * from "./proxy.js"; | ||
| /** | ||
| * Standalone production backend: | ||
| * Standalone production backend — your app's ramp API. Partner keys stay | ||
| * here; your end users never see or need one. | ||
| * | ||
@@ -19,2 +20,6 @@ * ```ts | ||
| * }, | ||
| * manteca: { | ||
| * apiKey: process.env.MANTECA_API_KEY!, | ||
| * environment: "production", | ||
| * }, | ||
| * webhooks: { | ||
@@ -27,8 +32,11 @@ * etherfuseSecret: process.env.ETHERFUSE_WEBHOOK_SECRET!, | ||
| * | ||
| * The frontend then points the provider at this server: | ||
| * The frontend then points providers at this server with an empty key: | ||
| * `new EtherfuseProvider({ apiKey: "", baseUrl: "https://api.myapp.com/etherfuse" })` | ||
| * — the key never ships to the browser. | ||
| * `new MantecaProvider({ apiKey: "", baseUrl: "https://api.myapp.com/manteca" })` | ||
| */ | ||
| export function createRampServer(config) { | ||
| const proxy = createRampProxy(config.proxy); | ||
| const proxy = config.proxy ? createRampProxy(config.proxy) : undefined; | ||
| const manteca = config.manteca | ||
| ? createMantecaProxy(config.manteca) | ||
| : undefined; | ||
| const webhooks = config.webhooks | ||
@@ -41,4 +49,6 @@ ? createEtherfuseWebhookHandler(config.webhooks) | ||
| return; | ||
| if (await proxy(req, res)) | ||
| if (proxy && (await proxy(req, res))) | ||
| return; | ||
| if (manteca && (await manteca(req, res))) | ||
| return; | ||
| res.writeHead(404, { "Content-Type": "application/json" }); | ||
@@ -45,0 +55,0 @@ res.end(JSON.stringify({ error: "Not found" })); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,eAAe,EAAoB,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,6BAA6B,GAE9B,MAAM,eAAe,CAAC;AAEvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAQhC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;QAC9B,CAAC,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAAE,OAAO;YACnD,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,OAAO;YAClC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzC,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,eAAe,GAGhB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,6BAA6B,GAE9B,MAAM,eAAe,CAAC;AAEvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAWhC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;QAC5B,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;QAC9B,CAAC,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAAE,OAAO;YACnD,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAAE,OAAO;YAC7C,IAAI,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAAE,OAAO;YACjD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzC,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"} |
+20
-3
@@ -17,10 +17,27 @@ import type { IncomingMessage, ServerResponse } from "node:http"; | ||
| } | ||
| export interface MantecaProxyConfig { | ||
| /** Manteca partner md-api-key — lives ONLY on this server. */ | ||
| apiKey: string; | ||
| environment?: "sandbox" | "production"; | ||
| upstreamUrl?: string; | ||
| /** Path prefix the frontend calls, stripped before forwarding. */ | ||
| pathPrefix?: string; | ||
| fetchImpl?: typeof globalThis.fetch; | ||
| } | ||
| export declare function isAllowed(method: string, path: string, config: Pick<ProxyConfig, "environment" | "allowSimulation">): boolean; | ||
| export declare function isMantecaAllowed(method: string, path: string): boolean; | ||
| /** | ||
| * Node http handler that forwards allowlisted ramp calls to Etherfuse with | ||
| * the server-held API key. Mount it under `pathPrefix` (default /etherfuse) | ||
| * in any Node server, or use createRampServer() for a standalone one. | ||
| * Node http handler that forwards allowlisted Etherfuse calls with the | ||
| * server-held API key. Mount it under `pathPrefix` (default /etherfuse) in | ||
| * any Node server, or use createRampServer() for a standalone one. | ||
| * | ||
| * The key is injected here, server-side — browser callers never send it. | ||
| */ | ||
| export declare function createRampProxy(config: ProxyConfig): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>; | ||
| /** | ||
| * Node http handler that forwards allowlisted Manteca calls with the | ||
| * server-held md-api-key. Mount it under `pathPrefix` (default /manteca). | ||
| */ | ||
| export declare function createMantecaProxy(config: MantecaProxyConfig): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>; | ||
| export declare function readBody(req: IncomingMessage): Promise<string>; | ||
| //# sourceMappingURL=proxy.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACvC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC;AA+BD,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,CAAC,GAC3D,OAAO,CAUT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,IAU/C,KAAK,eAAe,EACpB,KAAK,cAAc,KAClB,OAAO,CAAC,OAAO,CAAC,CAkCpB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9D"} | ||
| {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACvC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC;AA+CD,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,CAAC,GAC3D,OAAO,CAUT;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKtE;AA+BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,IAU/C,KAAK,eAAe,EACpB,KAAK,cAAc,KAClB,OAAO,CAAC,OAAO,CAAC,CAoBpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,IAUzD,KAAK,eAAe,EACpB,KAAK,cAAc,KAClB,OAAO,CAAC,OAAO,CAAC,CAoBpB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9D"} |
+72
-26
| const UUID = "[0-9a-fA-F-]{36}"; | ||
| const HEX24 = "[0-9a-fA-F]{24}"; | ||
| /** | ||
| * Endpoint allowlist: only what a ramp frontend legitimately needs. | ||
| * Everything else (KYB, org management, partner statements, webhooks | ||
| * Etherfuse endpoint allowlist: only what a ramp frontend legitimately | ||
| * needs. Everything else (KYB, org management, partner statements, webhooks | ||
| * management…) stays server-side only. | ||
@@ -22,2 +23,16 @@ */ | ||
| }; | ||
| /** | ||
| * Manteca endpoint allowlist. User onboarding, company config and accounting | ||
| * stay server-side only. | ||
| */ | ||
| const MANTECA_RULES = [ | ||
| { method: "GET", pattern: /^\/info\/supported-assets$/ }, | ||
| { method: "GET", pattern: /^\/prices\/direct\/[A-Z0-9_]+$/ }, | ||
| { method: "GET", pattern: /^\/users\/[A-Za-z0-9_-]+$/ }, | ||
| { method: "GET", pattern: new RegExp(`^/synthetics/${HEX24}$`) }, | ||
| { method: "POST", pattern: /^\/price-locks$/ }, | ||
| { method: "POST", pattern: /^\/synthetics\/ramp-on$/ }, | ||
| { method: "POST", pattern: /^\/synthetics\/ramp-off$/ }, | ||
| { method: "POST", pattern: new RegExp(`^/synthetics/${HEX24}/cancel$`) }, | ||
| ]; | ||
| export function isAllowed(method, path, config) { | ||
@@ -32,6 +47,32 @@ if (config.environment !== "production" && | ||
| } | ||
| export function isMantecaAllowed(method, path) { | ||
| const pathNoQuery = path.split("?")[0]; | ||
| return MANTECA_RULES.some((r) => r.method === method && r.pattern.test(pathNoQuery)); | ||
| } | ||
| /** Forward an allowlisted request upstream with the server-held credentials. */ | ||
| async function forward(target, method, headers, req, res, fetchImpl) { | ||
| const body = method === "GET" ? undefined : await readBody(req); | ||
| try { | ||
| const upstreamRes = await fetchImpl(target, { method, headers, body }); | ||
| const text = await upstreamRes.text(); | ||
| res.writeHead(upstreamRes.status, { | ||
| "Content-Type": upstreamRes.headers.get("content-type") ?? "application/json", | ||
| }); | ||
| res.end(text); | ||
| } | ||
| catch { | ||
| res.writeHead(502, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ error: "Upstream request failed" })); | ||
| } | ||
| } | ||
| function deny(res) { | ||
| res.writeHead(403, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ error: "Endpoint not allowed through proxy" })); | ||
| } | ||
| /** | ||
| * Node http handler that forwards allowlisted ramp calls to Etherfuse with | ||
| * the server-held API key. Mount it under `pathPrefix` (default /etherfuse) | ||
| * in any Node server, or use createRampServer() for a standalone one. | ||
| * Node http handler that forwards allowlisted Etherfuse calls with the | ||
| * server-held API key. Mount it under `pathPrefix` (default /etherfuse) in | ||
| * any Node server, or use createRampServer() for a standalone one. | ||
| * | ||
| * The key is injected here, server-side — browser callers never send it. | ||
| */ | ||
@@ -52,26 +93,31 @@ export function createRampProxy(config) { | ||
| if (!isAllowed(method, path, config)) { | ||
| res.writeHead(403, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ error: "Endpoint not allowed through proxy" })); | ||
| deny(res); | ||
| return true; | ||
| } | ||
| const body = method === "GET" ? undefined : await readBody(req); | ||
| try { | ||
| const upstreamRes = await fetchImpl(`${upstream}${path}`, { | ||
| method, | ||
| headers: { | ||
| Authorization: config.apiKey, | ||
| "Content-Type": "application/json", | ||
| }, | ||
| body, | ||
| }); | ||
| const text = await upstreamRes.text(); | ||
| res.writeHead(upstreamRes.status, { | ||
| "Content-Type": upstreamRes.headers.get("content-type") ?? "application/json", | ||
| }); | ||
| res.end(text); | ||
| await forward(`${upstream}${path}`, method, { Authorization: config.apiKey, "Content-Type": "application/json" }, req, res, fetchImpl); | ||
| return true; | ||
| }; | ||
| } | ||
| /** | ||
| * Node http handler that forwards allowlisted Manteca calls with the | ||
| * server-held md-api-key. Mount it under `pathPrefix` (default /manteca). | ||
| */ | ||
| export function createMantecaProxy(config) { | ||
| const prefix = config.pathPrefix ?? "/manteca"; | ||
| const upstream = config.upstreamUrl ?? | ||
| (config.environment === "production" | ||
| ? "https://api.manteca.dev/crypto/v2" | ||
| : "https://sandbox.manteca.dev/crypto/v2"); | ||
| const fetchImpl = config.fetchImpl ?? globalThis.fetch; | ||
| return async function handle(req, res) { | ||
| const url = req.url ?? ""; | ||
| if (!url.startsWith(prefix + "/")) | ||
| return false; | ||
| const path = url.slice(prefix.length); | ||
| const method = (req.method ?? "GET").toUpperCase(); | ||
| if (!isMantecaAllowed(method, path)) { | ||
| deny(res); | ||
| return true; | ||
| } | ||
| catch { | ||
| res.writeHead(502, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ error: "Upstream request failed" })); | ||
| } | ||
| await forward(`${upstream}${path}`, method, { "md-api-key": config.apiKey, "Content-Type": "application/json" }, req, res, fetchImpl); | ||
| return true; | ||
@@ -78,0 +124,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"} |
+1
-1
| { | ||
| "name": "@ramp-kit/server", | ||
| "version": "0.1.2", | ||
| "version": "0.1.3", | ||
| "description": "Zero-dependency production backend for @ramp-kit/core: server-side API-key proxy with strict endpoint allowlist, plus Etherfuse/Manteca webhook signature verification (HMAC-SHA256, RFC 8785 canonicalization)", | ||
@@ -5,0 +5,0 @@ "type": "module", |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
35379
22.59%410
24.62%6
50%