{"version":3,"sources":["Themes/Default/Content/ts/Shared/rate-limit-ajax-service.ts"],"names":[],"mappings":";;;;IAGa,QAAA,IAAI,GAAG;QAChB,CAAC,EAAE,MAAM;KACZ,CAAA;IAED;QAAA;YACI,mBAAc,GAA6B,EAAE,CAAC;QA8BlD,CAAC;QA5BG,mCAAI,GAAJ,UAAQ,WAA+B;YACnC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAK,CAAC;YAEtB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAE7B,OAAO,EAAE,CAAC,OAAO,CAAC;QACtB,CAAC;QAEO,qCAAM,GAAd,UAAkB,WAA+B,EAAE,EAAiB;YAApE,iBAmBC;YAlBG,YAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;iBACnB,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAlB,CAAkB,CAAC;iBAClC,IAAI,CAAC,UAAA,KAAK;gBACP,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;oBACtB,IAAI,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;oBACxD,IAAI,UAAU,EAAE;wBACZ,IAAI,KAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;4BACtC,YAAY,CAAC,KAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;yBACtD;wBACD,KAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,cAAQ,KAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;qBAC1H;yBACI;wBACD,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;qBACpB;iBACJ;qBAAM;oBACH,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;QACX,CAAC;QACL,2BAAC;IAAD,CA/BA,AA+BC,IAAA;IAED,IAAI,OAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACrB,uCAAoB","file":"rate-limit-ajax-service.js","sourcesContent":["import * as jquery from 'jquery';\r\nimport * as q from 'q';\r\n\r\nexport const Deps = {\r\n $: jquery\r\n}\r\n\r\nclass RateLimitAjaxService {\r\n rateLimitCache: { [id: string]: number } = {};\r\n\r\n ajax(ajaxOptions: JQueryAjaxSettings): Q.Promise {\r\n var op = q.defer();\r\n\r\n this.doAjax(ajaxOptions, op);\r\n\r\n return op.promise;\r\n }\r\n\r\n private doAjax(ajaxOptions: JQueryAjaxSettings, op: Q.Deferred) {\r\n Deps.$.ajax(ajaxOptions)\r\n .done(result => op.resolve(result))\r\n .fail(error => {\r\n if (error.status === 429) {\r\n var retryAfter = error.getResponseHeader('Retry-After');\r\n if (retryAfter) {\r\n if (this.rateLimitCache[ajaxOptions.url]) {\r\n clearTimeout(this.rateLimitCache[ajaxOptions.url]);\r\n }\r\n this.rateLimitCache[ajaxOptions.url] = setTimeout(() => { this.doAjax(ajaxOptions, op) }, parseInt(retryAfter) * 1000);\r\n }\r\n else {\r\n op.reject(error);\r\n }\r\n } else {\r\n op.reject(error);\r\n }\r\n });\r\n }\r\n}\r\n\r\nvar service = new RateLimitAjaxService();\r\nexport { service as RateLimitAjaxService };"]}