{"id":21247400,"url":"https://github.com/dimer47/node-ovh-objectstorage","last_synced_at":"2025-07-10T22:32:32.478Z","repository":{"id":46012075,"uuid":"85755908","full_name":"dimer47/node-ovh-objectstorage","owner":"dimer47","description":null,"archived":false,"fork":false,"pushed_at":"2021-12-04T17:11:52.000Z","size":972,"stargazers_count":12,"open_issues_count":4,"forks_count":11,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-01T14:07:26.578Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimer47.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-21T21:35:11.000Z","updated_at":"2024-10-05T08:33:09.000Z","dependencies_parsed_at":"2022-08-02T14:30:24.873Z","dependency_job_id":null,"html_url":"https://github.com/dimer47/node-ovh-objectstorage","commit_stats":{"total_commits":34,"total_committers":7,"mean_commits":4.857142857142857,"dds":0.2941176470588235,"last_synced_commit":"c9b2dfabff8d0fff9148e8b1f247fa03765ba208"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/dimer47/node-ovh-objectstorage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Fnode-ovh-objectstorage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Fnode-ovh-objectstorage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Fnode-ovh-objectstorage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Fnode-ovh-objectstorage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimer47","download_url":"https://codeload.github.com/dimer47/node-ovh-objectstorage/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Fnode-ovh-objectstorage/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263771619,"owners_count":23508956,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-21T02:20:16.577Z","updated_at":"2025-07-10T22:32:32.109Z","avatar_url":"https://github.com/dimer47.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ObjectStorage OVH\n\n![Release : 2.0 ](https://img.shields.io/github/package-json/v/dimer47/node-ovh-objectstorage?color=red\u0026style=flat-square) ![Last update](https://img.shields.io/github/last-commit/dimer47/node-ovh-objectstorage?color=yellow\u0026label=Last%20update\u0026style=flat-square) ![Dependency size](https://img.shields.io/bundlephobia/minzip/node-ovh-objectstorage?color=green\u0026label=dependency%20size\u0026style=flat-square) ![Repo size](https://img.shields.io/github/repo-size/dimer47/node-ovh-objectstorage?style=flat-square) ![Downloads](https://img.shields.io/npm/dt/node-ovh-objectstorage?style=flat-square) ![License](https://img.shields.io/github/license/dimer47/node-ovh-objectstorage?style=flat-square)\n\nSimple library to use OVH Public Cloud Object Storage. \u003cbr\u003e \u003cbr\u003e\nCreate and manage containers (public, private or static), add and manage objects in OVH Public Cloud (OpenStack).\n\n__Based on__  [developer.openstack.org](https://developer.openstack.org/api-ref/object-storage/?expanded=) official\ndocumentation.\n\nA complete JSDoc is\navailable [here](https://htmlpreview.github.io/?https://raw.githubusercontent.com/dimer47/node-ovh-objectstorage/master/doc/index.html)\n.\n\u003cbr\u003e\n\n**⚠️ Warning :** This version introduces `some breakpoints`, if you want to use this version, it's recommended to\nrefactoring all your projects. \u003cbr\u003e\nTo use the previous version (V1), go\non [#v1.0.x branch](https://github.com/dimer47/node-ovh-objectstorage/releases/tag/v1.0.2).\n\n## 🎉 Features\n\n- Get account details and manage metas (create, update, has, get or delete),\n- Create, list, get details or delete containers,\n- Check if object exist in a container,\n- Define metas (create, update, has, get or delete) for container,\n- List files on a container,\n- Import object on container\n- Download or get content of object,\n- Get temporary download link object,\n- Delete all object in containers,\n- Program automatic delete of an object on datetime or after seconds,\n- Manage metas on objects (create, update, has, get or delete).\n\n## 📍 Install via npm\n\n```sh\nnpm install node-ovh-objectstorage --save\n```\n\n## 🧮 Examples :\n\n### Authentification\n\nRequesting a token to make operations on container.\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  username: '******',\n  password: '******',\n  authURL: 'https://auth.cloud.ovh.net/v3/auth',\n  tenantId: '******',\n  region: 'SBG',\n  // key is optional\n  key: \"Temporary key (optional), for generate temporary download link\", \n  // options is optional\n  options: {\n    slugify : true, // true, by default \n    check_exists: true, // true, by default\n  }\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n### Account\n\nAvailable methods :\n\n- **all()** _: Object of account details and list containers (Promise)_\n- **details()** _: Object (Promise)_\n- **containers()** _: Array of each container object (Promise)_\n- **generateKey()** _: Array with key and header response object (Promise)_\n- **metas()**\n    - **create(** container, key, value **)** _: Header response (Promise)_\n    - **create_with_result(** container, key, value **)** _: Boolean (Promise)_\n    - **update(** container, key, value **)** _: Header response (Promise)_\n    - **update_with_result(** container, key, value **)** _: Boolean (Promise)_\n    - **delete(** container, key **)** _: Header response (Promise)_\n    - **delete_with_result(** container, key **)** _: Boolean (Promise)_\n    - **all(** container **)** _: Object of metas (Promise)_\n    - **has(** container, key **)** _: Boolean (Promise)_\n    - **get(** container, key **)** _: String or null (Promise)_\n\n#### Get account details and list containers\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    // account details and list containers\n    await storage.account().all();\n\n    // or only account details\n    await storage.account().details();\n\n    // or only containers list\n    await storage.account().containers();\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Generate key for download file as temporary url\n\nℹ️️ You can define the key directly in the configuration and not generate a key with this method. The key must be in the\nHexadecimal SHA1 format.\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    // account details and list containers\n    let {key, headers} = await storage.account().generateKey();\n    \n    // IMPORTANT : you can save key in the configuration to avoid regenerating it and also avoid losing the temporary links already generated.\n    \n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Meta information of account\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    // list all metas of container\n    await storage.account().metas().all(\"assets\");\n\n    // create a new meta author\n    await storage.account().metas().create(\"assets\", \"author\", \"me\");\n\n    // retrieve value of author meta\n    console.log(await storage.account().metas().get(\"assets\", \"author\"));\n\n    // update value of author meta\n    await storage.account().metas().update(\"assets\", \"author\", 'unknown');\n\n    // if meta author exist on container name \"assets\", remove it\n    if (await storage.account().metas().has(\"assets\", \"author\"))\n      await storage.account().metas().delete(\"assets\", \"author\");\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n### Containers\n\nAvailable methods :\n\n- **create(** container, types, web_content_pages **)** _: Header response (Promise)_\n- **create_with_result(** container, types, web_content_pages **)** _: Boolean_\n- **list(** container **)** _: Object (Promise)_\n- **exist(** container **)** _: Boolean (Promise)_\n- **info(** container **)** _: Header response (Promise)_\n- **delete_objects(** container **)** _: Object (Promise)_\n- **delete_objects_with_result(** container **)** _: Boolean (Promise)_\n- **delete(** container, force=false **)** _: Header response (Promise)_\n- **delete_with_result(** container, force=false **)** _: Boolean (Promise)_\n- **metas()**\n    - **create(** container, key, value **)** _: Header response (Promise)_\n    - **create_with_result(** container, key, value **)** _: Boolean (Promise)_\n    - **update(** container, key, value **)** _: Header response (Promise)_\n    - **update_with_result(** container, key, value **)** _: Boolean (Promise)_\n    - **delete(** container, key **)** _: Header response (Promise)_\n    - **delete_with_result(** container, key **)** _: Boolean (Promise)_\n    - **all(** container **)** _: Object of metas (Promise)_\n    - **has(** container, key **)** _: Boolean (Promise)_\n    - **get(** container, key **)** _: String or null (Promise)_\n\n#### Create\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.containers().create(\"private-files\");\n    await storage.containers().create(\"assets\", \"static\", {\n      index: 'index.html',\n      css: 'style.css',\n      error: 'error.html',\n    });\n    // or with boolean result\n    console.log(await storage.containers().create_with_result(\"images\", \"public\"));\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Delete\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.containers().delete(\"assets\");\n    // or with boolean result\n    console.log(await storage.containers().delete_with_result(\"images\"));\n\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Delete (container and all objects inside)\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.containers().delete(\"assets\", true);\n    // or with boolean result\n    console.log(await storage.containers().delete_with_result(\"images\", true));\n\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Remove all object in container\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.containers().delete_objects(\"assets\");\n    // or with boolean result\n    console.log(await storage.containers().delete_objects_with_result(\"images\"));\n\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### List all object in container\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    let objects = await storage.containers().list(\"assets\");\n    console.log(objects);\n  } catch (e) {\n    // throw e\n  }\n})();\n\n```\n\n#### Check if container exist\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    if (await storage.containers().exist(\"assets\"))\n      console.log(\"Assets container exist !\");\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Details about container\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    let details = await storage.containers().info(\"assets\");\n    console.log(details);\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Meta information of container\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    // list all metas of container\n    await storage.containers().metas().all(\"assets\");\n\n    // create a new meta author\n    await storage.containers().metas().create(\"assets\", \"author\", \"me\");\n\n    // retrieve value of author meta\n    console.log(await storage.containers().metas().get(\"assets\", \"author\"));\n\n    // update value of author meta\n    await storage.containers().metas().update(\"assets\", \"author\", 'unknown');\n\n    // if meta author exist on container name \"assets\", remove it\n    if (await storage.containers().metas().has(\"assets\", \"author\"))\n      await storage.containers().metas().delete(\"assets\", \"author\");\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n### Objects\n\n- **save(** file, path **)** _: Header response (Promise)_\n- **save_with_result(** file, path **)** _: Header response (Promise)_\n- **set(** file, path **)** _: Header response (Promise)_\n- **set_with_result(** file, path **)** _: Header response (Promise)_\n- **exist(** path **)** _: Boolean (Promise)_\n- **info(** path **)** _: Header response (Promise)_\n- **get(** path **)** _: Object with content and header response (Promise)_\n- **getTempLink(** path, validityDurationInSeconds, checkContainer = true **)** _: Temporary download URL (Promise)_\n- **download(** path, pathLocal **)** _: Boolean (Promise)_\n- **copy(** pathOrigin, pathToPaste **)** _: Header response (Promise)_\n- **copy_with_result()** _: Boolean (Promise)_\n- **delete(** path, checkContainer = true **)** _: Header response (Promise)_\n- **delete_with_result(** path, checkContainer = true **)** _: Boolean (Promise)_\n- **deletes(** path, checkContainer = true **)** _: Header response of all deleted files (Promise)_\n- **deletes_with_result(** path, checkContainer = true **)** _: Boolean (Promise)_\n- **expire_at(** path, expire_date **)** _: Header response (Promise)_\n- **expire_at_with_result(** path, expire_date **)** _: Boolean (Promise)_\n- **expire_after(** path, delete_seconds **)** _: Header response (Promise)_\n- **expire_after_with_result(** path, delete_seconds **)** _: Boolean (Promise)_\n- **metas()**\n    - **create(** path, key, value **)** _: Header response (Promise)_\n    - **create_with_result(** path, key, value **)** _: Boolean (Promise)_\n    - **update(** path, key, value **)** _: Header response (Promise)_\n    - **update_with_result(** path, key, value **)** _: Boolean (Promise)_\n    - **delete(** path, key **)** _: Header response (Promise)_\n    - **delete_with_result(** path, key **)** _: Boolean (Promise)_\n    - **all(** path **)** _: Object of metas (Promise)_\n    - **has(** path, key **)** _: Boolean (Promise)_\n    - **get(** path, key **)** _: String or null (Promise)_\n\n#### Download object\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.objects().download(\"/assets/IMG_1145.jpg\", \"./IMG_1145.jpg\")\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Get object content\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    let rqt = await storage.objects().get(\"/assets/IMG_1145.jpg\");\n    console.log(rqt.content);\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Get temporary download object url\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.account().generateKey(); // if you have not defined a key in the configurations\n\n    let url = await storage.objects().getTempLink(\"/assets/IMG_1145.jpg\", 60 * 60); // expire after 1h\n    console.log(url);\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Add object\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.objects().save(\"./IMG_1145.jpg\", \"/assets/IMG_1145.jpg\")\n    // or with boolean result\n    console.log(await storage.objects().save_with_result(\"./IMG_1145.jpg\", \"/assets/IMG_1145.jpg\"))\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Clone object\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.objects().copy(\"/assets/IMG_1145.jpg\", \"/assets/IMG_1145_2.jpg\")\n    // or with boolean result\n    console.log(await storage.objects().copy_with_result(\"/assets/IMG_1145.jpg\", \"/assets/IMG_1145_2.jpg\"))\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Delete object\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.objects().delete(\"/assets/IMG_1145_2.jpg\")\n    // or with boolean result\n    console.log(await storage.objects().delete_with_result(\"/assets/IMG_1145_2.jpg\"))\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Details about object\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    let details = await storage.objects().info(\"/assets/IMG_1145.jpg\")\n    console.log(details);\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Programming object expiration at datetime (need momentjs)\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.objects().expire_at(\"/assets/IMG_1145.jpg\", moment().add(\"7\", \"days\"))\n    // or with boolean result\n    console.log(await storage.objects().expire_at_with_result(\"/assets/IMG_1145.jpg\", moment().add(\"7\", \"days\")));\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Programming object expiration after seconds\n\n```javascript\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    await storage.objects().expire_after(\"/assets/IMG_1145.jpg\", 180)\n    // or with boolean result\n    console.log(await storage.objects().expire_after_with_result(\"/assets/IMG_1145.jpg\", 180));\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n#### Meta information of container\n\n```javascript\nvar OVHStorage = require('node-ovh-objectstorage');\nvar config = {\n  ...\n};\n\n(async () =\u003e {\n  try {\n    let storage = new OVHStorage(config);\n    await storage.connection();\n\n    // list all metas of object\n    await storage.objects().metas().all(\"/assets/IMG_1145.jpg\");\n\n    // create a new meta author\n    await storage.objects().metas().create(\"/assets/IMG_1145.jpg\", \"author\", \"me\");\n\n    // retrieve value of author meta\n    console.log(await storage.objects().metas().get(\"/assets/IMG_1145.jpg\", \"author\"));\n\n    // update value of author meta\n    await storage.objects().metas().update(\"/assets/IMG_1145.jpg\", \"author\", 'unknown');\n\n    // if meta author exist on object, remove it\n    if (await storage.objects().metas().has(\"/assets/IMG_1145.jpg\", \"author\"))\n      await storage.objects().metas().delete(\"/assets/IMG_1145.jpg\", \"author\");\n  } catch (e) {\n    // throw e\n  }\n})();\n```\n\n## 🧾 License\n\n[Creative Commons Attribution Share Alike 4.0 International](LICENSE)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimer47%2Fnode-ovh-objectstorage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimer47%2Fnode-ovh-objectstorage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimer47%2Fnode-ovh-objectstorage/lists"}