@robinpath/api
Advanced tools
| /** | ||
| * RobinPath API Module (Node port) | ||
| * | ||
| * Generic HTTP API wrapper with **named credential profiles**. Unlike the | ||
| * `http` module which is stateless, this module pulls reusable auth/base-URL | ||
| * config from the RobinPath credential vault so scripts can reference a | ||
| * credential slug once and call `api.get "/users"` etc. without repeating | ||
| * Authorization headers on every call. | ||
| * | ||
| * Mirror of packages/php/api/src/index.php — shares the same credential | ||
| * contract, metadata shape, and error taxonomy so the visual editor can | ||
| * render both identically. | ||
| * | ||
| * Two calling styles are supported: | ||
| * 1. **Credential-first:** pass the credential slug as first argument and a | ||
| * path (relative to the credential's `base_url`) as the URL. Auth headers | ||
| * are injected automatically based on the credential's `auth_type`. | ||
| * 2. **Ad-hoc:** pass an absolute URL and let `options.headers` supply auth. | ||
| * Credential slug may be empty in this case. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - api : { base_url, auth_type, token?, username?, password?, headers? } | ||
| * auth_type ∈ bearer | basic | api_key | none | ||
| * | ||
| * All handlers return a normalized envelope or an error envelope — they never | ||
| * throw for API-level errors (non-2xx responses). Transport failures (DNS, | ||
| * TLS, timeout) are also caught and returned as `{error, code: 'transport'}`. | ||
| */ | ||
| import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core"; | ||
| export declare function configureApi(h: ModuleHost): void; | ||
| export declare const ApiFunctions: Record<string, BuiltinHandler>; | ||
| export declare const ApiCredentialTypes: CredentialTypeSchema[]; | ||
| export declare const ApiFunctionMetadata: Record<string, FunctionMetadata>; | ||
| export declare const ApiModuleMetadata: ModuleMetadata; | ||
| //# sourceMappingURL=api.d.ts.map |
| {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAiBzB,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAEhD;AA+dD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAUvD,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,oBAAoB,EAuDpD,CAAC;AAwEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAwOhE,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAoB/B,CAAC"} |
+844
| /** | ||
| * RobinPath API Module (Node port) | ||
| * | ||
| * Generic HTTP API wrapper with **named credential profiles**. Unlike the | ||
| * `http` module which is stateless, this module pulls reusable auth/base-URL | ||
| * config from the RobinPath credential vault so scripts can reference a | ||
| * credential slug once and call `api.get "/users"` etc. without repeating | ||
| * Authorization headers on every call. | ||
| * | ||
| * Mirror of packages/php/api/src/index.php — shares the same credential | ||
| * contract, metadata shape, and error taxonomy so the visual editor can | ||
| * render both identically. | ||
| * | ||
| * Two calling styles are supported: | ||
| * 1. **Credential-first:** pass the credential slug as first argument and a | ||
| * path (relative to the credential's `base_url`) as the URL. Auth headers | ||
| * are injected automatically based on the credential's `auth_type`. | ||
| * 2. **Ad-hoc:** pass an absolute URL and let `options.headers` supply auth. | ||
| * Credential slug may be empty in this case. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - api : { base_url, auth_type, token?, username?, password?, headers? } | ||
| * auth_type ∈ bearer | basic | api_key | none | ||
| * | ||
| * All handlers return a normalized envelope or an error envelope — they never | ||
| * throw for API-level errors (non-2xx responses). Transport failures (DNS, | ||
| * TLS, timeout) are also caught and returned as `{error, code: 'transport'}`. | ||
| */ | ||
| import { readFileSync, writeFileSync } from "node:fs"; | ||
| import { basename } from "node:path"; | ||
| // ── Module-local state (populated by configure hook) ──────────────────── | ||
| const state = {}; | ||
| function host() { | ||
| if (!state.host) { | ||
| throw new Error("API module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first."); | ||
| } | ||
| return state.host; | ||
| } | ||
| export function configureApi(h) { | ||
| state.host = h; | ||
| } | ||
| // ── Constants ────────────────────────────────────────────────────────── | ||
| const CREDENTIAL_TYPE = "api"; | ||
| const DEFAULT_TIMEOUT_MS = 30_000; | ||
| function errorReturn(error, code, extra = {}) { | ||
| return { error, code, ...extra }; | ||
| } | ||
| function isErr(x) { | ||
| return typeof x === "object" && x !== null && "error" in x && "code" in x; | ||
| } | ||
| function blankAuth() { | ||
| return { | ||
| baseUrl: "", | ||
| authType: "none", | ||
| token: "", | ||
| username: "", | ||
| password: "", | ||
| defaultHeaders: {}, | ||
| }; | ||
| } | ||
| async function resolveAuth(credentialSlug) { | ||
| // Empty slug is allowed — ad-hoc mode (absolute URLs only, no injected auth). | ||
| if (!credentialSlug) | ||
| return blankAuth(); | ||
| let fields; | ||
| try { | ||
| fields = await host().credentials.get(credentialSlug); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found"); | ||
| } | ||
| if (!fields) { | ||
| return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found"); | ||
| } | ||
| const rawAuthType = String(fields.auth_type ?? "none").toLowerCase(); | ||
| const authType = rawAuthType === "bearer" || rawAuthType === "basic" || rawAuthType === "api_key" || rawAuthType === "none" | ||
| ? rawAuthType | ||
| : "none"; | ||
| const defaultHeaders = {}; | ||
| if (fields.headers && typeof fields.headers === "object" && !Array.isArray(fields.headers)) { | ||
| for (const [k, v] of Object.entries(fields.headers)) { | ||
| defaultHeaders[String(k)] = String(v); | ||
| } | ||
| } | ||
| return { | ||
| baseUrl: String(fields.base_url ?? ""), | ||
| authType, | ||
| token: String(fields.token ?? ""), | ||
| username: String(fields.username ?? ""), | ||
| password: String(fields.password ?? ""), | ||
| defaultHeaders, | ||
| }; | ||
| } | ||
| // ── URL + header helpers ─────────────────────────────────────────────── | ||
| function resolveUrl(urlOrPath, baseUrl) { | ||
| if (/^https?:\/\//i.test(urlOrPath)) | ||
| return urlOrPath; | ||
| if (!baseUrl) | ||
| return urlOrPath; | ||
| const base = baseUrl.endsWith("/") ? baseUrl : baseUrl + "/"; | ||
| const path = urlOrPath.startsWith("/") ? urlOrPath.slice(1) : urlOrPath; | ||
| return base + path; | ||
| } | ||
| function applyAuth(headers, auth, opts) { | ||
| switch (auth.authType) { | ||
| case "bearer": { | ||
| if (auth.token) | ||
| headers["Authorization"] = `Bearer ${auth.token}`; | ||
| break; | ||
| } | ||
| case "basic": { | ||
| const u = auth.username; | ||
| const p = auth.password; | ||
| if (u || p) { | ||
| headers["Authorization"] = `Basic ${Buffer.from(`${u}:${p}`).toString("base64")}`; | ||
| } | ||
| break; | ||
| } | ||
| case "api_key": { | ||
| if (auth.token) { | ||
| const headerName = typeof opts.apiKeyHeader === "string" && opts.apiKeyHeader !== "" | ||
| ? opts.apiKeyHeader | ||
| : "X-API-Key"; | ||
| headers[headerName] = auth.token; | ||
| } | ||
| break; | ||
| } | ||
| case "none": | ||
| default: | ||
| break; | ||
| } | ||
| } | ||
| function mergeHeaders(defaults, opts) { | ||
| const out = { ...defaults }; | ||
| if (opts.headers && typeof opts.headers === "object" && !Array.isArray(opts.headers)) { | ||
| for (const [k, v] of Object.entries(opts.headers)) { | ||
| out[String(k)] = String(v); | ||
| } | ||
| } | ||
| return out; | ||
| } | ||
| function hasHeader(headers, name) { | ||
| const needle = name.toLowerCase(); | ||
| for (const k of Object.keys(headers)) { | ||
| if (k.toLowerCase() === needle) | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| async function http(auth, method, urlOrPath, body, opts) { | ||
| const resolvedUrl = resolveUrl(urlOrPath, auth.baseUrl); | ||
| const headers = mergeHeaders(auth.defaultHeaders, opts); | ||
| applyAuth(headers, auth, opts); | ||
| let requestBody; | ||
| if (body !== undefined && body !== null) { | ||
| if (body instanceof FormData) { | ||
| requestBody = body; | ||
| } | ||
| else if (typeof body === "object") { | ||
| if (!hasHeader(headers, "Content-Type")) | ||
| headers["Content-Type"] = "application/json"; | ||
| requestBody = JSON.stringify(body); | ||
| } | ||
| else { | ||
| requestBody = String(body); | ||
| } | ||
| } | ||
| const timeout = typeof opts.timeout === "number" ? opts.timeout : DEFAULT_TIMEOUT_MS; | ||
| let response; | ||
| try { | ||
| response = await fetch(resolvedUrl, { | ||
| method: method.toUpperCase(), | ||
| headers, | ||
| body: requestBody, | ||
| signal: AbortSignal.timeout(timeout), | ||
| }); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const contentType = response.headers.get("content-type") ?? ""; | ||
| let respBody; | ||
| const raw = await response.text(); | ||
| if (raw === "") { | ||
| respBody = null; | ||
| } | ||
| else if (contentType.includes("json")) { | ||
| try { | ||
| respBody = JSON.parse(raw); | ||
| } | ||
| catch { | ||
| respBody = raw; | ||
| } | ||
| } | ||
| else { | ||
| respBody = raw; | ||
| } | ||
| const envelope = { | ||
| ok: response.ok, | ||
| status: response.status, | ||
| statusText: response.statusText, | ||
| headers: Object.fromEntries(response.headers.entries()), | ||
| body: respBody, | ||
| url: response.url || resolvedUrl, | ||
| }; | ||
| if (!response.ok) { | ||
| let message = `API returned HTTP ${response.status}.`; | ||
| if (respBody && typeof respBody === "object" && "message" in respBody) { | ||
| const m = respBody.message; | ||
| if (typeof m === "string") | ||
| message = m; | ||
| } | ||
| else if (typeof respBody === "string" && respBody !== "") { | ||
| message = respBody.slice(0, 500); | ||
| } | ||
| let code = "api_error"; | ||
| if (response.status === 429) | ||
| code = "rate_limited"; | ||
| else if (response.status === 404) | ||
| code = "not_found"; | ||
| else if (response.status === 401 || response.status === 403) | ||
| code = "permission_denied"; | ||
| return errorReturn(message, code, { | ||
| status: response.status, | ||
| api_error: respBody, | ||
| }); | ||
| } | ||
| return opts.fullResponse === true ? envelope : envelope.body; | ||
| } | ||
| // ── Handlers ─────────────────────────────────────────────────────────── | ||
| function asOpts(v) { | ||
| return v && typeof v === "object" && !Array.isArray(v) ? v : {}; | ||
| } | ||
| const get = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const opts = asOpts(args[2]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| return (await http(auth, "GET", url, undefined, opts)); | ||
| }; | ||
| const post = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const body = args[2]; | ||
| const opts = asOpts(args[3]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| return (await http(auth, "POST", url, body, opts)); | ||
| }; | ||
| const put = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const body = args[2]; | ||
| const opts = asOpts(args[3]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| return (await http(auth, "PUT", url, body, opts)); | ||
| }; | ||
| const patch = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const body = args[2]; | ||
| const opts = asOpts(args[3]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| return (await http(auth, "PATCH", url, body, opts)); | ||
| }; | ||
| const del = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const opts = asOpts(args[2]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| return (await http(auth, "DELETE", url, undefined, opts)); | ||
| }; | ||
| const head = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const opts = asOpts(args[2]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| const resolvedUrl = resolveUrl(url, auth.baseUrl); | ||
| const headers = mergeHeaders(auth.defaultHeaders, opts); | ||
| applyAuth(headers, auth, opts); | ||
| const timeout = typeof opts.timeout === "number" ? opts.timeout : DEFAULT_TIMEOUT_MS; | ||
| try { | ||
| const response = await fetch(resolvedUrl, { | ||
| method: "HEAD", | ||
| headers, | ||
| signal: AbortSignal.timeout(timeout), | ||
| }); | ||
| return { | ||
| status: response.status, | ||
| ok: response.ok, | ||
| headers: Object.fromEntries(response.headers.entries()), | ||
| }; | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| }; | ||
| const request = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const method = String(args[1] ?? "GET"); | ||
| const url = String(args[2] ?? ""); | ||
| const opts = asOpts(args[3]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| const body = opts.body; | ||
| return (await http(auth, method, url, body, opts)); | ||
| }; | ||
| const download = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const filePath = String(args[2] ?? ""); | ||
| const opts = asOpts(args[3]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| if (!filePath) | ||
| return errorReturn("File path is required.", "path_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| const resolvedUrl = resolveUrl(url, auth.baseUrl); | ||
| const headers = mergeHeaders(auth.defaultHeaders, opts); | ||
| applyAuth(headers, auth, opts); | ||
| const timeout = typeof opts.timeout === "number" ? opts.timeout : DEFAULT_TIMEOUT_MS; | ||
| let response; | ||
| try { | ||
| response = await fetch(resolvedUrl, { | ||
| method: "GET", | ||
| headers, | ||
| signal: AbortSignal.timeout(timeout), | ||
| }); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| if (!response.ok) { | ||
| return errorReturn(`Download failed: HTTP ${response.status}.`, "api_error", { | ||
| status: response.status, | ||
| }); | ||
| } | ||
| const arrayBuffer = await response.arrayBuffer(); | ||
| const buffer = Buffer.from(arrayBuffer); | ||
| try { | ||
| writeFileSync(filePath, buffer); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "write_failed"); | ||
| } | ||
| return { | ||
| path: filePath, | ||
| size: buffer.length, | ||
| contentType: response.headers.get("content-type") ?? "application/octet-stream", | ||
| status: response.status, | ||
| }; | ||
| }; | ||
| const upload = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const url = String(args[1] ?? ""); | ||
| const filePath = String(args[2] ?? ""); | ||
| const fieldName = typeof args[3] === "string" && args[3] !== "" ? args[3] : "file"; | ||
| const opts = asOpts(args[4]); | ||
| if (!url) | ||
| return errorReturn("URL is required.", "url_missing"); | ||
| if (!filePath) | ||
| return errorReturn("File path is required.", "path_missing"); | ||
| const auth = await resolveAuth(cred); | ||
| if (isErr(auth)) | ||
| return auth; | ||
| const resolvedUrl = resolveUrl(url, auth.baseUrl); | ||
| const headers = mergeHeaders(auth.defaultHeaders, opts); | ||
| applyAuth(headers, auth, opts); | ||
| const timeout = typeof opts.timeout === "number" ? opts.timeout : DEFAULT_TIMEOUT_MS; | ||
| let fileBuffer; | ||
| try { | ||
| fileBuffer = readFileSync(filePath); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "read_failed"); | ||
| } | ||
| const fileName = basename(filePath); | ||
| const blob = new Blob([new Uint8Array(fileBuffer)]); | ||
| const formData = new FormData(); | ||
| formData.append(fieldName, blob, fileName); | ||
| if (opts.fields && typeof opts.fields === "object" && !Array.isArray(opts.fields)) { | ||
| for (const [k, v] of Object.entries(opts.fields)) { | ||
| formData.append(k, String(v)); | ||
| } | ||
| } | ||
| // fetch must set the multipart boundary automatically. | ||
| for (const k of Object.keys(headers)) { | ||
| if (k.toLowerCase() === "content-type") | ||
| delete headers[k]; | ||
| } | ||
| let response; | ||
| try { | ||
| response = await fetch(resolvedUrl, { | ||
| method: "POST", | ||
| headers, | ||
| body: formData, | ||
| signal: AbortSignal.timeout(timeout), | ||
| }); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const contentType = response.headers.get("content-type") ?? ""; | ||
| const raw = await response.text(); | ||
| let respBody; | ||
| if (raw === "") { | ||
| respBody = null; | ||
| } | ||
| else if (contentType.includes("json")) { | ||
| try { | ||
| respBody = JSON.parse(raw); | ||
| } | ||
| catch { | ||
| respBody = raw; | ||
| } | ||
| } | ||
| else { | ||
| respBody = raw; | ||
| } | ||
| if (!response.ok) { | ||
| return errorReturn(`Upload failed: HTTP ${response.status}.`, "api_error", { | ||
| status: response.status, | ||
| api_error: respBody, | ||
| }); | ||
| } | ||
| return { | ||
| status: response.status, | ||
| ok: response.ok, | ||
| body: respBody, | ||
| }; | ||
| }; | ||
| // ── Exports: functions map ───────────────────────────────────────────── | ||
| export const ApiFunctions = { | ||
| get, | ||
| post, | ||
| put, | ||
| patch, | ||
| delete: del, | ||
| head, | ||
| download, | ||
| upload, | ||
| request, | ||
| }; | ||
| // ── Exports: credential types ────────────────────────────────────────── | ||
| export const ApiCredentialTypes = [ | ||
| { | ||
| slug: CREDENTIAL_TYPE, | ||
| title: "Generic API", | ||
| icon: "globe", | ||
| fields: [ | ||
| { | ||
| name: "base_url", | ||
| title: "Base URL", | ||
| type: "text", | ||
| required: true, | ||
| placeholder: "https://api.example.com/v1", | ||
| description: "Root URL that relative paths (e.g. `/users`) will be joined onto.", | ||
| }, | ||
| { | ||
| name: "auth_type", | ||
| title: "Auth type", | ||
| type: "text", | ||
| required: true, | ||
| placeholder: "bearer", | ||
| description: "One of `bearer`, `basic`, `api_key`, or `none`.", | ||
| pattern: "^(bearer|basic|api_key|none)$", | ||
| }, | ||
| { | ||
| name: "token", | ||
| title: "Token / API key", | ||
| type: "password", | ||
| required: false, | ||
| placeholder: "sk-… or ghp-…", | ||
| description: "Used for `bearer` and `api_key` auth. Leave blank for `basic` / `none`.", | ||
| }, | ||
| { | ||
| name: "username", | ||
| title: "Username", | ||
| type: "text", | ||
| required: false, | ||
| description: "Used for `basic` auth only.", | ||
| }, | ||
| { | ||
| name: "password", | ||
| title: "Password", | ||
| type: "password", | ||
| required: false, | ||
| description: "Used for `basic` auth only.", | ||
| }, | ||
| { | ||
| name: "headers", | ||
| title: "Default headers (JSON)", | ||
| type: "textarea", | ||
| required: false, | ||
| placeholder: '{"Accept": "application/json"}', | ||
| description: "Optional. JSON object of default headers merged on every request.", | ||
| }, | ||
| ], | ||
| }, | ||
| ]; | ||
| // ── Exports: metadata ────────────────────────────────────────────────── | ||
| const credentialParam = { | ||
| name: "credential", | ||
| title: "Credential", | ||
| description: "Slug of a saved `api` credential. Pass an empty string to call absolute URLs with no injected auth.", | ||
| dataType: "string", | ||
| formInputType: "resource", | ||
| required: false, | ||
| allowExpression: true, | ||
| placeholder: "my_api", | ||
| resource: { | ||
| type: "credential", | ||
| listFn: "credential.list", | ||
| modes: ["list", "expression"], | ||
| searchable: true, | ||
| filter: { type: CREDENTIAL_TYPE }, | ||
| }, | ||
| }; | ||
| const urlParam = { | ||
| name: "url", | ||
| title: "URL or path", | ||
| description: "Absolute URL, or path relative to the credential's `base_url`.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "/users", | ||
| }; | ||
| const optionsParam = { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n headers : object merged into the request headers\n timeout : ms, default 30000\n fullResponse : bool — return {ok,status,statusText,headers,body,url} instead of just body\n apiKeyHeader : string — header name for `api_key` auth (default `X-API-Key`)", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }; | ||
| const bodyParam = { | ||
| name: "body", | ||
| title: "Body", | ||
| description: "Request body. Objects are auto-serialized as JSON; strings are sent as-is.", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }; | ||
| const commonErrors = { | ||
| credential_not_found: "No credential with that slug exists in the vault.", | ||
| url_missing: "The URL argument was empty.", | ||
| transport: "Network failure — DNS / TLS / timeout.", | ||
| api_error: "Upstream API returned a non-2xx status.", | ||
| rate_limited: "Upstream returned HTTP 429 (rate limit).", | ||
| not_found: "Upstream returned HTTP 404.", | ||
| permission_denied: "Upstream returned HTTP 401/403.", | ||
| path_missing: "File path argument was empty.", | ||
| read_failed: "Failed to read the file on disk.", | ||
| write_failed: "Failed to write the file on disk.", | ||
| }; | ||
| export const ApiFunctionMetadata = { | ||
| get: { | ||
| title: "GET", | ||
| summary: "HTTP GET (auto-parses JSON)", | ||
| description: "Calls `GET {base_url}{url}`. Injects auth headers from the credential.", | ||
| group: "requests", | ||
| action: "read", | ||
| icon: "download", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "get"], | ||
| parameters: [credentialParam, urlParam, optionsParam], | ||
| returnType: "any", | ||
| returnDescription: "Parsed response body, or a full envelope when `options.fullResponse` is true.", | ||
| errors: commonErrors, | ||
| example: 'api.get "my_api" "/users"', | ||
| }, | ||
| post: { | ||
| title: "POST", | ||
| summary: "HTTP POST with JSON body", | ||
| description: "Calls `POST {base_url}{url}` with the supplied body.", | ||
| group: "requests", | ||
| action: "write", | ||
| icon: "upload", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "post"], | ||
| parameters: [credentialParam, urlParam, bodyParam, optionsParam], | ||
| returnType: "any", | ||
| errors: commonErrors, | ||
| example: 'api.post "my_api" "/users" {name: "Ada"}', | ||
| }, | ||
| put: { | ||
| title: "PUT", | ||
| summary: "HTTP PUT with JSON body", | ||
| description: "Calls `PUT {base_url}{url}` with the supplied body.", | ||
| group: "requests", | ||
| action: "write", | ||
| icon: "refresh-cw", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "put"], | ||
| parameters: [credentialParam, urlParam, bodyParam, optionsParam], | ||
| returnType: "any", | ||
| errors: commonErrors, | ||
| example: 'api.put "my_api" "/users/1" {name: "Ada"}', | ||
| }, | ||
| patch: { | ||
| title: "PATCH", | ||
| summary: "HTTP PATCH with JSON body", | ||
| description: "Calls `PATCH {base_url}{url}` with a partial body.", | ||
| group: "requests", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "patch"], | ||
| parameters: [credentialParam, urlParam, bodyParam, optionsParam], | ||
| returnType: "any", | ||
| errors: commonErrors, | ||
| example: 'api.patch "my_api" "/users/1" {email: "new@x.com"}', | ||
| }, | ||
| delete: { | ||
| title: "DELETE", | ||
| summary: "HTTP DELETE", | ||
| description: "Calls `DELETE {base_url}{url}`.", | ||
| group: "requests", | ||
| action: "delete", | ||
| icon: "trash-2", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "delete"], | ||
| parameters: [credentialParam, urlParam, optionsParam], | ||
| returnType: "any", | ||
| errors: commonErrors, | ||
| example: 'api.delete "my_api" "/users/1"', | ||
| }, | ||
| head: { | ||
| title: "HEAD", | ||
| summary: "HTTP HEAD (headers only)", | ||
| description: "Returns `{status, ok, headers}` — response body is discarded.", | ||
| group: "requests", | ||
| action: "read", | ||
| icon: "info", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "head"], | ||
| parameters: [credentialParam, urlParam, optionsParam], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'api.head "my_api" "/users/1"', | ||
| }, | ||
| download: { | ||
| title: "Download file", | ||
| summary: "Stream a URL to a local file", | ||
| description: "GETs the URL and writes the response body to `filePath`.", | ||
| group: "files", | ||
| action: "read", | ||
| icon: "download", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "writes_filesystem"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "download", "file"], | ||
| parameters: [ | ||
| credentialParam, | ||
| urlParam, | ||
| { | ||
| name: "filePath", | ||
| title: "Destination path", | ||
| dataType: "string", | ||
| description: "Local path to write the downloaded bytes.", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "/tmp/report.pdf", | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{path, size, contentType, status}", | ||
| errors: commonErrors, | ||
| example: 'api.download "my_api" "/reports/latest.pdf" "/tmp/latest.pdf"', | ||
| }, | ||
| upload: { | ||
| title: "Upload file (multipart)", | ||
| summary: "POST a file as multipart/form-data", | ||
| description: "Reads `filePath` and POSTs it as a multipart/form-data field.", | ||
| group: "files", | ||
| action: "upload", | ||
| icon: "upload", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "reads_filesystem"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "upload", "file"], | ||
| parameters: [ | ||
| credentialParam, | ||
| urlParam, | ||
| { | ||
| name: "filePath", | ||
| title: "Source path", | ||
| dataType: "string", | ||
| description: "Local path of the file to upload.", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "/tmp/photo.jpg", | ||
| }, | ||
| { | ||
| name: "fieldName", | ||
| title: "Form field name", | ||
| dataType: "string", | ||
| description: "Multipart form field name (default: `file`).", | ||
| formInputType: "text", | ||
| required: false, | ||
| allowExpression: true, | ||
| placeholder: "file", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n headers : object\n timeout : ms\n fields : object of extra form fields\n apiKeyHeader : string", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{status, ok, body}", | ||
| errors: commonErrors, | ||
| example: 'api.upload "my_api" "/upload" "/tmp/photo.jpg" "image"', | ||
| }, | ||
| request: { | ||
| title: "Request (generic)", | ||
| summary: "HTTP with an explicit method", | ||
| description: "Calls `{method} {base_url}{url}` with `options.body` (if provided).", | ||
| group: "requests", | ||
| action: "write", | ||
| icon: "globe", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["api", "http", "request"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "method", | ||
| title: "Method", | ||
| dataType: "string", | ||
| description: "HTTP method (GET, POST, PUT, PATCH, DELETE, OPTIONS, …).", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "OPTIONS", | ||
| }, | ||
| urlParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n body : request body (auto JSON-serialized if object)\n headers : object merged into request headers\n timeout : ms\n fullResponse : bool\n apiKeyHeader : string", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "any", | ||
| errors: commonErrors, | ||
| example: 'api.request "my_api" "OPTIONS" "/resource"', | ||
| }, | ||
| }; | ||
| export const ApiModuleMetadata = { | ||
| slug: "api", | ||
| title: "API", | ||
| summary: "Generic REST client with reusable credential profiles (bearer / basic / api_key).", | ||
| description: "The `api` module is a thin wrapper around `fetch()` with an injected auth scheme pulled from the credential vault. Unlike `http` (stateless / ad-hoc), `api` lets you save a base URL + auth once, reference it by slug, and make short relative calls.\n\nCalling styles:\n • Credential-first: pass the slug and a path (`/users`). Auth headers are injected.\n • Ad-hoc: pass an empty slug and an absolute URL. No auth is injected.\n\nEvery handler returns a normalized envelope when `options.fullResponse` is true, otherwise just the parsed body. Errors are returned as `{error, code, status?, api_error?}` — they are never thrown.", | ||
| category: "web", | ||
| icon: "icon.svg", | ||
| color: "#3B82F6", | ||
| version: "0.2.0", | ||
| docsUrl: "https://docs.robinpath.com/modules/api", | ||
| status: "stable", | ||
| requires: [], | ||
| minNodeVersion: "18.0.0", | ||
| credentialsType: CREDENTIAL_TYPE, | ||
| operationGroups: { | ||
| requests: { title: "Requests", description: "Standard HTTP methods.", order: 1 }, | ||
| files: { title: "Files", description: "Download / multipart upload.", order: 2 }, | ||
| }, | ||
| methods: Object.keys(ApiFunctions), | ||
| }; | ||
| //# sourceMappingURL=api.js.map |
| {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"} |
| import type { ModuleAdapter } from "@robinpath/core"; | ||
| declare const ApiModule: ModuleAdapter; | ||
| export default ApiModule; | ||
| export { ApiModule }; | ||
| export { ApiFunctions, ApiFunctionMetadata, ApiModuleMetadata, ApiCredentialTypes, configureApi, } from "./api.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,SAAS,EAAE,aAQhB,CAAC;AAEF,eAAe,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,UAAU,CAAC"} |
| import { ApiFunctions, ApiFunctionMetadata, ApiModuleMetadata, ApiCredentialTypes, configureApi, } from "./api.js"; | ||
| const ApiModule = { | ||
| name: "api", | ||
| functions: ApiFunctions, | ||
| functionMetadata: ApiFunctionMetadata, | ||
| moduleMetadata: ApiModuleMetadata, | ||
| credentialTypes: ApiCredentialTypes, | ||
| configure: configureApi, | ||
| global: false, | ||
| }; | ||
| export default ApiModule; | ||
| export { ApiModule }; | ||
| export { ApiFunctions, ApiFunctionMetadata, ApiModuleMetadata, ApiCredentialTypes, configureApi, } from "./api.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,MAAM,SAAS,GAAkB;IAC/B,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,YAAY;IACvB,gBAAgB,EAAE,mBAAmB;IACrC,cAAc,EAAE,iBAAiB;IACjC,eAAe,EAAE,kBAAkB;IACnC,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,UAAU,CAAC"} |
+22
-8
| { | ||
| "name": "@robinpath/api", | ||
| "version": "0.1.2", | ||
| "version": "0.3.0", | ||
| "publishConfig": { | ||
@@ -23,12 +23,19 @@ "access": "public" | ||
| "peerDependencies": { | ||
| "@robinpath/core": ">=0.20.0" | ||
| "@robinpath/core": ">=0.40.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@robinpath/core": "^0.30.1", | ||
| "@robinpath/core": "^0.40.0", | ||
| "typescript": "^5.6.0" | ||
| }, | ||
| "description": "HTTP client for making requests to external APIs with profiles, auth, download/upload, and auto-JSON parsing", | ||
| "description": "Generic REST client with named credential profiles (bearer / basic / api_key). Wraps fetch() with base-URL resolution, structured error envelopes, and download/upload helpers.", | ||
| "keywords": [ | ||
| "api", | ||
| "web" | ||
| "http", | ||
| "rest", | ||
| "fetch", | ||
| "client", | ||
| "credentials", | ||
| "bearer", | ||
| "basic-auth", | ||
| "api-key" | ||
| ], | ||
@@ -38,6 +45,13 @@ "license": "MIT", | ||
| "category": "web", | ||
| "type": "utility", | ||
| "auth": "api-key", | ||
| "functionCount": 12 | ||
| "type": "module", | ||
| "auth": "credential-vault", | ||
| "credentialType": "api", | ||
| "functionCount": 9, | ||
| "language": "nodejs", | ||
| "platforms": [ | ||
| "cloud", | ||
| "cli", | ||
| "desktop" | ||
| ] | ||
| } | ||
| } |
+1
-1
@@ -22,3 +22,3 @@ # @robinpath/api | ||
| ```bash | ||
| npm install @robinpath/api | ||
| robinpath add @robinpath/api | ||
| ``` | ||
@@ -25,0 +25,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
63880
1482.76%10
400%897
Infinity%2
100%5
150%