@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.
Files changed (44) hide show
  1. package/README.md +5 -3
  2. package/dist/src/domain/schemas/discount.d.ts +439 -0
  3. package/dist/src/domain/schemas/discount.d.ts.map +1 -0
  4. package/dist/src/domain/schemas/discount.js +59 -0
  5. package/dist/src/domain/schemas/discount.js.map +1 -0
  6. package/dist/src/domain/schemas/index.d.ts +2 -0
  7. package/dist/src/domain/schemas/index.d.ts.map +1 -1
  8. package/dist/src/domain/schemas/index.js +2 -0
  9. package/dist/src/domain/schemas/index.js.map +1 -1
  10. package/dist/src/domain/schemas/order-details.d.ts +2623 -0
  11. package/dist/src/domain/schemas/order-details.d.ts.map +1 -0
  12. package/dist/src/domain/schemas/order-details.js +148 -0
  13. package/dist/src/domain/schemas/order-details.js.map +1 -0
  14. package/dist/src/domain/schemas/order-history.d.ts +237 -60
  15. package/dist/src/domain/schemas/order-history.d.ts.map +1 -1
  16. package/dist/src/domain/schemas/order-history.js +17 -12
  17. package/dist/src/domain/schemas/order-history.js.map +1 -1
  18. package/dist/src/domain/schemas/slot.d.ts +4 -4
  19. package/dist/src/index.d.ts +3 -0
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js +3 -0
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/voila/browser-login-adapter.d.ts +2 -2
  24. package/dist/src/voila/discount-urls.d.ts +13 -0
  25. package/dist/src/voila/discount-urls.d.ts.map +1 -0
  26. package/dist/src/voila/discount-urls.js +33 -0
  27. package/dist/src/voila/discount-urls.js.map +1 -0
  28. package/dist/src/voila/discounted-products.d.ts +53 -0
  29. package/dist/src/voila/discounted-products.d.ts.map +1 -0
  30. package/dist/src/voila/discounted-products.js +195 -0
  31. package/dist/src/voila/discounted-products.js.map +1 -0
  32. package/dist/src/voila/order-details.d.ts +22 -0
  33. package/dist/src/voila/order-details.d.ts.map +1 -0
  34. package/dist/src/voila/order-details.js +267 -0
  35. package/dist/src/voila/order-details.js.map +1 -0
  36. package/dist/src/voila/order-history.d.ts +9 -5
  37. package/dist/src/voila/order-history.d.ts.map +1 -1
  38. package/dist/src/voila/order-history.js +23 -5
  39. package/dist/src/voila/order-history.js.map +1 -1
  40. package/dist/src/voila/order-urls.d.ts +10 -0
  41. package/dist/src/voila/order-urls.d.ts.map +1 -1
  42. package/dist/src/voila/order-urls.js +12 -1
  43. package/dist/src/voila/order-urls.js.map +1 -1
  44. 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;
@@ -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";
@@ -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";
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,EAGL,KAAK,uBAAuB,EAI5B,KAAK,KAAK,EACV,KAAK,yBAAyB,EAE9B,KAAK,oBAAoB,EAEzB,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,KAAK,8BAA8B,EAA0C,MAAM,oBAAoB,CAAA;AAChH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAA;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAA;IACxD,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,yBAAyB,CAAC,CAAA;IAC3D,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CACpC;AAED,MAAM,MAAM,4CAA4C,GAAG;IACzD,QAAQ,CAAC,IAAI,EAAE,0CAA0C,CAAA;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,GAAG,aAAa,CAAA;AAEvF,MAAM,MAAM,2BAA2B,GAAG,eAAe,CAAC,kCAAkC,CAAC,CAAA;AA4J7F,eAAO,MAAM,mCAAmC,GAC9C,UAAU,yBAAyB,EACnC,OAAO,uBAAuB,EAC9B,MAAM,oBAAoB,KACzB,kCAkBF,CAAA;AAED,eAAO,MAAM,+BAA+B,GAC1C,OAAO,OAAO,EACd,cAAc,uBAAuB,KACpC,MAAM,CAAC,MAAM,CAAC,kCAAkC,EAAE,4CAA4C,CAc9F,CAAA;AAuBH,eAAO,MAAM,qBAAqB,GAChC,SAAS,eAAe,EACxB,OAAO,OAAO,EACd,WAAW,cAAc,EACzB,gBAAgB,aAAa,KAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CA6DhF,CAAA"}
@@ -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"}