packages/verae-activate is pushable with zapier-platform 19.1.0: local Add Numbers (number1+number2=sum) needs no hosted API. zapier-platform validate is clean (0 warnings). zappier POST /v1/add is a free metered endpoint for the optional hosted path. Tests: verae-activate 7/7, zappier 176/176, verae-zapier 5/5, middleware gate 1 11/11. Morning steps: docs/04-activate/SETUP-ZAPIER-DEVELOPER.md Learned: perform runs on Zapier cloud so arithmetic needs no public URL; CLI and zapier-platform-core majors must match; do not mix zapier-sdk.
94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
/**
|
|
* 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' },
|
|
],
|
|
},
|
|
};
|