rerobe-js-orm 2.4.2 → 2.4.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.
Files changed (103) hide show
  1. package/lib/factories/FormState/Address/AddressFormStateFactory.d.ts +1 -1
  2. package/lib/factories/FormState/Address/AddressFormStateFactory.js +1 -1
  3. package/lib/factories/FormState/Merchant/MerchantFormStateFactory.d.ts +1 -1
  4. package/lib/factories/FormState/Merchant/MerchantFormStateFactory.js +1 -1
  5. package/lib/factories/FormState/Order/OrderFormStateFactory.d.ts +1 -1
  6. package/lib/factories/FormState/Order/OrderFormStateFactory.js +1 -1
  7. package/lib/factories/FormState/Order/RefundFormStateFactory.d.ts +5 -0
  8. package/lib/factories/FormState/Order/RefundFormStateFactory.js +10 -0
  9. package/lib/factories/FormState/PickUp/PickUpFormStateFactory.d.ts +1 -1
  10. package/lib/factories/FormState/PickUp/PickUpFormStateFactory.js +1 -1
  11. package/lib/factories/FormState/Product/ProductFormStateFactory.d.ts +2 -2
  12. package/lib/factories/FormState/Product/ProductFormStateFactory.js +3 -3
  13. package/lib/factories/FormState/ProductCollection/ProductCollectionFormStateFactory.d.ts +5 -0
  14. package/lib/factories/FormState/ProductCollection/ProductCollectionFormStateFactory.js +10 -0
  15. package/lib/factories/FormState/SellRequest/SellRequestFormStateFactory.d.ts +1 -1
  16. package/lib/factories/FormState/SellRequest/SellRequestFormStateFactory.js +1 -1
  17. package/lib/factories/FormState/User/UserFormStateFactory.d.ts +1 -1
  18. package/lib/factories/FormState/User/UserFormStateFactory.js +1 -1
  19. package/lib/factories/Merchant/MerchantFactory.d.ts +1 -1
  20. package/lib/factories/Merchant/MerchantFromFormState.d.ts +1 -1
  21. package/lib/factories/Merchant/MerchantFromFormState.js +13 -1
  22. package/lib/factories/Order/OrderFactory.d.ts +1 -1
  23. package/lib/factories/Order/OrderFromApp.js +4 -2
  24. package/lib/factories/Order/OrderFromFormState.d.ts +1 -1
  25. package/lib/factories/Order/OrderFromFormState.js +17 -15
  26. package/lib/factories/Order/OrderFromShopifyWebhook.js +126 -10
  27. package/lib/factories/Order/RefundFactory.d.ts +5 -0
  28. package/lib/factories/Order/RefundFactory.js +6 -0
  29. package/lib/factories/Order/RefundFromFormState.d.ts +5 -0
  30. package/lib/factories/Order/RefundFromFormState.js +29 -0
  31. package/lib/factories/PayoutAccount/PayoutAccountFromFormState.d.ts +1 -1
  32. package/lib/factories/Product/ProductFactory.d.ts +1 -1
  33. package/lib/factories/Product/ProductFromFormState.d.ts +1 -1
  34. package/lib/factories/Product/ProductFromFormState.js +29 -3
  35. package/lib/factories/ProductCollection/ProductCollectionFactory.d.ts +5 -0
  36. package/lib/factories/ProductCollection/ProductCollectionFactory.js +6 -0
  37. package/lib/factories/ProductCollection/ProductCollectionFromFormState.d.ts +5 -0
  38. package/lib/factories/ProductCollection/ProductCollectionFromFormState.js +29 -0
  39. package/lib/factories/User/UserFactory.d.ts +1 -1
  40. package/lib/factories/User/UserFromFormState.d.ts +1 -1
  41. package/lib/{models/FormStates → form-states}/Address/AddressFormState.d.ts +0 -0
  42. package/lib/{models/FormStates → form-states}/Address/AddressFormState.js +1 -3
  43. package/lib/{models/FormStates → form-states}/FormState.d.ts +1 -1
  44. package/lib/{models/FormStates → form-states}/FormState.js +1 -1
  45. package/lib/{models/FormStates → form-states}/Merchant/MerchantFormState.d.ts +1 -1
  46. package/lib/{models/FormStates → form-states}/Merchant/MerchantFormState.js +19 -4
  47. package/lib/form-states/Merchant/WebhookFormState.d.ts +8 -0
  48. package/lib/form-states/Merchant/WebhookFormState.js +49 -0
  49. package/lib/{models/FormStates → form-states}/Merchant/options.d.ts +8 -0
  50. package/lib/{models/FormStates → form-states}/Merchant/options.js +15 -2
  51. package/lib/{models/FormStates → form-states}/Order/OrderFormState.d.ts +2 -2
  52. package/lib/{models/FormStates → form-states}/Order/OrderFormState.js +12 -13
  53. package/lib/form-states/Order/RefundFormState.d.ts +17 -0
  54. package/lib/form-states/Order/RefundFormState.js +122 -0
  55. package/lib/{models/FormStates → form-states}/Order/options.d.ts +0 -0
  56. package/lib/{models/FormStates → form-states}/Order/options.js +1 -1
  57. package/lib/{models/FormStates → form-states}/PayoutAccount/PayoutAccountFormState.d.ts +1 -1
  58. package/lib/{models/FormStates → form-states}/PayoutAccount/PayoutAccountFormState.js +2 -2
  59. package/lib/{models/FormStates → form-states}/PayoutAccount/options.d.ts +0 -0
  60. package/lib/{models/FormStates → form-states}/PayoutAccount/options.js +0 -0
  61. package/lib/{models/FormStates → form-states}/PickUp/PickUpFormState.d.ts +0 -0
  62. package/lib/{models/FormStates → form-states}/PickUp/PickUpFormState.js +0 -0
  63. package/lib/{models/FormStates → form-states}/Product/ProductFormState.d.ts +8 -2
  64. package/lib/{models/FormStates → form-states}/Product/ProductFormState.js +24 -4
  65. package/lib/{models/FormStates → form-states}/Product/options.d.ts +0 -0
  66. package/lib/form-states/Product/options.js +3455 -0
  67. package/lib/form-states/ProductCollection/ProductCollectionFormState.d.ts +12 -0
  68. package/lib/form-states/ProductCollection/ProductCollectionFormState.js +80 -0
  69. package/lib/{models/FormStates → form-states}/SellRequest/SellRequestFormState.d.ts +0 -0
  70. package/lib/{models/FormStates → form-states}/SellRequest/SellRequestFormState.js +1 -1
  71. package/lib/{models/FormStates → form-states}/User/UserFormState.d.ts +1 -1
  72. package/lib/{models/FormStates → form-states}/User/UserFormState.js +2 -2
  73. package/lib/helpers/AnalyticsHelpers.js +3 -3
  74. package/lib/helpers/OrderHelpers.d.ts +5 -0
  75. package/lib/helpers/OrderHelpers.js +107 -0
  76. package/lib/helpers/ProductCollectionHelpers.d.ts +4 -0
  77. package/lib/helpers/ProductCollectionHelpers.js +27 -0
  78. package/lib/helpers/ReRobeProductHelpers.d.ts +6 -0
  79. package/lib/helpers/ReRobeProductHelpers.js +221 -41
  80. package/lib/helpers/Utilities.d.ts +1 -0
  81. package/lib/helpers/Utilities.js +10 -0
  82. package/lib/index.d.ts +7 -3
  83. package/lib/index.js +11 -3
  84. package/lib/models/Merchant.d.ts +16 -0
  85. package/lib/models/Merchant.js +40 -0
  86. package/lib/models/Order.d.ts +4 -0
  87. package/lib/models/Order.js +7 -1
  88. package/lib/models/Product.d.ts +1 -0
  89. package/lib/models/Product.js +37 -3
  90. package/lib/models/ProductCollection.d.ts +15 -0
  91. package/lib/models/ProductCollection.js +34 -0
  92. package/lib/models/Refund.d.ts +13 -0
  93. package/lib/models/Refund.js +40 -0
  94. package/lib/models/User.js +7 -2
  95. package/lib/types/merchant-types.d.ts +46 -13
  96. package/lib/types/product-collection-types.d.ts +63 -0
  97. package/lib/types/product-collection-types.js +13 -0
  98. package/lib/types/rerobe-order-types.d.ts +88 -26
  99. package/lib/types/rerobe-product-types.d.ts +30 -0
  100. package/lib/types/rerobe-user-types.d.ts +27 -21
  101. package/lib/types/rerobe-user-types.js +0 -1
  102. package/package.json +3 -2
  103. package/lib/models/FormStates/Product/options.js +0 -3453
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-ignore
4
4
  const lodash_1 = require("lodash");
