{"_id":"guard-timeout","_rev":"481451","name":"guard-timeout","description":"Guard against sleep mode timeouts firing on wake","dist-tags":{"latest":"2.0.0"},"maintainers":[{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"}],"time":{"modified":"2021-08-05T09:39:01.000Z","created":"2020-02-21T17:29:07.166Z","2.0.0":"2020-03-18T13:43:42.813Z","1.0.2":"2020-03-03T19:46:43.000Z","1.0.1":"2020-03-02T17:14:55.022Z","1.0.0":"2020-02-21T17:29:07.166Z"},"users":{},"author":{"name":"David Mark Clements","url":"@davidmarkclem"},"repository":{"type":"git","url":"git+https://github.com/davidmarkclements/guard-timeout.git"},"versions":{"2.0.0":{"name":"guard-timeout","version":"2.0.0","description":"Guard against sleep mode timeouts firing on wake","main":"index.js","browser":{"util":"./util-shim.js"},"scripts":{"test":"tape test/*","btest":"airtap --local test","cov":"npm test -- --coverage-report=html","lint":"standard","ci":"npm run lint && npm test"},"keywords":["timeout","safe","sleep","hibernate"],"author":{"name":"David Mark Clements","url":"@davidmarkclem"},"license":"MIT","engineStrict":true,"engines":{"node":">=10"},"devDependencies":{"airtap":"^3.0.0","atomic-sleep":"^1.0.0","standard":"^14.3.1","tape":"^4.13.0"},"repository":{"type":"git","url":"git+https://github.com/davidmarkclements/guard-timeout.git"},"bugs":{"url":"https://github.com/davidmarkclements/guard-timeout/issues"},"homepage":"https://github.com/davidmarkclements/guard-timeout#readme","gitHead":"cef8ed8828c6270dffc41e4e966c72369ac4fc02","_id":"guard-timeout@2.0.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"shasum":"7f8f1f6d09bdeb6d0fee4cbd743d593c14d7d78a","size":3824,"noattachment":false,"key":"/guard-timeout/-/guard-timeout-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/guard-timeout/download/guard-timeout-2.0.0.tgz"},"maintainers":[{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"}],"_npmUser":{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/guard-timeout_2.0.0_1584539022699_0.2789808994198222"},"_hasShrinkwrap":false,"publish_time":1584539022813,"_cnpm_publish_time":1584539022813},"1.0.2":{"name":"guard-timeout","version":"1.0.2","description":"Guard against sleep mode timeouts firing on wake","main":"index.js","browser":{"util":"./util-shim.js"},"scripts":{"test":"node test","btest":"airtap --local test.js","cov":"npm test -- --coverage-report=html","lint":"standard","ci":"npm run lint && npm test"},"keywords":["timeout","safe","sleep","hibernate"],"author":{"name":"David Mark Clements","url":"@davidmarkclem"},"license":"MIT","engineStrict":true,"engines":{"node":">=10"},"devDependencies":{"airtap":"^3.0.0","standard":"^14.3.1","tape":"^4.13.0"},"repository":{"type":"git","url":"git+https://github.com/davidmarkclements/guard-timeout.git"},"bugs":{"url":"https://github.com/davidmarkclements/guard-timeout/issues"},"homepage":"https://github.com/davidmarkclements/guard-timeout#readme","gitHead":"3843b913518e944549bddb4104244d3f210588b9","_id":"guard-timeout@1.0.2","_nodeVersion":"12.14.0","_npmVersion":"6.13.4","dist":{"shasum":"74f04554d59c98be32b6242c7e7172a9092bdede","size":4143,"noattachment":false,"key":"/guard-timeout/-/guard-timeout-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/guard-timeout/download/guard-timeout-1.0.2.tgz"},"maintainers":[{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"}],"_npmUser":{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/guard-timeout_1.0.2_1583264802873_0.08578602958778392"},"_hasShrinkwrap":false,"publish_time":1583264803000,"_cnpm_publish_time":1583264803000},"1.0.1":{"name":"guard-timeout","version":"1.0.1","description":"Guard against sleep mode timeouts firing on wake","main":"index.js","browser":{"util":"./util-shim.js"},"scripts":{"test":"node test","btest":"airtap --local test.js","cov":"npm test -- --coverage-report=html","lint":"standard","ci":"npm run lint && npm test"},"keywords":["timeout","safe","sleep","hibernate"],"author":{"name":"David Mark Clements","url":"@davidmarkclem"},"license":"MIT","engineStrict":true,"engines":{"node":">=10"},"devDependencies":{"airtap":"^3.0.0","standard":"^14.3.1","tape":"^4.13.0"},"repository":{"type":"git","url":"git+https://github.com/davidmarkclements/guard-timeout.git"},"bugs":{"url":"https://github.com/davidmarkclements/guard-timeout/issues"},"homepage":"https://github.com/davidmarkclements/guard-timeout#readme","gitHead":"7934551369342d7ad63cb9c12b6f0f7a6cc9a6f9","_id":"guard-timeout@1.0.1","_nodeVersion":"12.14.0","_npmVersion":"6.13.4","dist":{"shasum":"3f45490a49fbb3452ced3b39287c493d3d9d40fc","size":4161,"noattachment":false,"key":"/guard-timeout/-/guard-timeout-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/guard-timeout/download/guard-timeout-1.0.1.tgz"},"maintainers":[{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"}],"_npmUser":{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/guard-timeout_1.0.1_1583169294866_0.18918230468616715"},"_hasShrinkwrap":false,"publish_time":1583169295022,"_cnpm_publish_time":1583169295022},"1.0.0":{"name":"guard-timeout","version":"1.0.0","description":"Guard against sleep mode timeouts firing on wake","main":"index.js","scripts":{"test":"tap -R classic","cov":"npm test -- --coverage-report=html","lint":"standard","ci":"npm run lint && npm test"},"keywords":["timeout","safe","sleep","hibernate"],"author":{"name":"David Mark Clements","url":"@davidmarkclem"},"license":"MIT","engineStrict":true,"engines":{"node":">=10"},"devDependencies":{"tap":"^14.10.6"},"repository":{"type":"git","url":"git+https://github.com/davidmarkclements/guard-timeout.git"},"bugs":{"url":"https://github.com/davidmarkclements/guard-timeout/issues"},"homepage":"https://github.com/davidmarkclements/guard-timeout#readme","gitHead":"49763f1896b117a9031fd5a3a6e011e1a530ea79","_id":"guard-timeout@1.0.0","_nodeVersion":"12.14.0","_npmVersion":"6.13.4","dist":{"shasum":"6897750526ec45800dde9ed0864e21fc188d85a8","size":3656,"noattachment":false,"key":"/guard-timeout/-/guard-timeout-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/guard-timeout/download/guard-timeout-1.0.0.tgz"},"maintainers":[{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"}],"_npmUser":{"name":"davidmarkclements","email":"huperekchuno@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/guard-timeout_1.0.0_1582306147058_0.9239583860859539"},"_hasShrinkwrap":false,"publish_time":1582306147166,"_cnpm_publish_time":1582306147166}},"readme":"# guard-timeout\n\n> Guard against sleep mode timeouts firing on wake\n\n## About\n\nIf a process goes into a sleep mode (for instance a laptop hibernates, or a service is put into inspect mode) then timeouts may trigger on wake. Depending on your use case (think distributed systems) you might not want to trigger a timeout if process uptime hasn't actually occurred in that period. \n\nThe `guard-timeout` module will check if there is a significant lag (default 1s) between when the timeout \nwas scheduled to fire and when it actually fired. \n\n\n## Install\n\n```sh\n$ npm i guard-timeout\n```\n\n## Usage\n\n```js\nconst setTimeout = require('guard-timeout')\n\n// if the timeout is 1 second late, \n// it will be reschedule for another 20 minutes\n\nsetTimeout(\n  () => { console.log('do something') }, \n  1.2e+6 // 20 minutes\n)\n```\n\n## Advanced Usage\n\nConfigure your own safe timeout: \n\n```js\nconst setTimeout = require('guard-timeout').create({\n  lagMs: 60 * 1000 // 1 minute lag\n})\n\n// if the timeout is 1 minute late, \n// it will be reschedule for another 20 minutes\n\nsetTimeout(\n  () => { console.log('do something') }, \n  1.2e+6 // 20 minutes\n)\n```\n\n## Await Usage\n\n`guard-timeout` has [`util.promisify`](https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original) support: \n\n```js\nconst { promisify } = require('util')\nconst timeout = promisify(require('guard-timeout'))\n\nasync function run () {\n  // if the timeout is 1 second late, \n  // it will be reschedule for another 20 minutes\n  await timeout(1.2e+6) // 20 minutes\n  console.log('do something')\n}\n\nrun().catch(console.error)\n```\n\n## API\n\n### `require('guard-timeout') => setTimeout (cb, time, ...args) => instance`\n\nThe default export of `guard-timeout` a is safe `setTimeout` function with a \ndefault `lagMs` option of 1000 (one second).\n\n### `require('guard-timeout').create(opts) => setTimeout (cb, time, ...args) => instance`\n\nCreate a custom safe `setTimeout` function by passing in options\n\n### `instance.close()`\n\nClears the timeout\n\n### `instance.timeout`\n\nA getter property which holds current underlying timeout object (or numerical ID in the browser).\n\n\n\n#### Options\n\n*  `lagMs` – `Number`, default: 1000. The allowable delta between when a timeout should fire and when it actually fires, in milliseconds. If this is exceeded then the timeout is rescheduled.\n* `rescheduler` - `Function`, default: `(t, instance) => t`. A mapping function to calculate when the timeout should be rescheduled for. It takes two args, the time that the timeout was scheduled for and the timeout instance returned from `guard-timeout` (which comes Node's native `setTimeout`). The `instance` argument can be used to apply specific reschedule times to specific timeouts. The return value should be a number representing milliseconds for the rescheduled timeout. \n\n\n## Contributing\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/David%20Mark%20Clements/guard-timeout/issues)\n\n## Author\n\n**David Mark Clements**\n\n* [github/davidmarkclements](https://github.com/davidmarkclements)\n* [twitter/davidmarkclem](http://twitter.com/davidmarkclem)\n\n## License\n\nCopyright © 2020 David Mark Clements\nLicensed under the MIT license.\n","_attachments":{},"homepage":"https://github.com/davidmarkclements/guard-timeout#readme","bugs":{"url":"https://github.com/davidmarkclements/guard-timeout/issues"},"license":"MIT"}