🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/box

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/box - npm Package Compare versions

Comparing version
0.1.2
to
0.3.0
+30
dist/box.d.ts
/**
* RobinPath Box Module (Node port)
*
* Box Content API v2.0 — file storage, folders, shared links. Shares the
* credential contract, metadata shape, and error taxonomy of the other
* file-storage modules (Dropbox, OneDrive, Google Drive) so the visual editor
* can render them identically.
*
* Authentication uses the RobinPath credential vault. Every handler takes a
* credential slug as its first argument. The host registers a CredentialStore
* on the runtime and this module resolves tokens at call time via the
* injected ModuleHost.
*
* Box supports both OAuth 2.0 (three-legged + refresh) and JWT app auth. This
* module authenticates with a Bearer access_token; when refresh_token +
* client_id + client_secret are present it transparently refreshes the token
* on 401 and writes the new value back into the vault.
*
* Credential type declared by this module:
* - box : { access_token, refresh_token?, client_id?, client_secret? }
* → Bearer auth on api.box.com. Refresh is performed against
* api.box.com/oauth2/token with grant_type=refresh_token.
*/
import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core";
export declare function configureBox(h: ModuleHost): void;
export declare const BoxFunctions: Record<string, BuiltinHandler>;
export declare const BoxCredentialTypes: CredentialTypeSchema[];
export declare const BoxFunctionMetadata: Record<string, FunctionMetadata>;
export declare const BoxModuleMetadata: ModuleMetadata;
//# sourceMappingURL=box.d.ts.map
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../src/box.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAEhD;AAqrBD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAQvD,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,oBAAoB,EA0CpD,CAAC;AAoDF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA4XhE,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,cAiC/B,CAAC"}
/**
* RobinPath Box Module (Node port)
*
* Box Content API v2.0 — file storage, folders, shared links. Shares the
* credential contract, metadata shape, and error taxonomy of the other
* file-storage modules (Dropbox, OneDrive, Google Drive) so the visual editor
* can render them identically.
*
* Authentication uses the RobinPath credential vault. Every handler takes a
* credential slug as its first argument. The host registers a CredentialStore
* on the runtime and this module resolves tokens at call time via the
* injected ModuleHost.
*
* Box supports both OAuth 2.0 (three-legged + refresh) and JWT app auth. This
* module authenticates with a Bearer access_token; when refresh_token +
* client_id + client_secret are present it transparently refreshes the token
* on 401 and writes the new value back into the vault.
*
* Credential type declared by this module:
* - box : { access_token, refresh_token?, client_id?, client_secret? }
* → Bearer auth on api.box.com. Refresh is performed against
* api.box.com/oauth2/token with grant_type=refresh_token.
*/
import { Buffer } from "node:buffer";
import { readFile } from "node:fs/promises";
import { mkdir, writeFile } from "node:fs/promises";
import { dirname } from "node:path";
// ── Module-local state (populated by configure hook) ────────────────────
const state = {};
function host() {
if (!state.host) {
throw new Error("Box module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first.");
}
return state.host;
}
export function configureBox(h) {
state.host = h;
}
// ── Constants ──────────────────────────────────────────────────────────
const API_BASE = "https://api.box.com/2.0/";
const UPLOAD_BASE = "https://upload.box.com/api/2.0/";
const TOKEN_URL = "https://api.box.com/oauth2/token";
const CREDENTIAL_TYPE = "box";
function errorReturn(error, code, extra = {}) {
return { error, code, ...extra };
}
function isErrorReturn(v) {
return !!v && typeof v === "object" && "error" in v && "code" in v;
}
async function resolveToken(credentialSlug) {
if (!credentialSlug) {
return errorReturn("Credential slug is required.", "credential_not_found");
}
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 token = String(fields.access_token ?? "");
if (!token) {
return errorReturn("Credential has no `access_token` field.", "token_missing");
}
return { token, credentialSlug, fields };
}
async function refreshAccessToken(refreshToken, clientId, clientSecret) {
const body = new URLSearchParams({
grant_type: "refresh_token",
refresh_token: refreshToken,
client_id: clientId,
client_secret: clientSecret,
}).toString();
let response;
try {
response = await fetch(TOKEN_URL, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body,
});
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const raw = await response.text();
let decoded = {};
try {
decoded = raw ? JSON.parse(raw) : {};
}
catch {
decoded = {};
}
const status = response.status;
const accessToken = String(decoded.access_token ?? "");
if (status < 200 || status >= 300 || !accessToken) {
const msg = String(decoded.error_description ?? decoded.error ?? "Refresh failed.");
return errorReturn(msg, "token_exchange_failed", { status });
}
return {
token: accessToken,
refresh_token: typeof decoded.refresh_token === "string"
? decoded.refresh_token
: undefined,
};
}
async function writeBackTokens(slug, fields, newAccessToken, newRefreshToken) {
try {
await host().credentials.set(slug, CREDENTIAL_TYPE, {
...fields,
access_token: newAccessToken,
...(newRefreshToken ? { refresh_token: newRefreshToken } : {}),
});
}
catch {
// Best-effort — caller still has the refreshed token in memory.
}
}
async function maybeRefreshAndRetry(resolved, retry) {
const refreshToken = String(resolved.fields.refresh_token ?? "");
const clientId = String(resolved.fields.client_id ?? "");
const clientSecret = String(resolved.fields.client_secret ?? "");
if (!refreshToken || !clientId || !clientSecret)
return null;
const refreshed = await refreshAccessToken(refreshToken, clientId, clientSecret);
if (isErrorReturn(refreshed))
return null;
await writeBackTokens(resolved.credentialSlug, resolved.fields, refreshed.token, refreshed.refresh_token);
return retry(refreshed.token);
}
// ── HTTP helpers ───────────────────────────────────────────────────────
function boxError(status, decoded, retryAfterHeader) {
const messageRaw = decoded.message;
const summary = typeof messageRaw === "string" && messageRaw
? messageRaw
: `Box returned HTTP ${status}.`;
let code = "box_error";
if (status === 404) {
code = "not_found";
}
else if (status === 409) {
code = "conflict";
}
else if (status === 429) {
code = "rate_limited";
}
else if (status === 401) {
code = "token_missing";
}
else if (status === 403) {
code = "permission_denied";
}
else if (status === 400 || status === 422) {
code = "validation_failed";
}
const out = {
error: summary,
code,
status,
box_error: decoded,
};
if (retryAfterHeader) {
const n = parseInt(retryAfterHeader, 10);
if (!Number.isNaN(n))
out.retry_after = n;
}
return out;
}
async function httpJson(token, method, pathAndQuery, body) {
const url = API_BASE + pathAndQuery.replace(/^\/+/, "");
const headers = {
Authorization: `Bearer ${token}`,
Accept: "application/json",
};
if (body !== undefined && body !== null) {
headers["Content-Type"] = "application/json";
}
const init = { method, headers };
if (body !== undefined && body !== null) {
init.body = JSON.stringify(body);
}
let response;
try {
response = await fetch(url, init);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const status = response.status;
const raw = await response.text();
if (status === 204 || raw === "") {
if (status >= 200 && status < 300)
return { ok: true };
return boxError(status, { raw }, response.headers.get("retry-after"));
}
let decoded = null;
try {
decoded = JSON.parse(raw);
}
catch {
decoded = { raw: raw.slice(0, 500) };
}
if (status >= 200 && status < 300) {
if (decoded && typeof decoded === "object")
return decoded;
return { raw };
}
return boxError(status, decoded && typeof decoded === "object"
? decoded
: { raw: raw.slice(0, 500) }, response.headers.get("retry-after"));
}
async function callJson(credentialSlug, method, pathAndQuery, body) {
const resolved = await resolveToken(credentialSlug);
if (isErrorReturn(resolved))
return resolved;
const first = await httpJson(resolved.token, method, pathAndQuery, body);
if (isErrorReturn(first) && first.status === 401) {
const retry = await maybeRefreshAndRetry(resolved, (tok) => httpJson(tok, method, pathAndQuery, body));
if (retry)
return retry;
}
return first;
}
// ── Upload content resolver ────────────────────────────────────────────
async function resolveUploadBytes(content) {
if (typeof content === "string") {
return Buffer.from(content, "utf8");
}
if (content && typeof content === "object") {
const obj = content;
if (typeof obj.base64 === "string") {
try {
const decoded = Buffer.from(obj.base64, "base64");
const normalized = obj.base64.replace(/\s+/g, "").replace(/=+$/, "");
const reencoded = decoded.toString("base64").replace(/=+$/, "");
if (normalized.length > 0 && reencoded !== normalized) {
return errorReturn("Invalid base64 content.", "no_source");
}
return decoded;
}
catch {
return errorReturn("Invalid base64 content.", "no_source");
}
}
if (typeof obj.path === "string") {
const path = obj.path;
try {
return await readFile(path);
}
catch (e) {
return errorReturn(`Cannot read file at ${path} (${e instanceof Error ? e.message : String(e)}).`, "no_source");
}
}
if (typeof obj.url === "string") {
let resp;
try {
resp = await fetch(obj.url);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
if (resp.status < 200 || resp.status >= 300) {
return errorReturn(`Upstream ${obj.url} returned HTTP ${resp.status}.`, "transport");
}
const ab = await resp.arrayBuffer();
return Buffer.from(ab);
}
}
return errorReturn("Content must be a string or an object with `base64`, `path`, or `url`.", "no_source");
}
// ── Multipart upload helper ────────────────────────────────────────────
async function httpUpload(token, attributes, fileName, bytes) {
const boundary = "----RobinPathBoxBoundary" + Date.now().toString(16);
const crlf = "\r\n";
const attrHead = Buffer.from(`--${boundary}${crlf}` +
`Content-Disposition: form-data; name="attributes"${crlf}` +
`Content-Type: application/json${crlf}${crlf}` +
JSON.stringify(attributes) +
crlf, "utf8");
const fileHead = Buffer.from(`--${boundary}${crlf}` +
`Content-Disposition: form-data; name="file"; filename="${fileName.replace(/"/g, "")}"${crlf}` +
`Content-Type: application/octet-stream${crlf}${crlf}`, "utf8");
const tail = Buffer.from(`${crlf}--${boundary}--${crlf}`, "utf8");
const body = Buffer.concat([attrHead, fileHead, bytes, tail]);
let response;
try {
response = await fetch(UPLOAD_BASE + "files/content", {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": `multipart/form-data; boundary=${boundary}`,
},
body,
});
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const status = response.status;
const raw = await response.text();
let decoded = null;
if (raw !== "") {
try {
decoded = JSON.parse(raw);
}
catch {
decoded = { raw: raw.slice(0, 500) };
}
}
if (status < 200 || status >= 300) {
return boxError(status, decoded && typeof decoded === "object"
? decoded
: { raw: raw.slice(0, 500) }, response.headers.get("retry-after"));
}
return decoded ?? { ok: true };
}
async function callUpload(credentialSlug, attributes, fileName, bytes) {
const resolved = await resolveToken(credentialSlug);
if (isErrorReturn(resolved))
return resolved;
const first = await httpUpload(resolved.token, attributes, fileName, bytes);
if (isErrorReturn(first) && first.status === 401) {
const retry = await maybeRefreshAndRetry(resolved, (tok) => httpUpload(tok, attributes, fileName, bytes));
if (retry)
return retry;
}
return first;
}
// ── Handlers ───────────────────────────────────────────────────────────
const listItems = async (args) => {
const cred = String(args[0] ?? "");
const folderId = args[1] !== undefined && args[1] !== null ? String(args[1]) : "0";
const opts = (args[2] && typeof args[2] === "object" ? args[2] : {});
const sp = new URLSearchParams();
if (opts.fields !== undefined) {
const f = Array.isArray(opts.fields)
? opts.fields.map((x) => String(x)).join(",")
: String(opts.fields);
sp.set("fields", f);
}
if (opts.limit !== undefined)
sp.set("limit", String(Number(opts.limit) | 0));
if (opts.offset !== undefined)
sp.set("offset", String(Number(opts.offset) | 0));
if (opts.sort !== undefined)
sp.set("sort", String(opts.sort));
if (opts.direction !== undefined)
sp.set("direction", String(opts.direction));
if (opts.usemarker !== undefined) {
sp.set("usemarker", String(Boolean(opts.usemarker)));
}
if (opts.marker !== undefined)
sp.set("marker", String(opts.marker));
const qs = sp.toString();
const path = `folders/${encodeURIComponent(folderId)}/items${qs ? "?" + qs : ""}`;
return (await callJson(cred, "GET", path));
};
const getFile = async (args) => {
const cred = String(args[0] ?? "");
const fileId = String(args[1] ?? "");
const opts = (args[2] && typeof args[2] === "object" ? args[2] : {});
if (!fileId) {
return errorReturn("`fileId` is required.", "validation_failed");
}
const sp = new URLSearchParams();
if (opts.fields !== undefined) {
const f = Array.isArray(opts.fields)
? opts.fields.map((x) => String(x)).join(",")
: String(opts.fields);
sp.set("fields", f);
}
const qs = sp.toString();
const path = `files/${encodeURIComponent(fileId)}${qs ? "?" + qs : ""}`;
return (await callJson(cred, "GET", path));
};
const uploadFile = async (args) => {
const cred = String(args[0] ?? "");
const fileName = String(args[1] ?? "");
const content = args[2];
const parentFolderId = args[3] !== undefined && args[3] !== null && args[3] !== "" ? String(args[3]) : "0";
const opts = (args[4] && typeof args[4] === "object" ? args[4] : {});
if (!fileName) {
return errorReturn("`fileName` is required.", "validation_failed");
}
const bytes = await resolveUploadBytes(content);
if (isErrorReturn(bytes))
return bytes;
if (bytes.length > 50 * 1024 * 1024) {
return errorReturn("Single-shot uploads are capped at 50 MB. Use a Box upload session for larger files.", "too_large");
}
const attributes = {
name: fileName,
parent: { id: parentFolderId },
};
if (typeof opts.contentCreatedAt === "string") {
attributes.content_created_at = opts.contentCreatedAt;
}
if (typeof opts.contentModifiedAt === "string") {
attributes.content_modified_at = opts.contentModifiedAt;
}
if (typeof opts.description === "string") {
attributes.description = opts.description;
}
return (await callUpload(cred, attributes, fileName, bytes));
};
const downloadFile = async (args) => {
const cred = String(args[0] ?? "");
const fileId = String(args[1] ?? "");
const savePath = args[2] !== undefined && args[2] !== null ? String(args[2]) : "";
if (!fileId) {
return errorReturn("`fileId` is required.", "validation_failed");
}
const resolved = await resolveToken(cred);
if (isErrorReturn(resolved))
return resolved;
const runDownload = async (token) => {
let response;
try {
response = await fetch(`${API_BASE}files/${encodeURIComponent(fileId)}/content`, {
method: "GET",
headers: { Authorization: `Bearer ${token}` },
redirect: "follow",
});
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const status = response.status;
if (status < 200 || status >= 300) {
const raw = await response.text();
let decoded = null;
if (raw !== "") {
try {
decoded = JSON.parse(raw);
}
catch {
decoded = null;
}
}
return boxError(status, decoded && typeof decoded === "object"
? decoded
: { raw: raw.slice(0, 200) }, response.headers.get("retry-after"));
}
const ab = await response.arrayBuffer();
const buf = Buffer.from(ab);
const result = {
size: buf.length,
content_type: response.headers.get("content-type") ?? null,
};
if (savePath !== "") {
try {
const dir = dirname(savePath);
if (dir && dir !== ".") {
await mkdir(dir, { recursive: true });
}
}
catch (e) {
return errorReturn(`Could not create directory for ${savePath} (${e instanceof Error ? e.message : String(e)}).`, "write_error");
}
try {
await writeFile(savePath, buf);
}
catch (e) {
return errorReturn(`Could not write to ${savePath} (${e instanceof Error ? e.message : String(e)}).`, "write_error");
}
result.path = savePath;
}
else {
result.content = buf.toString("utf8");
result.base64 = buf.toString("base64");
}
return result;
};
const first = await runDownload(resolved.token);
if (isErrorReturn(first) && first.status === 401) {
const retried = await maybeRefreshAndRetry(resolved, runDownload);
if (retried)
return retried;
}
return first;
};
const createFolder = async (args) => {
const cred = String(args[0] ?? "");
const name = String(args[1] ?? "");
const parentFolderId = args[2] !== undefined && args[2] !== null && args[2] !== "" ? String(args[2]) : "0";
if (!name) {
return errorReturn("`name` is required.", "validation_failed");
}
return (await callJson(cred, "POST", "folders", {
name,
parent: { id: parentFolderId },
}));
};
const deleteItem = async (args) => {
const cred = String(args[0] ?? "");
const itemType = String(args[1] ?? "").toLowerCase();
const itemId = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (itemType !== "file" && itemType !== "folder") {
return errorReturn("`itemType` must be 'file' or 'folder'.", "validation_failed");
}
if (!itemId) {
return errorReturn("`itemId` is required.", "validation_failed");
}
let path = itemType === "file"
? `files/${encodeURIComponent(itemId)}`
: `folders/${encodeURIComponent(itemId)}`;
if (itemType === "folder" && opts.recursive !== undefined) {
path += `?recursive=${Boolean(opts.recursive) ? "true" : "false"}`;
}
return (await callJson(cred, "DELETE", path));
};
const getSharedLink = async (args) => {
const cred = String(args[0] ?? "");
const itemType = String(args[1] ?? "").toLowerCase();
const itemId = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (itemType !== "file" && itemType !== "folder") {
return errorReturn("`itemType` must be 'file' or 'folder'.", "validation_failed");
}
if (!itemId) {
return errorReturn("`itemId` is required.", "validation_failed");
}
const shared_link = {};
if (opts.access !== undefined) {
shared_link.access = String(opts.access);
}
if ("canDownload" in opts) {
shared_link.permissions = { can_download: Boolean(opts.canDownload) };
}
if (typeof opts.unsharedAt === "string") {
shared_link.unshared_at = opts.unsharedAt;
}
if (typeof opts.password === "string") {
shared_link.password = opts.password;
}
const path = itemType === "file"
? `files/${encodeURIComponent(itemId)}?fields=shared_link`
: `folders/${encodeURIComponent(itemId)}?fields=shared_link`;
return (await callJson(cred, "PUT", path, {
shared_link: Object.keys(shared_link).length > 0 ? shared_link : { access: "open" },
}));
};
// ── Exports: functions map ─────────────────────────────────────────────
export const BoxFunctions = {
listItems,
getFile,
uploadFile,
downloadFile,
createFolder,
delete: deleteItem,
getSharedLink,
};
// ── Exports: credential types ──────────────────────────────────────────
export const BoxCredentialTypes = [
{
slug: CREDENTIAL_TYPE,
title: "Box Access Token",
icon: "cloud",
fields: [
{
name: "access_token",
title: "Access Token",
type: "password",
required: true,
placeholder: "Bearer token from OAuth2 or JWT app auth",
description: "Box access token obtained via OAuth 2.0 (three-legged flow) or JWT app auth. Create an app at https://app.box.com/developers/console and generate a token; for long-lived access use `refresh_token` + `client_id` + `client_secret` so the module auto-refreshes expired tokens.",
},
{
name: "refresh_token",
title: "Refresh Token",
type: "password",
required: false,
placeholder: "Optional — enables auto-refresh",
description: "Optional. When present with client_id + client_secret, the module exchanges it for a fresh access_token on 401 and writes both tokens back into the vault.",
},
{
name: "client_id",
title: "Client ID",
type: "text",
required: false,
placeholder: "Box app Client ID",
description: "Box app's Client ID — required for refresh.",
},
{
name: "client_secret",
title: "Client Secret",
type: "password",
required: false,
placeholder: "Box app Client Secret",
description: "Box app's Client Secret — required for refresh.",
},
],
},
];
// ── Metadata: parameters + errors ──────────────────────────────────────
const credentialParam = {
name: "credential",
title: "Credential",
description: "Slug of a saved `box` credential. The access token is decrypted at call time and never appears in logs.",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "my_box",
resource: {
type: "credential",
listFn: "credential.list",
modes: ["list", "expression"],
searchable: true,
filter: { type: CREDENTIAL_TYPE },
},
};
const fileIdParam = {
name: "fileId",
title: "File ID",
description: "Numeric Box file id (e.g. `12345678901`).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "12345678901",
};
const commonErrors = {
credential_not_found: "No credential with that slug exists in the vault.",
token_missing: "The credential exists but has no `access_token` field.",
token_exchange_failed: "Refresh attempt failed — check client_id/client_secret.",
transport: "Network failure calling api.box.com.",
box_error: "Box returned an error — see `box_error` and `status`.",
not_found: "The file or folder does not exist, or the token lacks access.",
conflict: "A file or folder already exists with the same name at the destination.",
permission_denied: "The token does not have permission for this resource (HTTP 403).",
rate_limited: "Box rate limited the request. Retry after `retry_after` seconds.",
validation_failed: "Box rejected the request payload (HTTP 400/422).",
no_source: "Upload content must be a string or `{base64}`/`{path}`/`{url}`.",
too_large: "Single-shot uploads are capped at 50 MB. Use an upload session.",
write_error: "Could not write the downloaded bytes to `savePath`.",
};
// ── Function metadata ──────────────────────────────────────────────────
export const BoxFunctionMetadata = {
listItems: {
title: "List folder items",
summary: "List the files and folders inside a Box folder",
description: "Calls `GET /2.0/folders/{folder_id}/items`. Pass `'0'` (or leave empty) for the root folder. Paginate via `limit`/`offset` or the marker mode (`usemarker:true` + `marker`).",
group: "files",
action: "query",
icon: "folder-open",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["box", "list", "folder", "files"],
parameters: [
credentialParam,
{
name: "folderId",
title: "Folder ID",
description: "Numeric Box folder id. Pass `'0'` for the user's root folder (default if empty).",
dataType: "string",
formInputType: "text",
required: false,
allowExpression: true,
placeholder: "0",
defaultValue: "0",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n fields : comma-joined string or array of field names (e.g. ['name','size','modified_at'])\n limit : int — page size (default 100)\n offset : int — pagination offset\n sort : 'name' | 'id' | 'date'\n direction : 'ASC' | 'DESC'\n usemarker : bool — switch to marker-based pagination\n marker : opaque marker returned by a previous call",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "Object with `.entries[]` (each `{type,id,name,…}`), `.total_count`, `.limit`, `.offset`.",
errors: commonErrors,
examples: [
{
title: "List root folder",
code: 'box.listItems "my_box" "0"',
},
{
title: "Narrow fields",
code: 'box.listItems "my_box" "1234" {fields:["name","size","modified_at"], limit:50}',
},
],
example: 'box.listItems "my_box" "0"',
},
getFile: {
title: "Get file",
summary: "Fetch file metadata by id",
description: "Calls `GET /2.0/files/{file_id}`. Returns `{type,id,name,size,etag,sha1,parent,created_at,modified_at,…}`. Pass `options.fields` to narrow the payload.",
group: "files",
action: "read",
icon: "file-text",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["box", "file", "metadata"],
parameters: [
credentialParam,
fileIdParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n fields : comma-joined string or array of field names",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 2,
advanced: true,
},
],
returnType: "object",
returnDescription: "Full file metadata record.",
errors: commonErrors,
example: 'box.getFile "my_box" "12345678901"',
},
uploadFile: {
title: "Upload file",
summary: "Upload a new file to a folder",
description: "Calls `POST https://upload.box.com/api/2.0/files/content`. Content is a UTF-8 string, or an object `{base64|path|url}`. Single-shot uploads are capped at 50 MB — larger files need an upload session (not yet implemented).",
group: "content",
action: "upload",
icon: "upload-cloud",
capability: "upload_files",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["box", "upload", "write"],
parameters: [
credentialParam,
{
name: "fileName",
title: "File name",
description: "Name of the uploaded file, including extension.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "backup-2026-04.json",
},
{
name: "content",
title: "File content",
description: 'Either a plain string (UTF-8 text) or an object:\n {base64: "..."} — decode and upload bytes\n {path: "/var/..."} — read the file from the host\n {url: "https://..."} — fetch, then upload',
dataType: "any",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 4,
},
{
name: "parentFolderId",
title: "Parent folder ID",
description: "Folder id to upload into. Default `'0'` (root).",
dataType: "string",
formInputType: "text",
required: false,
allowExpression: true,
placeholder: "0",
defaultValue: "0",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n contentCreatedAt : ISO-8601 timestamp\n contentModifiedAt : ISO-8601 timestamp\n description : string",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "object",
returnDescription: "`{ entries: [{type:'file', id, name, size, sha1, …}], total_count: 1 }`.",
errors: commonErrors,
examples: [
{
title: "Upload JSON string",
code: 'box.uploadFile "my_box" "backup.json" \'{"posts":[]}\' "0"',
},
{
title: "Mirror a file from disk",
code: 'box.uploadFile "my_box" "db.sql" {path:"/var/backups/db.sql"} "1234"',
},
],
example: 'box.uploadFile "my_box" "hello.txt" "Hello" "0"',
},
downloadFile: {
title: "Download file",
summary: "Read bytes from a Box file",
description: "Calls `GET /2.0/files/{file_id}/content`. Box responds with a 302 to a CDN URL; fetch follows it automatically. Pass `savePath` to stream bytes to disk, otherwise the response includes `.content` (UTF-8) and `.base64`.",
group: "content",
action: "download",
icon: "download-cloud",
capability: "manage_options",
sideEffects: ["makes_http_call", "modifies_filesystem"],
idempotent: true,
since: "1.0.0",
tags: ["box", "download", "read"],
parameters: [
credentialParam,
fileIdParam,
{
name: "savePath",
title: "Save to (server path)",
description: "Optional absolute path on the host. If given, bytes are written there and the response excludes inline content.",
dataType: "string",
formInputType: "text",
required: false,
allowExpression: true,
placeholder: "/var/www/uploads/backup.json",
},
],
returnType: "object",
returnDescription: "`{size, content_type, content?, base64?, path?}` — `content`/`base64` when inline, `path` when saved to disk.",
errors: commonErrors,
examples: [
{ title: "Inline", code: 'box.downloadFile "my_box" "12345678901"' },
{
title: "To disk",
code: 'box.downloadFile "my_box" "12345678901" "/tmp/out.bin"',
},
],
example: 'box.downloadFile "my_box" "12345678901"',
},
createFolder: {
title: "Create folder",
summary: "Create a new folder inside a parent folder",
description: "Calls `POST /2.0/folders` with `{name, parent:{id}}`. Parent defaults to `'0'` (root). Box returns 409 if a folder with that name already exists at the target.",
group: "files",
action: "write",
icon: "folder-plus",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["box", "folder", "mkdir"],
parameters: [
credentialParam,
{
name: "name",
title: "Folder name",
description: "Name of the new folder.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "Backups 2026-04",
},
{
name: "parentFolderId",
title: "Parent folder ID",
description: "Folder id to create inside. Default `'0'` (root).",
dataType: "string",
formInputType: "text",
required: false,
allowExpression: true,
placeholder: "0",
defaultValue: "0",
},
],
returnType: "object",
returnDescription: "`{type:'folder', id, name, parent:{id}, …}`.",
errors: commonErrors,
example: 'box.createFolder "my_box" "Backups" "0"',
},
delete: {
title: "Delete file or folder",
summary: "Trash a file or folder",
description: "Calls `DELETE /2.0/files/{id}` or `DELETE /2.0/folders/{id}`. Folders support `options.recursive:true` to delete non-empty folders (defaults to `false` — Box rejects with 409 if the folder contains items).",
group: "files",
action: "delete",
icon: "trash-2",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["box", "delete", "remove"],
parameters: [
credentialParam,
{
name: "itemType",
title: "Item type",
description: "Either `file` or `folder`.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "file",
validation: { pattern: "^(file|folder)$" },
},
{
name: "itemId",
title: "Item ID",
description: "Numeric Box id for the file or folder.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "12345678901",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n recursive : bool — for folders, allow deleting non-empty folders",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 2,
advanced: true,
},
],
returnType: "object",
returnDescription: "`{ok: true}` on 204.",
errors: commonErrors,
example: 'box.delete "my_box" "file" "12345678901"',
},
getSharedLink: {
title: "Create / refresh shared link",
summary: "Get or update a public shared link for a file or folder",
description: "Calls `PUT /2.0/files/{id}` or `PUT /2.0/folders/{id}` with a `shared_link` object. Box returns the current shared link in the response's `shared_link` field; calling without options creates an `open` link with default permissions.",
group: "sharing",
action: "write",
icon: "share-2",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["box", "share", "link"],
parameters: [
credentialParam,
{
name: "itemType",
title: "Item type",
description: "Either `file` or `folder`.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "file",
validation: { pattern: "^(file|folder)$" },
},
{
name: "itemId",
title: "Item ID",
description: "Numeric Box id.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "12345678901",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n access : 'open' (default) | 'company' | 'collaborators'\n canDownload : bool\n unsharedAt : ISO-8601 expiry timestamp\n password : string — password-protect the link",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "object",
returnDescription: "Full item with `.shared_link.url`, `.shared_link.access`, `.shared_link.effective_access`, etc.",
errors: commonErrors,
examples: [
{
title: "Open link",
code: 'box.getSharedLink "my_box" "file" "12345678901"',
},
{
title: "Password-protected",
code: 'box.getSharedLink "my_box" "file" "12345678901" {access:"open", password:"s3cret", canDownload:true}',
},
],
example: 'box.getSharedLink "my_box" "file" "12345678901"',
},
};
// ── Module metadata ────────────────────────────────────────────────────
export const BoxModuleMetadata = {
slug: "box",
title: "Box",
summary: "Files, folders, and shared links via the Box Content API",
description: "Drive Box (box.com) from RobinPath scripts. Every method takes a saved `box` credential slug as its first argument; the access token is decrypted at call time, scrubbed from logs, and recorded in the audit trail.\n\nReturns the parsed Box response object as-is — read `.entries[]` for listings, `.shared_link.url` for shared links, `.id`/`.name` for file metadata. Errors are returned as `{error, code, status, box_error?}` rather than thrown.\n\nBox folder ids are numeric strings; the root folder is always `'0'`. When the credential holds `refresh_token` + `client_id` + `client_secret`, expired access tokens are refreshed transparently and both tokens are written back into the vault.",
category: "storage",
icon: "icon.svg",
color: "#0061D5",
version: "0.2.0",
docsUrl: "https://docs.robinpath.com/modules/box",
status: "stable",
requires: [],
minNodeVersion: "18.0.0",
credentialsType: CREDENTIAL_TYPE,
operationGroups: {
files: {
title: "Files & Folders",
description: "List items, read metadata, create folders, delete entries.",
order: 1,
},
content: {
title: "Content",
description: "Upload and download raw file bytes.",
order: 2,
},
sharing: {
title: "Sharing",
description: "Create public shared links for files and folders.",
order: 3,
},
},
methods: Object.keys(BoxFunctions),
};
//# sourceMappingURL=box.js.map
{"version":3,"file":"box.js","sourceRoot":"","sources":["../src/box.ts"],"names":[],"mappings":"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"}
import type { ModuleAdapter } from "@robinpath/core";
declare const BoxModule: ModuleAdapter;
export default BoxModule;
export { BoxModule };
export { BoxFunctions, BoxFunctionMetadata, BoxModuleMetadata, BoxCredentialTypes, configureBox, } from "./box.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 { BoxFunctions, BoxFunctionMetadata, BoxModuleMetadata, BoxCredentialTypes, configureBox, } from "./box.js";
const BoxModule = {
name: "box",
functions: BoxFunctions,
functionMetadata: BoxFunctionMetadata,
moduleMetadata: BoxModuleMetadata,
credentialTypes: BoxCredentialTypes,
configure: configureBox,
global: false,
};
export default BoxModule;
export { BoxModule };
export { BoxFunctions, BoxFunctionMetadata, BoxModuleMetadata, BoxCredentialTypes, configureBox, } from "./box.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"}
+21
-10
{
"name": "@robinpath/box",
"version": "0.1.2",
"version": "0.3.0",
"publishConfig": {

@@ -23,21 +23,32 @@ "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": "Box module for RobinPath.",
"description": "Box Content API v2.0 — files, folders, shared links, search. Uses the encrypted credential vault (OAuth2 access token).",
"keywords": [
"box",
"cloud storage"
"cloud storage",
"file storage",
"files",
"folders",
"sharing",
"productivity"
],
"license": "MIT",
"robinpath": {
"category": "cloud-storage",
"type": "integration",
"auth": "api-key",
"functionCount": 19,
"baseUrl": "https://api.box.com"
"category": "storage",
"type": "module",
"auth": "credential-vault",
"functionCount": 7,
"baseUrl": "https://api.box.com/2.0",
"language": "nodejs",
"platforms": [
"cloud",
"cli",
"desktop"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/box

```bash
npm install @robinpath/box
robinpath add @robinpath/box
```

@@ -25,0 +25,0 @@