@vymalo/medusa-printful
Version:
Connect your MedusaJS store to Printful
104 lines • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@medusajs/utils");
const utils_2 = require("../../../utils");
class PrintfulFulfillment extends utils_1.AbstractFulfillmentProviderService {
static identifier = 'printful';
logger_;
printfulService;
productModuleService;
constructor({ logger, printful }) {
super(...arguments);
this.logger_ = logger;
this.printfulService = printful;
this.logger_.info('Printful fulfillment provider initialized');
}
async canCalculate({ data, }) {
this.logger_.info('canCalculate');
console.debug(data);
return data.id === 'STANDARD' || data.id === 'PRINTFUL_FAST';
}
async calculatePrice(optionData, data, context) {
this.logger_.info('calculatePrice');
console.log(optionData, data, context);
try {
const result = await this.printfulService.getShippingRates({
recipient: {
address1: context.shipping_address.address_1,
city: context.shipping_address.city,
country_code: context.shipping_address.country_code,
zip: context.shipping_address.postal_code,
phone: context.shipping_address.phone || null,
},
items: context.items.map((item) => ({
variant_id: item.variant_id,
quantity: item.quantity,
})),
});
const shippingOption = result.find((option) => option.id === optionData.id);
if (shippingOption) {
return {
calculated_amount: parseInt(shippingOption.rate, 10) * 100,
is_calculated_price_tax_inclusive: false,
};
}
}
catch (e) {
this.logger_.error('Could not get shipping rates from Printful', e);
throw e;
}
throw new Error('Could not find shipping option');
}
async validateOption(data) {
this.logger_.info('validateOption');
console.log(data);
return true;
}
async validateFulfillmentData(optionData, data, context) {
this.logger_.info('validateFulfillmentData');
console.log(optionData, data, context);
return { ...data };
}
async getFulfillmentOptions() {
return [
{
id: 'STANDARD',
name: 'Printful Default',
},
{
id: 'PRINTFUL_FAST',
name: 'Printful Express',
},
{
id: 'printful-return',
name: 'Printful Return',
is_return: true,
},
];
}
async cancelFulfillment(data) {
await this.printfulService.cancelOrder(data.printfulOrder.id);
}
async createFulfillment(data, items, order, _fulfillment) {
this.logger_.info(`Create a fulfillment for order ${order.id}`);
const printfulOrder = await this.printfulService.confirmOrderById(`@${order.id}`);
return {
data: {
...data,
printfulOrder,
},
labels: printfulOrder.shipments.map((d) => ({
tracking_url: d.tracking_url,
tracking_number: d.tracking_number,
label_url: d.carrier,
})),
};
}
async createReturnFulfillment(fulfillment) {
this.logger_.info('createReturnFulfillment');
console.log(fulfillment);
return super.createReturnFulfillment(fulfillment);
}
}
exports.default = PrintfulFulfillment;
//# sourceMappingURL=printful-fulfillment.js.map