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

@robinpath/netlify

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/netlify - npm Package Compare versions

Comparing version
0.1.2
to
0.3.0
+6
dist/index.d.ts
import type { ModuleAdapter } from "@robinpath/core";
declare const NetlifyModule: ModuleAdapter;
export default NetlifyModule;
export { NetlifyModule };
export { NetlifyFunctions, NetlifyFunctionMetadata, NetlifyModuleMetadata, NetlifyCredentialTypes, } from "./netlify.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,aAAa,EAAE,aAQpB,CAAC;AAEF,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC"}
import { NetlifyFunctions, NetlifyFunctionMetadata, NetlifyModuleMetadata, NetlifyCredentialTypes, configureNetlify, } from "./netlify.js";
const NetlifyModule = {
name: "netlify",
functions: NetlifyFunctions,
functionMetadata: NetlifyFunctionMetadata,
moduleMetadata: NetlifyModuleMetadata,
credentialTypes: NetlifyCredentialTypes,
configure: configureNetlify,
global: false,
};
export default NetlifyModule;
export { NetlifyModule };
export { NetlifyFunctions, NetlifyFunctionMetadata, NetlifyModuleMetadata, NetlifyCredentialTypes, } from "./netlify.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,MAAM,aAAa,GAAkB;IACnC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAC3B,gBAAgB,EAAE,uBAAuB;IACzC,cAAc,EAAE,qBAAqB;IACrC,eAAe,EAAE,sBAAsB;IACvC,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC"}
/**
* RobinPath Netlify Module (Node port)
*
* Netlify REST API client — sites, deploys, and builds. Uses the RobinPath
* credential vault for bearer-token authentication against api.netlify.com.
*
* Credential type declared by this module:
* - netlify : { access_token } → Bearer auth with a Personal Access Token.
*
* All handlers return the parsed JSON response as-is. Errors are never
* thrown — they are returned as `{error, code, status?, netlify_error?}`.
*/
import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core";
export declare function configureNetlify(h: ModuleHost): void;
export declare const NetlifyFunctions: Record<string, BuiltinHandler>;
export declare const NetlifyCredentialTypes: CredentialTypeSchema[];
export declare const NetlifyFunctionMetadata: Record<string, FunctionMetadata>;
export declare const NetlifyModuleMetadata: ModuleMetadata;
//# sourceMappingURL=netlify.d.ts.map
{"version":3,"file":"netlify.d.ts","sourceRoot":"","sources":["../src/netlify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAEpD;AAwND,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAK3D,CAAC;AAIF,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,EAiBxD,CAAC;AA8CF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA0HpE,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,cA4BnC,CAAC"}
/**
* RobinPath Netlify Module (Node port)
*
* Netlify REST API client — sites, deploys, and builds. Uses the RobinPath
* credential vault for bearer-token authentication against api.netlify.com.
*
* Credential type declared by this module:
* - netlify : { access_token } → Bearer auth with a Personal Access Token.
*
* All handlers return the parsed JSON response as-is. Errors are never
* thrown — they are returned as `{error, code, status?, netlify_error?}`.
*/
// ── Module-local state (populated by configure hook) ────────────────────
const state = {};
function host() {
if (!state.host) {
throw new Error("Netlify module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first.");
}
return state.host;
}
export function configureNetlify(h) {
state.host = h;
}
// ── Constants ──────────────────────────────────────────────────────────
const API_BASE = "https://api.netlify.com/api/v1";
const CREDENTIAL_TYPE = "netlify";
function errorReturn(error, code, extra = {}) {
return { error, code, ...extra };
}
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 };
}
// ── HTTP helper ────────────────────────────────────────────────────────
async function http(cred, method, pathAndQuery, body) {
const init = {
method,
headers: {
Authorization: `Bearer ${cred.token}`,
Accept: "application/json",
...(body !== undefined ? { "Content-Type": "application/json" } : {}),
},
};
if (body !== undefined)
init.body = JSON.stringify(body);
let response;
try {
response = await fetch(`${API_BASE}${pathAndQuery}`, init);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const raw = await response.text();
let decoded = null;
if (raw) {
try {
decoded = JSON.parse(raw);
}
catch {
decoded = { raw };
}
}
if (response.status >= 200 && response.status < 300) {
return decoded ?? { ok: true, status: response.status };
}
let message = `Netlify returned HTTP ${response.status}.`;
if (decoded && typeof decoded === "object") {
const d = decoded;
if (typeof d.message === "string")
message = d.message;
else if (typeof d.error === "string")
message = d.error;
}
else if (typeof decoded === "string") {
message = decoded;
}
let code = "netlify_error";
if (response.status === 404)
code = "not_found";
else if (response.status === 401 || response.status === 403)
code = "permission_denied";
else if (response.status === 429)
code = "rate_limited";
return errorReturn(message, code, {
status: response.status,
netlify_error: decoded,
});
}
// ── Helpers ────────────────────────────────────────────────────────────
function buildQuery(params) {
const qs = new URLSearchParams();
for (const [k, v] of Object.entries(params)) {
if (v !== undefined && v !== null && v !== "")
qs.set(k, String(v));
}
const str = qs.toString();
return str ? `?${str}` : "";
}
function asString(v) {
if (v === undefined || v === null)
return "";
return String(v);
}
function asOpts(v) {
return v && typeof v === "object" && !Array.isArray(v)
? v
: {};
}
// ── Handlers ───────────────────────────────────────────────────────────
const listSites = async (args) => {
const cred = await resolveToken(asString(args[0]));
if ("error" in cred)
return cred;
const opts = asOpts(args[1]);
const query = buildQuery({
name: opts.name,
filter: opts.filter,
page: opts.page,
per_page: opts.perPage ?? opts.per_page,
});
return (await http(cred, "GET", `/sites${query}`));
};
const getSite = async (args) => {
const cred = await resolveToken(asString(args[0]));
if ("error" in cred)
return cred;
const siteId = asString(args[1]);
if (!siteId)
return errorReturn("`siteId` is required.", "validation");
return (await http(cred, "GET", `/sites/${encodeURIComponent(siteId)}`));
};
const deploySite = async (args) => {
const cred = await resolveToken(asString(args[0]));
if ("error" in cred)
return cred;
const siteId = asString(args[1]);
if (!siteId)
return errorReturn("`siteId` is required.", "validation");
const opts = asOpts(args[2]);
const body = {};
if (opts.files)
body.files = opts.files;
if (opts.functions)
body.functions = opts.functions;
if (opts.draft !== undefined)
body.draft = Boolean(opts.draft);
if (opts.branch)
body.branch = opts.branch;
if (opts.title)
body.title = opts.title;
if (opts.async !== undefined)
body.async = Boolean(opts.async);
return (await http(cred, "POST", `/sites/${encodeURIComponent(siteId)}/deploys`, body));
};
const listBuilds = async (args) => {
const cred = await resolveToken(asString(args[0]));
if ("error" in cred)
return cred;
const siteId = asString(args[1]);
if (!siteId)
return errorReturn("`siteId` is required.", "validation");
const opts = asOpts(args[2]);
const query = buildQuery({
page: opts.page,
per_page: opts.perPage ?? opts.per_page,
});
return (await http(cred, "GET", `/sites/${encodeURIComponent(siteId)}/builds${query}`));
};
// ── Exports: functions map ─────────────────────────────────────────────
export const NetlifyFunctions = {
listSites,
getSite,
deploySite,
listBuilds,
};
// ── Exports: credential types ──────────────────────────────────────────
export const NetlifyCredentialTypes = [
{
slug: CREDENTIAL_TYPE,
title: "Netlify",
icon: "cloud",
fields: [
{
name: "access_token",
title: "Personal Access Token",
type: "password",
required: true,
placeholder: "nfp_…",
description: "Create one at app.netlify.com/user/applications#personal-access-tokens. Grant the scopes your automation needs.",
},
],
},
];
// ── Metadata: shared parameter descriptors ─────────────────────────────
const credentialParam = {
name: "credential",
title: "Credential",
description: "Slug of a saved `netlify` credential.",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "my_netlify",
resource: {
type: "credential",
listFn: "credential.list",
modes: ["list", "expression"],
searchable: true,
filter: { type: CREDENTIAL_TYPE },
},
};
const siteIdParam = {
name: "siteId",
title: "Site ID",
description: "Netlify site ID (UUID) or site name (`my-site.netlify.app`).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "12345678-abcd-…",
};
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.",
transport: "Network failure calling api.netlify.com.",
netlify_error: "Netlify returned an error — see `netlify_error` and `status`.",
not_found: "The resource does not exist or the token lacks access.",
permission_denied: "The token is valid but lacks the required scope.",
rate_limited: "Netlify rate limited the request.",
validation: "A required parameter was missing or invalid.",
};
// ── Exports: function metadata ─────────────────────────────────────────
export const NetlifyFunctionMetadata = {
listSites: {
title: "List sites",
summary: "List sites visible to the token",
description: "Calls `GET /sites`.",
group: "sites",
action: "query",
icon: "list",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["netlify", "site", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n name : substring match on name\n filter : 'all' | 'owner' | 'guest'\n page : pagination page number\n perPage : results per page",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "array",
returnDescription: "Array of site objects.",
errors: commonErrors,
example: 'netlify.listSites "my_netlify" {perPage: 20}',
},
getSite: {
title: "Get site",
summary: "Fetch a single site by ID or name",
description: "Calls `GET /sites/{siteId}`.",
group: "sites",
action: "read",
icon: "folder",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["netlify", "site"],
parameters: [credentialParam, siteIdParam],
returnType: "object",
errors: commonErrors,
example: 'netlify.getSite "my_netlify" "my-site.netlify.app"',
},
deploySite: {
title: "Deploy site",
summary: "Create a new deploy for a site",
description: "Calls `POST /sites/{siteId}/deploys`. Pass a file digest map in `options.files` (and optional `options.functions`) to trigger the diff-upload flow.",
group: "deploys",
action: "write",
icon: "upload",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["netlify", "deploy", "create"],
parameters: [
credentialParam,
siteIdParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n files : { 'index.html': '<sha1>', … } — digest map\n functions : { name: '<sha256>' } — function digests\n draft : bool — create a draft deploy\n branch : git branch label\n title : deploy title\n async : bool — return before processing completes",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 6,
},
],
returnType: "object",
returnDescription: "The created deploy object with `id`, `state`, `deploy_url`.",
errors: commonErrors,
example: 'netlify.deploySite "my_netlify" "my-site.netlify.app" {files: {"index.html": "abc123…"}}',
},
listBuilds: {
title: "List builds",
summary: "List recent builds for a site",
description: "Calls `GET /sites/{siteId}/builds`.",
group: "deploys",
action: "query",
icon: "list",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["netlify", "build", "list"],
parameters: [
credentialParam,
siteIdParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n page : pagination page number\n perPage : results per page",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "array",
returnDescription: "Array of build objects.",
errors: commonErrors,
example: 'netlify.listBuilds "my_netlify" "my-site.netlify.app"',
},
};
// ── Exports: module metadata ───────────────────────────────────────────
export const NetlifyModuleMetadata = {
slug: "netlify",
title: "Netlify",
summary: "Sites, deploys, and builds via the Netlify REST API",
description: "Drive Netlify from RobinPath scripts. Every method takes a saved `netlify` credential slug as its first argument; the token is decrypted at call time, scrubbed from logs, and recorded in the audit trail.\n\nErrors are returned as `{error, code, status, netlify_error?}` rather than thrown.",
category: "devops",
icon: "icon.svg",
color: "#00C7B7",
version: "0.2.0",
docsUrl: "https://docs.robinpath.com/modules/netlify",
status: "stable",
requires: [],
minNodeVersion: "18.0.0",
credentialsType: CREDENTIAL_TYPE,
operationGroups: {
sites: {
title: "Sites",
description: "Read and list Netlify sites.",
order: 1,
},
deploys: {
title: "Deploys & Builds",
description: "Trigger deploys and inspect build history.",
order: 2,
},
},
methods: Object.keys(NetlifyFunctions),
};
//# sourceMappingURL=netlify.js.map
{"version":3,"file":"netlify.js","sourceRoot":"","sources":["../src/netlify.ts"],"names":[],"mappings":"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"}
+12
-6
{
"name": "@robinpath/netlify",
"version": "0.1.2",
"version": "0.3.0",
"publishConfig": {

@@ -23,6 +23,6 @@ "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"

@@ -39,6 +39,12 @@ },

"type": "integration",
"auth": "api-key",
"functionCount": 21,
"baseUrl": "https://api.netlify.com"
"auth": "credential-vault",
"credentialType": "netlify",
"functionCount": 4,
"baseUrl": "https://api.netlify.com",
"language": "nodejs",
"platforms": [
"cloud",
"cli"
]
}
}

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

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

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