getstream
Version:
The official low-level GetStream.io client for Node.js and the browser.
462 lines (455 loc) • 17.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Collections = exports.CollectionEntry = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _errors = require("./errors");
var CollectionEntry = exports.CollectionEntry = /*#__PURE__*/function () {
function CollectionEntry(
// eslint-disable-next-line no-use-before-define
store, collection, id, data) {
(0, _classCallCheck2.default)(this, CollectionEntry);
(0, _defineProperty2.default)(this, "id", void 0);
(0, _defineProperty2.default)(this, "collection", void 0);
(0, _defineProperty2.default)(this, "store", void 0);
// eslint-disable-line no-use-before-define
(0, _defineProperty2.default)(this, "data", void 0);
(0, _defineProperty2.default)(this, "full", void 0);
this.collection = collection;
this.store = store;
this.id = id;
this.data = data;
}
(0, _createClass2.default)(CollectionEntry, [{
key: "ref",
value: function ref() {
return "SO:".concat(this.collection, ":").concat(this.id);
}
/**
* get item from collection and sync data
* @method get
* @memberof CollectionEntry.prototype
* @return {Promise<CollectionEntry<StreamFeedGenerics>>}
* @example collection.get("0c7db91c-67f9-11e8-bcd9-fe00a9219401")
*/
}, {
key: "get",
value: (function () {
var _get = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
var response;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.store.get(this.collection, this.id);
case 2:
response = _context.sent;
this.data = response.data;
this.full = response;
return _context.abrupt("return", response);
case 6:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function get() {
return _get.apply(this, arguments);
}
return get;
}()
/**
* Add item to collection
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#adding-collections
* @method add
* @memberof CollectionEntry.prototype
* @return {Promise<CollectionEntry<StreamFeedGenerics>>}
* @example collection.add("cheese101", {"name": "cheese burger","toppings": "cheese"})
*/
)
}, {
key: "add",
value: (function () {
var _add = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
var response;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this.store.add(this.collection, this.id, this.data);
case 2:
response = _context2.sent;
this.data = response.data;
this.full = response;
return _context2.abrupt("return", response);
case 6:
case "end":
return _context2.stop();
}
}, _callee2, this);
}));
function add() {
return _add.apply(this, arguments);
}
return add;
}()
/**
* Update item in the object storage
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#updating-collections
* @method update
* @memberof CollectionEntry.prototype
* @return {Promise<CollectionEntry<StreamFeedGenerics>>}
* @example store.update("0c7db91c-67f9-11e8-bcd9-fe00a9219401", {"name": "cheese burger","toppings": "cheese"})
* @example store.update("cheese101", {"name": "cheese burger","toppings": "cheese"})
*/
)
}, {
key: "update",
value: (function () {
var _update = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
var response;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return this.store.update(this.collection, this.id, this.data);
case 2:
response = _context3.sent;
this.data = response.data;
this.full = response;
return _context3.abrupt("return", response);
case 6:
case "end":
return _context3.stop();
}
}, _callee3, this);
}));
function update() {
return _update.apply(this, arguments);
}
return update;
}()
/**
* Delete item from collection
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#removing-collections
* @method delete
* @memberof CollectionEntry.prototype
* @return {Promise<APIResponse>}
* @example collection.delete("cheese101")
*/
)
}, {
key: "delete",
value: (function () {
var _delete2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
var response;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return this.store.delete(this.collection, this.id);
case 2:
response = _context4.sent;
this.data = null;
this.full = null;
return _context4.abrupt("return", response);
case 6:
case "end":
return _context4.stop();
}
}, _callee4, this);
}));
function _delete() {
return _delete2.apply(this, arguments);
}
return _delete;
}())
}]);
return CollectionEntry;
}();
var Collections = exports.Collections = /*#__PURE__*/function () {
/**
* Initialize a feed object
* @method constructor
* @memberof Collections.prototype
* @param {StreamCloudClient} client Stream client this collection is constructed from
* @param {string} token JWT token
*/
function Collections(client, token) {
(0, _classCallCheck2.default)(this, Collections);
(0, _defineProperty2.default)(this, "client", void 0);
(0, _defineProperty2.default)(this, "token", void 0);
(0, _defineProperty2.default)(this, "buildURL", function (collection, itemId) {
var url = "collections/".concat(collection, "/");
return itemId === undefined ? url : "".concat(url).concat(itemId, "/");
});
this.client = client;
this.token = token;
}
(0, _createClass2.default)(Collections, [{
key: "entry",
value: function entry(collection, itemId, itemData) {
return new CollectionEntry(this, collection, itemId, itemData);
}
/**
* get item from collection
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#retrieving-collections
* @method get
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {string} itemId id for this entry
* @return {Promise<CollectionEntry<StreamFeedGenerics>>}
* @example collection.get("food", "0c7db91c-67f9-11e8-bcd9-fe00a9219401")
*/
}, {
key: "get",
value: (function () {
var _get2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(collection, itemId) {
var response, entry;
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return this.client.get({
url: this.buildURL(collection, itemId),
token: this.token
});
case 2:
response = _context5.sent;
entry = this.entry(response.collection, response.id, response.data);
entry.full = response;
return _context5.abrupt("return", entry);
case 6:
case "end":
return _context5.stop();
}
}, _callee5, this);
}));
function get(_x, _x2) {
return _get2.apply(this, arguments);
}
return get;
}()
/**
* Add item to collection
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#adding-collections
* @method add
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {string | null} itemId entry id, if null a random id will be assigned to the item
* @param {CollectionType} itemData ObjectStore data
* @return {Promise<CollectionEntry<StreamFeedGenerics>>}
* @example collection.add("food", "cheese101", {"name": "cheese burger","toppings": "cheese"})
*/
)
}, {
key: "add",
value: (function () {
var _add2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(collection, itemId, itemData) {
var response, entry;
return _regenerator.default.wrap(function _callee6$(_context6) {
while (1) switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return this.client.post({
url: this.buildURL(collection),
body: {
id: itemId === null ? undefined : itemId,
data: itemData
},
token: this.token
});
case 2:
response = _context6.sent;
entry = this.entry(response.collection, response.id, response.data);
entry.full = response;
return _context6.abrupt("return", entry);
case 6:
case "end":
return _context6.stop();
}
}, _callee6, this);
}));
function add(_x3, _x4, _x5) {
return _add2.apply(this, arguments);
}
return add;
}()
/**
* Update entry in the collection
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#updating-collections
* @method update
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {string} entryId Collection object id
* @param {CollectionType} data ObjectStore data
* @return {Promise<CollectionEntry<StreamFeedGenerics>>}
* @example store.update("0c7db91c-67f9-11e8-bcd9-fe00a9219401", {"name": "cheese burger","toppings": "cheese"})
* @example store.update("food", "cheese101", {"name": "cheese burger","toppings": "cheese"})
*/
)
}, {
key: "update",
value: (function () {
var _update2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(collection, entryId, data) {
var response, entry;
return _regenerator.default.wrap(function _callee7$(_context7) {
while (1) switch (_context7.prev = _context7.next) {
case 0:
_context7.next = 2;
return this.client.put({
url: this.buildURL(collection, entryId),
body: {
data: data
},
token: this.token
});
case 2:
response = _context7.sent;
entry = this.entry(response.collection, response.id, response.data);
entry.full = response;
return _context7.abrupt("return", entry);
case 6:
case "end":
return _context7.stop();
}
}, _callee7, this);
}));
function update(_x6, _x7, _x8) {
return _update2.apply(this, arguments);
}
return update;
}()
/**
* Delete entry from collection
* @link https://getstream.io/activity-feeds/docs/node/collections_introduction/?language=js#removing-collections
* @method delete
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {string} entryId Collection entry id
* @return {Promise<APIResponse>} Promise object
* @example collection.delete("food", "cheese101")
*/
)
}, {
key: "delete",
value: function _delete(collection, entryId) {
return this.client.delete({
url: this.buildURL(collection, entryId),
token: this.token
});
}
/**
* Upsert one or more items within a collection.
* @link https://getstream.io/activity-feeds/docs/node/collections_batch/?language=js#upsert
* @method upsert
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {NewCollectionEntry<StreamFeedGenerics> | NewCollectionEntry<StreamFeedGenerics>[]} data - A single json object or an array of objects
* @return {Promise<UpsertCollectionAPIResponse<StreamFeedGenerics>>}
*/
}, {
key: "upsert",
value: function upsert(collection, data) {
if (!this.client.usingApiSecret) {
throw new _errors.SiteError('This method can only be used server-side using your API Secret');
}
if (!Array.isArray(data)) data = [data];
return this.client.post({
url: 'collections/',
serviceName: 'api',
body: {
data: (0, _defineProperty2.default)({}, collection, data)
},
token: this.client.getCollectionsToken()
});
}
/**
* UpsertMany one or more items into many collections.
* @link https://getstream.io/activity-feeds/docs/node/collections_batch/?language=js#upsert
* @method upsert
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {UpsertManyCollectionRequest} items - A single json object that contains information of many collections
* @return {Promise<UpsertCollectionAPIResponse<StreamFeedGenerics>>}
*/
}, {
key: "upsertMany",
value: function upsertMany(items) {
if (!this.client.usingApiSecret) {
throw new _errors.SiteError('This method can only be used server-side using your API Secret');
}
return this.client.post({
url: 'collections/',
serviceName: 'api',
body: {
data: items
},
token: this.client.getCollectionsToken()
});
}
/**
* Select all objects with ids from the collection.
* @link https://getstream.io/activity-feeds/docs/node/collections_batch/?language=js#select
* @method select
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {string | string[]} ids - A single object id or an array of ids
* @return {Promise<SelectCollectionAPIResponse<StreamFeedGenerics>>}
*/
}, {
key: "select",
value: function select(collection, ids) {
if (!this.client.usingApiSecret) {
throw new _errors.SiteError('This method can only be used server-side using your API Secret');
}
if (!Array.isArray(ids)) ids = [ids];
return this.client.get({
url: 'collections/',
serviceName: 'api',
qs: {
foreign_ids: ids.map(function (id) {
return "".concat(collection, ":").concat(id);
}).join(',')
},
token: this.client.getCollectionsToken()
});
}
/**
* Remove all objects by id from the collection.
* @link https://getstream.io/activity-feeds/docs/node/collections_batch/?language=js#delete_many
* @method delete
* @memberof Collections.prototype
* @param {string} collection collection name
* @param {string | string[]} ids - A single object id or an array of ids
* @return {Promise<APIResponse>}
*/
}, {
key: "deleteMany",
value: function deleteMany(collection, ids) {
if (!this.client.usingApiSecret) {
throw new _errors.SiteError('This method can only be used server-side using your API Secret');
}
if (!Array.isArray(ids)) ids = [ids];
var params = {
collection_name: collection,
ids: ids.map(function (id) {
return id.toString();
}).join(',')
};
return this.client.delete({
url: 'collections/',
serviceName: 'api',
qs: params,
token: this.client.getCollectionsToken()
});
}
}]);
return Collections;
}();