{"_id":"@alphaomega-team/n8n-nodes-cardly","_rev":"3-21e9f1fa25faa5ca6e729d693b78c0b0","name":"@alphaomega-team/n8n-nodes-cardly","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@alphaomega-team/n8n-nodes-cardly","version":"0.1.0","keywords":["n8n-community-node-package","cardly","direct-mail","greeting-cards"],"author":{"name":"Andrew Zweibel","email":"andrew@alphaomegateam.co"},"license":"MIT","_id":"@alphaomega-team/n8n-nodes-cardly@0.1.0","maintainers":[{"name":"andrewmitchell-automations","email":"andrew@alphaomegateam.co"}],"homepage":"https://github.com/alphaomegateam/n8n-nodes-cardly","bugs":{"url":"https://github.com/alphaomegateam/n8n-nodes-cardly/issues"},"n8n":{"nodes":["dist/nodes/Cardly/Cardly.node.js","dist/nodes/Cardly/CardlyTrigger.node.js"],"credentials":["dist/credentials/CardlyApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"77c5e023dbbcf02a0df6c88f8105be9746205333","tarball":"https://registry.npmjs.org/@alphaomega-team/n8n-nodes-cardly/-/n8n-nodes-cardly-0.1.0.tgz","fileCount":38,"integrity":"sha512-TiaMvvo4p7oodwCE8MUcmxZeEJXrYe6wetMIk/lb8fA4sc6yNhVVa1a9KY0hgq7OrZNYazGwYuMCYx2dKMcSsg==","signatures":[{"sig":"MEUCIC392hpnCARmAxj7l2+7dDSyC3N3pWacrzEcdbeGA7zVAiEA8dglihbOqlnVrArjJb70gF7PGXOBiJXX9xu6fx/Y74o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82578},"main":"index.js","engines":{"node":">=18.10"},"gitHead":"95de7f81be80fa27c3725130ee1ae5a85256104e","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","test":"jest","build":"rm -rf dist && tsc && gulp build:icons","clean":"rm -rf dist","lintfix":"eslint nodes credentials package.json --fix","prepublishOnly":"npm run build && eslint -c .eslintrc.prepublish.js nodes credentials package.json"},"_npmUser":{"name":"andrewmitchell-automations","email":"andrew@alphaomegateam.co"},"repository":{"url":"git+https://github.com/alphaomegateam/n8n-nodes-cardly.git","type":"git"},"_npmVersion":"11.10.1","description":"n8n community node for the Cardly API — send physical cards, sync contacts, and react to webhook events.","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jest":"^29.7.0","eslint":"^8.57.0","ts-jest":"^29.2.5","typescript":"^5.5.4","@types/jest":"^29.5.12","@types/node":"^18.19.0","n8n-workflow":"*","@typescript-eslint/parser":"^7.18.0","eslint-plugin-n8n-nodes-base":"^1.16.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-cardly_0.1.0_1783025787156_0.688073960694596","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed — install the unscoped package instead: npm i n8n-nodes-cardly"},"0.2.0":{"name":"@alphaomega-team/n8n-nodes-cardly","version":"0.2.0","keywords":["n8n-community-node-package","cardly","direct-mail","greeting-cards"],"author":{"name":"Andrew Zweibel","email":"andrew@alphaomegateam.co"},"license":"MIT","_id":"@alphaomega-team/n8n-nodes-cardly@0.2.0","maintainers":[{"name":"andrewmitchell-automations","email":"andrew@alphaomegateam.co"}],"homepage":"https://github.com/alphaomegateam/n8n-nodes-cardly","bugs":{"url":"https://github.com/alphaomegateam/n8n-nodes-cardly/issues"},"n8n":{"nodes":["dist/nodes/Cardly/Cardly.node.js","dist/nodes/Cardly/CardlyTrigger.node.js"],"credentials":["dist/credentials/CardlyApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"4ae3c7352c6ffcdee904b632fbc6c425759f270a","tarball":"https://registry.npmjs.org/@alphaomega-team/n8n-nodes-cardly/-/n8n-nodes-cardly-0.2.0.tgz","fileCount":77,"integrity":"sha512-amuI7y16m7X4QLwZ1adNWLeLLbfsee5mjLp2+5rRCOfdPpv+wXZk9OF24Sgc0YmsWZtbic5J9t1UKDQuyVCt6Q==","signatures":[{"sig":"MEQCIEoS2hQHTyqzGiC+W0E74w4D0LBK6KVRejtnaJHhXRFKAiANrD16DHeI0kiFzcMujTNy0atCI/c1PhG6KmMIx0tmeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alphaomega-team%2fn8n-nodes-cardly@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":149722},"main":"index.js","engines":{"node":">=22.14.0"},"gitHead":"a8f29ab6025765286793b3d170eb935142b16828","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","test":"jest","build":"rm -rf dist && tsc && gulp build:icons","clean":"rm -rf dist","lintfix":"eslint nodes credentials package.json --fix","prepare":"npm run build","prepublishOnly":"npm run build && eslint -c .eslintrc.prepublish.js nodes credentials package.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2537b60d-820a-4aa3-8f70-4a53ec81899a"}},"repository":{"url":"git+https://github.com/alphaomegateam/n8n-nodes-cardly.git","type":"git"},"_npmVersion":"11.16.0","description":"n8n community node for the Cardly API — send physical cards, sync contacts, and react to webhook events.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jest":"^29.7.0","eslint":"^8.57.0","ts-jest":"^29.2.5","typescript":"^5.5.4","@types/jest":"^29.5.12","@types/node":"^22.14.0","n8n-workflow":"*","@typescript-eslint/parser":"^7.18.0","eslint-plugin-n8n-nodes-base":"^1.16.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-cardly_0.2.0_1783034676881_0.2657769770769458","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed — install the unscoped package instead: npm i n8n-nodes-cardly"}},"time":{"created":"2026-07-02T20:56:27.009Z","modified":"2026-07-04T15:34:30.652Z","0.1.0":"2026-07-02T20:56:27.278Z","0.2.0":"2026-07-02T23:24:37.017Z"},"bugs":{"url":"https://github.com/alphaomegateam/n8n-nodes-cardly/issues"},"author":{"name":"Andrew Zweibel","email":"andrew@alphaomegateam.co"},"license":"MIT","homepage":"https://github.com/alphaomegateam/n8n-nodes-cardly","keywords":["n8n-community-node-package","cardly","direct-mail","greeting-cards"],"repository":{"url":"git+https://github.com/alphaomegateam/n8n-nodes-cardly.git","type":"git"},"description":"n8n community node for the Cardly API — send physical cards, sync contacts, and react to webhook events.","maintainers":[{"name":"andrewmitchell-automations","email":"andrew@alphaomegateam.co"}],"readme":"# n8n-nodes-cardly\n\n[![CI](https://github.com/alphaomegateam/n8n-nodes-cardly/actions/workflows/ci.yml/badge.svg)](https://github.com/alphaomegateam/n8n-nodes-cardly/actions/workflows/ci.yml)\n\nn8n community node for the [Cardly](https://www.card.ly) API — send physical greeting cards / direct mail, sync contacts, read account data, and react to Cardly webhook events.\n\n## Installation\n\nIn n8n: **Settings → Community Nodes → Install**, enter `@alphaomega-team/n8n-nodes-cardly`.\n\nOr self-hosted CLI (into your n8n custom nodes folder, e.g. `~/.n8n/nodes`):\n```bash\nnpm install @alphaomega-team/n8n-nodes-cardly\n```\n\nSelf-hosted without publishing to npm — install straight from the repo or a local build:\n```bash\ncd ~/.n8n/nodes            # /home/node/.n8n/nodes in Docker; create it if missing\nnpm install alphaomegateam/n8n-nodes-cardly   # from GitHub\n# ...then restart n8n\n```\n\n## Credentials\n\nCreate a **Cardly API** credential with your API key (Cardly portal → API keys). Test-mode keys are prefixed `test_` and validate requests without performing mutations or spending credit.\n\n## Nodes\n\n### Cardly (action)\n- **Order** — Place, Preview, Get, Get Many, Download Preview PDF\n- **Contact** — Create, Sync, Update, Delete, Get, Get Many, Find (into a contact list; pick the list from the dropdown)\n- **Contact List** — Get Many, Get, Create, Delete\n- **Webhook** — Get Many, Get, Create, Update, Delete\n- **Artwork** — Get Many, Get\n- **Reference** — Get Many for Fonts, Writing Styles, Doodles, Templates, Media\n- **Account** — Get Balance, Get Credit History, Get Gift Credit History\n\nCards are sent one recipient per input item; use previous nodes to fan out to multiple recipients.\n\n### Cardly Trigger\nStarts a workflow on subscribed webhook events (order created/sent/refunded, gift-card redeemed, QR scanned, undeliverable, change-of-address, consignment events). The node auto-registers the webhook with Cardly on activation and removes it on deactivation.\n\n## Security notes\n- The webhook `secret` is returned by Cardly only once (at creation) and is stored in n8n's workflow static data (unencrypted, as is standard for community trigger nodes).\n- **Signature verification is on by default.** Cardly signs each postback as `md5(secret + \".\" + timestamp + \".\" + <JSON-encoded data>)` and includes the result in the body's `signatures` array. The Cardly Trigger recomputes this from the stored webhook secret and drops any postback that doesn't match (including postbacks received when no secret is stored — fail-closed). Turn off **Verify Signature** only if you need to accept unverified postbacks.\n\n## Development\n```bash\nnpm install\nnpm run build\nnpm run lint\nnpm test\n```\n\n## Releasing (maintainers)\n\nReleases publish to npm automatically via GitHub Actions using **OIDC trusted publishing** —\nno npm token is stored in GitHub.\n\n### One-time setup\n\n1. The GitHub repository must be **public** (required for automatic build provenance).\n2. On npmjs.com → the `@alphaomega-team/n8n-nodes-cardly` package → **Settings → Trusted Publisher**,\n   add a GitHub Actions publisher:\n   - Organization/user: `alphaomegateam`\n   - Repository: `n8n-nodes-cardly`\n   - Workflow filename: `release.yml`\n   - Allow: `npm publish`\n\n   (CLI equivalent: `npm trust github @alphaomega-team/n8n-nodes-cardly --repo alphaomegateam/n8n-nodes-cardly --file release.yml --allow-publish`.)\n3. (Recommended) Protect `main`: require the `CI` checks to pass and disallow force-pushes.\n\n### Cutting a release\n\n```bash\nnpm version patch        # or minor / major — bumps package.json, commits, and tags vX.Y.Z\ngit push --follow-tags   # pushes the commit and the tag\n```\n\nThe tag push triggers `release.yml`, which verifies the tag matches `package.json`, runs the\ntests, and publishes. **Do not push pre-release tags** (e.g. `v1.0.0-beta.1`) — they would\npublish to the `latest` dist-tag.\n\nAn optional manual approval gate before each publish is available by enabling a `release`\nGitHub Environment (see the commented `environment:` line in `release.yml`).\n","readmeFilename":"README.md"}