rerobe-js-orm 4.8.6 → 4.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,28 @@ export namespace MERCHANT_TYPES {
3
3
  let business: string;
4
4
  let enterprise: string;
5
5
  }
6
+ export namespace MERCHANT_ACCOUNT_MODES {
7
+ let standalone: string;
8
+ let managed: string;
9
+ }
10
+ export namespace MERCHANT_ACCOUNT_CLASSES {
11
+ let standard: string;
12
+ let marketplaceSeller: string;
13
+ }
14
+ export namespace MERCHANT_RELATIONSHIP_TYPES {
15
+ let marketplaceSeller_1: string;
16
+ export { marketplaceSeller_1 as marketplaceSeller };
17
+ }
18
+ export namespace MARKETPLACE_SELLER_CAPABILITIES {
19
+ let accessAdminDashboard: string;
20
+ let manageOwnProducts: string;
21
+ let viewOwnOrders: string;
22
+ let viewOwnTransactions: string;
23
+ let manageBusinessProfile: string;
24
+ let manageOwnPayouts: string;
25
+ let upgradeToStandalone: string;
26
+ }
27
+ export const DEFAULT_MARKETPLACE_SELLER_CAPABILITIES: string[];
6
28
  export namespace PAYMENT_TIERS {
7
29
  export namespace starter {
8
30
  let id: string;
@@ -53,6 +75,41 @@ export namespace UNIT_SYSTEM_TYPES {
53
75
  let metric: string;
54
76
  let imperial: string;
55
77
  }
78
+ export namespace LABEL_PRINTER_BARCODE_SYMBOLOGIES {
79
+ let code128: string;
80
+ let ean13: string;
81
+ }
82
+ export namespace LABEL_PRINTER_PROTOCOLS {
83
+ let zebraZpl: string;
84
+ }
85
+ export namespace DEFAULT_LABEL_LAYOUT {
86
+ let topElements: {
87
+ source: string;
88
+ visible: boolean;
89
+ fontSize: number;
90
+ paddingTop: number;
91
+ transform: string;
92
+ }[];
93
+ namespace barcode {
94
+ let visible: boolean;
95
+ let heightDots: number;
96
+ let moduleWidth: number;
97
+ let paddingBottom: number;
98
+ }
99
+ namespace sku {
100
+ let visible_1: boolean;
101
+ export { visible_1 as visible };
102
+ export let fontSize: number;
103
+ }
104
+ }
105
+ export namespace LABEL_PRINTER_CONFIG_DEFAULTS {
106
+ export let protocol: string;
107
+ export let widthMm: number;
108
+ export let heightMm: number;
109
+ export let dpi: number;
110
+ export let symbology: string;
111
+ export { DEFAULT_LABEL_LAYOUT as layout };
112
+ }
56
113
  export namespace METRIC_WEIGHT_TYPES {
57
114
  let kilogram: string;
58
115
  let gram: string;
@@ -1,11 +1,40 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AUTOMATED_PAYOUT_MONTH_DAYS = exports.AUTOMATED_PAYOUT_BUSINESS_DAYS = exports.AUTOMATED_PAYOUT_SCHEDULE = exports.SUBSCRIPTION_STATUSES = exports.RIBBN_WEBHOOK_EVENT_DICT = exports.IMPERIAL_WEIGHT_TYPES = exports.METRIC_WEIGHT_TYPES = exports.UNIT_SYSTEM_TYPES = exports.INDUSTRY_TYPE_OPTIONS = exports.INDUSTRY_TYPES = exports.PAYMENT_TIERS = exports.MERCHANT_TYPES = void 0;
3
+ exports.AUTOMATED_PAYOUT_MONTH_DAYS = exports.AUTOMATED_PAYOUT_BUSINESS_DAYS = exports.AUTOMATED_PAYOUT_SCHEDULE = exports.SUBSCRIPTION_STATUSES = exports.RIBBN_WEBHOOK_EVENT_DICT = exports.IMPERIAL_WEIGHT_TYPES = exports.METRIC_WEIGHT_TYPES = exports.LABEL_PRINTER_CONFIG_DEFAULTS = exports.DEFAULT_LABEL_LAYOUT = exports.LABEL_PRINTER_PROTOCOLS = exports.LABEL_PRINTER_BARCODE_SYMBOLOGIES = exports.UNIT_SYSTEM_TYPES = exports.INDUSTRY_TYPE_OPTIONS = exports.INDUSTRY_TYPES = exports.PAYMENT_TIERS = exports.DEFAULT_MARKETPLACE_SELLER_CAPABILITIES = exports.MARKETPLACE_SELLER_CAPABILITIES = exports.MERCHANT_RELATIONSHIP_TYPES = exports.MERCHANT_ACCOUNT_CLASSES = exports.MERCHANT_ACCOUNT_MODES = exports.MERCHANT_TYPES = void 0;
4
4
  exports.MERCHANT_TYPES = {
5
5
  individual: 'INDIVIDUAL',
6
6
  business: 'BUSINESS',
7
7
  enterprise: 'ENTERPRISE',
8
8
  };
9
+ exports.MERCHANT_ACCOUNT_MODES = {
10
+ standalone: 'STANDALONE',
11
+ managed: 'MANAGED',
12
+ };
13
+ exports.MERCHANT_ACCOUNT_CLASSES = {
14
+ standard: 'STANDARD',
15
+ marketplaceSeller: 'MARKETPLACE_SELLER',
16
+ };
17
+ exports.MERCHANT_RELATIONSHIP_TYPES = {
18
+ marketplaceSeller: 'MARKETPLACE_SELLER',
19
+ };
20
+ exports.MARKETPLACE_SELLER_CAPABILITIES = {
21
+ accessAdminDashboard: 'ACCESS_ADMIN_DASHBOARD',
22
+ manageOwnProducts: 'MANAGE_OWN_PRODUCTS',
23
+ viewOwnOrders: 'VIEW_OWN_ORDERS',
24
+ viewOwnTransactions: 'VIEW_OWN_TRANSACTIONS',
25
+ manageBusinessProfile: 'MANAGE_BUSINESS_PROFILE',
26
+ manageOwnPayouts: 'MANAGE_OWN_PAYOUTS',
27
+ upgradeToStandalone: 'UPGRADE_TO_STANDALONE',
28
+ };
29
+ exports.DEFAULT_MARKETPLACE_SELLER_CAPABILITIES = [
30
+ exports.MARKETPLACE_SELLER_CAPABILITIES.accessAdminDashboard,
31
+ exports.MARKETPLACE_SELLER_CAPABILITIES.manageOwnProducts,
32
+ exports.MARKETPLACE_SELLER_CAPABILITIES.viewOwnOrders,
33
+ exports.MARKETPLACE_SELLER_CAPABILITIES.viewOwnTransactions,
34
+ exports.MARKETPLACE_SELLER_CAPABILITIES.manageBusinessProfile,
35
+ exports.MARKETPLACE_SELLER_CAPABILITIES.manageOwnPayouts,
36
+ exports.MARKETPLACE_SELLER_CAPABILITIES.upgradeToStandalone,
37
+ ];
9
38
  exports.PAYMENT_TIERS = {
10
39
  starter: {
11
40
  id: 'STARTER',
@@ -54,6 +83,40 @@ exports.UNIT_SYSTEM_TYPES = {
54
83
  metric: 'METRIC',
55
84
  imperial: 'IMPERIAL',
56
85
  };
86
+ // Label printer config controls how price-tag labels are rendered for both
87
+ // the marketplace merchant (channel partner) and any merchants they manage.
88
+ // Source of truth lives on the parent merchant doc; managed merchants read
89
+ // it via the `getMarketplaceParentLabelConfig` API. Connection to the
90
+ // physical printer is per-browser/per-device (WebUSB), not stored here.
91
+ exports.LABEL_PRINTER_BARCODE_SYMBOLOGIES = {
92
+ code128: 'CODE128',
93
+ ean13: 'EAN13',
94
+ };
95
+ exports.LABEL_PRINTER_PROTOCOLS = {
96
+ // ZPL is what the Zebra ZD421 family speaks. Future-proofed for additional
97
+ // protocols (e.g. Epson ePOS-Print) via the same setting shape.
98
+ zebraZpl: 'ZEBRA_ZPL',
99
+ };
100
+ // Sensible defaults sized for a standard 50x30 mm clothing price tag on a
101
+ // 203 dpi Zebra ZD421. Stored as plain numbers/strings so they survive
102
+ // Firestore round-trips without conversion.
103
+ exports.DEFAULT_LABEL_LAYOUT = {
104
+ topElements: [
105
+ { source: 'merchantName', visible: true, fontSize: 20, paddingTop: 0, transform: 'uppercase' },
106
+ { source: 'title', visible: true, fontSize: 18, paddingTop: 4, transform: 'none' },
107
+ { source: 'price', visible: true, fontSize: 30, paddingTop: 8, transform: 'none' },
108
+ ],
109
+ barcode: { visible: true, heightDots: 32, moduleWidth: 1, paddingBottom: 8 },
110
+ sku: { visible: true, fontSize: 14 },
111
+ };
112
+ exports.LABEL_PRINTER_CONFIG_DEFAULTS = {
113
+ protocol: 'ZEBRA_ZPL',
114
+ widthMm: 30,
115
+ heightMm: 20,
116
+ dpi: 203,
117
+ symbology: 'CODE128',
118
+ layout: exports.DEFAULT_LABEL_LAYOUT,
119
+ };
57
120
  exports.METRIC_WEIGHT_TYPES = {
58
121
  kilogram: 'KILOGRAM',
59
122
  gram: 'GRAM',
@@ -196,7 +196,7 @@ class ReRobeProductHelpers {
196
196
  return descriptionArr.filter((d) => d);
197
197
  }
198
198
  static autoCreateFullDescriptionHTML(productObj, customHeading) {
199
- const productStyle = productObj.productStyle.join(', ');
199
+ const productStyle = (productObj.productStyle || []).join(', ');
200
200
  const size = this.getSizeLabel(productObj.clothingSize, productObj.shoeSize, productObj.jeanSize);
201
201
  const sizeComment = productObj.sizeComment;
202
202
  const color = productObj.color;
package/lib/index.d.ts CHANGED
@@ -40,4 +40,5 @@ import MerchantConfigAutomatedPayoutsFormState from './form-states/Merchant/Merc
40
40
  import ReRobeProductHelpers from './helpers/ReRobeProductHelpers';
41
41
  import AnalyticsHelpers from './helpers/AnalyticsHelpers';
42
42
  import OrderHelpers from './helpers/OrderHelpers';
43
- export { RibbnFile, ProductFromAlgoliaJSONDoc, ProductFromShopifyWebhookJSONDoc, ProductFromShopifyJSClientJSONDoc, ProductFormStateFactory, ProductCollectionFormStateFactory, ProductCollectionHelpers, SellRequestFormStateFactory, PickUpFormStateFactory, AddressFormStateFactory, UserFormStateFactory, UserFromShopifyWebhookJSONDoc, UserFromAuthTemplateMethod, DraftOrderFromMirakl, DraftOrderFromApp, ChatRoomFromNewUserSignUp, KlarnaSessionFactory, Product, ProductStateManager, Order, OrderFromShopifyWebhook, OrderFromShopifyAdminApi, OrderFromShopifyStorefrontApi, OrderFromApp, OrderFromTraderaEmail, OrderFormStateFactory, RefundFormStateFactory, PayoutAccount, PayoutAccountFormState, Merchant, MerchantFormState, MerchantFormStateFactory, MerchantConfigAutomatedPayouts, MerchantConfigAutomatedPayoutsFormState, ReRobeProductHelpers, User, AnalyticsHelpers, OrderHelpers, WebhookFormState, MerchantWebPage, ShopifyMerchantAccount, CustomerNotification, };
43
+ import { DEFAULT_MARKETPLACE_SELLER_CAPABILITIES, MARKETPLACE_SELLER_CAPABILITIES, MERCHANT_ACCOUNT_CLASSES, MERCHANT_ACCOUNT_MODES, MERCHANT_RELATIONSHIP_TYPES } from './constants/merchant-constants';
44
+ export { RibbnFile, ProductFromAlgoliaJSONDoc, ProductFromShopifyWebhookJSONDoc, ProductFromShopifyJSClientJSONDoc, ProductFormStateFactory, ProductCollectionFormStateFactory, ProductCollectionHelpers, SellRequestFormStateFactory, PickUpFormStateFactory, AddressFormStateFactory, UserFormStateFactory, UserFromShopifyWebhookJSONDoc, UserFromAuthTemplateMethod, DraftOrderFromMirakl, DraftOrderFromApp, ChatRoomFromNewUserSignUp, KlarnaSessionFactory, Product, ProductStateManager, Order, OrderFromShopifyWebhook, OrderFromShopifyAdminApi, OrderFromShopifyStorefrontApi, OrderFromApp, OrderFromTraderaEmail, OrderFormStateFactory, RefundFormStateFactory, PayoutAccount, PayoutAccountFormState, Merchant, MERCHANT_ACCOUNT_MODES, MERCHANT_ACCOUNT_CLASSES, MERCHANT_RELATIONSHIP_TYPES, MARKETPLACE_SELLER_CAPABILITIES, DEFAULT_MARKETPLACE_SELLER_CAPABILITIES, MerchantFormState, MerchantFormStateFactory, MerchantConfigAutomatedPayouts, MerchantConfigAutomatedPayoutsFormState, ReRobeProductHelpers, User, AnalyticsHelpers, OrderHelpers, WebhookFormState, MerchantWebPage, ShopifyMerchantAccount, CustomerNotification, };
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CustomerNotification = exports.ShopifyMerchantAccount = exports.MerchantWebPage = exports.WebhookFormState = exports.OrderHelpers = exports.AnalyticsHelpers = exports.User = exports.ReRobeProductHelpers = exports.MerchantConfigAutomatedPayoutsFormState = exports.MerchantConfigAutomatedPayouts = exports.MerchantFormStateFactory = exports.MerchantFormState = exports.Merchant = exports.PayoutAccountFormState = exports.PayoutAccount = exports.RefundFormStateFactory = exports.OrderFormStateFactory = exports.OrderFromTraderaEmail = exports.OrderFromApp = exports.OrderFromShopifyStorefrontApi = exports.OrderFromShopifyAdminApi = exports.OrderFromShopifyWebhook = exports.Order = exports.ProductStateManager = exports.Product = exports.KlarnaSessionFactory = exports.ChatRoomFromNewUserSignUp = exports.DraftOrderFromApp = exports.DraftOrderFromMirakl = exports.UserFromAuthTemplateMethod = exports.UserFromShopifyWebhookJSONDoc = exports.UserFormStateFactory = exports.AddressFormStateFactory = exports.PickUpFormStateFactory = exports.SellRequestFormStateFactory = exports.ProductCollectionHelpers = exports.ProductCollectionFormStateFactory = exports.ProductFormStateFactory = exports.ProductFromShopifyJSClientJSONDoc = exports.ProductFromShopifyWebhookJSONDoc = exports.ProductFromAlgoliaJSONDoc = exports.RibbnFile = void 0;
3
+ exports.CustomerNotification = exports.ShopifyMerchantAccount = exports.MerchantWebPage = exports.WebhookFormState = exports.OrderHelpers = exports.AnalyticsHelpers = exports.User = exports.ReRobeProductHelpers = exports.MerchantConfigAutomatedPayoutsFormState = exports.MerchantConfigAutomatedPayouts = exports.MerchantFormStateFactory = exports.MerchantFormState = exports.DEFAULT_MARKETPLACE_SELLER_CAPABILITIES = exports.MARKETPLACE_SELLER_CAPABILITIES = exports.MERCHANT_RELATIONSHIP_TYPES = exports.MERCHANT_ACCOUNT_CLASSES = exports.MERCHANT_ACCOUNT_MODES = exports.Merchant = exports.PayoutAccountFormState = exports.PayoutAccount = exports.RefundFormStateFactory = exports.OrderFormStateFactory = exports.OrderFromTraderaEmail = exports.OrderFromApp = exports.OrderFromShopifyStorefrontApi = exports.OrderFromShopifyAdminApi = exports.OrderFromShopifyWebhook = exports.Order = exports.ProductStateManager = exports.Product = exports.KlarnaSessionFactory = exports.ChatRoomFromNewUserSignUp = exports.DraftOrderFromApp = exports.DraftOrderFromMirakl = exports.UserFromAuthTemplateMethod = exports.UserFromShopifyWebhookJSONDoc = exports.UserFormStateFactory = exports.AddressFormStateFactory = exports.PickUpFormStateFactory = exports.SellRequestFormStateFactory = exports.ProductCollectionHelpers = exports.ProductCollectionFormStateFactory = exports.ProductFormStateFactory = exports.ProductFromShopifyJSClientJSONDoc = exports.ProductFromShopifyWebhookJSONDoc = exports.ProductFromAlgoliaJSONDoc = exports.RibbnFile = void 0;
4
4
  const ProductFromShopifyJSClientJSONDoc_1 = require("./factories/Product/ProductFromShopifyJSClientJSONDoc");
5
5
  exports.ProductFromShopifyJSClientJSONDoc = ProductFromShopifyJSClientJSONDoc_1.default;
6
6
  const ProductFromAlgoliaJSONDoc_1 = require("./factories/Product/ProductFromAlgoliaJSONDoc");
@@ -85,3 +85,9 @@ const AnalyticsHelpers_1 = require("./helpers/AnalyticsHelpers");
85
85
  exports.AnalyticsHelpers = AnalyticsHelpers_1.default;
86
86
  const OrderHelpers_1 = require("./helpers/OrderHelpers");
87
87
  exports.OrderHelpers = OrderHelpers_1.default;
88
+ const merchant_constants_1 = require("./constants/merchant-constants");
89
+ Object.defineProperty(exports, "DEFAULT_MARKETPLACE_SELLER_CAPABILITIES", { enumerable: true, get: function () { return merchant_constants_1.DEFAULT_MARKETPLACE_SELLER_CAPABILITIES; } });
90
+ Object.defineProperty(exports, "MARKETPLACE_SELLER_CAPABILITIES", { enumerable: true, get: function () { return merchant_constants_1.MARKETPLACE_SELLER_CAPABILITIES; } });
91
+ Object.defineProperty(exports, "MERCHANT_ACCOUNT_CLASSES", { enumerable: true, get: function () { return merchant_constants_1.MERCHANT_ACCOUNT_CLASSES; } });
92
+ Object.defineProperty(exports, "MERCHANT_ACCOUNT_MODES", { enumerable: true, get: function () { return merchant_constants_1.MERCHANT_ACCOUNT_MODES; } });
93
+ Object.defineProperty(exports, "MERCHANT_RELATIONSHIP_TYPES", { enumerable: true, get: function () { return merchant_constants_1.MERCHANT_RELATIONSHIP_TYPES; } });
@@ -1,4 +1,35 @@
1
1
  import Base from '../Base';
2
+ export type LabelTextSource = 'merchantName' | 'title' | 'price';
3
+ export type LabelTextElement = {
4
+ source: LabelTextSource | string;
5
+ visible: boolean;
6
+ fontSize: number;
7
+ paddingTop: number;
8
+ transform: 'uppercase' | 'none' | string;
9
+ };
10
+ export type LabelBarcodeConfig = {
11
+ visible: boolean;
12
+ heightDots: number;
13
+ moduleWidth: 1 | 2;
14
+ paddingBottom: number;
15
+ };
16
+ export type LabelSkuConfig = {
17
+ visible: boolean;
18
+ fontSize: number;
19
+ };
20
+ export type LabelLayout = {
21
+ topElements: LabelTextElement[];
22
+ barcode: LabelBarcodeConfig;
23
+ sku: LabelSkuConfig;
24
+ };
25
+ export type LabelPrinterConfig = {
26
+ protocol: string;
27
+ widthMm: number;
28
+ heightMm: number;
29
+ dpi: number;
30
+ symbology: string;
31
+ layout: LabelLayout;
32
+ };
2
33
  export default class Merchant extends Base {
3
34
  static MERCHANT_TYPES: {
4
35
  individual: string;
@@ -25,6 +56,79 @@ export default class Merchant extends Base {
25
56
  currency: string;
26
57
  };
27
58
  };
59
+ static MERCHANT_ACCOUNT_MODES: {
60
+ standalone: string;
61
+ managed: string;
62
+ };
63
+ static MERCHANT_ACCOUNT_CLASSES: {
64
+ standard: string;
65
+ marketplaceSeller: string;
66
+ };
67
+ static MERCHANT_RELATIONSHIP_TYPES: {
68
+ marketplaceSeller: string;
69
+ };
70
+ static MARKETPLACE_SELLER_CAPABILITIES: {
71
+ accessAdminDashboard: string;
72
+ manageOwnProducts: string;
73
+ viewOwnOrders: string;
74
+ viewOwnTransactions: string;
75
+ manageBusinessProfile: string;
76
+ manageOwnPayouts: string;
77
+ upgradeToStandalone: string;
78
+ };
79
+ static DEFAULT_MARKETPLACE_SELLER_CAPABILITIES: string[];
80
+ static LABEL_PRINTER_BARCODE_SYMBOLOGIES: {
81
+ code128: string;
82
+ ean13: string;
83
+ };
84
+ static LABEL_PRINTER_PROTOCOLS: {
85
+ zebraZpl: string;
86
+ };
87
+ static LABEL_PRINTER_CONFIG_DEFAULTS: {
88
+ protocol: string;
89
+ widthMm: number;
90
+ heightMm: number;
91
+ dpi: number;
92
+ symbology: string;
93
+ layout: {
94
+ topElements: {
95
+ source: string;
96
+ visible: boolean;
97
+ fontSize: number;
98
+ paddingTop: number;
99
+ transform: string;
100
+ }[];
101
+ barcode: {
102
+ visible: boolean;
103
+ heightDots: number;
104
+ moduleWidth: number;
105
+ paddingBottom: number;
106
+ };
107
+ sku: {
108
+ visible: boolean;
109
+ fontSize: number;
110
+ };
111
+ };
112
+ };
113
+ static DEFAULT_LABEL_LAYOUT: {
114
+ topElements: {
115
+ source: string;
116
+ visible: boolean;
117
+ fontSize: number;
118
+ paddingTop: number;
119
+ transform: string;
120
+ }[];
121
+ barcode: {
122
+ visible: boolean;
123
+ heightDots: number;
124
+ moduleWidth: number;
125
+ paddingBottom: number;
126
+ };
127
+ sku: {
128
+ visible: boolean;
129
+ fontSize: number;
130
+ };
131
+ };
28
132
  static INDUSTRY_TYPES: {
29
133
  beauty: string;
30
134
  clothing: string;
@@ -91,11 +195,22 @@ export default class Merchant extends Base {
91
195
  hasAutomatedPayouts?: boolean;
92
196
  hasAIQuickList?: boolean;
93
197
  hasReceiptPrinter?: boolean;
198
+ hasLabelPrinter?: boolean;
199
+ labelPrinterConfig?: LabelPrinterConfig;
94
200
  hasActiveWebshop?: boolean;
95
201
  stripeSubscription?: StripeSubscription;
96
202
  subscriptionStatus?: string;
97
203
  channelPartners?: string[];
204
+ accountMode?: MerchantAccountMode | string;
205
+ accountClass?: MerchantAccountClass | string;
206
+ sellerBusinessType?: string;
207
+ managedByMerchantId?: string;
208
+ canUpgradeToStandalone?: boolean;
209
+ featureAccess?: MerchantFeatureAccess | null;
210
+ isMarketplaceSeller?: boolean;
98
211
  constructor(props?: any);
212
+ static normalizeLabelPrinterConfig(input?: Partial<LabelPrinterConfig> | Record<string, any> | null): LabelPrinterConfig;
99
213
  toObj(): MerchantObj;
100
214
  toMerchantMutableData(): MerchantMutableData;
215
+ isManagedMarketplaceMerchant(): boolean;
101
216
  }
@@ -55,9 +55,20 @@ class Merchant extends Base_1.default {
55
55
  this.returnPolicy = (props === null || props === void 0 ? void 0 : props.returnPolicy) || '';
56
56
  this.subscriptionStatus = (props === null || props === void 0 ? void 0 : props.subscriptionStatus) || merchant_constants_1.SUBSCRIPTION_STATUSES.trialing;
57
57
  this.hasActiveWebshop = (props === null || props === void 0 ? void 0 : props.hasActiveWebshop) || false;
58
+ this.accountMode = (props === null || props === void 0 ? void 0 : props.accountMode) || Merchant.MERCHANT_ACCOUNT_MODES.standalone;
59
+ this.accountClass = (props === null || props === void 0 ? void 0 : props.accountClass) || Merchant.MERCHANT_ACCOUNT_CLASSES.standard;
60
+ this.sellerBusinessType = (props === null || props === void 0 ? void 0 : props.sellerBusinessType) || '';
61
+ this.managedByMerchantId = (props === null || props === void 0 ? void 0 : props.managedByMerchantId) || '';
62
+ if (typeof (props === null || props === void 0 ? void 0 : props.canUpgradeToStandalone) === 'boolean') {
63
+ this.canUpgradeToStandalone = props.canUpgradeToStandalone;
64
+ }
65
+ this.featureAccess = (props === null || props === void 0 ? void 0 : props.featureAccess) || null;
58
66
  if ((props === null || props === void 0 ? void 0 : props.channelPartners) && Array.isArray(props.channelPartners)) {
59
67
  this.channelPartners = props.channelPartners;
60
68
  }
69
+ if (typeof (props === null || props === void 0 ? void 0 : props.isMarketplaceSeller) === 'boolean') {
70
+ this.isMarketplaceSeller = props.isMarketplaceSeller;
71
+ }
61
72
  if (props === null || props === void 0 ? void 0 : props.isChannelPartner) {
62
73
  this.isChannelPartner = props.isChannelPartner;
63
74
  }
@@ -79,6 +90,82 @@ class Merchant extends Base_1.default {
79
90
  if (props === null || props === void 0 ? void 0 : props.hasReceiptPrinter) {
80
91
  this.hasReceiptPrinter = props.hasReceiptPrinter;
81
92
  }
93
+ if (props === null || props === void 0 ? void 0 : props.hasLabelPrinter) {
94
+ this.hasLabelPrinter = props.hasLabelPrinter;
95
+ }
96
+ if ((props === null || props === void 0 ? void 0 : props.labelPrinterConfig) && typeof props.labelPrinterConfig === 'object') {
97
+ this.labelPrinterConfig = Merchant.normalizeLabelPrinterConfig(props.labelPrinterConfig);
98
+ }
99
+ }
100
+ // Coerce arbitrary input into a fully-populated, type-safe LabelPrinterConfig
101
+ // by layering it over the defaults. Migrates legacy `showFields` shapes
102
+ // into the new `layout` schema so older stored configs keep working.
103
+ static normalizeLabelPrinterConfig(input) {
104
+ const defaults = Merchant.LABEL_PRINTER_CONFIG_DEFAULTS;
105
+ const raw = (input || {});
106
+ const protocol = typeof raw.protocol === 'string' && raw.protocol ? raw.protocol : defaults.protocol;
107
+ const symbology = typeof raw.symbology === 'string' && raw.symbology ? raw.symbology : defaults.symbology;
108
+ const layout = (() => {
109
+ const fallback = defaults.layout;
110
+ const rawLayout = raw.layout && typeof raw.layout === 'object' ? raw.layout : null;
111
+ const legacyShowFields = raw.showFields && typeof raw.showFields === 'object' ? raw.showFields : null;
112
+ if (!rawLayout && legacyShowFields) {
113
+ return {
114
+ topElements: fallback.topElements.map((el) => (Object.assign(Object.assign({}, el), { visible: legacyShowFields[el.source] !== false }))),
115
+ barcode: Object.assign({}, fallback.barcode),
116
+ sku: Object.assign(Object.assign({}, fallback.sku), { visible: legacyShowFields.sku !== false }),
117
+ };
118
+ }
119
+ if (!rawLayout) {
120
+ return {
121
+ topElements: fallback.topElements.map((el) => (Object.assign({}, el))),
122
+ barcode: Object.assign({}, fallback.barcode),
123
+ sku: Object.assign({}, fallback.sku),
124
+ };
125
+ }
126
+ const rawTop = Array.isArray(rawLayout.topElements) ? rawLayout.topElements : [];
127
+ const topElements = rawTop
128
+ .map((entry, index) => {
129
+ if (!entry || typeof entry !== 'object')
130
+ return null;
131
+ const fb = fallback.topElements.find((e) => e.source === entry.source) ||
132
+ fallback.topElements[index] ||
133
+ fallback.topElements[0];
134
+ return {
135
+ source: typeof entry.source === 'string' ? entry.source : fb.source,
136
+ visible: typeof entry.visible === 'boolean' ? entry.visible : fb.visible,
137
+ fontSize: Number(entry.fontSize) > 0 ? Number(entry.fontSize) : fb.fontSize,
138
+ paddingTop: Number(entry.paddingTop) >= 0 ? Number(entry.paddingTop) : fb.paddingTop,
139
+ transform: entry.transform === 'uppercase' || entry.transform === 'none' ? entry.transform : fb.transform,
140
+ };
141
+ })
142
+ .filter(Boolean);
143
+ const rawBarcode = (rawLayout.barcode || {});
144
+ const barcode = {
145
+ visible: typeof rawBarcode.visible === 'boolean' ? rawBarcode.visible : fallback.barcode.visible,
146
+ heightDots: Number(rawBarcode.heightDots) > 0 ? Number(rawBarcode.heightDots) : fallback.barcode.heightDots,
147
+ moduleWidth: rawBarcode.moduleWidth === 2 ? 2 : 1,
148
+ paddingBottom: Number(rawBarcode.paddingBottom) >= 0 ? Number(rawBarcode.paddingBottom) : fallback.barcode.paddingBottom,
149
+ };
150
+ const rawSku = (rawLayout.sku || {});
151
+ const sku = {
152
+ visible: typeof rawSku.visible === 'boolean' ? rawSku.visible : fallback.sku.visible,
153
+ fontSize: Number(rawSku.fontSize) > 0 ? Number(rawSku.fontSize) : fallback.sku.fontSize,
154
+ };
155
+ return {
156
+ topElements: topElements.length > 0 ? topElements : fallback.topElements.map((el) => (Object.assign({}, el))),
157
+ barcode,
158
+ sku,
159
+ };
160
+ })();
161
+ return {
162
+ protocol,
163
+ widthMm: Number(raw.widthMm) > 0 ? Number(raw.widthMm) : defaults.widthMm,
164
+ heightMm: Number(raw.heightMm) > 0 ? Number(raw.heightMm) : defaults.heightMm,
165
+ dpi: Number(raw.dpi) > 0 ? Number(raw.dpi) : defaults.dpi,
166
+ symbology,
167
+ layout,
168
+ };
82
169
  }
83
170
  toObj() {
84
171
  const mObj = {
@@ -113,10 +200,27 @@ class Merchant extends Base_1.default {
113
200
  returnPolicy: this.returnPolicy,
114
201
  subscriptionStatus: this.subscriptionStatus,
115
202
  hasActiveWebshop: this.hasActiveWebshop,
203
+ accountMode: this.accountMode,
204
+ accountClass: this.accountClass,
116
205
  };
206
+ if (this.sellerBusinessType) {
207
+ mObj.sellerBusinessType = this.sellerBusinessType;
208
+ }
209
+ if (this.managedByMerchantId) {
210
+ mObj.managedByMerchantId = this.managedByMerchantId;
211
+ }
212
+ if (typeof this.canUpgradeToStandalone === 'boolean') {
213
+ mObj.canUpgradeToStandalone = this.canUpgradeToStandalone;
214
+ }
215
+ if (this.featureAccess) {
216
+ mObj.featureAccess = this.featureAccess;
217
+ }
117
218
  if (this.channelPartners && Array.isArray(this.channelPartners)) {
118
219
  mObj.channelPartners = this.channelPartners;
119
220
  }
221
+ if (typeof this.isMarketplaceSeller === 'boolean') {
222
+ mObj.isMarketplaceSeller = this.isMarketplaceSeller;
223
+ }
120
224
  if (this.isChannelPartner) {
121
225
  mObj.isChannelPartner = this.isChannelPartner;
122
226
  }
@@ -138,6 +242,12 @@ class Merchant extends Base_1.default {
138
242
  if (this.hasReceiptPrinter) {
139
243
  mObj.hasReceiptPrinter = this.hasReceiptPrinter;
140
244
  }
245
+ if (this.hasLabelPrinter) {
246
+ mObj.hasLabelPrinter = this.hasLabelPrinter;
247
+ }
248
+ if (this.labelPrinterConfig) {
249
+ mObj.labelPrinterConfig = this.labelPrinterConfig;
250
+ }
141
251
  if (this.organizationNumbers && Object.keys(this.organizationNumbers).length > 0) {
142
252
  mObj.organizationNumbers = this.organizationNumbers;
143
253
  }
@@ -161,15 +271,43 @@ class Merchant extends Base_1.default {
161
271
  primaryDomain: this.primaryDomain,
162
272
  webhooks: this.webhooks,
163
273
  socialLinks: this.socialLinks,
274
+ accountMode: this.accountMode,
275
+ accountClass: this.accountClass,
164
276
  };
277
+ if (this.sellerBusinessType) {
278
+ data.sellerBusinessType = this.sellerBusinessType;
279
+ }
280
+ if (this.managedByMerchantId) {
281
+ data.managedByMerchantId = this.managedByMerchantId;
282
+ }
283
+ if (typeof this.canUpgradeToStandalone === 'boolean') {
284
+ data.canUpgradeToStandalone = this.canUpgradeToStandalone;
285
+ }
286
+ if (this.featureAccess) {
287
+ data.featureAccess = this.featureAccess;
288
+ }
165
289
  if (this.organizationNumbers && Object.keys(this.organizationNumbers).length > 0) {
166
290
  data.organizationNumbers = this.organizationNumbers;
167
291
  }
168
292
  return data;
169
293
  }
294
+ isManagedMarketplaceMerchant() {
295
+ return (this.accountMode === Merchant.MERCHANT_ACCOUNT_MODES.managed ||
296
+ this.accountClass === Merchant.MERCHANT_ACCOUNT_CLASSES.marketplaceSeller ||
297
+ this.isMarketplaceSeller === true);
298
+ }
170
299
  }
171
300
  Merchant.MERCHANT_TYPES = merchant_constants_1.MERCHANT_TYPES;
172
301
  Merchant.PAYMENT_TIERS = merchant_constants_1.PAYMENT_TIERS;
302
+ Merchant.MERCHANT_ACCOUNT_MODES = merchant_constants_1.MERCHANT_ACCOUNT_MODES;
303
+ Merchant.MERCHANT_ACCOUNT_CLASSES = merchant_constants_1.MERCHANT_ACCOUNT_CLASSES;
304
+ Merchant.MERCHANT_RELATIONSHIP_TYPES = merchant_constants_1.MERCHANT_RELATIONSHIP_TYPES;
305
+ Merchant.MARKETPLACE_SELLER_CAPABILITIES = merchant_constants_1.MARKETPLACE_SELLER_CAPABILITIES;
306
+ Merchant.DEFAULT_MARKETPLACE_SELLER_CAPABILITIES = merchant_constants_1.DEFAULT_MARKETPLACE_SELLER_CAPABILITIES;
307
+ Merchant.LABEL_PRINTER_BARCODE_SYMBOLOGIES = merchant_constants_1.LABEL_PRINTER_BARCODE_SYMBOLOGIES;
308
+ Merchant.LABEL_PRINTER_PROTOCOLS = merchant_constants_1.LABEL_PRINTER_PROTOCOLS;
309
+ Merchant.LABEL_PRINTER_CONFIG_DEFAULTS = merchant_constants_1.LABEL_PRINTER_CONFIG_DEFAULTS;
310
+ Merchant.DEFAULT_LABEL_LAYOUT = merchant_constants_1.DEFAULT_LABEL_LAYOUT;
173
311
  Merchant.INDUSTRY_TYPES = merchant_constants_1.INDUSTRY_TYPES;
174
312
  Merchant.UNIT_SYSTEM_TYPES = merchant_constants_1.UNIT_SYSTEM_TYPES;
175
313
  Merchant.METRIC_WEIGHT_TYPES = merchant_constants_1.METRIC_WEIGHT_TYPES;
@@ -218,7 +218,7 @@ class Product extends Base_1.default {
218
218
  : null,
219
219
  ]
220
220
  .concat(this.filterAttributes.clothingSize.map((s) => `clothingsize_attribute:${s}`))
221
- .concat(this.filterAttributes.productStyle.map((s) => `productstyle_attribute:${s}`))
221
+ .concat((this.filterAttributes.productStyle || []).map((s) => `productstyle_attribute:${s}`))
222
222
  .concat(this.materialCompTagsArrayForShopify().map((mc) => `materialcomposition_attribute:${mc}`))
223
223
  .concat(this.consignmentAttributes.salesChannel.map((s) => `salesChannel:${s}`))
224
224
  .filter((t) => t),
@@ -495,7 +495,7 @@ class Product extends Base_1.default {
495
495
  gender: this.filterAttributes.gender || this.FIELD_NOT_TRANSLATABLE_KEY,
496
496
  productCategory: this.filterAttributes.productCategory || this.FIELD_NOT_TRANSLATABLE_KEY,
497
497
  productType: this.filterAttributes.productType || this.FIELD_NOT_TRANSLATABLE_KEY,
498
- productStyle: this.filterAttributes.productStyle.join(', ') || this.FIELD_NOT_TRANSLATABLE_KEY,
498
+ productStyle: (this.filterAttributes.productStyle || []).join(', ') || this.FIELD_NOT_TRANSLATABLE_KEY,
499
499
  materialComposition: this.materialCompJoinedString() || this.FIELD_NOT_TRANSLATABLE_KEY,
500
500
  condition: this.filterAttributes.condition || this.FIELD_NOT_TRANSLATABLE_KEY,
501
501
  };
@@ -1072,6 +1072,17 @@ class Product extends Base_1.default {
1072
1072
  name: 'sku',
1073
1073
  type: 'string',
1074
1074
  },
1075
+ {
1076
+ // Flat array of every non-empty `variantInventory[].sku` so a
1077
+ // scanner / search bar can resolve a variant-level barcode to
1078
+ // the parent product. Maintained by the onWriteProduct trigger
1079
+ // (projection of variantInventory.sku → variantSkus). Empty
1080
+ // array for single-SKU products.
1081
+ facet: true,
1082
+ optional: true,
1083
+ name: 'variantSkus',
1084
+ type: 'string[]',
1085
+ },
1075
1086
  {
1076
1087
  facet: true,
1077
1088
  optional: true,
@@ -22,6 +22,12 @@ type MerchantMutableData = {
22
22
  primaryDomain: string;
23
23
  webhooks: MerchantWebHook[];
24
24
  socialLinks: SocialLinksType | null;
25
+ accountMode?: MerchantAccountMode | string;
26
+ accountClass?: MerchantAccountClass | string;
27
+ sellerBusinessType?: string;
28
+ managedByMerchantId?: string;
29
+ canUpgradeToStandalone?: boolean;
30
+ featureAccess?: MerchantFeatureAccess | null;
25
31
  organizationNumber?: string;
26
32
  organizationNumbers?: Record<string, string>;
27
33
  returnPolicy?: string;
@@ -46,12 +52,48 @@ type MerchantSystemOnlyMutableData = {
46
52
  hasAutomatedPayouts?: boolean;
47
53
  hasAIQuickList?: boolean;
48
54
  hasReceiptPrinter?: boolean;
55
+ hasLabelPrinter?: boolean;
56
+ labelPrinterConfig?: LabelPrinterConfigData;
49
57
  hasActiveWebshop?: boolean;
50
58
  subscriptionStatus?: string;
51
59
  channelPartners?: string[];
60
+ isMarketplaceSeller?: boolean;
61
+ };
62
+ type LabelPrinterConfigData = {
63
+ protocol: string;
64
+ widthMm: number;
65
+ heightMm: number;
66
+ dpi: number;
67
+ symbology: string;
68
+ layout: {
69
+ topElements: {
70
+ source: string;
71
+ visible: boolean;
72
+ fontSize: number;
73
+ paddingTop: number;
74
+ transform: string;
75
+ }[];
76
+ barcode: {
77
+ visible: boolean;
78
+ heightDots: number;
79
+ moduleWidth: 1 | 2;
80
+ paddingBottom: number;
81
+ };
82
+ sku: {
83
+ visible: boolean;
84
+ fontSize: number;
85
+ };
86
+ };
52
87
  };
53
88
  type MerchantObj = MerchantMutableData & MerchantSystemOnlyMutableData;
54
89
  type MerchantTypes = 'INDIVIDUAL' | 'BUSINESS';
90
+ type MerchantAccountMode = 'STANDALONE' | 'MANAGED';
91
+ type MerchantAccountClass = 'STANDARD' | 'MARKETPLACE_SELLER';
92
+ type MarketplaceSellerCapability = 'ACCESS_ADMIN_DASHBOARD' | 'MANAGE_OWN_PRODUCTS' | 'VIEW_OWN_ORDERS' | 'VIEW_OWN_TRANSACTIONS' | 'MANAGE_BUSINESS_PROFILE' | 'MANAGE_OWN_PAYOUTS' | 'UPGRADE_TO_STANDALONE';
93
+ type MerchantFeatureAccess = {
94
+ authExperience?: string;
95
+ capabilities?: MarketplaceSellerCapability[];
96
+ };
55
97
  type RibbnPaymentTiers = 'FREE' | 'TIER_ONE';
56
98
  type TransactionFees = {
57
99
  online: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rerobe-js-orm",
3
- "version": "4.8.6",
3
+ "version": "4.8.8",
4
4
  "description": "ReRobe's Javascript ORM Framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",