5
- const options_1 = require("../models/FormStates/Product/options");
5
+ const options_1 = require("../form-states/Product/options");
6
6
  const ProductStateManager_1 = require("../models/ProductStateManager");
7
7
  class ReRobeProductHelpers {
8
8
  static calculateProductionFee(commission) {
@@ -23,7 +23,7 @@ class ReRobeProductHelpers {
23
23
  static buildReRobeEarnings(arrayLike) {
24
24
  const products = Array.isArray(arrayLike) ? arrayLike : [arrayLike];
25
25
  return products.reduce((acc, cur) => {
26
- const commission = cur.reRobeCommission ? Number(cur.reRobeCommission) : 0.35;
26
+ const commission = cur.reRobeCommission ? Number(cur.reRobeCommission) : 0.5;
27
27
  const priceToUse = cur.isOnSale === 'yes' && cur.salePrice ? cur.salePrice : cur.price;
28
28
  const listingPrice = Number(Number(priceToUse) <= 1 ? cur.suggestedResalePrice : priceToUse);
29
29
  const inventoryValue = acc[0] + listingPrice;
@@ -45,13 +45,16 @@ class ReRobeProductHelpers {
45
45
  return '';
46
46
  }
47
47
  static measurementsJoinedString(measurementsObj = {}) {
48
- if (measurementsObj && Object.keys(measurementsObj).length > 0) {
48
+ if (measurementsObj && Object.values(measurementsObj).filter((e) => e).length > 0) {
49
49
  const measurementStr = Object.keys(measurementsObj).reduce((acc, cur) => {
50
50
  let result = acc;
51
51
  if (cur !== 'unit') {
52
- result = acc
53
- ? `${measurementsObj[cur]} ${measurementsObj.unit} ${cur} x ${acc}`
54
- : `${measurementsObj[cur]} ${measurementsObj.unit} ${cur}`;
52
+ if (measurementsObj[cur]) {
53
+ if (acc === '') {
54
+ return (result = `${measurementsObj[cur]} ${measurementsObj.unit} ${cur}`);
55
+ }
56
+ return (result = `${measurementsObj[cur]} ${measurementsObj.unit} ${cur} x ${acc}`);
57
+ }
55
58
  }
56
59
  return result;
57
60
  }, '');
@@ -66,6 +69,7 @@ class ReRobeProductHelpers {
66
69
  }
67
70
  return '';
68
71
  }
72
+ // ToDo: refactor
69
73
  static getSizeLabel(clothingSize, shoeSize, jeanSize) {
70
74
  let sizeLabel = 'NA';
71
75
  if (clothingSize && clothingSize.length > 0 && clothingSize[0].trim()) {
@@ -95,6 +99,101 @@ class ReRobeProductHelpers {
95
99
  ];
96
100
  return descriptionArr.filter((d) => d);
97
101
  }
102
+ static autoCreateFullDescriptionHTML(productObj, customHeading) {
103
+ const productStyle = productObj.productStyle.join(', ');
104
+ const size = this.getSizeLabel(productObj.clothingSize, productObj.shoeSize, productObj.jeanSize);
105
+ const sizeComment = productObj.sizeComment;
106
+ const color = productObj.color;
107
+ const productRemarks = productObj.productRemarks;
108
+ const condition = productObj.condition;
109
+ const priceNew = productObj.purchasePrice;
110
+ const yearPurchased = productObj.yearPurchased;
111
+ const materials = this.materialCompJoinedString();
112
+ const measurements = this.measurementsJoinedString(productObj.measurements);
113
+ const fit = options_1.sizeCommentOptions.filter((option) => option.value === sizeComment)[0].label;
114
+ const descriptionObj = {
115
+ title: customHeading ? `<p>${customHeading}</p>\n` : 'REMOVE_ME',
116
+ line0: `<ul>`,
117
+ line1: size ? `\n<li>Size: ${size}</li>` : 'REMOVE_ME',
118
+ line2: fit ? `\n<li>Fit: ${fit}</li>` : 'REMOVE_ME',
119
+ line3: condition ? `\n<li>Condition: ${condition}</li>` : 'REMOVE_ME',
120
+ line4: color ? `\n<li>Color: ${color}</li>` : 'REMOVE_ME',
121
+ line5: productStyle && productStyle.length > 0 ? `\n<li>Style: ${productStyle}</li>` : 'REMOVE_ME',
122
+ line6: materials ? `\n<li>Material: ${materials}</li>` : 'REMOVE_ME',
123
+ line7: measurements ? `\n<li>Measurements: ${measurements}</li>` : 'REMOVE_ME',
124
+ line8: productRemarks ? `\n<li>Remarks: ${productRemarks}</li>` : 'REMOVE_ME',
125
+ line9: priceNew ? `\n<li>Purchase price: ${priceNew}</li>` : 'REMOVE_ME',
126
+ line10: yearPurchased ? `\n<li>Year purchased: ${yearPurchased}</li>` : 'REMOVE_ME',
127
+ line11: `\n</ul>`,
128
+ };
129
+ return Object.values(descriptionObj).reduce((acc, cur) => {
130
+ if (!cur.includes('REMOVE_ME')) {
131
+ acc = acc.concat(cur);
132
+ }
133
+ return acc;
134
+ }, '');
135
+ }
136
+ static autoCreateFullSwedishDescriptionForTraderaHTML(productDescription, merchantName = 'våra') {
137
+ return `
138
+ <p>
139
+ <strong>Beskrivning</strong>
140
+ ${String(productDescription).trim()}
141
+ </p>
142
+
143
+ <p>
144
+ <strong>Angiven storlek</strong>
145
+ <br>
146
+ Storlekar beskrivs enligt befintliga lappar på plaggen samt från före detta ägare av plagget. Om en lapp eller angiven storlek saknas, uppskattas en ungefärlig storlek av oss. Vi försöker även alltid att mäta produkter som underdelar, väskor och accessoarer. Vid mer information kring specifika plagg och dess mått finns vi ett meddelande bort med snabbt svar på detta.
147
+ </p>
148
+
149
+ <p>
150
+ <strong>Skick</strong>
151
+ <br>
152
+ Alla våra produkter är begagnade och säljs i befintligt skick. Varje plagg genomgår en noga genomförd kvalitetskontroll där de kontrolleras och autentiseras av ${merchantName}’s produktions team och säljs endast i bästa möjliga skick. Läs mer om detta under vår FAQ-flik på vår hemsida samt i vår app.
153
+ </p>
154
+
155
+ <p>
156
+ <strong>Prissättning</strong>
157
+ <br>
158
+ Våra priser är baserade på de accepterade prisförslag som angetts vid inlämning av plagg. Vi ger prisförslag enligt vår egen historiska data, research från andra plattformar samt vår djupa kunskap om modebranschen, dess nuvarande trender och stilar.
159
+ </p>
160
+
161
+ <p>
162
+ <strong>Betalning</strong>
163
+ <br>
164
+ Vi använder oss av "Tradera betalning" vilket innebär att du som köpare kan välja att betala med Swish, kort eller PayPal. ${merchantName}’s rabatter och erbjudanden gäller endast vid köp på vår hemsida samt via vår app.
165
+ <br>
166
+ <br>
167
+ Tänk på att produkter kan ligga i flera varukorgar samtidigt. Om din vara står som ”slut/såld” vid utcheckningen beror det på att någon annan hunnit före.
168
+ </p>
169
+
170
+ <p>
171
+ <strong>Retur</strong>
172
+ <br>
173
+ Vi har 14 dagars öppet köp från då din order har packats och levererats till dig. Returer är endast giltiga om prislappen sitter kvar, samt att varan är i samma skick som när du köpte den. Om du vill returnera något till oss, se till att kontakta vårt kundtjänst team på help@rerobe.se för att begära en förbetald, spårbar fraktetikett. Observera att vi inte accepterar returer som skickas utan vår fraktsedel.
174
+ <br>
175
+ <br>
176
+ Returavgiften är 63 SEK. Detta kommer att dras från ditt ursprungliga köp när vi har tagit emot den returnerade varan.
177
+ </p>
178
+
179
+ <p>
180
+ <strong>Frakt</strong>
181
+ <br>
182
+ Vi skickar alla våra ordrar via Postnord till hela Sverige, samt internationellt. Vi packar och skickar din order inom 24h, och din order ska vara hos dig inom 1-3 arbetsdagar. Om din order ska skickas till annan adress än den som är angiven på Tradera kontakt gärna oss innan betalning.
183
+ </p>
184
+
185
+ <p>
186
+ <strong>Vi har varierande avgifter för frakt</strong>
187
+ <br>
188
+ <br>
189
+ * Fri frakt om du hämtar din beställning i vår butik på Södermalm
190
+ <br>
191
+ * 49 SEK för alla beställningar som skickas i Sverige
192
+ <br>
193
+ * 299 SEK för alla beställningar som skickas utanför Sverige
194
+ </p>
195
+ `;
196
+ }
98
197
  static prepareProductForMutation(productObj, mediaInputArr = []) {
99
198
  const productObjClone = Object.assign({}, productObj);
100
199
  const { status, dateInQualityControl, dateInPendingPublication, dateListedOnline, publishedAt, price } = productObj;
@@ -124,14 +223,95 @@ class ReRobeProductHelpers {
124
223
  }
125
224
  return productObjClone;
126
225
  }
226
+ static createTimestampsForStates(productObj) {
227
+ const docFieldsToUpdate = {};
228
+ if (productObj) {
229
+ const { dateSold, status, sellRequestReviewDraftTimestamp, sellRequestReviewTimestamp, rejectedTimestamp, holdTimestamp, acceptedTimestamp, sellerToDropOffTimestamp, sellerToShipTimestamp, sellerToGetPickUpTimestamp, qualityControlTimestamp, pendingPublicationTimestamp, listedTimestamp, clearanceTimestamp, reservedTimestamp, soldTimestamp, soldSellerToBePaidTimestamp, soldSellerPaidTimestamp, returnedTimestamp, sellerSelfRejectTimestamp, liquidationRequestedTimestamp, sellerLiquidatedTimestamp, } = productObj;
230
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellRequestReviewDraft && !sellRequestReviewDraftTimestamp) {
231
+ docFieldsToUpdate.sellRequestReviewDraftTimestamp = new Date().getTime();
232
+ }
233
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellRequestReview && !sellRequestReviewTimestamp) {
234
+ docFieldsToUpdate.sellRequestReviewTimestamp = new Date().getTime();
235
+ }
236
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.rejected && !rejectedTimestamp) {
237
+ docFieldsToUpdate.rejectedTimestamp = new Date().getTime();
238
+ }
239
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.hold && !holdTimestamp) {
240
+ docFieldsToUpdate.holdTimestamp = new Date().getTime();
241
+ }
242
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.accepted && !acceptedTimestamp) {
243
+ docFieldsToUpdate.acceptedTimestamp = new Date().getTime();
244
+ }
245
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellerToDropOff && !sellerToDropOffTimestamp) {
246
+ docFieldsToUpdate.sellerToDropOffTimestamp = new Date().getTime();
247
+ }
248
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellerToShip && !sellerToShipTimestamp) {
249
+ docFieldsToUpdate.sellerToShipTimestamp = new Date().getTime();
250
+ }
251
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellerToGetPickUp && !sellerToGetPickUpTimestamp) {
252
+ docFieldsToUpdate.sellerToGetPickUpTimestamp = new Date().getTime();
253
+ }
254
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.qualityControl && !qualityControlTimestamp) {
255
+ docFieldsToUpdate.qualityControlTimestamp = new Date().getTime();
256
+ }
257
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.pendingPublication && !pendingPublicationTimestamp) {
258
+ docFieldsToUpdate.pendingPublicationTimestamp = new Date().getTime();
259
+ }
260
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.listed && !listedTimestamp) {
261
+ docFieldsToUpdate.listedTimestamp = new Date().getTime();
262
+ }
263
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.clearance && !clearanceTimestamp) {
264
+ docFieldsToUpdate.clearanceTimestamp = new Date().getTime();
265
+ }
266
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.reserved && !reservedTimestamp) {
267
+ docFieldsToUpdate.reservedTimestamp = new Date().getTime();
268
+ }
269
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sold && !soldTimestamp) {
270
+ docFieldsToUpdate.soldTimestamp =
271
+ dateSold && typeof dateSold === 'string' ? new Date(dateSold).getTime() : new Date().getTime();
272
+ }
273
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.soldSellerToBePaid && !soldSellerToBePaidTimestamp) {
274
+ const timeNow = new Date().getTime();
275
+ docFieldsToUpdate.soldSellerToBePaidTimestamp = timeNow;
276
+ if (!soldTimestamp) {
277
+ docFieldsToUpdate.soldTimestamp =
278
+ dateSold && typeof dateSold === 'string' ? new Date(dateSold).getTime() : timeNow;
279
+ }
280
+ }
281
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.soldSellerPaid && !soldSellerPaidTimestamp) {
282
+ const timeNow = new Date().getTime();
283
+ docFieldsToUpdate.soldSellerPaidTimestamp = timeNow;
284
+ if (!soldSellerToBePaidTimestamp) {
285
+ docFieldsToUpdate.soldSellerToBePaidTimestamp = timeNow;
286
+ }
287
+ if (!soldTimestamp) {
288
+ docFieldsToUpdate.soldTimestamp =
289
+ dateSold && typeof dateSold === 'string' ? new Date(dateSold).getTime() : timeNow;
290
+ }
291
+ }
292
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.returned && !returnedTimestamp) {
293
+ docFieldsToUpdate.returnedTimestamp = new Date().getTime();
294
+ }
295
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellerSelfReject && !sellerSelfRejectTimestamp) {
296
+ docFieldsToUpdate.sellerSelfRejectTimestamp = new Date().getTime();
297
+ }
298
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.liquidationRequested && !liquidationRequestedTimestamp) {
299
+ docFieldsToUpdate.liquidationRequestedTimestamp = new Date().getTime();
300
+ }
301
+ if (status === ProductStateManager_1.default.PRODUCT_STATES.sellerLiquidated && !sellerLiquidatedTimestamp) {
302
+ docFieldsToUpdate.sellerLiquidatedTimestamp = new Date().getTime();
303
+ }
304
+ }
305
+ return docFieldsToUpdate;
306
+ }
127
307
  static getSubtitle(title) {
128
- if (typeof title === "string" && title.trim()) {
308
+ if (typeof title === 'string' && title.trim()) {
129
309
  return title.split('by')[0].trim();
130
310
  }
131
311
  return '';
132
312
  }
133
313
  static sizeFinder(sizeLabel, sizeToMatch) {
134
- if (typeof sizeLabel !== "string" || typeof sizeToMatch !== "string") {
314
+ if (typeof sizeLabel !== 'string' || typeof sizeToMatch !== 'string') {
135
315
  return false;
136
316
  }
137
317
  const size = sizeLabel.trim();
@@ -142,66 +322,42 @@ class ReRobeProductHelpers {
142
322
  }
143
323
  break;
144
324
  case 'XXS':
145
- if (size === 'XXS'
146
- || size === 'XXS (32)'
147
- || size === 'XXS (42)'
148
- || size === 'XXS (32/42)') {
325
+ if (size === 'XXS' || size === 'XXS (32)' || size === 'XXS (42)' || size === 'XXS (32/42)') {
149
326
  return true;
150
327
  }
151
328
  break;
152
329
  case 'XS':
153
- if (size === 'XS'
154
- || size === 'XS (34)'
155
- || size === 'XXS (44)'
156
- || size === 'XXS (34/44)') {
330
+ if (size === 'XS' || size === 'XS (34)' || size === 'XXS (44)' || size === 'XXS (34/44)') {
157
331
  return true;
158
332
  }
159
333
  break;
160
334
  case 'S':
161
- if (size === 'S'
162
- || size === 'S (36)'
163
- || size === 'S (46)'
164
- || size === 'S (36/46)') {
335
+ if (size === 'S' || size === 'S (36)' || size === 'S (46)' || size === 'S (36/46)') {
165
336
  return true;
166
337
  }
167
338
  break;
168
339
  case 'M':
169
- if (size === 'M'
170
- || size === 'M (38)'
171
- || size === 'M (48)'
172
- || size === 'M (38/48)') {
340
+ if (size === 'M' || size === 'M (38)' || size === 'M (48)' || size === 'M (38/48)') {
173
341
  return true;
174
342
  }
175
343
  break;
176
344
  case 'L':
177
- if (size === 'L'
178
- || size === 'L (40)'
179
- || size === 'L (50)'
180
- || size === 'L (40/50)') {
345
+ if (size === 'L' || size === 'L (40)' || size === 'L (50)' || size === 'L (40/50)') {
181
346
  return true;
182
347
  }
183
348
  break;
184
349
  case 'XL':
185
- if (size === 'XL'
186
- || size === 'XL (42)'
187
- || size === 'XL (52)'
188
- || size === 'XL (42/52)') {
350
+ if (size === 'XL' || size === 'XL (42)' || size === 'XL (52)' || size === 'XL (42/52)') {
189
351
  return true;
190
352
  }
191
353
  break;
192
354
  case 'XXL':
193
- if (size === 'XXL'
194
- || size === 'XXL (44)'
195
- || size === 'XXL (54)'
196
- || size === 'XXL (44/54)') {
355
+ if (size === 'XXL' || size === 'XXL (44)' || size === 'XXL (54)' || size === 'XXL (44/54)') {
197
356
  return true;
198
357
  }
199
358
  break;
200
359
  case 'XXXL':
201
- if (size === 'XXXL'
202
- || size === 'XXXL (46)'
203
- || size === 'XXXL (56)'
204
- || size === 'XXXL (46/56)') {
360
+ if (size === 'XXXL' || size === 'XXXL (46)' || size === 'XXXL (56)' || size === 'XXXL (46/56)') {
205
361
  return true;
206
362
  }
207
363
  break;
@@ -210,6 +366,31 @@ class ReRobeProductHelpers {
210
366
  }
211
367
  return false;
212
368
  }
369
+ static convertReRobeSizeToStandardSize(productObj) {
370
+ let size = 'Not Applicable';
371
+ if (productObj.productCategory === 'Clothing' && productObj.productType !== 'Jeans') {
372
+ if (productObj.clothingSize && productObj.clothingSize.length > 0) {
373
+ const arr = productObj.clothingSize[0].split('(');
374
+ if (arr.length === 2) {
375
+ const [universalSize] = arr;
376
+ size = universalSize.trim();
377
+ }
378
+ if (arr.length === 1) {
379
+ [size] = productObj.clothingSize;
380
+ }
381
+ }
382
+ }
383
+ if (productObj.productType === 'Jeans') {
384
+ size = productObj.jeanSize;
385
+ }
386
+ if (productObj.productCategory === 'Shoes') {
387
+ size = productObj.shoeSize;
388
+ }
389
+ if (size === 'No Size') {
390
+ size = 'Not Applicable';
391
+ }
392
+ return size;
393
+ }
213
394
  // RibbnProductHelper candidate
214
395
  static buildLineItem(productObj, quantity = 1) {
215
396
  const { documentId, title, price, coverPhotoUrl, imageUrls, brand } = productObj;
@@ -228,6 +409,5 @@ class ReRobeProductHelpers {
228
409
  quantity,
229
410
  };
230
411
  }
231
- ;
232
412
  }
233
413
  exports.default = ReRobeProductHelpers;
@@ -8,4 +8,5 @@ export default class Utilities {
8
8
  capitalizeString(s: string): string;
9
9
  startCase(s: string): string;
10
10
  constantCase(str: string): any;
11
+ makeRandId(length: number): string;
11
12
  }
@@ -50,5 +50,15 @@ class Utilities {
50
50
  constantCase(str) {
51
51
  return lodash_1.snakeCase(str).toUpperCase();
52
52
  }
53
+ makeRandId(length) {
54
+ let result = '';
55
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
56
+ const charactersLength = characters.length;
57
+ // eslint-disable-next-line no-plusplus
58
+ for (let i = 0; i < length; i++) {
59
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
60
+ }
61
+ return result;
62
+ }
53
63
  }
54
64
  exports.default = Utilities;
package/lib/index.d.ts CHANGED
@@ -2,6 +2,8 @@ import ProductFromShopifyJSClientJSONDoc from './factories/Product/ProductFromSh
2
2
  import ProductFromAlgoliaJSONDoc from './factories/Product/ProductFromAlgoliaJSONDoc';
3
3
  import ProductFromShopifyWebhookJSONDoc from './factories/Product/ProductFromShopifyWebhookJSONDoc';
4
4
  import ProductFormStateFactory from './factories/FormState/Product/ProductFormStateFactory';
5
+ import ProductCollectionFormStateFactory from './factories/FormState/ProductCollection/ProductCollectionFormStateFactory';
6
+ import ProductCollectionHelpers from './helpers/ProductCollectionHelpers';
5
7
  import SellRequestFormStateFactory from './factories/FormState/SellRequest/SellRequestFormStateFactory';
6
8
  import PickUpFormStateFactory from './factories/FormState/PickUp/PickUpFormStateFactory';
7
9
  import UserFormStateFactory from './factories/FormState/User/UserFormStateFactory';
@@ -18,15 +20,17 @@ import OrderFromShopifyAdminApi from './factories/Order/OrderFromShopifyAdminApi
18
20
  import OrderFromShopifyStorefrontApi from './factories/Order/OrderFromShopifyStorefrontApi';
19
21
  import OrderFromApp from './factories/Order/OrderFromApp';
20
22
  import OrderFormStateFactory from './factories/FormState/Order/OrderFormStateFactory';
23
+ import RefundFormStateFactory from './factories/FormState/Order/RefundFormStateFactory';
21
24
  import Product from './models/Product';
22
25
  import Order from './models/Order';
23
26
  import Merchant from './models/Merchant';
24
27
  import User from './models/User';
25
28
  import ProductStateManager from './models/ProductStateManager';
26
29
  import PayoutAccount from './models/PayoutAccount';
27
- import PayoutAccountFormState from './models/FormStates/PayoutAccount/PayoutAccountFormState';
28
- import MerchantFormState from './models/FormStates/Merchant/MerchantFormState';
30
+ import PayoutAccountFormState from './form-states/PayoutAccount/PayoutAccountFormState';
31
+ import MerchantFormState from './form-states/Merchant/MerchantFormState';
32
+ import WebhookFormState from './form-states/Merchant/WebhookFormState';
29
33
  import ReRobeProductHelpers from './helpers/ReRobeProductHelpers';
30
34
  import AnalyticsHelpers from './helpers/AnalyticsHelpers';
31
35
  import OrderHelpers from './helpers/OrderHelpers';
32
- export { ProductFromAlgoliaJSONDoc, ProductFromShopifyWebhookJSONDoc, ProductFromShopifyJSClientJSONDoc, ProductFormStateFactory, SellRequestFormStateFactory, PickUpFormStateFactory, AddressFormStateFactory, UserFormStateFactory, UserFromShopifyWebhookJSONDoc, UserFromAuthTemplateMethod, DraftOrderFromMirakl, DraftOrderFromApp, ChatRoomFromNewUserSignUp, KlarnaSessionFactory, Product, ProductStateManager, Order, OrderFromShopifyWebhook, OrderFromShopifyAdminApi, OrderFromShopifyStorefrontApi, OrderFromApp, OrderFormStateFactory, PayoutAccount, PayoutAccountFormState, Merchant, MerchantFormState, MerchantFormStateFactory, ReRobeProductHelpers, User, AnalyticsHelpers, OrderHelpers };
36
+ export { ProductFromAlgoliaJSONDoc, ProductFromShopifyWebhookJSONDoc, ProductFromShopifyJSClientJSONDoc, ProductFormStateFactory, ProductCollectionFormStateFactory, ProductCollectionHelpers, SellRequestFormStateFactory, PickUpFormStateFactory, AddressFormStateFactory, UserFormStateFactory, UserFromShopifyWebhookJSONDoc, UserFromAuthTemplateMethod, DraftOrderFromMirakl, DraftOrderFromApp, ChatRoomFromNewUserSignUp, KlarnaSessionFactory, Product, ProductStateManager, Order, OrderFromShopifyWebhook, OrderFromShopifyAdminApi, OrderFromShopifyStorefrontApi, OrderFromApp, OrderFormStateFactory, RefundFormStateFactory, PayoutAccount, PayoutAccountFormState, Merchant, MerchantFormState, MerchantFormStateFactory, ReRobeProductHelpers, User, AnalyticsHelpers, OrderHelpers, WebhookFormState, };
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OrderHelpers = exports.AnalyticsHelpers = exports.User = exports.ReRobeProductHelpers = exports.MerchantFormStateFactory = exports.MerchantFormState = exports.Merchant = exports.PayoutAccountFormState = exports.PayoutAccount = exports.OrderFormStateFactory = 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.ProductFormStateFactory = exports.ProductFromShopifyJSClientJSONDoc = exports.ProductFromShopifyWebhookJSONDoc = exports.ProductFromAlgoliaJSONDoc = void 0;
3
+ exports.WebhookFormState = exports.OrderHelpers = exports.AnalyticsHelpers = exports.User = exports.ReRobeProductHelpers = exports.MerchantFormStateFactory = exports.MerchantFormState = exports.Merchant = exports.PayoutAccountFormState = exports.PayoutAccount = exports.RefundFormStateFactory = exports.OrderFormStateFactory = 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 = 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");
@@ -9,6 +9,10 @@ const ProductFromShopifyWebhookJSONDoc_1 = require("./factories/Product/ProductF
9
9
  exports.ProductFromShopifyWebhookJSONDoc = ProductFromShopifyWebhookJSONDoc_1.default;
10
10
  const ProductFormStateFactory_1 = require("./factories/FormState/Product/ProductFormStateFactory");
11
11
  exports.ProductFormStateFactory = ProductFormStateFactory_1.default;
12
+ const ProductCollectionFormStateFactory_1 = require("./factories/FormState/ProductCollection/ProductCollectionFormStateFactory");
13
+ exports.ProductCollectionFormStateFactory = ProductCollectionFormStateFactory_1.default;
14
+ const ProductCollectionHelpers_1 = require("./helpers/ProductCollectionHelpers");
15
+ exports.ProductCollectionHelpers = ProductCollectionHelpers_1.default;
12
16
  const SellRequestFormStateFactory_1 = require("./factories/FormState/SellRequest/SellRequestFormStateFactory");
13
17
  exports.SellRequestFormStateFactory = SellRequestFormStateFactory_1.default;
14
18
  const PickUpFormStateFactory_1 = require("./factories/FormState/PickUp/PickUpFormStateFactory");
@@ -41,6 +45,8 @@ const OrderFromApp_1 = require("./factories/Order/OrderFromApp");
41
45
  exports.OrderFromApp = OrderFromApp_1.default;
42
46
  const OrderFormStateFactory_1 = require("./factories/FormState/Order/OrderFormStateFactory");
43
47
  exports.OrderFormStateFactory = OrderFormStateFactory_1.default;
48
+ const RefundFormStateFactory_1 = require("./factories/FormState/Order/RefundFormStateFactory");
49
+ exports.RefundFormStateFactory = RefundFormStateFactory_1.default;
44
50
  const Product_1 = require("./models/Product");
45
51
  exports.Product = Product_1.default;
46
52
  const Order_1 = require("./models/Order");
@@ -53,10 +59,12 @@ const ProductStateManager_1 = require("./models/ProductStateManager");
53
59
  exports.ProductStateManager = ProductStateManager_1.default;
54
60
  const PayoutAccount_1 = require("./models/PayoutAccount");
55
61
  exports.PayoutAccount = PayoutAccount_1.default;
56
- const PayoutAccountFormState_1 = require("./models/FormStates/PayoutAccount/PayoutAccountFormState");
62
+ const PayoutAccountFormState_1 = require("./form-states/PayoutAccount/PayoutAccountFormState");
57
63
  exports.PayoutAccountFormState = PayoutAccountFormState_1.default;
58
- const MerchantFormState_1 = require("./models/FormStates/Merchant/MerchantFormState");
64
+ const MerchantFormState_1 = require("./form-states/Merchant/MerchantFormState");
59
65
  exports.MerchantFormState = MerchantFormState_1.default;
66
+ const WebhookFormState_1 = require("./form-states/Merchant/WebhookFormState");
67
+ exports.WebhookFormState = WebhookFormState_1.default;
60
68
  const ReRobeProductHelpers_1 = require("./helpers/ReRobeProductHelpers");
61
69
  exports.ReRobeProductHelpers = ReRobeProductHelpers_1.default;
62
70
  const AnalyticsHelpers_1 = require("./helpers/AnalyticsHelpers");
@@ -31,6 +31,11 @@ export default class Merchant extends Base {
31
31
  pound: string;
32
32
  once: string;
33
33
  };
34
+ static RIBBN_WEBHOOK_EVENT_DICT: {
35
+ productCreate: string;
36
+ productUpdate: string;
37
+ productDelete: string;
38
+ };
34
39
  name: string;
35
40
  id: string;
36
41
  type: MerchantTypes | string;
@@ -45,6 +50,17 @@ export default class Merchant extends Base {
45
50
  timeZone: string;
46
51
  unitSystem: UnitSystemTypes | null;
47
52
  defaultWeightUnit: MetricWeightTypes | ImperialWeightTypes | null;
53
+ defaultLocation: string;
54
+ documentId: string;
55
+ numCustomers: number;
56
+ numFiles: number;
57
+ numOrders: number;
58
+ numProducts: number;
59
+ orderTags: string[];
60
+ theme: MerchantTheme;
61
+ webshopTenantId: string;
62
+ webhooks: MerchantWebHook[];
63
+ sharedSecret: string;
48
64
  constructor(props?: any);
49
65
  toObj(): MerchantObj;
50
66
  }
@@ -27,6 +27,29 @@ class Merchant extends Base_1.default {
27
27
  this.timeZone = (props === null || props === void 0 ? void 0 : props.timeZone) || '';
28
28
  this.unitSystem = (props === null || props === void 0 ? void 0 : props.unitSystem) || Merchant.UNIT_SYSTEM_TYPES.metric;
29
29
  this.defaultWeightUnit = (props === null || props === void 0 ? void 0 : props.defaultWeightUnit) || Merchant.METRIC_WEIGHT_TYPES.gram;
30
+ this.defaultLocation = (props === null || props === void 0 ? void 0 : props.defaultLocation) || '';
31
+ this.documentId = (props === null || props === void 0 ? void 0 : props.documentId) || '';
32
+ this.numCustomers = (props === null || props === void 0 ? void 0 : props.numCustomers) || 0;
33
+ this.numFiles = (props === null || props === void 0 ? void 0 : props.numFiles) || 0;
34
+ this.numOrders = (props === null || props === void 0 ? void 0 : props.numOrders) || 0;
35
+ this.numProducts = (props === null || props === void 0 ? void 0 : props.numProducts) || 0;
36
+ this.orderTags = (props === null || props === void 0 ? void 0 : props.orderTags) || [];
37
+ this.theme = (props === null || props === void 0 ? void 0 : props.theme) || {
38
+ layoutType: 'StandardNavLayout',
39
+ bgColor: '#fff',
40
+ bgFooterColor: '#000',
41
+ primaryColor: '#009688',
42
+ footerTextColor: '#fff',
43
+ textColor: '#000',
44
+ successColor: '#009460',
45
+ warningColor: '#edaf4a',
46
+ errorColor: '#da344d',
47
+ logoImageSrc: '',
48
+ logoImageWidth: '60',
49
+ };
50
+ this.webshopTenantId = (props === null || props === void 0 ? void 0 : props.webshopTenantId) || '';
51
+ this.webhooks = (props === null || props === void 0 ? void 0 : props.webhooks) || [];
52
+ this.sharedSecret = (props === null || props === void 0 ? void 0 : props.sharedSecret) || '';
30
53
  }
31
54
  toObj() {
32
55
  return {
@@ -44,6 +67,17 @@ class Merchant extends Base_1.default {
44
67
  timeZone: this.timeZone,
45
68
  unitSystem: this.unitSystem,
46
69
  defaultWeightUnit: this.defaultWeightUnit,
70
+ defaultLocation: this.defaultLocation,
71
+ documentId: this.documentId,
72
+ numCustomers: this.numCustomers,
73
+ numFiles: this.numFiles,
74
+ numOrders: this.numOrders,
75
+ numProducts: this.numProducts,
76
+ orderTags: this.orderTags,
77
+ theme: this.theme,
78
+ webshopTenantId: this.webshopTenantId,
79
+ webhooks: this.webhooks,
80
+ sharedSecret: this.sharedSecret,
47
81
  };
48
82
  }
49
83
  }
@@ -79,3 +113,9 @@ Merchant.IMPERIAL_WEIGHT_TYPES = {
79
113
  pound: 'POUND',
80
114
  once: 'ONCE',
81
115
  };
116
+ Merchant.RIBBN_WEBHOOK_EVENT_DICT = {
117
+ productCreate: 'PRODUCT_CREATE',
118
+ productUpdate: 'PRODUCT_UPDATE',
119
+ productDelete: 'PRODUCT_DELETE',
120
+ // TODO: Add webhook events for other models (Orders, User, etc)
121
+ };
@@ -24,6 +24,7 @@ export default class Order extends Base {
24
24
  };
25
25
  static FULFILLMENT_TYPES: {
26
26
  fulfilled: string;
27
+ partiallyFulfilled: string;
27
28
  unfulfilled: string;
28
29
  inProgress: string;
29
30
  canceled: string;
@@ -33,6 +34,7 @@ export default class Order extends Base {
33
34
  paid: string;
34
35
  pending: string;
35
36
  refunded: string;
37
+ partiallyRefunded: string;
36
38
  authorized: string;
37
39
  };
38
40
  id: string;
@@ -53,6 +55,7 @@ export default class Order extends Base {
53
55
  shippingType: ReRobeShippingAndDeliveryTypes;
54
56
  shopifyId: string | null;
55
57
  shopifyOrderNumber: number | null;
58
+ ribbnOrderNumber: number | null;
56
59
  subtotalPrice: Money;
57
60
  tags: string[] | string | null;
58
61
  totalDiscount: Money;
@@ -77,6 +80,7 @@ export default class Order extends Base {
77
80
  notes: string;
78
81
  customerName: string;
79
82
  merchantId: string;
83
+ refunds: OrderRefund[];
80
84
  constructor(props?: any);
81
85
  toObj(): ReRobeOrderObj;
82
86
  }
@@ -6,7 +6,7 @@ class Order extends Base_1.default {
6
6
  super();
7
7
  this.id = (props === null || props === void 0 ? void 0 : props.id) || '';
8
8
  this.appliedDiscount = (props === null || props === void 0 ? void 0 : props.appliedDiscount) || {
9
- amount: 0
9
+ amount: 0,
10
10
  };
11
11
  this.documentId = (props === null || props === void 0 ? void 0 : props.documentId) || '';
12
12
  this.name = (props === null || props === void 0 ? void 0 : props.name) || '';
@@ -49,6 +49,7 @@ class Order extends Base_1.default {
49
49
  this.shippingType = (props === null || props === void 0 ? void 0 : props.shippingType) || Order.SHIPPING_TYPES.localPickUp;
50
50
  this.shopifyId = (props === null || props === void 0 ? void 0 : props.shopifyId) || null;
51
51
  this.shopifyOrderNumber = (props === null || props === void 0 ? void 0 : props.shopifyOrderNumber) || null;
52
+ this.ribbnOrderNumber = (props === null || props === void 0 ? void 0 : props.ribbnOrderNumber) || null;
52
53
  this.subtotalPrice = (props === null || props === void 0 ? void 0 : props.subtotalPrice) || {
53
54
  amount: 0,
54
55
  };
@@ -102,6 +103,7 @@ class Order extends Base_1.default {
102
103
  this.notes = (props === null || props === void 0 ? void 0 : props.notes) || '';
103
104
  this.customerName = (props === null || props === void 0 ? void 0 : props.customerName) || '';
104
105
  this.merchantId = (props === null || props === void 0 ? void 0 : props.merchantId) || '';
106
+ this.refunds = (props === null || props === void 0 ? void 0 : props.refunds) || [];
105
107
  }
106
108
  toObj() {
107
109
  const orderObj = {
@@ -123,6 +125,7 @@ class Order extends Base_1.default {
123
125
  shippingType: this.shippingType,
124
126
  shopifyId: this.shopifyId,
125
127
  shopifyOrderNumber: this.shopifyOrderNumber,
128
+ ribbnOrderNumber: this.ribbnOrderNumber,
126
129
  subtotalPrice: this.subtotalPrice,
127
130
  tags: this.tags,
128
131
  totalDiscount: this.totalDiscount,
@@ -144,6 +147,7 @@ class Order extends Base_1.default {
144
147
  notes: this.notes,
145
148
  customerName: this.customerName,
146
149
  merchantId: this.merchantId,
150
+ refunds: this.refunds,
147
151
  };
148
152
  if (this.paymentType) {
149
153
  orderObj.paymentType = this.paymentType;
@@ -182,6 +186,7 @@ Order.SALES_CHANNELS = {
182
186
  };
183
187
  Order.FULFILLMENT_TYPES = {
184
188
  fulfilled: 'FULFILLED',
189
+ partiallyFulfilled: 'PARTIALLY_FULFILLED',
185
190
  unfulfilled: 'UNFULFILLED',
186
191
  inProgress: 'IN_PROGRESS',
187
192
  canceled: 'CANCELED',
@@ -191,5 +196,6 @@ Order.FINANCIAL_TYPES = {
191
196
  paid: 'PAID',
192
197
  pending: 'PENDING',
193
198
  refunded: 'REFUNDED',
199
+ partiallyRefunded: 'PARTIALLY_REFUNDED',
194
200
  authorized: 'AUTHORIZED',
195
201
  };
@@ -3,6 +3,7 @@ export default class Product extends Base {
3
3
  attributes: ProductAttributes;
4
4
  filterAttributes: ProductFilterAttributes;
5
5
  consignmentAttributes: ProductConsignmentAttributes;
6
+ timestampAttributes: ProductTimestampAttributes;
6
7
  FIELD_NOT_TRANSLATABLE_KEY: string;
7
8
  constructor(props?: any);
8
9
  toPartialObj(): ShopifyProduct;