@instockng/api-client 1.0.28 → 1.0.30

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.
@@ -5,12 +5,12 @@
5
5
  * They can also be imported directly in Server Components.
6
6
  */
7
7
  /**
8
- * Fetch products by brand ID
8
+ * Fetch products by brand slug
9
9
  *
10
- * @param brandId - Brand UUID
10
+ * @param brandSlug - Brand slug (e.g., 'toyland')
11
11
  * @returns Products for the brand with variants and availability
12
12
  */
13
- export declare function fetchProductsByBrand(brandId: string): Promise<{
13
+ export declare function fetchProductsByBrand(brandSlug: string): Promise<{
14
14
  id: string;
15
15
  name: string;
16
16
  slug: string;
@@ -978,3 +978,487 @@ export declare function fetchProductBySlug(slug: string): Promise<{
978
978
  * @returns List of add-on products
979
979
  */
980
980
  export declare function fetchProductAddons(slug: string, limit?: number): Promise<any>;
981
+ /**
982
+ * Fetch product recommendations (other products from same brand)
983
+ *
984
+ * @param slug - Product slug
985
+ * @param limit - Max number of recommendations to return (default 4)
986
+ * @returns List of recommended products
987
+ */
988
+ export declare function fetchProductRecommendations(slug: string, limit?: number): Promise<{
989
+ id: string;
990
+ name: string;
991
+ slug: string;
992
+ description: string;
993
+ thumbnailUrl: string;
994
+ quantityDiscounts: string | number | boolean | {
995
+ [x: string]: string | number | boolean | /*elided*/ any | {
996
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
997
+ length: number;
998
+ toString: never;
999
+ toLocaleString: never;
1000
+ pop: never;
1001
+ push: never;
1002
+ concat: never;
1003
+ join: never;
1004
+ reverse: never;
1005
+ shift: never;
1006
+ slice: never;
1007
+ sort: never;
1008
+ splice: never;
1009
+ unshift: never;
1010
+ indexOf: never;
1011
+ lastIndexOf: never;
1012
+ every: never;
1013
+ some: never;
1014
+ forEach: never;
1015
+ map: never;
1016
+ filter: never;
1017
+ reduce: never;
1018
+ reduceRight: never;
1019
+ find: never;
1020
+ findIndex: never;
1021
+ fill: never;
1022
+ copyWithin: never;
1023
+ entries: never;
1024
+ keys: never;
1025
+ values: never;
1026
+ includes: never;
1027
+ flatMap: never;
1028
+ flat: never;
1029
+ [Symbol.iterator]: never;
1030
+ readonly [Symbol.unscopables]: {
1031
+ [x: number]: boolean;
1032
+ length?: boolean;
1033
+ toString?: boolean;
1034
+ toLocaleString?: boolean;
1035
+ pop?: boolean;
1036
+ push?: boolean;
1037
+ concat?: boolean;
1038
+ join?: boolean;
1039
+ reverse?: boolean;
1040
+ shift?: boolean;
1041
+ slice?: boolean;
1042
+ sort?: boolean;
1043
+ splice?: boolean;
1044
+ unshift?: boolean;
1045
+ indexOf?: boolean;
1046
+ lastIndexOf?: boolean;
1047
+ every?: boolean;
1048
+ some?: boolean;
1049
+ forEach?: boolean;
1050
+ map?: boolean;
1051
+ filter?: boolean;
1052
+ reduce?: boolean;
1053
+ reduceRight?: boolean;
1054
+ find?: boolean;
1055
+ findIndex?: boolean;
1056
+ fill?: boolean;
1057
+ copyWithin?: boolean;
1058
+ entries?: boolean;
1059
+ keys?: boolean;
1060
+ values?: boolean;
1061
+ includes?: boolean;
1062
+ flatMap?: boolean;
1063
+ flat?: boolean;
1064
+ };
1065
+ };
1066
+ } | {
1067
+ [x: number]: string | number | boolean | {
1068
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1069
+ } | /*elided*/ any;
1070
+ length: number;
1071
+ toString: never;
1072
+ toLocaleString: never;
1073
+ pop: never;
1074
+ push: never;
1075
+ concat: never;
1076
+ join: never;
1077
+ reverse: never;
1078
+ shift: never;
1079
+ slice: never;
1080
+ sort: never;
1081
+ splice: never;
1082
+ unshift: never;
1083
+ indexOf: never;
1084
+ lastIndexOf: never;
1085
+ every: never;
1086
+ some: never;
1087
+ forEach: never;
1088
+ map: never;
1089
+ filter: never;
1090
+ reduce: never;
1091
+ reduceRight: never;
1092
+ find: never;
1093
+ findIndex: never;
1094
+ fill: never;
1095
+ copyWithin: never;
1096
+ entries: never;
1097
+ keys: never;
1098
+ values: never;
1099
+ includes: never;
1100
+ flatMap: never;
1101
+ flat: never;
1102
+ [Symbol.iterator]: never;
1103
+ readonly [Symbol.unscopables]: {
1104
+ [x: number]: boolean;
1105
+ length?: boolean;
1106
+ toString?: boolean;
1107
+ toLocaleString?: boolean;
1108
+ pop?: boolean;
1109
+ push?: boolean;
1110
+ concat?: boolean;
1111
+ join?: boolean;
1112
+ reverse?: boolean;
1113
+ shift?: boolean;
1114
+ slice?: boolean;
1115
+ sort?: boolean;
1116
+ splice?: boolean;
1117
+ unshift?: boolean;
1118
+ indexOf?: boolean;
1119
+ lastIndexOf?: boolean;
1120
+ every?: boolean;
1121
+ some?: boolean;
1122
+ forEach?: boolean;
1123
+ map?: boolean;
1124
+ filter?: boolean;
1125
+ reduce?: boolean;
1126
+ reduceRight?: boolean;
1127
+ find?: boolean;
1128
+ findIndex?: boolean;
1129
+ fill?: boolean;
1130
+ copyWithin?: boolean;
1131
+ entries?: boolean;
1132
+ keys?: boolean;
1133
+ values?: boolean;
1134
+ includes?: boolean;
1135
+ flatMap?: boolean;
1136
+ flat?: boolean;
1137
+ };
1138
+ };
1139
+ brand: {
1140
+ id: string;
1141
+ name: string;
1142
+ slug: string;
1143
+ logoUrl: string;
1144
+ siteUrl: string;
1145
+ domain: string;
1146
+ metaPixelId: string;
1147
+ tiktokPixelId: string;
1148
+ paystackPublicKey: string;
1149
+ createdAt: string;
1150
+ updatedAt: string;
1151
+ deletedAt: string;
1152
+ };
1153
+ variants: {
1154
+ createdAt: string;
1155
+ updatedAt: string;
1156
+ price: number;
1157
+ compareAtPrice: number;
1158
+ deletedAt: string;
1159
+ id: string;
1160
+ name: string | null;
1161
+ isActive: boolean;
1162
+ thumbnailUrl: string | null;
1163
+ productId: string;
1164
+ sku: string;
1165
+ trackInventory: boolean;
1166
+ lowStockThreshold: number | null;
1167
+ }[];
1168
+ media: string | number | true | {
1169
+ [x: string]: string | number | boolean | /*elided*/ any | {
1170
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1171
+ length: number;
1172
+ toString: never;
1173
+ toLocaleString: never;
1174
+ pop: never;
1175
+ push: never;
1176
+ concat: never;
1177
+ join: never;
1178
+ reverse: never;
1179
+ shift: never;
1180
+ slice: never;
1181
+ sort: never;
1182
+ splice: never;
1183
+ unshift: never;
1184
+ indexOf: never;
1185
+ lastIndexOf: never;
1186
+ every: never;
1187
+ some: never;
1188
+ forEach: never;
1189
+ map: never;
1190
+ filter: never;
1191
+ reduce: never;
1192
+ reduceRight: never;
1193
+ find: never;
1194
+ findIndex: never;
1195
+ fill: never;
1196
+ copyWithin: never;
1197
+ entries: never;
1198
+ keys: never;
1199
+ values: never;
1200
+ includes: never;
1201
+ flatMap: never;
1202
+ flat: never;
1203
+ [Symbol.iterator]: never;
1204
+ readonly [Symbol.unscopables]: {
1205
+ [x: number]: boolean;
1206
+ length?: boolean;
1207
+ toString?: boolean;
1208
+ toLocaleString?: boolean;
1209
+ pop?: boolean;
1210
+ push?: boolean;
1211
+ concat?: boolean;
1212
+ join?: boolean;
1213
+ reverse?: boolean;
1214
+ shift?: boolean;
1215
+ slice?: boolean;
1216
+ sort?: boolean;
1217
+ splice?: boolean;
1218
+ unshift?: boolean;
1219
+ indexOf?: boolean;
1220
+ lastIndexOf?: boolean;
1221
+ every?: boolean;
1222
+ some?: boolean;
1223
+ forEach?: boolean;
1224
+ map?: boolean;
1225
+ filter?: boolean;
1226
+ reduce?: boolean;
1227
+ reduceRight?: boolean;
1228
+ find?: boolean;
1229
+ findIndex?: boolean;
1230
+ fill?: boolean;
1231
+ copyWithin?: boolean;
1232
+ entries?: boolean;
1233
+ keys?: boolean;
1234
+ values?: boolean;
1235
+ includes?: boolean;
1236
+ flatMap?: boolean;
1237
+ flat?: boolean;
1238
+ };
1239
+ };
1240
+ } | {
1241
+ [x: number]: string | number | boolean | {
1242
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1243
+ } | /*elided*/ any;
1244
+ length: number;
1245
+ toString: never;
1246
+ toLocaleString: never;
1247
+ pop: never;
1248
+ push: never;
1249
+ concat: never;
1250
+ join: never;
1251
+ reverse: never;
1252
+ shift: never;
1253
+ slice: never;
1254
+ sort: never;
1255
+ splice: never;
1256
+ unshift: never;
1257
+ indexOf: never;
1258
+ lastIndexOf: never;
1259
+ every: never;
1260
+ some: never;
1261
+ forEach: never;
1262
+ map: never;
1263
+ filter: never;
1264
+ reduce: never;
1265
+ reduceRight: never;
1266
+ find: never;
1267
+ findIndex: never;
1268
+ fill: never;
1269
+ copyWithin: never;
1270
+ entries: never;
1271
+ keys: never;
1272
+ values: never;
1273
+ includes: never;
1274
+ flatMap: never;
1275
+ flat: never;
1276
+ [Symbol.iterator]: never;
1277
+ readonly [Symbol.unscopables]: {
1278
+ [x: number]: boolean;
1279
+ length?: boolean;
1280
+ toString?: boolean;
1281
+ toLocaleString?: boolean;
1282
+ pop?: boolean;
1283
+ push?: boolean;
1284
+ concat?: boolean;
1285
+ join?: boolean;
1286
+ reverse?: boolean;
1287
+ shift?: boolean;
1288
+ slice?: boolean;
1289
+ sort?: boolean;
1290
+ splice?: boolean;
1291
+ unshift?: boolean;
1292
+ indexOf?: boolean;
1293
+ lastIndexOf?: boolean;
1294
+ every?: boolean;
1295
+ some?: boolean;
1296
+ forEach?: boolean;
1297
+ map?: boolean;
1298
+ filter?: boolean;
1299
+ reduce?: boolean;
1300
+ reduceRight?: boolean;
1301
+ find?: boolean;
1302
+ findIndex?: boolean;
1303
+ fill?: boolean;
1304
+ copyWithin?: boolean;
1305
+ entries?: boolean;
1306
+ keys?: boolean;
1307
+ values?: boolean;
1308
+ includes?: boolean;
1309
+ flatMap?: boolean;
1310
+ flat?: boolean;
1311
+ };
1312
+ };
1313
+ features: string;
1314
+ faqs: string | number | true | {
1315
+ [x: string]: string | number | boolean | /*elided*/ any | {
1316
+ [x: number]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1317
+ length: number;
1318
+ toString: never;
1319
+ toLocaleString: never;
1320
+ pop: never;
1321
+ push: never;
1322
+ concat: never;
1323
+ join: never;
1324
+ reverse: never;
1325
+ shift: never;
1326
+ slice: never;
1327
+ sort: never;
1328
+ splice: never;
1329
+ unshift: never;
1330
+ indexOf: never;
1331
+ lastIndexOf: never;
1332
+ every: never;
1333
+ some: never;
1334
+ forEach: never;
1335
+ map: never;
1336
+ filter: never;
1337
+ reduce: never;
1338
+ reduceRight: never;
1339
+ find: never;
1340
+ findIndex: never;
1341
+ fill: never;
1342
+ copyWithin: never;
1343
+ entries: never;
1344
+ keys: never;
1345
+ values: never;
1346
+ includes: never;
1347
+ flatMap: never;
1348
+ flat: never;
1349
+ [Symbol.iterator]: never;
1350
+ readonly [Symbol.unscopables]: {
1351
+ [x: number]: boolean;
1352
+ length?: boolean;
1353
+ toString?: boolean;
1354
+ toLocaleString?: boolean;
1355
+ pop?: boolean;
1356
+ push?: boolean;
1357
+ concat?: boolean;
1358
+ join?: boolean;
1359
+ reverse?: boolean;
1360
+ shift?: boolean;
1361
+ slice?: boolean;
1362
+ sort?: boolean;
1363
+ splice?: boolean;
1364
+ unshift?: boolean;
1365
+ indexOf?: boolean;
1366
+ lastIndexOf?: boolean;
1367
+ every?: boolean;
1368
+ some?: boolean;
1369
+ forEach?: boolean;
1370
+ map?: boolean;
1371
+ filter?: boolean;
1372
+ reduce?: boolean;
1373
+ reduceRight?: boolean;
1374
+ find?: boolean;
1375
+ findIndex?: boolean;
1376
+ fill?: boolean;
1377
+ copyWithin?: boolean;
1378
+ entries?: boolean;
1379
+ keys?: boolean;
1380
+ values?: boolean;
1381
+ includes?: boolean;
1382
+ flatMap?: boolean;
1383
+ flat?: boolean;
1384
+ };
1385
+ };
1386
+ } | {
1387
+ [x: number]: string | number | boolean | {
1388
+ [x: string]: string | number | boolean | /*elided*/ any | /*elided*/ any;
1389
+ } | /*elided*/ any;
1390
+ length: number;
1391
+ toString: never;
1392
+ toLocaleString: never;
1393
+ pop: never;
1394
+ push: never;
1395
+ concat: never;
1396
+ join: never;
1397
+ reverse: never;
1398
+ shift: never;
1399
+ slice: never;
1400
+ sort: never;
1401
+ splice: never;
1402
+ unshift: never;
1403
+ indexOf: never;
1404
+ lastIndexOf: never;
1405
+ every: never;
1406
+ some: never;
1407
+ forEach: never;
1408
+ map: never;
1409
+ filter: never;
1410
+ reduce: never;
1411
+ reduceRight: never;
1412
+ find: never;
1413
+ findIndex: never;
1414
+ fill: never;
1415
+ copyWithin: never;
1416
+ entries: never;
1417
+ keys: never;
1418
+ values: never;
1419
+ includes: never;
1420
+ flatMap: never;
1421
+ flat: never;
1422
+ [Symbol.iterator]: never;
1423
+ readonly [Symbol.unscopables]: {
1424
+ [x: number]: boolean;
1425
+ length?: boolean;
1426
+ toString?: boolean;
1427
+ toLocaleString?: boolean;
1428
+ pop?: boolean;
1429
+ push?: boolean;
1430
+ concat?: boolean;
1431
+ join?: boolean;
1432
+ reverse?: boolean;
1433
+ shift?: boolean;
1434
+ slice?: boolean;
1435
+ sort?: boolean;
1436
+ splice?: boolean;
1437
+ unshift?: boolean;
1438
+ indexOf?: boolean;
1439
+ lastIndexOf?: boolean;
1440
+ every?: boolean;
1441
+ some?: boolean;
1442
+ forEach?: boolean;
1443
+ map?: boolean;
1444
+ filter?: boolean;
1445
+ reduce?: boolean;
1446
+ reduceRight?: boolean;
1447
+ find?: boolean;
1448
+ findIndex?: boolean;
1449
+ fill?: boolean;
1450
+ copyWithin?: boolean;
1451
+ entries?: boolean;
1452
+ keys?: boolean;
1453
+ values?: boolean;
1454
+ includes?: boolean;
1455
+ flatMap?: boolean;
1456
+ flat?: boolean;
1457
+ };
1458
+ };
1459
+ createdAt: string;
1460
+ updatedAt: string;
1461
+ deletedAt: string;
1462
+ brandId: string;
1463
+ isActive: boolean;
1464
+ }[]>;
@@ -7,15 +7,15 @@
7
7
  import { createRpcClients } from '../rpc-client';
8
8
  const API_URL = 'https://oms-api.instock.com.ng';
9
9
  /**
10
- * Fetch products by brand ID
10
+ * Fetch products by brand slug
11
11
  *
12
- * @param brandId - Brand UUID
12
+ * @param brandSlug - Brand slug (e.g., 'toyland')
13
13
  * @returns Products for the brand with variants and availability
14
14
  */
15
- export async function fetchProductsByBrand(brandId) {
15
+ export async function fetchProductsByBrand(brandSlug) {
16
16
  const clients = createRpcClients(API_URL);
17
- const res = await clients.products[':brandId'].$get({
18
- param: { brandId },
17
+ const res = await clients.products[':brandSlug'].$get({
18
+ param: { brandSlug },
19
19
  });
20
20
  if (!res.ok) {
21
21
  throw new Error(`Failed to fetch products: ${res.statusText}`);
@@ -56,3 +56,21 @@ export async function fetchProductAddons(slug, limit) {
56
56
  }
57
57
  return res.json();
58
58
  }
59
+ /**
60
+ * Fetch product recommendations (other products from same brand)
61
+ *
62
+ * @param slug - Product slug
63
+ * @param limit - Max number of recommendations to return (default 4)
64
+ * @returns List of recommended products
65
+ */
66
+ export async function fetchProductRecommendations(slug, limit) {
67
+ const clients = createRpcClients(API_URL);
68
+ const res = await clients.products.product[':slug'].recommendations.$get({
69
+ param: { slug },
70
+ query: limit !== undefined ? { limit: String(limit) } : {},
71
+ });
72
+ if (!res.ok) {
73
+ throw new Error(`Failed to fetch product recommendations: ${res.statusText}`);
74
+ }
75
+ return res.json();
76
+ }