{"id":23091323,"url":"https://github.com/neolivz/redux-async-action-reducer","last_synced_at":"2026-04-17T02:33:21.785Z","repository":{"id":57350239,"uuid":"90085952","full_name":"neolivz/redux-async-action-reducer","owner":"neolivz","description":"Simple Action Reducer creator for redux","archived":false,"fork":false,"pushed_at":"2026-01-29T13:30:10.000Z","size":188,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-30T03:25:27.666Z","etag":null,"topics":["action","action-creator","reducer","reducer-creation","redux"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/neolivz.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,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-05-02T23:03:41.000Z","updated_at":"2017-07-09T04:58:38.000Z","dependencies_parsed_at":"2024-01-02T01:13:18.325Z","dependency_job_id":"71186a47-82c2-493c-99b0-8e4b97af46f5","html_url":"https://github.com/neolivz/redux-async-action-reducer","commit_stats":{"total_commits":35,"total_committers":2,"mean_commits":17.5,"dds":0.4,"last_synced_commit":"fcf20b59285926612f14ff4d58ab8cfb0c11ac6b"},"previous_names":["neolivz/redux-thunk-action-reducer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/neolivz/redux-async-action-reducer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neolivz%2Fredux-async-action-reducer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neolivz%2Fredux-async-action-reducer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neolivz%2Fredux-async-action-reducer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neolivz%2Fredux-async-action-reducer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neolivz","download_url":"https://codeload.github.com/neolivz/redux-async-action-reducer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neolivz%2Fredux-async-action-reducer/sbom","scorecard":{"id":143228,"data":{"date":"2025-08-04","repo":{"name":"github.com/neolivz/redux-async-action-reducer","commit":"fcf20b59285926612f14ff4d58ab8cfb0c11ac6b"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":1.3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"59 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-9vvw-cc9w-f27h","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-h6ch-v84p-w6p9","Warn: Project is vulnerable to: GHSA-qrmc-fj45-qfc2","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-q42p-pg8m-cqh6","Warn: Project is vulnerable to: GHSA-w457-6q6x-cgp9","Warn: Project is vulnerable to: GHSA-62gr-4qp9-h98f","Warn: Project is vulnerable to: GHSA-f52g-6jhx-586p","Warn: Project is vulnerable to: GHSA-2cf5-4w76-r9qv","Warn: Project is vulnerable to: GHSA-3cqr-58rm-57f8","Warn: Project is vulnerable to: GHSA-g9r4-xpmj-mj65","Warn: Project is vulnerable to: GHSA-q2c6-c6pm-g3gh","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-44pw-h2cw-w3vq","Warn: Project is vulnerable to: GHSA-jp4x-w63m-7wgm","Warn: Project is vulnerable to: GHSA-c429-5p7v-vgjp","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-2pr6-76vf-7546","Warn: Project is vulnerable to: GHSA-8j8c-7jfh-h6hx","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-fvqr-27wr-82fm","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-f9cm-qmx5-m98h","Warn: Project is vulnerable to: GHSA-7wpw-2hjm-89gp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-6394-6h9h-cfjg","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-6g33-f262-xjp4","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-2m39-62fm-q8r3","Warn: Project is vulnerable to: GHSA-mf6x-7mm4-x2g7","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-g7q5-pjjr-gqvp","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T08:41:27.062Z","repository_id":57350239,"created_at":"2025-08-16T08:41:27.062Z","updated_at":"2025-08-16T08:41:27.062Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31912492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["action","action-creator","reducer","reducer-creation","redux"],"created_at":"2024-12-16T21:18:06.874Z","updated_at":"2026-04-17T02:33:21.730Z","avatar_url":"https://github.com/neolivz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# redux-thunk-action-reducer\n\n## Introduction\nSimple redux action creation and reducer wrapper that makes creating and handling asynchronous and synchronous wrapper easier. It's completely written with type safety in mind, with typescript.\n\n## Actions/ Action Creator\nAction creator can either create either synchronous or asynchronous. For more general information about actions refer to [redux docs](http://redux.js.org/docs/basics/Actions.html)\n\n### Asynchronous Action\nAsynchronous Action are designed to work with libraries like redux-thunk or redux-saga.\n\nTraditional way of creating asynchronous action\n```typescript\nimport { api } from '../api'\nimport { ACTION_TYPE, STARTED, SUCCEEDED, FAILURE } from '../constants'\n\nconst action = (dispatch) =\u003e {\n\t(request) =\u003e {\n\t\tdispatch({ type: ACTION_TYPE, status: STARTED, request })\n\t\tapi().then((response) =\u003e {\n\t\t\tdispatch({ type: ACTION_TYPE, status: SUCCEEDED, request, response})\n\t\t}).catch((error)=\u003e{\n\t\t\tdispatch({ type: ACTION_TYPE, status: FAILURE, request, error})\n\t\t})\n\t}\n}\n```\ncan be replaced with single line (or two lines)\n```typescript\nimport { createAsyncAction } from 'redux-async-action-reducer'\nimport { api } from '../api'\nimport { ACTION_TYPE } from '../constants'\n\n\nconst action = createAsyncAction(ACTION_TYPE, api)\n//with typescript\nconst action = createAsyncAction\u003cACTION_TYPE, ApiResponseObj\u003e(ACTION_TYPE, api)\n```\n\n### Synchronous Action\nA synchronous action instantly returns an Action object (an object with type attribute and a string type value)\n\nTraditional way of creating synchronous action\n```typescript\nimport { ACTION_TYPE } from '../constants'\nconst action = (request) =\u003e ({\n\ttype: ACTION_TYPE, request // payload is most common used key.\n})\n```\n\ncan be replaced with single line\n```typescript\nimport { createSimpleAction } from 'redux-async-action-reducer'\nimport { ACTION_TYPE } from '../constants'\n\nconst action = createSimpleAction(ACTION_TYPE);\n//with typescript\nconst action = createSimpleAction\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE);\n\n```\n** Use  of request and response is convenient and consistent across synchronous and asynchronous actions **\n\n## Reducers\nReducer can also be either synchronous or asynchronous. Asynchronous reducer need an asynchronous action while synchronous reducer can act up on both asynchronous and synchronous actions. For more general information about reducers refer to [redux docs](http://redux.js.org/docs/basics/Reducers.html)\n\nTraditional way of creating a reducer is using switch cases\n```typescript\nconst reducer  = (state = initialState, action){\n\tswitch(action.type){\n\t\t//All synchronous and asynchronous reducers goes here\n\t}\n}\n```\nwould be replaced with something like this\n```typescript\nimport { createReducer } from 'redux-async-action-reducer';\nconst reducer = createReducer(initialState,\n  [/*list of synchronous reducer*/], [/*list of asynchronous reducers*/]\n)\n```\n\n\n*NOTE: As a side effect a synchronous reducer acting upon asynchronous action will be called 3 times. Future version will support synchronous action status reducer*\n\n\n### Asynchronous Reducer\nTraditional way of creating asynchronous reducer\n```typescript\nimport { ACTION_TYPE, STARTED, SUCCEEDED, FAILURE } from '../constants'\n\nconst actionTypeReducer = (state, action){\n\tif(action.status === STARTED){\n\t\t{...state, working: true, failure: false, completed: false, started: new Date(), finished: undefined}\n\t} else if(action.status === SUCCEEDED){\n\t\t{...state, working: false, failure: false, completed: true, store: action.response}\n\t} else if( action.status === FAILURE){\n\t\t{...state, working: false, failure: true, completed: false, finished: new Date()}\n\t}\n\treturn state\n}\nconst reducer  = (state = initialState, action) =\u003e {\n\tswitch(action.type){\n\t\tcase 'ACTION_TYPE': actionTypeReducer(state, action)\n\t\t//\n\t\t// more switch cases for reducers\n\t\t//\n\t}\n}\n```\ncan be replaced with\n```typescript\nimport { createReducer, asyncReducer } from 'redux-async-action-reducer';\n\nimport { ACTION_TYPE } from '../constants'\nconst reducer = createReducer(initialState, [/*synchronous reducers*/],\n  [asyncReducer(ACTION_TYPE), /*more reducers*/]\n)\n\n```\n\n\n\n\n### Synchronous Reducer\nSynchronous reducer does act upon \nTraditional way of creating synchronous reducer\n```typescript\nimport { ACTION_TYPE } from '../constants'\n\nconst actionTypeReducer = (state, action){\n\treturn {...state, request: action.request}\n}\nconst reducer  = (state = initialState, action) =\u003e {\n\tswitch(action.type){\n\t\tcase 'ACTION_TYPE': actionTypeReducer(state, action)\n\t\t//\n\t\t// more switch cases for reducers\n\t\t//\n\t}\n}\n```\ncan be replaced with \n```typescript\nimport { createReducer, syncReducer } from 'redux-async-action-reducer';\nimport { ACTION_TYPE } from '../constants'\n\nconst reducer = createReducer(initialState,\n  [syncReducer(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n```\n\n\n## Array Reducers\nWhen a store is an array object we can use array reducer. It supports CLUD (Load instead of Read) apis. Both synchronous and asynchronous support full CLUD operations on array reducers.\n\n## Create \nAdding an element into the array \n\n### Synchronous \n```typescript\nimport { arraySyncCreateReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arraySyncCreateReducer\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This will add request object into array\n```\n### Asynchronous \n```typescript\nimport { arrayAsyncCreateReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arrayAsyncCreateReducer\u003cACTION_TYPE, RequestType, ResponseType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This will add response object into array\n```\n*NOTE: If your create API does not give response object which need to be added, change the response object to what ever you want to add*\n\n## Read/Load\nLoad all elements into the array\n### Synchronous \n```typescript\nimport { arraySyncLoadReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arraySyncLoadReducer\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This will load RequestType[] into store\n```\n### Asynchronous \n```typescript\nimport { arrayAsyncLoadReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arrayAsyncLoadReducer\u003cACTION_TYPE, RequestType, ResponseType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This will load ResponseType[] into store\n```\n\n## Update\nLoad all elements into the array\n### Synchronous \n```typescript\nimport { arraySyncUpdateReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arraySyncUpdateReducer\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This will need a request array with 2 elements with first element original object and second object what the values to be updated to \n//eg. the action would look something like this\nimport { createSimpleAction } from 'redux-async-action-reducer'\nconst action = createSimpleAction\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE);\nconst updateArray: RequestType[] = [originalObject, updatedObject]\naction(updateArray) //store.dispatch(action(updateArray))\n\n```\n### Asynchronous \n```typescript\nimport { arrayAsyncUpdateReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arrayAsyncLoadReducer\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This expect action to dispatch request with an array [originalObject, updatedObject] while response will give you the updatedObject. \nimport { createAsyncAction } from 'redux-async-action-reducer'\nimport { api } from '../api'\nconst action = createAsyncAction\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE, api);\nconst updateArray: RequestType[] = [originalObject, updatedObject]\naction(updateArray) //store.dispatch(action(updateArray))\n```\n\n\n## Delete\nLoad all elements into the array\n### Synchronous \n```typescript\nimport { arraySyncDeleteReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arraySyncDeleteReducer\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// This will load RequestType[] into store\n```\n### Asynchronous \n```typescript\nimport { arrayAsyncDeleteReducer } from 'redux-async-action-reducer'\n\nconst reducer = createReducer(initialState,\n  [arrayAsyncDeleteReducer\u003cACTION_TYPE, RequestType\u003e(ACTION_TYPE), /*more reducers*/],[/*asynchronous reducers if needed*/]\n)\n// Action need to be invoked with request object of the element which needs to be removed from the array\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneolivz%2Fredux-async-action-reducer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneolivz%2Fredux-async-action-reducer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneolivz%2Fredux-async-action-reducer/lists"}