Initial import of verae-activate from zapier monorepo

This commit is contained in:
George Lambert 2026-09-11 16:18:31 -04:00
commit 81eb6d9c30
12 changed files with 1367 additions and 0 deletions

94
creates/add_numbers.js Normal file
View file

@ -0,0 +1,94 @@
/**
* Add Numbers Zapier create that needs no backend.
*
* Inputs: number1, number2 (Zapier number fields).
* Output: { number1, number2, sum, mode }.
*
* If both api_base and api_key are set on the connection, POST /v1/add on the
* zappier commercial edge instead of adding locally.
*
* @module creates/add_numbers
*/
/**
* @param {unknown} value
* @param {string} name
* @returns {number}
*/
function toFiniteNumber(value, name) {
const n = typeof value === 'number' ? value : Number(value);
if (!Number.isFinite(n)) {
throw new Error(`${name} must be a finite number`);
}
return n;
}
/**
* @param {object} z Zapier z toolkit
* @param {object} bundle
* @param {object} bundle.inputData
* @param {string|number} bundle.inputData.number1
* @param {string|number} bundle.inputData.number2
* @param {object} bundle.authData
* @returns {Promise<{number1: number, number2: number, sum: number, mode: string}>}
*/
const perform = async (z, bundle) => {
const number1 = toFiniteNumber(bundle.inputData.number1, 'number1');
const number2 = toFiniteNumber(bundle.inputData.number2, 'number2');
const base = (bundle.authData.api_base || process.env.ZAPPIER_API_BASE || '').replace(/\/$/, '');
const key = bundle.authData.api_key || '';
if (base && key) {
const response = await z.request({
method: 'POST',
url: `${base}/v1/add`,
headers: { 'x-api-key': key, 'content-type': 'application/json' },
body: { number1, number2 },
});
const data = response.data || {};
return {
number1: data.number1 ?? number1,
number2: data.number2 ?? number2,
sum: data.sum,
mode: 'hosted',
};
}
return { number1, number2, sum: number1 + number2, mode: 'local' };
};
module.exports = {
key: 'add_numbers',
noun: 'Sum',
display: {
label: 'Add Numbers',
description: 'Adds number1 and number2. Works with no API — use this to prove the Zapier connection.',
},
operation: {
cleanInputData: false,
inputFields: [
{
key: 'number1',
label: 'Number 1',
type: 'number',
required: true,
helpText: 'First addend.',
},
{
key: 'number2',
label: 'Number 2',
type: 'number',
required: true,
helpText: 'Second addend.',
},
],
perform,
sample: { number1: 2, number2: 3, sum: 5, mode: 'local' },
outputFields: [
{ key: 'number1', label: 'Number 1', type: 'number' },
{ key: 'number2', label: 'Number 2', type: 'number' },
{ key: 'sum', label: 'Sum', type: 'number' },
{ key: 'mode', label: 'Mode', type: 'string' },
],
},
};