cloudcommerce 0.0.23 → 0.0.26

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 (46) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/CHANGELOG.md +22 -0
  3. package/CONTRIBUTING.md +4 -2
  4. package/package.json +11 -7
  5. package/packages/api/lib/types/applications.d.ts +100 -91
  6. package/packages/api/lib/types/authentications.d.ts +10 -0
  7. package/packages/api/lib/types/brands.d.ts +9 -0
  8. package/packages/api/lib/types/carts.d.ts +16 -0
  9. package/packages/api/lib/types/categories.d.ts +9 -0
  10. package/packages/api/lib/types/collections.d.ts +8 -0
  11. package/packages/api/lib/types/customers.d.ts +28 -0
  12. package/packages/api/lib/types/grids.d.ts +8 -0
  13. package/packages/api/lib/types/orders.d.ts +287 -222
  14. package/packages/api/lib/types/products.d.ts +69 -0
  15. package/packages/api/lib/types/stores.d.ts +3 -0
  16. package/packages/api/package.json +1 -1
  17. package/packages/api/src/types/applications.d.ts +100 -91
  18. package/packages/api/src/types/authentications.d.ts +10 -0
  19. package/packages/api/src/types/brands.d.ts +9 -0
  20. package/packages/api/src/types/carts.d.ts +16 -0
  21. package/packages/api/src/types/categories.d.ts +9 -0
  22. package/packages/api/src/types/collections.d.ts +8 -0
  23. package/packages/api/src/types/customers.d.ts +28 -0
  24. package/packages/api/src/types/grids.d.ts +8 -0
  25. package/packages/api/src/types/orders.d.ts +287 -222
  26. package/packages/api/src/types/products.d.ts +69 -0
  27. package/packages/api/src/types/stores.d.ts +3 -0
  28. package/packages/apps/discounts/package.json +1 -1
  29. package/packages/cli/lib/index.js +27 -1
  30. package/packages/cli/package.json +1 -1
  31. package/packages/cli/src/index.ts +35 -1
  32. package/packages/firebase/config.js +5 -0
  33. package/packages/firebase/lib/config.js +26 -0
  34. package/packages/firebase/lib/config.js.map +1 -0
  35. package/packages/firebase/lib/defaults.js +8 -0
  36. package/packages/firebase/lib/defaults.js.map +1 -0
  37. package/packages/firebase/lib/index.js +27 -0
  38. package/packages/firebase/lib/index.js.map +1 -0
  39. package/packages/firebase/package.json +10 -4
  40. package/packages/firebase/src/config.ts +29 -0
  41. package/packages/firebase/src/defaults.ts +7 -0
  42. package/packages/firebase/src/index.ts +26 -0
  43. package/packages/firebase/tsconfig.json +3 -0
  44. package/packages/storefront/package.json +2 -2
  45. package/pnpm-lock.yaml +294 -63
  46. package/packages/firebase/src/index.js +0 -0
