UNPKG

@apihawk/billia-sdk

Version:

The ApiHawk Billia SDK

169 lines (168 loc) 7.05 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const billia_sdk_service_base_1 = require("../lib/billia-sdk-service-base"); const gravatar_1 = require("./common/gravatar"); const to_rest_resource_1 = require("./common/to-rest-resource"); class BilliaSDKMigration extends billia_sdk_service_base_1.BilliaSDKServiceBase { /** * Lists all product migrations for the current user with pagination. * * @param session - user session * @param query - query options */ getProductMigrations(session, query = {}) { return __awaiter(this, void 0, void 0, function* () { const q = { page: query.page || 1, page_size: query.page_size || 25 }; const response = yield this.api.call({ url: `/customer/customer-product-migrate`, method: 'GET', query: q, headers: { Accept: 'application/hal+json', 'Accept-Response': 'Advanced' }, session }); const migrationsRestResource = to_rest_resource_1.toRestResource(response, 'customer_product_migrate'); const productIds = migrationsRestResource.items .filter((item) => item.customer_product && !Array.isArray(item.customer_product)) .map((item) => item.customer_product.product_id.toString()); const catalogProducts = yield this.getCatalogProducts(session, productIds); // add the catalog product information to each migration record const migrations = migrationsRestResource.items.map((migration) => { const catalogProduct = catalogProducts.items.find((cp) => cp.product_id === migration.customer_product .product_id); return { migrate_id: migration.migrate_id, receiver: Object.assign({ receiver_id: migration.receiver_id }, migration.receiver, { gravatar: gravatar_1.default(migration.receiver.username) }), owner: Object.assign({ owner_id: migration.user_id }, migration.owner, { gravatar: gravatar_1.default(migration.owner.username) }), customer_product: Object.assign({ customer_product_id: migration.customer_product_id }, migration.customer_product), purchase_id: migration.purchase_id, status: migration.status, customer_product_id: migration.customer_product_id, owner_approved: !!migration.owner_approved, receiver_approved: !!migration.receiver_approved, catalog_product: catalogProduct }; }); const result = { items: migrations, page: migrationsRestResource.page, page_count: migrationsRestResource.page_count, page_size: migrationsRestResource.page_size, total_items: migrationsRestResource.total_items }; return result; }); } /** * Request a customer product migration. * * @param session - user session * @param migration - the customer product ID and the user ID of the receiver */ requestMigration(session, migration) { return __awaiter(this, void 0, void 0, function* () { const response = yield this.api.call({ url: `/customer/product-migrate?customer_product_id=${migration.customerProductId}&receiver_id=${migration.receiverId}`, method: 'GET', headers: { Accept: 'application/hal+json' }, session }); return response; }); } /** * Confirm a customer product migration request. * * @param session - user session * @param token - the confirmation code which was sent to the user */ confirmMigration(session, confirmationToken) { return __awaiter(this, void 0, void 0, function* () { const response = yield this.api.call({ url: '/customer/product-migrate', method: 'POST', headers: { Accept: 'application/hal+json', 'Content-Type': 'application/json' }, body: { token: confirmationToken }, session }); return response; }); } /** * Cancel a product migration request. * * @param session - user session * @param migrationId - the ID of the migration request */ cancelMigration(session, migrationId) { return __awaiter(this, void 0, void 0, function* () { yield this.api.call({ url: `/customer/customer-product-migrate/${migrationId}`, method: 'DELETE', headers: { Accept: 'application/hal+json' }, session }); return null; }); } getCatalogProducts(session, productIds) { return __awaiter(this, void 0, void 0, function* () { if (!productIds || !productIds.length) { const emptyRestResource = { items: [], page: 1, page_count: 1, page_size: 25, total_items: 0 }; return emptyRestResource; } const query = { page: 1, page_size: -1, where: [ { field: 'product_id', where: 'and', type: 'in', values: productIds } ] }; const response = yield this.api.call({ url: `/billing/product`, method: 'GET', query, session }); const restResource = to_rest_resource_1.toRestResource(response, 'catalog_product'); return restResource; }); } } exports.BilliaSDKMigration = BilliaSDKMigration;