{"id":32231128,"url":"https://github.com/esha/posterior","last_synced_at":"2026-04-24T17:03:28.607Z","repository":{"id":11518112,"uuid":"13999551","full_name":"esha/posterior","owner":"esha","description":"Give your backend services intuitive front-end interfaces via hierarchical, extensible configurations.","archived":false,"fork":false,"pushed_at":"2024-06-11T08:49:40.000Z","size":598,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-22T14:37:23.419Z","etag":null,"topics":["ajax","javascript","json","promise","restful","xhr"],"latest_commit_sha":null,"homepage":"https://esha.github.io/posterior/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esha.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-10-30T21:02:34.000Z","updated_at":"2023-04-15T15:28:11.000Z","dependencies_parsed_at":"2022-08-31T02:51:54.277Z","dependency_job_id":null,"html_url":"https://github.com/esha/posterior","commit_stats":null,"previous_names":["esha/jcx"],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/esha/posterior","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esha%2Fposterior","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esha%2Fposterior/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esha%2Fposterior/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esha%2Fposterior/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esha","download_url":"https://codeload.github.com/esha/posterior/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esha%2Fposterior/sbom","scorecard":{"id":382482,"data":{"date":"2025-08-11","repo":{"name":"github.com/esha/posterior","commit":"ed4344e12148189ce1d2975e635a3b78c1243bc2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/2 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"13 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-w5hq-hm5m-4548","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T15:47:56.252Z","repository_id":11518112,"created_at":"2025-08-18T15:47:56.252Z","updated_at":"2025-08-18T15:47:56.252Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32232633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ajax","javascript","json","promise","restful","xhr"],"created_at":"2025-10-22T11:27:52.632Z","updated_at":"2026-04-24T17:03:28.602Z","avatar_url":"https://github.com/esha.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[Posterior][home] Put a nice front on your backend! Posterior gives your remote APIs intuitive, Promise-based, JSON-ready JavaScript interfaces via flexible, declarative, hierarchical configurations.\n\n[home]: http://esha.github.io/posterior\n\nDownload: [posterior.min.js][min] or [posterior.js][full]  \n[NPM][npm]: `npm install posterior`   \n\n\n[![Build Status](https://travis-ci.org/esha/posterior.png?branch=master)](https://travis-ci.org/esha/posterior)\n[![npm version](https://badge.fury.io/js/posterior.svg)](https://badge.fury.io/js/store)\n[![npm](https://img.shields.io/npm/dm/posterior.svg?maxAge=2592000)](https://www.npmjs.com/package/posterior)  \n\n[full]: https://raw.github.com/esha/posterior/master/dist/posterior.js\n[min]: https://raw.github.com/esha/posterior/master/dist/posterior.min.js\n[npm]: https://npmjs.org/package/posterior\n\n### Example\n```javascript\nvar GitHub = new Posterior({\n    url: 'https://api.github.com',\n    load: function() {\n        console.log('Requested:', this.cfg.url);\n    },\n    ESHA: {\n        url: '/repos/esha/{0}',\n        Version: {\n            follows: 'tags_url',\n            then: function(tags) {\n                return tags[0].name;\n            }\n        }\n    }\n}, 'GitHub');\n\nGitHub.ESHA.Version('posterior');\n```\n\n### What Is This?\n\nPosterior is a tool to handle encapsulation and configuration of \"AJAX\" calls. It takes a structured configuration and converts it into a hierarchy of functions that, when called, composes the desired request and response behaviors and returns a Promise. That Promise will resolve (or reject) when all the configured request and response handling has completed.\n\nApart from the basic XHR encapsulation and handling, Posterior provides a number of high level features commonly needed for interacting with remote resources. These include interpolating URLs, waiting for required dependencies to be resolved, throttling request rates, caching, following URLS in linked resources, singleton resources, automatic retry for failed requests, and more. The intent of this encapsulation is to allow client-side developers to keep implementation details of their interactions with remote servers out of their client-side logic. All translation between the data the client requests/receives and the data the server expects/returns can be hidden behind a friendly, Promise-returning function.\n\n### Release History\n* 2014-09-08 [v0.1.4][] (initial)\n* 2014-09-09 [v0.2.3][] (debug mode, preprocess, no global)\n* 2014-09-16 [v0.3.1][] (timeout-\u003eerror, async fix, direct XHR cfg, status mapping)\n* 2014-09-17 [v0.4.0][] (retry options, css activity notification)\n* 2014-09-19 [v0.5.4][] (XHR tests, json cfg shortcut, better structure, safer copy, responseObject property, et al)\n* 2014-09-24 [v0.6.2][] (s/serialize/transformData, s/preprocess/configure, better debug output)\n* 2014-10-13 [v0.7.3][] (support all XHR events, JSON default, resolve/reject promise with response/error, request/responseData handler support)\n* 2015-03-12 [v0.9.3][] (switch to better Promise polyfill, rename to Posterior, support 'parent' property, expose config props with getters)\n* 2015-07-28 [v0.10.1][] (fix retry, cache, and require features)\n* 2015-08-05 [v0.11.0][] (support both ${key} and {key} in URL templates)\n* 2015-08-08 [v0.12.0][] (s/share(d)Result/save(d)Result, and support dynamic link relations via new 'follows' property)\n* 2015-08-13 [v0.13.0][] (upgrade config string filling to also resolve args by index and nested data)\n* 2016-05-18 [v0.14.1][] (support failure listener for non-200 status codes, pass XHR to configured catch functions, don't override specified Accept or Content-Type headers)\n* 2016-05-20 [v0.15.0][] (API.resolve can now support repeated replacements when consuming data, consume array data, and is easier to use as util)\n* 2016-05-23 [v0.16.0][] (add throttle:{key,ms} support)\n* 2017-03-27 [v0.17.0][] (distinguish subfunction from props via capitalization or @, bind then/catch functions to built cfg)\n* 2017-09-12 [v0.18.1][] (s/saveResult/singleton, handle JSON parse errors suppressed by browser, make presence of ```document``` optional)\n* 2017-10-26 [v0.19.3][] (initial TypeScript support, module export support)\n* 2017-11-22 [v0.20.0][] (support property metadata as structured object--not just key prefixes--to be more TypeScript friendly)\n* 2017-12-04 [v0.21.4][] (add 'Children' and 'Properties' subconfigs, since TypeScript can't handle mix of known and unknown keys with typed values)\n* 2018-01-18 [v0.21.5][] (change index.d.ts to match format that seems to be working for store2 and moment.js)\n* 2018-01-19 [v0.21.6][] (misc bug fixes)\n* 2018-02-12 [v0.22.7][] ('capture' debug mode, notable index.d.ts fixes/changes, stop binding all functions to metaCfg context)\n* 2019-11-26 [v0.22.9][] (mostly build infrastructure upgrades)\n\n[v0.1.4]: https://github.com/esha/posterior/tree/0.1.4\n[v0.2.3]: https://github.com/esha/posterior/tree/0.2.3\n[v0.3.1]: https://github.com/esha/posterior/tree/0.3.1\n[v0.4.0]: https://github.com/esha/posterior/tree/0.4.0\n[v0.5.4]: https://github.com/esha/posterior/tree/0.5.4\n[v0.6.2]: https://github.com/esha/posterior/tree/0.6.2\n[v0.7.3]: https://github.com/esha/posterior/tree/0.7.3\n[v0.9.3]: https://github.com/esha/posterior/tree/0.9.3\n[v0.10.1]: https://github.com/esha/posterior/tree/0.10.1\n[v0.11.0]: https://github.com/esha/posterior/tree/0.11.0\n[v0.12.0]: https://github.com/esha/posterior/tree/0.12.0\n[v0.13.0]: https://github.com/esha/posterior/tree/0.13.0\n[v0.14.1]: https://github.com/esha/posterior/tree/0.14.1\n[v0.15.0]: https://github.com/esha/posterior/tree/0.15.0\n[v0.16.0]: https://github.com/esha/posterior/tree/0.16.0\n[v0.17.0]: https://github.com/esha/posterior/tree/0.17.0\n[v0.18.1]: https://github.com/esha/posterior/tree/0.18.1\n[v0.19.3]: https://github.com/esha/posterior/tree/0.19.3\n[v0.20.0]: https://github.com/esha/posterior/tree/0.20.0\n[v0.21.4]: https://github.com/esha/posterior/tree/0.21.4\n[v0.21.5]: https://github.com/esha/posterior/tree/0.21.5\n[v0.21.6]: https://github.com/esha/posterior/tree/0.21.6\n[v0.22.7]: https://github.com/esha/posterior/tree/0.22.7\n[v0.22.9]: https://github.com/esha/posterior/tree/0.22.9\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesha%2Fposterior","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesha%2Fposterior","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesha%2Fposterior/lists"}