@@ -10,6 +10,9 @@ export interface Products {
10
10
  created_at: string;
11
11
  updated_at: string;
12
12
  store_id: number;
13
+ /**
14
+ * @maxItems 10
15
+ */
13
16
  channel_ids?: string[];
14
17
  /**
15
18
  * Product unique reference code
@@ -102,6 +105,8 @@ export interface Products {
102
105
  };
103
106
  /**
104
107
  * Tags related with product for internal search
108
+ *
109
+ * @maxItems 200
105
110
  */
106
111
  keywords?: string[];
107
112
  /**
@@ -268,6 +273,8 @@ export interface Products {
268
273
  warranty?: string;
269
274
  /**
270
275
  * List of product brands
276
+ *
277
+ * @maxItems 100
271
278
  */
272
279
  brands?: {
273
280
  /**
@@ -319,6 +326,8 @@ export interface Products {
319
326
  }[];
320
327
  /**
321
328
  * List of product categories
329
+ *
330
+ * @maxItems 100
322
331
  */
323
332
  categories?: {
324
333
  /**
@@ -407,6 +416,8 @@ export interface Products {
407
416
  google_product_category_id?: number;
408
417
  /**
409
418
  * Grids for specifications and variations
419
+ *
420
+ * @maxItems 200
410
421
  */
411
422
  grids?: {
412
423
  /**
@@ -445,6 +456,8 @@ export interface Products {
445
456
  specifications?: {
446
457
  /**
447
458
  * Attribute to tell users the energy efficiency class of your product
459
+ *
460
+ * @maxItems 1
448
461
  */
449
462
  energy_efficiency_class?: {
450
463
  /**
@@ -476,6 +489,8 @@ export interface Products {
476
489
  }[];
477
490
  /**
478
491
  * Attribute to set the demographic that your product is designed for
492
+ *
493
+ * @maxItems 1
479
494
  */
480
495
  age_group?: {
481
496
  /**
@@ -507,6 +522,8 @@ export interface Products {
507
522
  }[];
508
523
  /**
509
524
  * Specify for what gender your product is designed
525
+ *
526
+ * @maxItems 1
510
527
  */
511
528
  gender?: {
512
529
  /**
@@ -538,6 +555,8 @@ export interface Products {
538
555
  }[];
539
556
  /**
540
557
  * Attribute to describe the main fabric or material that your product is made of
558
+ *
559
+ * @maxItems 1
541
560
  */
542
561
  material?: {
543
562
  /**
@@ -569,6 +588,8 @@ export interface Products {
569
588
  }[];
570
589
  /**
571
590
  * Attribute to describe the pattern or graphic printed on your product
591
+ *
592
+ * @maxItems 1
572
593
  */
573
594
  pattern?: {
574
595
  /**
@@ -600,6 +621,8 @@ export interface Products {
600
621
  }[];
601
622
  /**
602
623
  * Attribute to describe the standardized size of your product
624
+ *
625
+ * @maxItems 1
603
626
  */
604
627
  size?: {
605
628
  /**
@@ -631,6 +654,8 @@ export interface Products {
631
654
  }[];
632
655
  /**
633
656
  * Attribute to describe the cut of your product
657
+ *
658
+ * @maxItems 1
634
659
  */
635
660
  size_type?: {
636
661
  /**
@@ -662,6 +687,8 @@ export interface Products {
662
687
  }[];
663
688
  /**
664
689
  * Which country's sizing system your product uses
690
+ *
691
+ * @maxItems 1
665
692
  */
666
693
  size_system?: {
667
694
  /**
@@ -724,6 +751,9 @@ export interface Products {
724
751
  /**
725
752
  * Custom product attributes, grid as property name (such as 'Model' and 'Voltage')
726
753
  *
754
+ * @minItems 1
755
+ * @maxItems 30
756
+ *
727
757
  * This interface was referenced by `undefined`'s JSON-Schema definition
728
758
  * via the `patternProperty` "^.{2,70}$".
729
759
  */
@@ -769,6 +799,8 @@ export interface Products {
769
799
  };
770
800
  /**
771
801
  * List of product images
802
+ *
803
+ * @maxItems 50
772
804
  */
773
805
  pictures?: (
774
806
  | {
@@ -783,6 +815,8 @@ export interface Products {
783
815
  )[];
784
816
  /**
785
817
  * List of videos related to your product
818
+ *
819
+ * @maxItems 30
786
820
  */
787
821
  videos?: {
788
822
  /**
@@ -796,6 +830,8 @@ export interface Products {
796
830
  }[];
797
831
  /**
798
832
  * List of product customization fields
833
+ *
834
+ * @maxItems 100
799
835
  */
800
836
  customizations?: (
801
837
  | {
@@ -807,6 +843,8 @@ export interface Products {
807
843
  )[];
808
844
  /**
809
845
  * Product variations list
846
+ *
847
+ * @maxItems 3000
810
848
  */
811
849
  variations?: {
812
850
  /**
@@ -848,6 +886,8 @@ export interface Products {
848
886
  mpn?: string;
849
887
  /**
850
888
  * List of product NCM codes
889
+ *
890
+ * @maxItems 10
851
891
  */
852
892
  ncm?: string[];
853
893
  /**
@@ -943,6 +983,8 @@ export interface Products {
943
983
  specifications: {
944
984
  /**
945
985
  * Attribute to describe the main fabric or material that your product is made of
986
+ *
987
+ * @maxItems 1
946
988
  */
947
989
  material?: {
948
990
  /**
@@ -974,6 +1016,8 @@ export interface Products {
974
1016
  }[];
975
1017
  /**
976
1018
  * Attribute to describe the pattern or graphic printed on your product
1019
+ *
1020
+ * @maxItems 1
977
1021
  */
978
1022
  pattern?: {
979
1023
  /**
@@ -1005,6 +1049,8 @@ export interface Products {
1005
1049
  }[];
1006
1050
  /**
1007
1051
  * Attribute to describe the standardized size of your product
1052
+ *
1053
+ * @maxItems 1
1008
1054
  */
1009
1055
  size?: {
1010
1056
  /**
@@ -1067,6 +1113,9 @@ export interface Products {
1067
1113
  /**
1068
1114
  * Custom variation attributes, grid as property name (such as 'Model' and 'Voltage')
1069
1115
  *
1116
+ * @minItems 1
1117
+ * @maxItems 6
1118
+ *
1070
1119
  * This interface was referenced by `undefined`'s JSON-Schema definition
1071
1120
  * via the `patternProperty` "^.{2,70}$".
1072
1121
  */
@@ -1116,11 +1165,15 @@ export interface Products {
1116
1165
  picture_id?: string;
1117
1166
  /**
1118
1167
  * Flags to associate additional info
1168
+ *
1169
+ * @maxItems 10
1119
1170
  */
1120
1171
  flags?: string[];
1121
1172
  }[];
1122
1173
  /**
1123
1174
  * If this product is a kit, set its composition
1175
+ *
1176
+ * @maxItems 100
1124
1177
  */
1125
1178
  kit_composition?: {
1126
1179
  /**
@@ -1167,6 +1220,8 @@ export interface Products {
1167
1220
  parent_item_id?: string;
1168
1221
  /**
1169
1222
  * Lists of related products
1223
+ *
1224
+ * @maxItems 30
1170
1225
  */
1171
1226
  related_products?: {
1172
1227
  /**
@@ -1179,6 +1234,8 @@ export interface Products {
1179
1234
  relation_type?: 'common_characteristics' | 'common_orders' | 'manual' | 'other';
1180
1235
  /**
1181
1236
  * List of products
1237
+ *
1238
+ * @maxItems 100
1182
1239
  */
1183
1240
  product_ids: string[];
1184
1241
  /**
@@ -1204,14 +1261,20 @@ export interface Products {
1204
1261
  total_sold?: number;
1205
1262
  /**
1206
1263
  * List of product GTIN codes
1264
+ *
1265
+ * @maxItems 10
1207
1266
  */
1208
1267
  gtin?: string[];
1209
1268
  /**
1210
1269
  * List of product MPN codes
1270
+ *
1271
+ * @maxItems 10
1211
1272
  */
1212
1273
  mpn?: string[];
1213
1274
  /**
1214
1275
  * List of product NCM codes
1276
+ *
1277
+ * @maxItems 10
1215
1278
  */
1216
1279
  ncm?: string[];
1217
1280
  /**
@@ -1237,6 +1300,8 @@ export interface Products {
1237
1300
  };
1238
1301
  /**
1239
1302
  * List of custom attributes
1303
+ *
1304
+ * @maxItems 100
1240
1305
  */
1241
1306
  metafields?: {
1242
1307
  /**
@@ -1256,6 +1321,8 @@ export interface Products {
1256
1321
  }[];
1257
1322
  /**
1258
1323
  * List of custom attributes
1324
+ *
1325
+ * @maxItems 100
1259
1326
  */
1260
1327
  hidden_metafields?: {
1261
1328
  /**
@@ -1275,6 +1342,8 @@ export interface Products {
1275
1342
  }[];
1276
1343
  /**
1277
1344
  * Flags to associate additional info
1345
+ *
1346
+ * @maxItems 10
1278
1347
  */
1279
1348
  flags?: string[];
1280
1349
  /**
@@ -112,6 +112,9 @@ export interface Stores {
112
112
  * Secondary public contact phone, commonly a cell phone number
113
113
  */
114
114
  contact_cellphone?: string;
115
+ /**
116
+ * @maxItems 30
117
+ */
115
118
  sales_channels?: {
116
119
  channel_id: string;
117
120
  type?: 'ecommerce' | 'mobile' | 'pos' | 'button' | 'social' | 'chatbot' | 'live';
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/api",
3
3
  "type": "module",
4
- "version": "0.0.23",
4
+ "version": "0.0.26",
5
5
  "description": "E-Com Plus Cloud Commerce APIs client/adapter",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -46,97 +46,13 @@ export interface Applications {
46
46
  * Modules handled by this app
47
47
  */
48
48
  modules?: {
49
- /**
50
- * Triggered after each term searched on storefront
51
- */
52
- term_searched?: {
53
- /**
54
- * Whether current app is enabled to handle the module requests
55
- */
56
- enabled: boolean;
57
- /**
58
- * URL to receive POST request of respective module
59
- */
60
- endpoint: string;
61
- };
62
- /**
63
- * Triggered after each cart saves on storefront, just before checkout
64
- */
65
- cart_confirmed?: {
66
- /**
67
- * Whether current app is enabled to handle the module requests
68
- */
69
- enabled: boolean;
70
- /**
71
- * URL to receive POST request of respective module
72
- */
73
- endpoint: string;
74
- };
75
- /**
76
- * Triggered to calculate shipping options, must return calculated values and times
77
- */
78
- calculate_shipping?: {
79
- /**
80
- * Whether current app is enabled to handle the module requests
81
- */
82
- enabled: boolean;
83
- /**
84
- * URL to receive POST request of respective module
85
- */
86
- endpoint: string;
87
- };
88
- /**
89
- * Triggered when listing payments, must return available methods
90
- */
91
- list_payments?: {
92
- /**
93
- * Whether current app is enabled to handle the module requests
94
- */
95
- enabled: boolean;
96
- /**
97
- * URL to receive POST request of respective module
98
- */
99
- endpoint: string;
100
- };
101
- /**
102
- * Triggered to validate and apply discout value, must return discount and conditions
103
- */
104
- apply_discount?: {
105
- /**
106
- * Whether current app is enabled to handle the module requests
107
- */
108
- enabled: boolean;
109
- /**
110
- * URL to receive POST request of respective module
111
- */
112
- endpoint: string;
113
- };
114
- /**
115
- * Triggered when order is being closed, must create payment transaction and return info
116
- */
117
- create_transaction?: {
118
- /**
119
- * Whether current app is enabled to handle the module requests
120
- */
121
- enabled: boolean;
122
- /**
123
- * URL to receive POST request of respective module
124
- */
125
- endpoint: string;
126
- };
127
- /**
128
- * Triggered after each order created from storefront, could return custom fields
129
- */
130
- checkout_done?: {
131
- /**
132
- * Whether current app is enabled to handle the module requests
133
- */
134
- enabled: boolean;
135
- /**
136
- * URL to receive POST request of respective module
137
- */
138
- endpoint: string;
139
- };
49
+ term_searched?: Module;
50
+ cart_confirmed?: Module1;
51
+ calculate_shipping?: Module2;
52
+ list_payments?: Module3;
53
+ apply_discount?: Module4;
54
+ create_transaction?: Module5;
55
+ checkout_done?: Module6;
140
56
  };
141
57
  /**
142
58
  * Configuration options for staff on admin dashboard, saved on app data
@@ -199,6 +115,8 @@ export interface Applications {
199
115
  };
200
116
  /**
201
117
  * Flags to associate additional info
118
+ *
119
+ * @maxItems 10
202
120
  */
203
121
  flags?: string[];
204
122
  /**
@@ -206,3 +124,94 @@ export interface Applications {
206
124
  */
207
125
  notes?: string;
208
126
  }
127
+ /**
128
+ * Triggered after each term searched on storefront
129
+ */
130
+ export interface Module {
131
+ /**
132
+ * Whether current app is enabled to handle the module requests
133
+ */
134
+ enabled: boolean;
135
+ /**
136
+ * URL to receive POST request of respective module
137
+ */
138
+ endpoint: string;
139
+ }
140
+ /**
141
+ * Triggered after each cart saves on storefront, just before checkout
142
+ */
143
+ export interface Module1 {
144
+ /**
145
+ * Whether current app is enabled to handle the module requests
146
+ */
147
+ enabled: boolean;
148
+ /**
149
+ * URL to receive POST request of respective module
150
+ */
151
+ endpoint: string;
152
+ }
153
+ /**
154
+ * Triggered to calculate shipping options, must return calculated values and times
155
+ */
156
+ export interface Module2 {
157
+ /**
158
+ * Whether current app is enabled to handle the module requests
159
+ */
160
+ enabled: boolean;
161
+ /**
162
+ * URL to receive POST request of respective module
163
+ */
164
+ endpoint: string;
165
+ }
166
+ /**
167
+ * Triggered when listing payments, must return available methods
168
+ */
169
+ export interface Module3 {
170
+ /**
171
+ * Whether current app is enabled to handle the module requests
172
+ */
173
+ enabled: boolean;
174
+ /**
175
+ * URL to receive POST request of respective module
176
+ */
177
+ endpoint: string;
178
+ }
179
+ /**
180
+ * Triggered to validate and apply discout value, must return discount and conditions
181
+ */
182
+ export interface Module4 {
183
+ /**
184
+ * Whether current app is enabled to handle the module requests
185
+ */
186
+ enabled: boolean;
187
+ /**
188
+ * URL to receive POST request of respective module
189
+ */
190
+ endpoint: string;
191
+ }
192
+ /**
193
+ * Triggered when order is being closed, must create payment transaction and return info
194
+ */
195
+ export interface Module5 {
196
+ /**
197
+ * Whether current app is enabled to handle the module requests
198
+ */
199
+ enabled: boolean;
200
+ /**
201
+ * URL to receive POST request of respective module
202
+ */
203
+ endpoint: string;
204
+ }
205
+ /**
206
+ * Triggered after each order created from storefront, could return custom fields
207
+ */
208
+ export interface Module6 {
209
+ /**
210
+ * Whether current app is enabled to handle the module requests
211
+ */
212
+ enabled: boolean;
213
+ /**
214
+ * URL to receive POST request of respective module
215
+ */
216
+ endpoint: string;
217
+ }
@@ -9,6 +9,9 @@ export interface Authentications {
9
9
  _id: string;
10
10
  created_at: string;
11
11
  updated_at: string;
12
+ /**
13
+ * @maxItems 500
14
+ */
12
15
  store_ids: number[];
13
16
  /**
14
17
  * Simple username for identification, only numbers and lowercase letters
@@ -52,6 +55,8 @@ export interface Authentications {
52
55
  };
53
56
  /**
54
57
  * List of dashboard cards chosen by user
58
+ *
59
+ * @maxItems 40
55
60
  */
56
61
  panel_cards?: {
57
62
  /**
@@ -76,6 +81,9 @@ export interface Authentications {
76
81
  resource: 'products' | 'categories' | 'brands' | 'collections' | 'grids' | 'customers' | 'carts' | 'orders';
77
82
  /**
78
83
  * Aggregation pipeline
84
+ *
85
+ * @minItems 1
86
+ * @maxItems 50
79
87
  */
80
88
  pipeline: {
81
89
  [k: string]: unknown;
@@ -88,6 +96,8 @@ export interface Authentications {
88
96
  edit_storefront?: boolean;
89
97
  /**
90
98
  * Flags to associate additional info
99
+ *
100
+ * @maxItems 10
91
101
  */
92
102
  flags?: string[];
93
103
  /**
@@ -10,6 +10,9 @@ export interface Brands {
10
10
  created_at: string;
11
11
  updated_at: string;
12
12
  store_id: number;
13
+ /**
14
+ * @maxItems 10
15
+ */
13
16
  channel_ids?: string[];
14
17
  /**
15
18
  * Brand full name
@@ -95,6 +98,8 @@ export interface Brands {
95
98
  };
96
99
  /**
97
100
  * List of brand images
101
+ *
102
+ * @maxItems 50
98
103
  */
99
104
  pictures?: {
100
105
  /**
@@ -120,6 +125,8 @@ export interface Brands {
120
125
  }[];
121
126
  /**
122
127
  * List of custom attributes
128
+ *
129
+ * @maxItems 100
123
130
  */
124
131
  metafields?: {
125
132
  /**
@@ -139,6 +146,8 @@ export interface Brands {
139
146
  }[];
140
147
  /**
141
148
  * Flags to associate additional info
149
+ *
150
+ * @maxItems 10
142
151
  */
143
152
  flags?: string[];
144
153
  /**
@@ -68,6 +68,8 @@ export interface Carts {
68
68
  affiliate_code?: string;
69
69
  /**
70
70
  * List of customers associated with this cart
71
+ *
72
+ * @maxItems 3000
71
73
  */
72
74
  customers?: string[];
73
75
  /**
@@ -76,6 +78,8 @@ export interface Carts {
76
78
  other_customers?: boolean;
77
79
  /**
78
80
  * Products composing the cart
81
+ *
82
+ * @maxItems 3000
79
83
  */
80
84
  items: {
81
85
  /**
@@ -125,6 +129,8 @@ export interface Carts {
125
129
  };
126
130
  /**
127
131
  * Item customization fields
132
+ *
133
+ * @maxItems 100
128
134
  */
129
135
  customizations?: {
130
136
  /**
@@ -184,6 +190,8 @@ export interface Carts {
184
190
  price?: number;
185
191
  /**
186
192
  * Current kit composition
193
+ *
194
+ * @maxItems 100
187
195
  */
188
196
  composition?: {
189
197
  /**
@@ -251,6 +259,8 @@ export interface Carts {
251
259
  final_price?: number;
252
260
  /**
253
261
  * Flags to associate additional info
262
+ *
263
+ * @maxItems 10
254
264
  */
255
265
  flags?: string[];
256
266
  }[];
@@ -260,10 +270,14 @@ export interface Carts {
260
270
  subtotal?: number;
261
271
  /**
262
272
  * List of orders completed with this cart
273
+ *
274
+ * @maxItems 3000
263
275
  */
264
276
  orders?: string[];
265
277
  /**
266
278
  * List of custom attributes
279
+ *
280
+ * @maxItems 100
267
281
  */
268
282
  metafields?: {
269
283
  /**
@@ -283,6 +297,8 @@ export interface Carts {
283
297
  }[];
284
298
  /**
285
299
  * Flags to associate additional info
300
+ *
301
+ * @maxItems 10
286
302
  */
287
303
  flags?: string[];
288
304
  /**
@@ -10,6 +10,9 @@ export interface Categories {
10
10
  created_at: string;
11
11
  updated_at: string;
12
12
  store_id: number;
13
+ /**
14
+ * @maxItems 10
15
+ */
13
16
  channel_ids?: string[];
14
17
  /**
15
18
  * Category full name
@@ -129,6 +132,8 @@ export interface Categories {
129
132
  };
130
133
  /**
131
134
  * List of category images
135
+ *
136
+ * @maxItems 50
132
137
  */
133
138
  pictures?: {
134
139
  /**
@@ -162,6 +167,8 @@ export interface Categories {
162
167
  google_product_category_id?: number;
163
168
  /**
164
169
  * List of custom attributes
170
+ *
171
+ * @maxItems 100
165
172
  */
166
173
  metafields?: {
167
174
  /**
@@ -181,6 +188,8 @@ export interface Categories {
181
188
  }[];
182
189
  /**
183
190
  * Flags to associate additional info
191
+ *
192
+ * @maxItems 10
184
193
  */
185
194
  flags?: string[];
186
195
  /**
@@ -77,6 +77,8 @@ export interface Collections {
77
77
  };
78
78
  /**
79
79
  * List of collection products
80
+ *
81
+ * @maxItems 3000
80
82
  */
81
83
  products?: string[];
82
84
  /**
@@ -98,6 +100,8 @@ export interface Collections {
98
100
  };
99
101
  /**
100
102
  * List of collection images
103
+ *
104
+ * @maxItems 50
101
105
  */
102
106
  pictures?: {
103
107
  /**
@@ -123,6 +127,8 @@ export interface Collections {
123
127
  }[];
124
128
  /**
125
129
  * List of custom attributes
130
+ *
131
+ * @maxItems 100
126
132
  */
127
133
  metafields?: {
128
134
  /**
@@ -142,6 +148,8 @@ export interface Collections {
142
148
  }[];
143
149
  /**
144
150
  * Flags to associate additional info
151
+ *
152
+ * @maxItems 10
145
153
  */
146
154
  flags?: string[];
147
155
  /**