conduyt 1.59.0 → 1.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -59,6 +59,9 @@ conduyt reply-capture status # inbound reply capture: state, DNS reco
59
59
  conduyt reply-capture setup # create the receiving subdomain (--domain optional)
60
60
  conduyt reply-capture verify # promote it to live once DNS is confirmed
61
61
  conduyt reply-capture remove --confirm REMOVE # remove capture — replies to already-sent email are lost
62
+ conduyt integrations wordpress-forms list # WordPress form intake addresses: full URL of every active one, received counts
63
+ conduyt integrations wordpress-forms create --name "Contact page" --default-tag "Website lead" # prints the full URL
64
+ conduyt integrations wordpress-forms revoke <id> # the address answers 404 from now on; the row is kept
62
65
  conduyt api GET /api/v1/companies # raw authenticated request (escape hatch)
63
66
  conduyt config show # show resolved config (key masked)
64
67
  ```
package/dist/index.js CHANGED
@@ -2211,6 +2211,46 @@ webhooks
2211
2211
  .option("--acknowledge-duplicate-risk", "you accept the step may be delivered twice")
2212
2212
  .action(run(async (client, id, opts) => client.post(`/api/v1/webhook-logs/${uuidArg(id, "id")}/cancel`, barrierBody(opts))));
2213
2213
  // ---------------------------------------------------------------------------
2214
+ // Integrations → WordPress forms (app 10-07): per-form intake addresses that Gravity Forms (Webhooks Add-On), WPForms
2215
+ // (Webhooks addon) and Elementor Pro (Webhook action) post submissions to; each submission becomes a contact. The full
2216
+ // address is the credential: `create` prints it and `list` shows it for every active intake. API key: list and create
2217
+ // need the form-intakes AND contacts scopes on a write or admin tier key; revoke needs form-intakes.
2218
+ // ---------------------------------------------------------------------------
2219
+ const integrations = program.command("integrations").description("Integrations managed from the CLI");
2220
+ const wordpressForms = integrations
2221
+ .command("wordpress-forms")
2222
+ .description("WordPress form intake addresses (Gravity Forms, WPForms, Elementor): submissions become contacts (form-intakes + contacts scopes, write tier; revoke: form-intakes)");
2223
+ wordpressForms
2224
+ .command("list")
2225
+ .description("List every active intake address (newest first), then the revoked history (the newest 200 revocations), with the full URL of every active intake and received counts")
2226
+ .action(run(async (client) => client.get("/api/v1/integrations/wordpress-forms/intakes")));
2227
+ wordpressForms
2228
+ .command("create")
2229
+ .description("Create an intake address for one form. Prints the full URL (the credential; list shows it too while active): paste it into the form plugin's webhook URL. Needs the form-intakes and contacts scopes")
2230
+ .option("--name <text>", "what the form is, e.g. \"Contact page, Smith Roofing\" (required, max 120)")
2231
+ .option("--default-tag <name>", "tag name applied to every submission unless the submission sends its own tags")
2232
+ .option("--source <text>", "contact source for submissions that do not send one (default wordpress)")
2233
+ .option("--assign-to <userId>", "user id (an active member) who owns new contacts; omit = lead routing decides")
2234
+ .action(run(async (client, opts) => {
2235
+ const name = (opts.name ?? "").trim();
2236
+ if (!name)
2237
+ throw new Error("--name is required");
2238
+ if (name.length > 120)
2239
+ throw new Error("--name must be at most 120 characters");
2240
+ const body = { name };
2241
+ if (opts.defaultTag !== undefined)
2242
+ body.defaultTag = opts.defaultTag;
2243
+ if (opts.source !== undefined)
2244
+ body.source = opts.source;
2245
+ if (opts.assignTo !== undefined)
2246
+ body.assignedTo = uuidArg(opts.assignTo, "--assign-to");
2247
+ return client.post("/api/v1/integrations/wordpress-forms/intakes", body);
2248
+ }));
2249
+ wordpressForms
2250
+ .command("revoke <id>")
2251
+ .description("Revoke an intake address: submissions to it answer 404 from now on. The row is kept (status revoked) for history")
2252
+ .action(run(async (client, id) => client.del(`/api/v1/integrations/wordpress-forms/intakes/${uuidArg(id, "id")}`)));
2253
+ // ---------------------------------------------------------------------------
2214
2254
  // Sequences (one model for Email and SMS since 2026-09-30): steps send saved templates of the sequence's channel a
2215
2255
  // number of days apart inside a send window; a run stops on a reply, a booked meeting, an opt-out, a closed deal or a
2216
2256
  // removal. Provider drip timetables are the `drip-enrollments` group, a different thing.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conduyt",
3
- "version": "1.59.0",
3
+ "version": "1.60.0",
4
4
  "description": "Command-line interface for Conduyt CRM — manage contacts, deals, pipelines, and run insight queries from your terminal.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",