{"_id":"@cloudinary/cloud","_rev":"5-0d1da260d78a19d7c213fa057d0c3078","name":"@cloudinary/cloud","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@cloudinary/cloud","version":"0.1.0","keywords":["cloudinary","cloud","ai","agent","cli"],"author":{"name":"Cloudinary"},"license":"MIT","_id":"@cloudinary/cloud@0.1.0","maintainers":[{"name":"const-cloudinary","email":"constantine@cloudinary.com"},{"name":"asi-cloudinary","email":"npm@cloudinary.com"}],"homepage":"https://github.com/cloudinary/cloudinary-cloud#readme","bugs":{"url":"https://github.com/cloudinary/cloudinary-cloud/issues"},"bin":{"cloudinary-cloud":"dist/index.js"},"dist":{"shasum":"a870e88c9191a850aae76ffe2fb7b776e4021531","tarball":"https://registry.npmjs.org/@cloudinary/cloud/-/cloud-0.1.0.tgz","fileCount":47,"integrity":"sha512-mmp+0tO0uyn0bVOa6u0VvsSWTjXW6LVJ1LaIT7wKkRGQd/91dlo/1wl406S2GXBXTGMtGyiV78sn1VlPE2hjkw==","signatures":[{"sig":"MEYCIQDgJVrHYU1rRb1Nbnn34e6wB1YEgX4shdCJt4fRtkbi/gIhAJQHvG10szBqPMfS+Qkb4Fih+IsWoQURrB8ol8jfXpYK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cloudinary%2fcloud@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":80853},"main":"./dist/lib/index.js","type":"module","types":"./dist/lib/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lib/index.d.ts","default":"./dist/lib/index.js"}},"gitHead":"671864b887b742df8e1ac378acb8f464308bb757","scripts":{"dev":"tsc --watch","test":"npm run build && node --test","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run build"},"_npmUser":{"name":"const-cloudinary","email":"constantine@cloudinary.com"},"repository":{"url":"git+https://github.com/cloudinary/cloudinary-cloud.git","type":"git"},"_npmVersion":"12.0.2","description":"One command to get a disposable Cloudinary cloud account — no signup required","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cloud_0.1.0_1785851104397_0.2545255431558342","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cloudinary/cloud","version":"0.1.1","keywords":["cloudinary","cloud","ai","agent","cli"],"author":{"name":"Cloudinary"},"license":"MIT","_id":"@cloudinary/cloud@0.1.1","maintainers":[{"name":"const-cloudinary","email":"constantine@cloudinary.com"},{"name":"asi-cloudinary","email":"npm@cloudinary.com"}],"homepage":"https://github.com/cloudinary/cloudinary-cloud#readme","bugs":{"url":"https://github.com/cloudinary/cloudinary-cloud/issues"},"bin":{"cloudinary-cloud":"dist/index.js"},"dist":{"shasum":"e6b887ebf0c9ff7acab827a0813f64eca2e2405e","tarball":"https://registry.npmjs.org/@cloudinary/cloud/-/cloud-0.1.1.tgz","fileCount":47,"integrity":"sha512-LKGAGVR9N5IEVu0rWE75KjPgY26pbAL5AAMwF7sN1j85e3ADELAA7PyfsmrJhOXgyV1koucf82S6tzPBAhZsWg==","signatures":[{"sig":"MEQCIC6O5In6LX9Rpef5Is3sJyoJMgABzZ7/L4ZfYFo96J2IAiBBeieOBoFuHxtOzVXZgyoQvCmD2pQTpfCTmNPldTeh/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cloudinary%2fcloud@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82254},"main":"./dist/lib/index.js","type":"module","types":"./dist/lib/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lib/index.d.ts","default":"./dist/lib/index.js"}},"gitHead":"7a7311845c21d82a70f8628798ebb32665898e53","scripts":{"dev":"tsc --watch","test":"npm run build && node --test","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f021a3d2-0302-4a23-b832-48ec1c594bd8"}},"repository":{"url":"git+https://github.com/cloudinary/cloudinary-cloud.git","type":"git"},"_npmVersion":"12.0.2","description":"One command to get a disposable Cloudinary cloud account — no signup required","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cloud_0.1.1_1785917789639_0.7972095738903129","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cloudinary/cloud","version":"0.1.2","keywords":["cloudinary","cloud","ai","agent","cli"],"author":{"name":"Cloudinary"},"license":"MIT","_id":"@cloudinary/cloud@0.1.2","maintainers":[{"name":"const-cloudinary","email":"constantine@cloudinary.com"},{"name":"asi-cloudinary","email":"npm@cloudinary.com"}],"homepage":"https://github.com/cloudinary/cloudinary-cloud#readme","bugs":{"url":"https://github.com/cloudinary/cloudinary-cloud/issues"},"bin":{"cloudinary-cloud":"dist/index.js"},"dist":{"shasum":"63a0288fbeef48fe76586d060a39f59dd6295e75","tarball":"https://registry.npmjs.org/@cloudinary/cloud/-/cloud-0.1.2.tgz","fileCount":47,"integrity":"sha512-BYcGvFNtk1hUzI5WdrizWmewg8fGv7h1BM9y/qWyIAS+kliuEtbabHS++pUaeUQPAxwvRH3qK3QQblzHWhu2Rg==","signatures":[{"sig":"MEUCIQCjLkkaYGkaxCFrVfZBPXs+amAMDK5qR2IN798aEH2hIgIgUo/W+O2G7bQAy3io6xtpEFwsx8b/XsjXyQmg4tug1Lg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cloudinary%2fcloud@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89924},"main":"./dist/lib/index.js","type":"module","types":"./dist/lib/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lib/index.d.ts","default":"./dist/lib/index.js"}},"gitHead":"a180773d09ae77ce79d0b06118d95abcd8cce2ba","scripts":{"dev":"tsc --watch","test":"npm run build && node --test","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f021a3d2-0302-4a23-b832-48ec1c594bd8"}},"repository":{"url":"git+https://github.com/cloudinary/cloudinary-cloud.git","type":"git"},"_npmVersion":"12.0.2","description":"One command to get a disposable Cloudinary cloud account — no signup required","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cloud_0.1.2_1785926403730_0.30892682426593665","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cloudinary/cloud","version":"0.1.3","keywords":["cloudinary","cloud","ai","agent","cli"],"author":{"name":"Cloudinary"},"license":"MIT","_id":"@cloudinary/cloud@0.1.3","maintainers":[{"name":"const-cloudinary","email":"constantine@cloudinary.com"},{"name":"asi-cloudinary","email":"npm@cloudinary.com"}],"homepage":"https://github.com/cloudinary/cloudinary-cloud#readme","bugs":{"url":"https://github.com/cloudinary/cloudinary-cloud/issues"},"bin":{"cloudinary-cloud":"dist/index.js"},"dist":{"shasum":"187800777d12180990af1df512d8f36e18d4adc4","tarball":"https://registry.npmjs.org/@cloudinary/cloud/-/cloud-0.1.3.tgz","fileCount":47,"integrity":"sha512-5vATRLt3z8hQzewEAimJ51LVeAydJR3Jz4Z9bEeGIGDWQ0hWDMmvJBzeRAmwnjzYgcbT0I6le9MJecVCoU6rFw==","signatures":[{"sig":"MEYCIQDOqsJgKD62sy7AOfBiSq8Qn/O794mQH05RBLWEuiH/RAIhAO8lCU2agCa/ItyRWBLuNQk2v5vZh2sG9f9tqfuU6qq9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cloudinary%2fcloud@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91620},"main":"./dist/lib/index.js","type":"module","types":"./dist/lib/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lib/index.d.ts","default":"./dist/lib/index.js"}},"gitHead":"c665744bc61f12848b7f2b5e36012712e4995534","scripts":{"dev":"tsc --watch","test":"npm run build && node --test","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f021a3d2-0302-4a23-b832-48ec1c594bd8"}},"repository":{"url":"git+https://github.com/cloudinary/cloudinary-cloud.git","type":"git"},"_npmVersion":"12.0.2","description":"One command to get a disposable Cloudinary cloud account — no signup required","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/cloud_0.1.3_1786021228272_0.9382261702538128","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cloudinary/cloud","version":"0.1.4","description":"One command to get a disposable Cloudinary cloud account — no signup required","type":"module","bin":{"cloudinary-cloud":"dist/index.js"},"main":"./dist/lib/index.js","types":"./dist/lib/index.d.ts","exports":{".":{"types":"./dist/lib/index.d.ts","default":"./dist/lib/index.js"}},"repository":{"type":"git","url":"git+https://github.com/cloudinary/cloudinary-cloud.git"},"bugs":{"url":"https://github.com/cloudinary/cloudinary-cloud/issues"},"homepage":"https://github.com/cloudinary/cloudinary-cloud#readme","scripts":{"build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","dev":"tsc --watch","test":"npm run build && node --test","prepack":"npm run build"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"keywords":["cloudinary","cloud","ai","agent","cli"],"author":{"name":"Cloudinary"},"license":"MIT","engines":{"node":">=20"},"devDependencies":{"@types/node":"^22.10.0","typescript":"^5.7.0"},"gitHead":"ba69220d0a17a9bb23d9498b31981c4793a59f43","_id":"@cloudinary/cloud@0.1.4","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-eja2gLaxT1b2lO2pq17oGbfZrG2ys2KjrPvDjeGCiX0cMvtcQvUdXLrElbhBcqgWMKaO/GBYG+5Lw6QiOkPt4Q==","shasum":"555a93890f7c6c6b9d1d64b8d50f2621e9f61fa1","tarball":"https://registry.npmjs.org/@cloudinary/cloud/-/cloud-0.1.4.tgz","fileCount":47,"unpackedSize":91897,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cloudinary%2fcloud@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHRdbXZhcVKb2D9ZPp9baZKyBGiuTxheFKzqAOFTK6RYAiEA7QYEpOvVovM6hCTW7rFuGx1kI1ssOqqclT2hxq7Dzb8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f021a3d2-0302-4a23-b832-48ec1c594bd8"}},"directories":{},"maintainers":[{"name":"const-cloudinary","email":"constantine@cloudinary.com"},{"name":"asi-cloudinary","email":"npm@cloudinary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cloud_0.1.4_1787752788580_0.0329605811953273"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T13:45:04.226Z","modified":"2026-08-26T13:59:49.057Z","0.1.0":"2026-08-04T13:45:04.558Z","0.1.1":"2026-08-05T08:16:29.857Z","0.1.2":"2026-08-05T10:40:03.865Z","0.1.3":"2026-08-06T13:00:28.455Z","0.1.4":"2026-08-26T13:59:48.728Z"},"bugs":{"url":"https://github.com/cloudinary/cloudinary-cloud/issues"},"author":{"name":"Cloudinary"},"license":"MIT","homepage":"https://github.com/cloudinary/cloudinary-cloud#readme","keywords":["cloudinary","cloud","ai","agent","cli"],"repository":{"type":"git","url":"git+https://github.com/cloudinary/cloudinary-cloud.git"},"description":"One command to get a disposable Cloudinary cloud account — no signup required","maintainers":[{"name":"const-cloudinary","email":"constantine@cloudinary.com"},{"name":"asi-cloudinary","email":"npm@cloudinary.com"}],"readme":"# @cloudinary/cloud\n\n**One command, and your media is live on Cloudinary.**\n\n```bash\nnpx @cloudinary/cloud\n```\n\nProvisions a disposable Cloudinary **cloud account** — no signup, no credentials, no human\nin the loop. Working `CLOUDINARY_URL` credentials land in `./.env`; a claim URL lets a human\nmake the account permanent later (same credentials, assets retained).\n\nBuilt for AI coding agents: unauthenticated, non-interactive, IP-locked delivery,\nTTL-bounded, rate-limited per IP.\n\n## Usage\n\n```bash\ncloudinary-cloud create                      # provision; delivery locked to your own IP\ncloudinary-cloud create --ip 203.0.113.7     # lock delivery to specific viewer IPs (repeatable, max 3)\ncloudinary-cloud create --email me@x.com     # pre-fill the claim page (never verified at creation)\ncloudinary-cloud create --force              # replace an existing CLOUDINARY_URL in ./.env\ncloudinary-cloud create --no-env             # don't touch ./.env — credentials are only printed\ncloudinary-cloud create --json               # raw provisioning response for programmatic use\n```\n\nRunning with no arguments defaults to `create`.\n\n### Output\n\n- **TTY** — human summary; the claim URL is the headline. Never opens a browser.\n- **non-TTY** — greppable `KEY=value` lines (`CLOUD_NAME=…`, `CLAIM_URL=…`, …).\n- **`--json`** — the raw API response plus `env_file` / `env_file_action`.\n\n### Behavior worth knowing\n\n- If `./.env` already contains `CLOUDINARY_URL`, `create` exits 1 **without provisioning**\n  (clouds are rate-limited; don't burn one you won't store). `--force` replaces the line.\n- If the `.env` write fails after provisioning (read-only cwd, CI, clouded runtime), the\n  credentials are **still printed in full** with `ENV_FILE_ACTION=failed` and a warning —\n  a provisioned cloud is never swallowed by a filesystem error.\n- If `.env` isn't covered by `.gitignore` in a git repo, `create` warns after writing.\n- Cloud media delivery is locked at the CDN edge to `delivery_ips`. By default the CLI\n  sends none and the server locks delivery to the address the request came from — the\n  right default when the caller is also the viewer. Explicit `--ip` values are sent\n  verbatim. After creation the CLI checks (best-effort) whether this machine's public IP\n  is in the returned allow-list, and warns with the exact fix if not — the API path and\n  the delivery path can exit from different addresses behind VPNs and NAT pools.\n- The claim URL and expiry are persisted to `.env` too (`CLOUDINARY_CLOUD_CLAIM_URL`,\n  `CLOUDINARY_CLOUD_EXPIRES_AT`), so the claim path survives lost terminal output.\n- Cloud lifetime is server-controlled (no TTL parameter in the API).\n- Unclaimed clouds are reaped at `expires_at`, assets included. Claiming (a human opens\n  `claim_url` and verifies an email) makes the account permanent with the same API key.\n- **Behind a corporate VPN or secure gateway (e.g. Cloudflare WARP)** the API may see the\n  request arriving from a private address and refuse with `delivery_ips_not_public` —\n  the requester's address is always part of the delivery allow-list, so `--ip` cannot\n  avoid it. Re-run from a connection the gateway does not route (pause the VPN for the\n  one command, or use another network or host).\n\n## Library API\n\nThe provisioning client is exported for other tools:\n\n```ts\nimport { provisionCloud, runCreate, REQUESTER_IP_SENTINEL } from '@cloudinary/cloud';\n\nconst account = await provisionCloud({ deliveryIps: [REQUESTER_IP_SENTINEL] });\n```\n\n## Development\n\n```bash\nnpm install\nnpm run build      # compile TypeScript to dist/\nnpm test           # build + node:test (no network; tests own their HTTP stubs)\n```\n\nZero runtime dependencies. Point the CLI at any environment:\n\n```bash\nCLOUDINARY_API_HOST=https://staging.example node dist/index.js create\n```\n\n## API contract\n\nSpeaks `POST /v1_1/provisioning/clouds` (public, unauthenticated, rate limited per IP):\n\n- Request: `delivery_ips` (optional; array of 1–3 public IPs and/or `\"requester_ip\"` —\n  the server always appends the requester's resolved address),\n  `email` (optional, unverified pre-fill). No TTL parameter — lifetime is server-set.\n- Response: `id`, `email`, `expires_at`, `delivery_ips`, `claim_url`, `guidance`, and\n  credentials in `product_environments[0].api_access_keys[]` (`key`/`secret`).\n- Errors: `{ error: { category, code?, message, details? } }` with codes such as\n  `delivery_ips_not_public`, `ip_rate_limit_exceeded`, `global_rate_limit_exceeded`,\n  `agent_registration_disabled`.\n\nNew response fields flow into `--json` automatically; the command surface treats its\nflags as a stable API.\n","readmeFilename":"README.md"}