UNPKG

instagram-private-api

Version:

Instagram private API wrapper for full access to instagram

96 lines 3.87 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); const rxjs_1 = require("rxjs"); const class_transformer_1 = require("class-transformer"); const attempt_1 = require("@lifeomic/attempt"); const Chance = require("chance"); const errors_1 = require("../errors"); const repository_1 = require("./repository"); const decorators_1 = require("../decorators"); class Feed extends repository_1.Repository { constructor() { super(...arguments); this.attemptOptions = { delay: 60000, factor: 1.5, maxAttempts: 10, minDelay: 60000, maxDelay: 300000, jitter: true, }; this.chance = new Chance(); this.rankToken = this.chance.guid(); } get items$() { return this.observable(); } observable(semaphore, attemptOptions) { return new rxjs_1.Observable(observer => { let subscribed = true; process.nextTick(async () => { do { try { await attempt_1.retry(async () => { const items = await this.items(); observer.next(items); if (typeof semaphore === 'function') { await semaphore(); } }, Object.assign({ handleError(error, context) { if (error instanceof errors_1.IgResponseError && [400, 429, 500, 502].includes(error.response.statusCode) && subscribed) { return; } else { context.abort(); } } }, (attemptOptions || this.attemptOptions))); } catch (e) { observer.error(e); } } while (this.isMoreAvailable() && subscribed); observer.complete(); }); return function unsubscribe() { subscribed = false; }; }); } serialize() { return class_transformer_1.serialize(this, { strategy: 'excludeAll' }); } deserialize(data) { class_transformer_1.plainToClassFromExist(this, JSON.parse(data)); } toPlain() { return class_transformer_1.classToPlain(this, { strategy: 'excludeAll' }); } isMoreAvailable() { return !!this.moreAvailable; } } __decorate([ class_transformer_1.Expose(), __metadata("design:type", Boolean) ], Feed.prototype, "moreAvailable", void 0); __decorate([ decorators_1.Enumerable(false), __metadata("design:type", Object) ], Feed.prototype, "chance", void 0); __decorate([ class_transformer_1.Expose(), __metadata("design:type", Object) ], Feed.prototype, "rankToken", void 0); exports.Feed = Feed; //# sourceMappingURL=feed.js.map