@firfi/voila-sdk 0.1.2 → 0.1.4
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.
- package/README.md +5 -3
- package/dist/src/domain/schemas/discount.d.ts +439 -0
- package/dist/src/domain/schemas/discount.d.ts.map +1 -0
- package/dist/src/domain/schemas/discount.js +59 -0
- package/dist/src/domain/schemas/discount.js.map +1 -0
- package/dist/src/domain/schemas/index.d.ts +2 -0
- package/dist/src/domain/schemas/index.d.ts.map +1 -1
- package/dist/src/domain/schemas/index.js +2 -0
- package/dist/src/domain/schemas/index.js.map +1 -1
- package/dist/src/domain/schemas/order-details.d.ts +2623 -0
- package/dist/src/domain/schemas/order-details.d.ts.map +1 -0
- package/dist/src/domain/schemas/order-details.js +148 -0
- package/dist/src/domain/schemas/order-details.js.map +1 -0
- package/dist/src/domain/schemas/order-history.d.ts +237 -60
- package/dist/src/domain/schemas/order-history.d.ts.map +1 -1
- package/dist/src/domain/schemas/order-history.js +17 -12
- package/dist/src/domain/schemas/order-history.js.map +1 -1
- package/dist/src/domain/schemas/slot.d.ts +4 -4
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/voila/browser-login-adapter.d.ts +2 -2
- package/dist/src/voila/discount-urls.d.ts +13 -0
- package/dist/src/voila/discount-urls.d.ts.map +1 -0
- package/dist/src/voila/discount-urls.js +33 -0
- package/dist/src/voila/discount-urls.js.map +1 -0
- package/dist/src/voila/discounted-products.d.ts +53 -0
- package/dist/src/voila/discounted-products.d.ts.map +1 -0
- package/dist/src/voila/discounted-products.js +195 -0
- package/dist/src/voila/discounted-products.js.map +1 -0
- package/dist/src/voila/order-details.d.ts +22 -0
- package/dist/src/voila/order-details.d.ts.map +1 -0
- package/dist/src/voila/order-details.js +267 -0
- package/dist/src/voila/order-details.js.map +1 -0
- package/dist/src/voila/order-history.d.ts +9 -5
- package/dist/src/voila/order-history.d.ts.map +1 -1
- package/dist/src/voila/order-history.js +23 -5
- package/dist/src/voila/order-history.js.map +1 -1
- package/dist/src/voila/order-urls.d.ts +10 -0
- package/dist/src/voila/order-urls.d.ts.map +1 -1
- package/dist/src/voila/order-urls.js +12 -1
- package/dist/src/voila/order-urls.js.map +1 -1
- package/package.json +1 -1
|
@@ -171,9 +171,9 @@ export declare const RawSlotDayMappingSchema: Schema.Schema<{
|
|
|
171
171
|
}, never>;
|
|
172
172
|
export type RawSlotDayMapping = Schema.Schema.Type<typeof RawSlotDayMappingSchema>;
|
|
173
173
|
export declare const RawSlotCarrierSchema: Schema.Schema<{
|
|
174
|
+
readonly carrierId?: string;
|
|
174
175
|
readonly title?: string;
|
|
175
176
|
readonly carrierDetails?: readonly unknown[];
|
|
176
|
-
readonly carrierId?: string;
|
|
177
177
|
readonly carrierName?: string;
|
|
178
178
|
readonly daysMapping?: readonly ({
|
|
179
179
|
readonly day: string;
|
|
@@ -240,9 +240,9 @@ export declare const RawSlotCarrierSchema: Schema.Schema<{
|
|
|
240
240
|
} & {
|
|
241
241
|
readonly [x: string]: unknown;
|
|
242
242
|
}, {
|
|
243
|
+
readonly carrierId?: string;
|
|
243
244
|
readonly title?: string;
|
|
244
245
|
readonly carrierDetails?: readonly unknown[];
|
|
245
|
-
readonly carrierId?: string;
|
|
246
246
|
readonly carrierName?: string;
|
|
247
247
|
readonly daysMapping?: readonly ({
|
|
248
248
|
readonly day: string;
|
|
@@ -312,9 +312,9 @@ export declare const RawSlotCarrierSchema: Schema.Schema<{
|
|
|
312
312
|
export type RawSlotCarrier = Schema.Schema.Type<typeof RawSlotCarrierSchema>;
|
|
313
313
|
export declare const RawSlotListingResponseSchema: Schema.Schema<{
|
|
314
314
|
readonly carriers: readonly ({
|
|
315
|
+
readonly carrierId?: string;
|
|
315
316
|
readonly title?: string;
|
|
316
317
|
readonly carrierDetails?: readonly unknown[];
|
|
317
|
-
readonly carrierId?: string;
|
|
318
318
|
readonly carrierName?: string;
|
|
319
319
|
readonly daysMapping?: readonly ({
|
|
320
320
|
readonly day: string;
|
|
@@ -390,9 +390,9 @@ export declare const RawSlotListingResponseSchema: Schema.Schema<{
|
|
|
390
390
|
readonly [x: string]: unknown;
|
|
391
391
|
}, {
|
|
392
392
|
readonly carriers: readonly ({
|
|
393
|
+
readonly carrierId?: string;
|
|
393
394
|
readonly title?: string;
|
|
394
395
|
readonly carrierDetails?: readonly unknown[];
|
|
395
|
-
readonly carrierId?: string;
|
|
396
396
|
readonly carrierName?: string;
|
|
397
397
|
readonly daysMapping?: readonly ({
|
|
398
398
|
readonly day: string;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,10 +12,13 @@ export * from "./voila/category-products.js";
|
|
|
12
12
|
export * from "./voila/checkout-summary.js";
|
|
13
13
|
export * from "./voila/checkout-urls.js";
|
|
14
14
|
export * from "./voila/delivery-destinations.js";
|
|
15
|
+
export * from "./voila/discount-urls.js";
|
|
16
|
+
export * from "./voila/discounted-products.js";
|
|
15
17
|
export * from "./voila/guest-bootstrap.js";
|
|
16
18
|
export * from "./voila/headers.js";
|
|
17
19
|
export * from "./voila/http-client.js";
|
|
18
20
|
export * from "./voila/initial-state.js";
|
|
21
|
+
export * from "./voila/order-details.js";
|
|
19
22
|
export * from "./voila/order-history.js";
|
|
20
23
|
export * from "./voila/order-urls.js";
|
|
21
24
|
export * from "./voila/session-health.js";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
|
package/dist/src/index.js
CHANGED
|
@@ -12,10 +12,13 @@ export * from "./voila/category-products.js";
|
|
|
12
12
|
export * from "./voila/checkout-summary.js";
|
|
13
13
|
export * from "./voila/checkout-urls.js";
|
|
14
14
|
export * from "./voila/delivery-destinations.js";
|
|
15
|
+
export * from "./voila/discount-urls.js";
|
|
16
|
+
export * from "./voila/discounted-products.js";
|
|
15
17
|
export * from "./voila/guest-bootstrap.js";
|
|
16
18
|
export * from "./voila/headers.js";
|
|
17
19
|
export * from "./voila/http-client.js";
|
|
18
20
|
export * from "./voila/initial-state.js";
|
|
21
|
+
export * from "./voila/order-details.js";
|
|
19
22
|
export * from "./voila/order-history.js";
|
|
20
23
|
export * from "./voila/order-urls.js";
|
|
21
24
|
export * from "./voila/session-health.js";
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
|
|
@@ -57,10 +57,10 @@ export declare const createInteractiveBrowserLoginPort: (driver: InteractiveBrow
|
|
|
57
57
|
readonly token: string;
|
|
58
58
|
};
|
|
59
59
|
readonly metadata: {
|
|
60
|
-
readonly regionId: string;
|
|
61
60
|
readonly assetVersion: string;
|
|
62
61
|
readonly clientRouteId: string;
|
|
63
62
|
readonly pageViewId: string;
|
|
63
|
+
readonly regionId: string;
|
|
64
64
|
};
|
|
65
65
|
};
|
|
66
66
|
}> | Either.Right<{
|
|
@@ -97,10 +97,10 @@ export declare const createInteractiveBrowserLoginPort: (driver: InteractiveBrow
|
|
|
97
97
|
readonly token: string;
|
|
98
98
|
};
|
|
99
99
|
readonly metadata: {
|
|
100
|
-
readonly regionId: string;
|
|
101
100
|
readonly assetVersion: string;
|
|
102
101
|
readonly clientRouteId: string;
|
|
103
102
|
readonly pageViewId: string;
|
|
103
|
+
readonly regionId: string;
|
|
104
104
|
};
|
|
105
105
|
};
|
|
106
106
|
}>>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { type DiscountedProductsInput } from "../domain/schemas/index.js";
|
|
3
|
+
export interface DiscountedProductsRequest {
|
|
4
|
+
readonly method: "GET";
|
|
5
|
+
readonly url: URL;
|
|
6
|
+
}
|
|
7
|
+
export type DiscountedProductsRequestError = {
|
|
8
|
+
readonly _tag: "DiscountedProductsInputInvalid";
|
|
9
|
+
readonly message: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const makeDiscountedProductsRequest: (input: unknown) => Either.Either<DiscountedProductsRequest, DiscountedProductsRequestError>;
|
|
12
|
+
export declare const makeDiscountedProductsRequestFromInput: (input: DiscountedProductsInput) => DiscountedProductsRequest;
|
|
13
|
+
//# sourceMappingURL=discount-urls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discount-urls.d.ts","sourceRoot":"","sources":["../../../src/voila/discount-urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,EAAE,KAAK,uBAAuB,EAAiC,MAAM,4BAA4B,CAAA;AAMxG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;CAClB;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,CAAC,IAAI,EAAE,gCAAgC,CAAA;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AA6BD,eAAO,MAAM,6BAA6B,GACxC,OAAO,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,8BAA8B,CAIvE,CAAA;AAEH,eAAO,MAAM,sCAAsC,GACjD,OAAO,uBAAuB,KAC7B,yBAGD,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { parseUnknown } from "../domain/parse.js";
|
|
3
|
+
import { DiscountedProductsInputSchema } from "../domain/schemas/index.js";
|
|
4
|
+
import { VOILA_BASE_URL } from "./urls.js";
|
|
5
|
+
const PROMOTIONS_PATH = "/api/product-listing-pages/v1/pages/promotions";
|
|
6
|
+
const TAG_WEB = "web";
|
|
7
|
+
const discountedProductsInputInvalid = () => ({
|
|
8
|
+
_tag: "DiscountedProductsInputInvalid",
|
|
9
|
+
message: "Discounted products input does not match the SDK schema"
|
|
10
|
+
});
|
|
11
|
+
const buildDiscountedProductsUrl = (input) => {
|
|
12
|
+
const url = new URL(PROMOTIONS_PATH, VOILA_BASE_URL);
|
|
13
|
+
url.searchParams.set("tag", TAG_WEB);
|
|
14
|
+
url.searchParams.set("includeAdditionalPageInfo", "true");
|
|
15
|
+
url.searchParams.set("maxProductsToDecorate", String(input.pageSize));
|
|
16
|
+
url.searchParams.set("maxPageSize", String(input.pageSize));
|
|
17
|
+
if (input.pageToken !== undefined) {
|
|
18
|
+
url.searchParams.set("pageToken", input.pageToken);
|
|
19
|
+
}
|
|
20
|
+
if (input.categoryId !== undefined) {
|
|
21
|
+
url.searchParams.set("categoryId", input.categoryId);
|
|
22
|
+
}
|
|
23
|
+
if (input.retailerCategoryId !== undefined) {
|
|
24
|
+
url.searchParams.set("retailerCategoryId", input.retailerCategoryId);
|
|
25
|
+
}
|
|
26
|
+
return url;
|
|
27
|
+
};
|
|
28
|
+
export const makeDiscountedProductsRequest = (input) => Either.map(Either.mapLeft(parseUnknown(DiscountedProductsInputSchema, input), discountedProductsInputInvalid), makeDiscountedProductsRequestFromInput);
|
|
29
|
+
export const makeDiscountedProductsRequestFromInput = (input) => ({
|
|
30
|
+
method: "GET",
|
|
31
|
+
url: buildDiscountedProductsUrl(input)
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=discount-urls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discount-urls.js","sourceRoot":"","sources":["../../../src/voila/discount-urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAgC,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,eAAe,GAAG,gDAAgD,CAAA;AACxE,MAAM,OAAO,GAAG,KAAK,CAAA;AAYrB,MAAM,8BAA8B,GAAG,GAAmC,EAAE,CAAC,CAAC;IAC5E,IAAI,EAAE,gCAAgC;IACtC,OAAO,EAAE,yDAAyD;CACnE,CAAC,CAAA;AAEF,MAAM,0BAA0B,GAAG,CAAC,KAA8B,EAAO,EAAE;IACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAA;IACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE3D,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,KAAc,EAC4D,EAAE,CAC5E,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,6BAA6B,EAAE,KAAK,CAAC,EAAE,8BAA8B,CAAC,EAClG,sCAAsC,CACvC,CAAA;AAEH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,KAA8B,EACH,EAAE,CAAC,CAAC;IAC/B,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,0BAA0B,CAAC,KAAK,CAAC;CACvC,CAAC,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { type DiscountedProductsInput, type Money, type PromotionProductsResponse, type RawPromotionMetadata, type SessionSnapshot, type UnitPrice } from "../domain/schemas/index.js";
|
|
3
|
+
import { type DiscountedProductsRequestError } from "./discount-urls.js";
|
|
4
|
+
import type { VoilaJsonResult, VoilaSdkError, VoilaTransport } from "./http-client.js";
|
|
5
|
+
import type { CookieJarPort } from "./session-snapshot.js";
|
|
6
|
+
export interface NormalizedDiscountProduct {
|
|
7
|
+
readonly available: boolean;
|
|
8
|
+
readonly brand?: string;
|
|
9
|
+
readonly discountPrice: Money;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly packSizeDescription?: string;
|
|
12
|
+
readonly productId: string;
|
|
13
|
+
readonly promoUnitPrice?: UnitPrice;
|
|
14
|
+
readonly promotionSummary?: string;
|
|
15
|
+
readonly promotions: ReadonlyArray<RawPromotionMetadata>;
|
|
16
|
+
readonly regularPrice: Money;
|
|
17
|
+
readonly retailerProductId: string;
|
|
18
|
+
readonly savingsAmount: number;
|
|
19
|
+
readonly savingsPercent: number;
|
|
20
|
+
readonly savingsPrice: Money;
|
|
21
|
+
readonly sourceGroupName?: string;
|
|
22
|
+
readonly sourceGroupType: string;
|
|
23
|
+
readonly unitPrice?: UnitPrice;
|
|
24
|
+
}
|
|
25
|
+
export interface DiscountScanMetadata {
|
|
26
|
+
readonly exhausted: boolean;
|
|
27
|
+
readonly matchedProducts: number;
|
|
28
|
+
readonly maxPages: number;
|
|
29
|
+
readonly nextPageToken?: string;
|
|
30
|
+
readonly pagesScanned: number;
|
|
31
|
+
readonly requestedPageSize: number;
|
|
32
|
+
readonly returnedProducts: number;
|
|
33
|
+
readonly startedPageToken?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DiscountedProductsPagination {
|
|
36
|
+
readonly nextPageToken?: string;
|
|
37
|
+
readonly totalProducts?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface NormalizedDiscountedProductsResult {
|
|
40
|
+
readonly pagination: DiscountedProductsPagination;
|
|
41
|
+
readonly products: ReadonlyArray<NormalizedDiscountProduct>;
|
|
42
|
+
readonly scan: DiscountScanMetadata;
|
|
43
|
+
}
|
|
44
|
+
export type DiscountedProductsResponseNormalizationError = {
|
|
45
|
+
readonly _tag: "DiscountedProductsResponseSchemaMismatch";
|
|
46
|
+
readonly message: string;
|
|
47
|
+
};
|
|
48
|
+
export type GetDiscountedProductsError = DiscountedProductsRequestError | VoilaSdkError;
|
|
49
|
+
export type GetDiscountedProductsResult = VoilaJsonResult<NormalizedDiscountedProductsResult>;
|
|
50
|
+
export declare const normalizeDiscountedProductsResponse: (response: PromotionProductsResponse, input: DiscountedProductsInput, scan: DiscountScanMetadata) => NormalizedDiscountedProductsResult;
|
|
51
|
+
export declare const parseDiscountedProductsResponse: (input: unknown, requestInput: DiscountedProductsInput) => Either.Either<NormalizedDiscountedProductsResult, DiscountedProductsResponseNormalizationError>;
|
|
52
|
+
export declare const getDiscountedProducts: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<GetDiscountedProductsResult, GetDiscountedProductsError>>;
|
|
53
|
+
//# sourceMappingURL=discounted-products.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discounted-products.d.ts","sourceRoot":"","sources":["../../../src/voila/discounted-products.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { parseUnknown } from "../domain/parse.js";
|
|
3
|
+
import { DEFAULT_MIN_SAVINGS_AMOUNT, DEFAULT_MIN_SAVINGS_PERCENT, DiscountedProductsInputSchema, MAX_DISCOUNT_QUERY_SCAN_PAGES, PromotionProductsResponseSchema } from "../domain/schemas/index.js";
|
|
4
|
+
import { makeDiscountedProductsRequestFromInput } from "./discount-urls.js";
|
|
5
|
+
import { requestVoilaJson } from "./http-client.js";
|
|
6
|
+
const centsPerDollar = 100;
|
|
7
|
+
const percentMultiplier = 100;
|
|
8
|
+
const noPagesScanned = 0;
|
|
9
|
+
const defaultDiscountSort = "best-percent";
|
|
10
|
+
const discountedProductsResponseSchemaMismatch = () => ({
|
|
11
|
+
_tag: "DiscountedProductsResponseSchemaMismatch",
|
|
12
|
+
message: "Voila discounted products response does not match the SDK schema"
|
|
13
|
+
});
|
|
14
|
+
const moneyAmount = (money) => {
|
|
15
|
+
const amount = Number(money.amount);
|
|
16
|
+
return Number.isFinite(amount) ? amount : undefined;
|
|
17
|
+
};
|
|
18
|
+
const roundCurrency = (amount) => Math.round(amount * centsPerDollar) / centsPerDollar;
|
|
19
|
+
const roundPercent = (amount) => Math.round(amount * percentMultiplier) / percentMultiplier;
|
|
20
|
+
const moneyFromAmount = (amount, currency) => ({
|
|
21
|
+
amount: roundCurrency(amount).toFixed(2),
|
|
22
|
+
currency
|
|
23
|
+
});
|
|
24
|
+
const firstPromotionSummary = (promotions) => {
|
|
25
|
+
for (const promotion of promotions) {
|
|
26
|
+
const summaries = [
|
|
27
|
+
promotion.label,
|
|
28
|
+
promotion.name,
|
|
29
|
+
promotion.description,
|
|
30
|
+
promotion.type
|
|
31
|
+
];
|
|
32
|
+
for (const summary of summaries) {
|
|
33
|
+
if (summary !== undefined && summary.trim().length > 0) {
|
|
34
|
+
return summary;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
};
|
|
40
|
+
const matchesQuery = (product, query) => {
|
|
41
|
+
if (query === undefined) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
const normalizedQuery = query.toLocaleLowerCase();
|
|
45
|
+
const searchable = [
|
|
46
|
+
product.name,
|
|
47
|
+
product.brand ?? "",
|
|
48
|
+
product.retailerProductId,
|
|
49
|
+
product.packSizeDescription ?? "",
|
|
50
|
+
...((product.promotions ?? []).map((promotion) => `${promotion.label ?? ""} ${promotion.name ?? ""} ${promotion.description ?? ""}`))
|
|
51
|
+
].join(" ").toLocaleLowerCase();
|
|
52
|
+
return searchable.includes(normalizedQuery);
|
|
53
|
+
};
|
|
54
|
+
const passesThreshold = (savingsAmount, savingsPercent, input) => savingsAmount >= (input.minSavingsAmount ?? DEFAULT_MIN_SAVINGS_AMOUNT)
|
|
55
|
+
|| savingsPercent >= (input.minSavingsPercent ?? DEFAULT_MIN_SAVINGS_PERCENT);
|
|
56
|
+
const normalizeProduct = (product, sourceGroup, input) => {
|
|
57
|
+
if (product.promoPrice === undefined) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const regularAmount = moneyAmount(product.price);
|
|
61
|
+
const discountAmount = moneyAmount(product.promoPrice);
|
|
62
|
+
if (regularAmount === undefined || discountAmount === undefined || regularAmount <= discountAmount) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const savingsAmount = roundCurrency(regularAmount - discountAmount);
|
|
66
|
+
const savingsPercent = roundPercent((savingsAmount / regularAmount) * percentMultiplier);
|
|
67
|
+
if (!passesThreshold(savingsAmount, savingsPercent, input) || !matchesQuery(product, input.query)) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const promotions = product.promotions ?? [];
|
|
71
|
+
const promotionSummary = firstPromotionSummary(promotions);
|
|
72
|
+
return {
|
|
73
|
+
available: product.available,
|
|
74
|
+
...(product.brand === undefined ? {} : { brand: product.brand }),
|
|
75
|
+
discountPrice: product.promoPrice,
|
|
76
|
+
name: product.name,
|
|
77
|
+
...(product.packSizeDescription === undefined ? {} : { packSizeDescription: product.packSizeDescription }),
|
|
78
|
+
productId: product.productId,
|
|
79
|
+
...(product.promoUnitPrice === undefined ? {} : { promoUnitPrice: product.promoUnitPrice }),
|
|
80
|
+
...(promotionSummary === undefined ? {} : { promotionSummary }),
|
|
81
|
+
promotions,
|
|
82
|
+
regularPrice: product.price,
|
|
83
|
+
retailerProductId: product.retailerProductId,
|
|
84
|
+
savingsAmount,
|
|
85
|
+
savingsPercent,
|
|
86
|
+
savingsPrice: moneyFromAmount(savingsAmount, product.price.currency),
|
|
87
|
+
...(sourceGroup.name === undefined ? {} : { sourceGroupName: sourceGroup.name }),
|
|
88
|
+
sourceGroupType: sourceGroup.type,
|
|
89
|
+
...(product.unitPrice === undefined ? {} : { unitPrice: product.unitPrice })
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
const normalizeResponseProducts = (response, input) => response.productGroups.flatMap((group) => [
|
|
93
|
+
...(group.decoratedProducts ?? []),
|
|
94
|
+
...(group.products ?? [])
|
|
95
|
+
].flatMap((product) => {
|
|
96
|
+
const normalized = normalizeProduct(product, group, input);
|
|
97
|
+
return normalized === undefined ? [] : [normalized];
|
|
98
|
+
}));
|
|
99
|
+
const compareDiscountProducts = (sort, left, right) => {
|
|
100
|
+
switch (sort) {
|
|
101
|
+
case "best-amount":
|
|
102
|
+
return right.savingsAmount - left.savingsAmount;
|
|
103
|
+
case "best-percent":
|
|
104
|
+
return right.savingsPercent - left.savingsPercent;
|
|
105
|
+
case "price-asc":
|
|
106
|
+
return Number(left.discountPrice.amount) - Number(right.discountPrice.amount);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const sortDiscountProducts = (products, sort) => [...products].sort((left, right) => compareDiscountProducts(sort, left, right));
|
|
110
|
+
export const normalizeDiscountedProductsResponse = (response, input, scan) => {
|
|
111
|
+
const sorted = sortDiscountProducts(normalizeResponseProducts(response, input), input.sort ?? defaultDiscountSort);
|
|
112
|
+
const products = input.query !== undefined && sorted.length > input.pageSize
|
|
113
|
+
? sorted
|
|
114
|
+
: sorted.slice(0, input.pageSize);
|
|
115
|
+
return {
|
|
116
|
+
pagination: {
|
|
117
|
+
...(scan.nextPageToken === undefined ? {} : { nextPageToken: scan.nextPageToken }),
|
|
118
|
+
...(response.totalProducts === undefined ? {} : { totalProducts: response.totalProducts })
|
|
119
|
+
},
|
|
120
|
+
products,
|
|
121
|
+
scan: {
|
|
122
|
+
...scan,
|
|
123
|
+
matchedProducts: sorted.length,
|
|
124
|
+
returnedProducts: products.length
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
export const parseDiscountedProductsResponse = (input, requestInput) => Either.map(Either.mapLeft(parseUnknown(PromotionProductsResponseSchema, input), discountedProductsResponseSchemaMismatch), (response) => normalizeDiscountedProductsResponse(response, requestInput, {
|
|
129
|
+
exhausted: response.nextPageToken === undefined,
|
|
130
|
+
matchedProducts: noPagesScanned,
|
|
131
|
+
maxPages: 1,
|
|
132
|
+
...(response.nextPageToken === undefined ? {} : { nextPageToken: response.nextPageToken }),
|
|
133
|
+
pagesScanned: 1,
|
|
134
|
+
requestedPageSize: requestInput.pageSize,
|
|
135
|
+
returnedProducts: noPagesScanned,
|
|
136
|
+
...(requestInput.pageToken === undefined ? {} : { startedPageToken: requestInput.pageToken })
|
|
137
|
+
}));
|
|
138
|
+
const makePageInput = (input, pageToken) => ({
|
|
139
|
+
...input,
|
|
140
|
+
...(pageToken === undefined ? {} : { pageToken })
|
|
141
|
+
});
|
|
142
|
+
const makeScanMetadata = (input, pagesScanned, maxPages, nextPageToken) => ({
|
|
143
|
+
exhausted: nextPageToken === undefined,
|
|
144
|
+
matchedProducts: noPagesScanned,
|
|
145
|
+
maxPages,
|
|
146
|
+
...(nextPageToken === undefined ? {} : { nextPageToken }),
|
|
147
|
+
pagesScanned,
|
|
148
|
+
requestedPageSize: input.pageSize,
|
|
149
|
+
returnedProducts: noPagesScanned,
|
|
150
|
+
...(input.pageToken === undefined ? {} : { startedPageToken: input.pageToken })
|
|
151
|
+
});
|
|
152
|
+
export const getDiscountedProducts = async (session, input, transport, cookieJarPort) => {
|
|
153
|
+
const parsed = Either.mapLeft(parseUnknown(DiscountedProductsInputSchema, input), () => ({
|
|
154
|
+
_tag: "DiscountedProductsInputInvalid",
|
|
155
|
+
message: "Discounted products input does not match the SDK schema"
|
|
156
|
+
}));
|
|
157
|
+
if (Either.isLeft(parsed)) {
|
|
158
|
+
return Either.left(parsed.left);
|
|
159
|
+
}
|
|
160
|
+
const maxPages = parsed.right.query === undefined ? 1 : MAX_DISCOUNT_QUERY_SCAN_PAGES;
|
|
161
|
+
let currentSession = session;
|
|
162
|
+
let pageToken = parsed.right.pageToken;
|
|
163
|
+
let response = {
|
|
164
|
+
productGroups: []
|
|
165
|
+
};
|
|
166
|
+
let pagesScanned = noPagesScanned;
|
|
167
|
+
while (pagesScanned < maxPages) {
|
|
168
|
+
const pageInput = makePageInput(parsed.right, pageToken);
|
|
169
|
+
const request = makeDiscountedProductsRequestFromInput(pageInput);
|
|
170
|
+
const page = await requestVoilaJson(PromotionProductsResponseSchema, currentSession, request, transport, cookieJarPort);
|
|
171
|
+
if (Either.isLeft(page)) {
|
|
172
|
+
return Either.left(page.left);
|
|
173
|
+
}
|
|
174
|
+
pagesScanned += 1;
|
|
175
|
+
currentSession = page.right.session;
|
|
176
|
+
response = {
|
|
177
|
+
...page.right.value,
|
|
178
|
+
productGroups: [
|
|
179
|
+
...response.productGroups,
|
|
180
|
+
...page.right.value.productGroups
|
|
181
|
+
]
|
|
182
|
+
};
|
|
183
|
+
pageToken = page.right.value.nextPageToken;
|
|
184
|
+
const matchedProducts = normalizeResponseProducts(response, parsed.right).length;
|
|
185
|
+
if (pageToken === undefined || matchedProducts >= parsed.right.pageSize) {
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const scan = makeScanMetadata(parsed.right, pagesScanned, maxPages, pageToken);
|
|
190
|
+
return Either.right({
|
|
191
|
+
session: currentSession,
|
|
192
|
+
value: normalizeDiscountedProductsResponse(response, parsed.right, scan)
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=discounted-products.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discounted-products.js","sourceRoot":"","sources":["../../../src/voila/discounted-products.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { type NormalizedCompletedOrderItemsResult, type NormalizedOrderDetailsResult, type RawDecoratedOrderResponse, type SessionSnapshot } from "../domain/schemas/index.js";
|
|
3
|
+
import type { VoilaJsonResult, VoilaSdkError, VoilaTransport } from "./http-client.js";
|
|
4
|
+
import { type GetCompletedOrdersError } from "./order-history.js";
|
|
5
|
+
import type { OrderDetailsRequestError } from "./order-urls.js";
|
|
6
|
+
import type { CookieJarPort } from "./session-snapshot.js";
|
|
7
|
+
export type OrderDetailsUnavailableError = {
|
|
8
|
+
readonly _tag: "OrderDetailsUnavailable";
|
|
9
|
+
readonly message: string;
|
|
10
|
+
};
|
|
11
|
+
export type CompletedOrderItemsInputInvalidError = {
|
|
12
|
+
readonly _tag: "CompletedOrderItemsInputInvalid";
|
|
13
|
+
readonly message: string;
|
|
14
|
+
};
|
|
15
|
+
export type GetOrderDetailsError = OrderDetailsRequestError | OrderDetailsUnavailableError | VoilaSdkError;
|
|
16
|
+
export type GetCompletedOrderItemsError = CompletedOrderItemsInputInvalidError | GetCompletedOrdersError | GetOrderDetailsError;
|
|
17
|
+
export type GetOrderDetailsResult = VoilaJsonResult<NormalizedOrderDetailsResult>;
|
|
18
|
+
export type GetCompletedOrderItemsResult = VoilaJsonResult<NormalizedCompletedOrderItemsResult>;
|
|
19
|
+
export declare const normalizeOrderDetailsResponse: (response: RawDecoratedOrderResponse, orderId: string) => Either.Either<NormalizedOrderDetailsResult, OrderDetailsUnavailableError>;
|
|
20
|
+
export declare const getOrderDetails: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<GetOrderDetailsResult, GetOrderDetailsError>>;
|
|
21
|
+
export declare const getCompletedOrderItems: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<GetCompletedOrderItemsResult, GetCompletedOrderItemsError>>;
|
|
22
|
+
//# sourceMappingURL=order-details.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-details.d.ts","sourceRoot":"","sources":["../../../src/voila/order-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,EAML,KAAK,mCAAmC,EACxC,KAAK,4BAA4B,EAIjC,KAAK,yBAAyB,EAM9B,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtF,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oCAAoC,GAAG;IACjD,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAA;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,GAAG,4BAA4B,GAAG,aAAa,CAAA;AAE1G,MAAM,MAAM,2BAA2B,GACnC,oCAAoC,GACpC,uBAAuB,GACvB,oBAAoB,CAAA;AAExB,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC,4BAA4B,CAAC,CAAA;AACjF,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC,mCAAmC,CAAC,CAAA;AAgJ/F,eAAO,MAAM,6BAA6B,GACxC,UAAU,yBAAyB,EACnC,SAAS,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,4BAA4B,CAsB1E,CAAA;AA2GD,eAAO,MAAM,eAAe,GAC1B,SAAS,eAAe,EACxB,OAAO,OAAO,EACd,WAAW,cAAc,EACzB,gBAAgB,aAAa,KAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAuBpE,CAAA;AAWD,eAAO,MAAM,sBAAsB,GACjC,SAAS,eAAe,EACxB,OAAO,OAAO,EACd,WAAW,cAAc,EACzB,gBAAgB,aAAa,KAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,2BAA2B,CAAC,CA0ElF,CAAA"}
|