{"id":17673632,"url":"https://github.com/codetheweb/anylist","last_synced_at":"2025-04-09T15:08:31.992Z","repository":{"id":37840264,"uuid":"237238046","full_name":"codetheweb/anylist","owner":"codetheweb","description":"📋 a wrapper for AnyList's API (unoffical, reverse engineered)","archived":false,"fork":false,"pushed_at":"2025-01-02T22:18:12.000Z","size":1682,"stargazers_count":104,"open_issues_count":7,"forks_count":24,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-04-09T15:08:24.749Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codetheweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-01-30T15:04:22.000Z","updated_at":"2025-04-07T14:17:29.000Z","dependencies_parsed_at":"2024-03-22T02:23:34.683Z","dependency_job_id":"eecf60e1-6df0-4941-bfe4-8d944b1ec16f","html_url":"https://github.com/codetheweb/anylist","commit_stats":{"total_commits":17,"total_committers":5,"mean_commits":3.4,"dds":0.5294117647058824,"last_synced_commit":"6fbfea14dda24cf9468d852c8617a8093fd7291e"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codetheweb%2Fanylist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codetheweb%2Fanylist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codetheweb%2Fanylist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codetheweb%2Fanylist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codetheweb","download_url":"https://codeload.github.com/codetheweb/anylist/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248055282,"owners_count":21040157,"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-10-24T05:42:41.370Z","updated_at":"2025-04-09T15:08:31.965Z","avatar_url":"https://github.com/codetheweb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📋 AnyList\n\n![node-current](https://img.shields.io/node/v/anylist)\n\n## a wrapper for AnyList's API (unofficial, reverse engineered)\n\n### Install\n\n`npm i anylist`\n\n### Getting Started\n\nHere's an example script (replace `email` and `password` with your credentials):\n\n```javascript\nconst AnyList = require('anylist');\n\nconst any = new AnyList({email: 'hi@here.com', password: 'password'});\n\nany.on('lists-update', lists =\u003e {\n  console.log('Lists were updated!');\n});\n\nany.login().then(async () =\u003e {\n  await any.getLists();\n\n  // Add new item to the Walmart list\n  const walmart = any.getListByName('Walmart');\n\n  let chips = any.createItem({name: 'Chips'});\n\n  chips = await walmart.addItem(chips)\n\n  // Check off added item\n  chips.checked = true;\n  // And change the quantity\n  chips.quantity = '2';\n  // Save updated item\n  await chips.save();\n\n  // Delete item\n  await walmart.removeItem(chips);\n\n  any.teardown();\n});\n```\n\n### Getting Started with Recipes\n\n```javascript\nconst AnyList = require('anylist');\n\nconst any = new AnyList({email: 'hi@here.com', password: 'password'});\n\nany.login().then(async () =\u003e {\n    const recipeName = 'Congee recipe';\n    const testRecipe = await any.createRecipe(\n        {\n            name: recipeName,\n            note: 'this is a test note',\n            preparationSteps: ['# heading 1', 'this is preparation step 1'],\n            servings: '2 servings as main dish',\n            sourceName: 'serious eats',\n            sourceUrl: 'https://seriouseats.com',\n            scaleFactor: 1,\n            rating: 5,\n            ingredients: [{\n                rawIngredient: '1 garlic, chopped',\n                name: 'garlic',\n                quantity: '1',\n                note: 'chopped'\n            }],\n            nutritionalInfo: 'this is nutritional info',\n            cookTime: 5 * 60, // seconds\n            prepTime: 5 * 60, // seconds\n            creationTimestamp: Date.now() / 1000,\n            timestamp: Date.now() / 1000\n        }\n    );\n\n\n    // Save test recipe\n    await testRecipe.save();\n\n    const collection = any.createRecipeCollection({ name: 'ONLINE RECIPES' })\n\n    await collection.save();\n\n    await collection.addRecipe(testRecipe.identifier);\n\n    await collection.removeRecipe(testRecipe.identifier);\n\n    // clean up / delete test recipe collection\n    await collection.delete();\n\n    // cleanup / delete test recipe\n    await testRecipe.delete();\n\n\n    any.teardown();\n});\n```\n\n\n### Persistent Credentials Storage\nBy default, the client ID and authentications tokens are encrypted with AES-256 encryption using your account password and then stored to disk. The default storage location is the `.anylist_credentials` file in the user home directory. If you wish to change the storage location, set the `credentialsFile` parameter of the `AnyList` constructor to the desired path. If you wish to disable persistent credentials storage, set the `credentialsFile` parameter to `null`.\n\n\n### Notes/Tips\n\n- There is **much** more functionality in the AnyList API that is not captured in this package, I just implemented the functions that I would be using. If there is functionality missing that you want, please open a PR and I'm happy to merge it in.\n  - (This means that you can't currently add/remove/update lists.)\n- When adding new items, you should reuse existing, checked-off items if possible like the official clients do. Search the list by the item name with `list.getItemByName('item-name')` to see if it exists before adding a new instance.\n\n### 📖 Docs\n\n[Documentation](https://codetheweb.github.io/anylist/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodetheweb%2Fanylist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodetheweb%2Fanylist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodetheweb%2Fanylist/lists"}