@firfi/voila-sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/src/domain/cart.d.ts +10 -0
- package/dist/src/domain/cart.d.ts.map +1 -0
- package/dist/src/domain/cart.js +14 -0
- package/dist/src/domain/cart.js.map +1 -0
- package/dist/src/domain/checkout-readiness.d.ts +3 -0
- package/dist/src/domain/checkout-readiness.d.ts.map +1 -0
- package/dist/src/domain/checkout-readiness.js +18 -0
- package/dist/src/domain/checkout-readiness.js.map +1 -0
- package/dist/src/domain/parse.d.ts +5 -0
- package/dist/src/domain/parse.d.ts.map +1 -0
- package/dist/src/domain/parse.js +11 -0
- package/dist/src/domain/parse.js.map +1 -0
- package/dist/src/domain/schemas/auth.d.ts +123 -0
- package/dist/src/domain/schemas/auth.d.ts.map +1 -0
- package/dist/src/domain/schemas/auth.js +36 -0
- package/dist/src/domain/schemas/auth.js.map +1 -0
- package/dist/src/domain/schemas/cart.d.ts +1224 -0
- package/dist/src/domain/schemas/cart.d.ts.map +1 -0
- package/dist/src/domain/schemas/cart.js +123 -0
- package/dist/src/domain/schemas/cart.js.map +1 -0
- package/dist/src/domain/schemas/category-page.d.ts +187 -0
- package/dist/src/domain/schemas/category-page.d.ts.map +1 -0
- package/dist/src/domain/schemas/category-page.js +43 -0
- package/dist/src/domain/schemas/category-page.js.map +1 -0
- package/dist/src/domain/schemas/category.d.ts +25 -0
- package/dist/src/domain/schemas/category.d.ts.map +1 -0
- package/dist/src/domain/schemas/category.js +30 -0
- package/dist/src/domain/schemas/category.js.map +1 -0
- package/dist/src/domain/schemas/checkout-summary.d.ts +1035 -0
- package/dist/src/domain/schemas/checkout-summary.d.ts.map +1 -0
- package/dist/src/domain/schemas/checkout-summary.js +103 -0
- package/dist/src/domain/schemas/checkout-summary.js.map +1 -0
- package/dist/src/domain/schemas/delivery-destination.d.ts +176 -0
- package/dist/src/domain/schemas/delivery-destination.d.ts.map +1 -0
- package/dist/src/domain/schemas/delivery-destination.js +52 -0
- package/dist/src/domain/schemas/delivery-destination.js.map +1 -0
- package/dist/src/domain/schemas/index.d.ts +13 -0
- package/dist/src/domain/schemas/index.d.ts.map +1 -0
- package/dist/src/domain/schemas/index.js +13 -0
- package/dist/src/domain/schemas/index.js.map +1 -0
- package/dist/src/domain/schemas/money.d.ts +18 -0
- package/dist/src/domain/schemas/money.d.ts.map +1 -0
- package/dist/src/domain/schemas/money.js +11 -0
- package/dist/src/domain/schemas/money.js.map +1 -0
- package/dist/src/domain/schemas/product.d.ts +230 -0
- package/dist/src/domain/schemas/product.d.ts.map +1 -0
- package/dist/src/domain/schemas/product.js +32 -0
- package/dist/src/domain/schemas/product.js.map +1 -0
- package/dist/src/domain/schemas/proposition.d.ts +746 -0
- package/dist/src/domain/schemas/proposition.d.ts.map +1 -0
- package/dist/src/domain/schemas/proposition.js +110 -0
- package/dist/src/domain/schemas/proposition.js.map +1 -0
- package/dist/src/domain/schemas/search.d.ts +31 -0
- package/dist/src/domain/schemas/search.d.ts.map +1 -0
- package/dist/src/domain/schemas/search.js +16 -0
- package/dist/src/domain/schemas/search.js.map +1 -0
- package/dist/src/domain/schemas/session.d.ts +1341 -0
- package/dist/src/domain/schemas/session.d.ts.map +1 -0
- package/dist/src/domain/schemas/session.js +140 -0
- package/dist/src/domain/schemas/session.js.map +1 -0
- package/dist/src/domain/schemas/slot.d.ts +844 -0
- package/dist/src/domain/schemas/slot.d.ts.map +1 -0
- package/dist/src/domain/schemas/slot.js +130 -0
- package/dist/src/domain/schemas/slot.js.map +1 -0
- package/dist/src/index.d.ts +26 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +26 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/voila/browser-login-adapter.d.ts +108 -0
- package/dist/src/voila/browser-login-adapter.d.ts.map +1 -0
- package/dist/src/voila/browser-login-adapter.js +128 -0
- package/dist/src/voila/browser-login-adapter.js.map +1 -0
- package/dist/src/voila/browser-login.d.ts +32 -0
- package/dist/src/voila/browser-login.d.ts.map +1 -0
- package/dist/src/voila/browser-login.js +86 -0
- package/dist/src/voila/browser-login.js.map +1 -0
- package/dist/src/voila/cart-mutation.d.ts +23 -0
- package/dist/src/voila/cart-mutation.d.ts.map +1 -0
- package/dist/src/voila/cart-mutation.js +52 -0
- package/dist/src/voila/cart-mutation.js.map +1 -0
- package/dist/src/voila/cart-view.d.ts +14 -0
- package/dist/src/voila/cart-view.d.ts.map +1 -0
- package/dist/src/voila/cart-view.js +45 -0
- package/dist/src/voila/cart-view.js.map +1 -0
- package/dist/src/voila/catalog-search.d.ts +27 -0
- package/dist/src/voila/catalog-search.d.ts.map +1 -0
- package/dist/src/voila/catalog-search.js +40 -0
- package/dist/src/voila/catalog-search.js.map +1 -0
- package/dist/src/voila/categories.d.ts +4 -0
- package/dist/src/voila/categories.d.ts.map +1 -0
- package/dist/src/voila/categories.js +22 -0
- package/dist/src/voila/categories.js.map +1 -0
- package/dist/src/voila/category-products.d.ts +22 -0
- package/dist/src/voila/category-products.d.ts.map +1 -0
- package/dist/src/voila/category-products.js +32 -0
- package/dist/src/voila/category-products.js.map +1 -0
- package/dist/src/voila/checkout-summary.d.ts +15 -0
- package/dist/src/voila/checkout-summary.d.ts.map +1 -0
- package/dist/src/voila/checkout-summary.js +93 -0
- package/dist/src/voila/checkout-summary.js.map +1 -0
- package/dist/src/voila/checkout-urls.d.ts +11 -0
- package/dist/src/voila/checkout-urls.d.ts.map +1 -0
- package/dist/src/voila/checkout-urls.js +23 -0
- package/dist/src/voila/checkout-urls.js.map +1 -0
- package/dist/src/voila/delivery-destinations.d.ts +22 -0
- package/dist/src/voila/delivery-destinations.d.ts.map +1 -0
- package/dist/src/voila/delivery-destinations.js +70 -0
- package/dist/src/voila/delivery-destinations.js.map +1 -0
- package/dist/src/voila/guest-bootstrap.d.ts +40 -0
- package/dist/src/voila/guest-bootstrap.d.ts.map +1 -0
- package/dist/src/voila/guest-bootstrap.js +108 -0
- package/dist/src/voila/guest-bootstrap.js.map +1 -0
- package/dist/src/voila/headers.d.ts +5 -0
- package/dist/src/voila/headers.d.ts.map +1 -0
- package/dist/src/voila/headers.js +20 -0
- package/dist/src/voila/headers.js.map +1 -0
- package/dist/src/voila/http-client.d.ts +60 -0
- package/dist/src/voila/http-client.d.ts.map +1 -0
- package/dist/src/voila/http-client.js +124 -0
- package/dist/src/voila/http-client.js.map +1 -0
- package/dist/src/voila/initial-state.d.ts +19 -0
- package/dist/src/voila/initial-state.d.ts.map +1 -0
- package/dist/src/voila/initial-state.js +117 -0
- package/dist/src/voila/initial-state.js.map +1 -0
- package/dist/src/voila/session-health.d.ts +10 -0
- package/dist/src/voila/session-health.d.ts.map +1 -0
- package/dist/src/voila/session-health.js +176 -0
- package/dist/src/voila/session-health.js.map +1 -0
- package/dist/src/voila/session-snapshot.d.ts +41 -0
- package/dist/src/voila/session-snapshot.d.ts.map +1 -0
- package/dist/src/voila/session-snapshot.js +101 -0
- package/dist/src/voila/session-snapshot.js.map +1 -0
- package/dist/src/voila/session-storage.d.ts +22 -0
- package/dist/src/voila/session-storage.d.ts.map +1 -0
- package/dist/src/voila/session-storage.js +54 -0
- package/dist/src/voila/session-storage.js.map +1 -0
- package/dist/src/voila/shopping-context.d.ts +33 -0
- package/dist/src/voila/shopping-context.d.ts.map +1 -0
- package/dist/src/voila/shopping-context.js +159 -0
- package/dist/src/voila/shopping-context.js.map +1 -0
- package/dist/src/voila/slot-urls.d.ts +22 -0
- package/dist/src/voila/slot-urls.d.ts.map +1 -0
- package/dist/src/voila/slot-urls.js +51 -0
- package/dist/src/voila/slot-urls.js.map +1 -0
- package/dist/src/voila/slots.d.ts +41 -0
- package/dist/src/voila/slots.d.ts.map +1 -0
- package/dist/src/voila/slots.js +137 -0
- package/dist/src/voila/slots.js.map +1 -0
- package/dist/src/voila/urls.d.ts +114 -0
- package/dist/src/voila/urls.d.ts.map +1 -0
- package/dist/src/voila/urls.js +197 -0
- package/dist/src/voila/urls.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-destinations.js","sourceRoot":"","sources":["../../../src/voila/delivery-destinations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import type { CartTotals, CsrfState, NormalizedCategoryTree, SessionMetadata, SessionSnapshot } from "../domain/schemas/index.js";
|
|
3
|
+
import type { VoilaTransport } from "./http-client.js";
|
|
4
|
+
import { type CookieJarPort } from "./session-snapshot.js";
|
|
5
|
+
export interface GuestCartSummary {
|
|
6
|
+
readonly basketId: string;
|
|
7
|
+
readonly itemCount: number;
|
|
8
|
+
readonly regionId: string;
|
|
9
|
+
readonly totals: CartTotals;
|
|
10
|
+
}
|
|
11
|
+
export interface GuestBootstrapResult {
|
|
12
|
+
readonly categories: NormalizedCategoryTree;
|
|
13
|
+
readonly cart: GuestCartSummary;
|
|
14
|
+
readonly csrf: CsrfState;
|
|
15
|
+
readonly metadata: SessionMetadata;
|
|
16
|
+
readonly regionId: string;
|
|
17
|
+
readonly session: SessionSnapshot;
|
|
18
|
+
}
|
|
19
|
+
export type GuestBootstrapError = {
|
|
20
|
+
readonly _tag: "GuestBootstrapNetworkFailure";
|
|
21
|
+
readonly message: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly _tag: "GuestBootstrapNon2xxResponse";
|
|
24
|
+
readonly message: string;
|
|
25
|
+
readonly status: number;
|
|
26
|
+
} | {
|
|
27
|
+
readonly _tag: "GuestBootstrapMissingCookies";
|
|
28
|
+
readonly message: string;
|
|
29
|
+
} | {
|
|
30
|
+
readonly _tag: "GuestBootstrapCookiePersistenceFailure";
|
|
31
|
+
readonly message: string;
|
|
32
|
+
} | {
|
|
33
|
+
readonly _tag: "GuestBootstrapMissingCsrf";
|
|
34
|
+
readonly message: string;
|
|
35
|
+
} | {
|
|
36
|
+
readonly _tag: "GuestBootstrapInitialStateMalformed";
|
|
37
|
+
readonly message: string;
|
|
38
|
+
};
|
|
39
|
+
export declare const bootstrapGuestSession: (transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<GuestBootstrapResult, GuestBootstrapError>>;
|
|
40
|
+
//# sourceMappingURL=guest-bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-bootstrap.d.ts","sourceRoot":"","sources":["../../../src/voila/guest-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EAET,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAA;AAE9E,OAAO,EAAE,KAAK,aAAa,EAA2C,MAAM,uBAAuB,CAAA;AAGnG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAClC;AAED,MAAM,MAAM,mBAAmB,GAC3B;IACA,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,wCAAwC,CAAA;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAA;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,qCAAqC,CAAA;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAyGH,eAAO,MAAM,qBAAqB,GAChC,WAAW,cAAc,EACzB,gBAAe,aAAkC,KAChD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CA4ClE,CAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { getInitialStateCategories } from "./categories.js";
|
|
3
|
+
import { getHeaderValues } from "./headers.js";
|
|
4
|
+
import { extractInitialState, extractInitialStatePayload } from "./initial-state.js";
|
|
5
|
+
import { makeSessionSnapshot, toughCookieJarPort } from "./session-snapshot.js";
|
|
6
|
+
import { VOILA_BASE_URL } from "./urls.js";
|
|
7
|
+
const homepageUrl = new URL("/", VOILA_BASE_URL);
|
|
8
|
+
const emptyStringLength = 0;
|
|
9
|
+
const successStatusMin = 200;
|
|
10
|
+
const successStatusMax = 300;
|
|
11
|
+
const setCookieHeader = "set-cookie";
|
|
12
|
+
const networkFailure = () => ({
|
|
13
|
+
_tag: "GuestBootstrapNetworkFailure",
|
|
14
|
+
message: "Voila homepage request failed"
|
|
15
|
+
});
|
|
16
|
+
const non2xxResponse = (status) => ({
|
|
17
|
+
_tag: "GuestBootstrapNon2xxResponse",
|
|
18
|
+
message: "Voila homepage returned a non-success response",
|
|
19
|
+
status
|
|
20
|
+
});
|
|
21
|
+
const missingCookies = () => ({
|
|
22
|
+
_tag: "GuestBootstrapMissingCookies",
|
|
23
|
+
message: "Voila homepage response did not include guest session cookies"
|
|
24
|
+
});
|
|
25
|
+
const cookiePersistenceFailure = () => ({
|
|
26
|
+
_tag: "GuestBootstrapCookiePersistenceFailure",
|
|
27
|
+
message: "Guest session cookies could not be stored"
|
|
28
|
+
});
|
|
29
|
+
const missingCsrf = () => ({
|
|
30
|
+
_tag: "GuestBootstrapMissingCsrf",
|
|
31
|
+
message: "Voila homepage initial state did not include a CSRF token"
|
|
32
|
+
});
|
|
33
|
+
const initialStateMalformed = () => ({
|
|
34
|
+
_tag: "GuestBootstrapInitialStateMalformed",
|
|
35
|
+
message: "Voila homepage initial state could not be decoded"
|
|
36
|
+
});
|
|
37
|
+
const isSuccessStatus = (status) => status >= successStatusMin && status < successStatusMax;
|
|
38
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
39
|
+
const hasCsrfToken = (payload) => {
|
|
40
|
+
if (!isRecord(payload) || !isRecord(payload.csrf)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return typeof payload.csrf.token === "string";
|
|
44
|
+
};
|
|
45
|
+
const makeGuestCartSummary = (basket) => {
|
|
46
|
+
const itemCount = (basket.itemGroups ?? []).reduce((total, group) => total + group.items.reduce((groupTotal, item) => groupTotal + item.quantity, 0), 0);
|
|
47
|
+
return {
|
|
48
|
+
basketId: basket.basketId,
|
|
49
|
+
itemCount,
|
|
50
|
+
regionId: basket.regionId,
|
|
51
|
+
totals: basket.totals
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const storeHomepageCookies = (cookieJarPort, response) => {
|
|
55
|
+
const cookies = getHeaderValues(response.headers, setCookieHeader);
|
|
56
|
+
if (cookies.length === emptyStringLength) {
|
|
57
|
+
return Either.left(missingCookies());
|
|
58
|
+
}
|
|
59
|
+
const jar = cookieJarPort.create();
|
|
60
|
+
for (const cookie of cookies) {
|
|
61
|
+
try {
|
|
62
|
+
jar.setCookieSync(cookie, homepageUrl.href);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return Either.left(cookiePersistenceFailure());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return Either.mapLeft(cookieJarPort.serialize(jar), cookiePersistenceFailure);
|
|
69
|
+
};
|
|
70
|
+
const decodeInitialState = (html) => Either.flatMap(Either.mapLeft(extractInitialStatePayload(html), initialStateMalformed), (payload) => {
|
|
71
|
+
if (!hasCsrfToken(payload)) {
|
|
72
|
+
return Either.left(missingCsrf());
|
|
73
|
+
}
|
|
74
|
+
return Either.mapLeft(extractInitialState(html), initialStateMalformed);
|
|
75
|
+
});
|
|
76
|
+
export const bootstrapGuestSession = async (transport, cookieJarPort = toughCookieJarPort) => {
|
|
77
|
+
let response;
|
|
78
|
+
try {
|
|
79
|
+
response = await transport.request({
|
|
80
|
+
headers: {},
|
|
81
|
+
method: "GET",
|
|
82
|
+
url: homepageUrl
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return Either.left(networkFailure());
|
|
87
|
+
}
|
|
88
|
+
if (Either.isLeft(response)) {
|
|
89
|
+
return Either.left(networkFailure());
|
|
90
|
+
}
|
|
91
|
+
if (!isSuccessStatus(response.right.status)) {
|
|
92
|
+
return Either.left(non2xxResponse(response.right.status));
|
|
93
|
+
}
|
|
94
|
+
return Either.flatMap(storeHomepageCookies(cookieJarPort, response.right), (cookieJar) => Either.flatMap(decodeInitialState(response.right.body), (initialState) => {
|
|
95
|
+
if (initialState.csrf.token.trim().length === emptyStringLength) {
|
|
96
|
+
return Either.left(missingCsrf());
|
|
97
|
+
}
|
|
98
|
+
return Either.mapLeft(makeSessionSnapshot(initialState.session.metadata, initialState.csrf, cookieJar), cookiePersistenceFailure).pipe(Either.map((session) => ({
|
|
99
|
+
categories: getInitialStateCategories(initialState),
|
|
100
|
+
cart: makeGuestCartSummary(initialState.data.basket),
|
|
101
|
+
csrf: initialState.csrf,
|
|
102
|
+
metadata: initialState.session.metadata,
|
|
103
|
+
regionId: initialState.data.basket.regionId,
|
|
104
|
+
session
|
|
105
|
+
})));
|
|
106
|
+
}));
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=guest-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-bootstrap.js","sourceRoot":"","sources":["../../../src/voila/guest-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SessionMetadata } from "../domain/schemas/index.js";
|
|
2
|
+
export type ResponseHeaders = Readonly<Record<string, ReadonlyArray<string> | string | undefined>>;
|
|
3
|
+
export declare const makeVoilaHeaders: (metadata: SessionMetadata, csrfToken: string) => Readonly<Record<string, string>>;
|
|
4
|
+
export declare const getHeaderValues: (headers: ResponseHeaders, headerName: string) => ReadonlyArray<string>;
|
|
5
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/voila/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;AAElG,eAAO,MAAM,gBAAgB,GAC3B,UAAU,eAAe,EACzB,WAAW,MAAM,KAChB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOhC,CAAA;AAEF,eAAO,MAAM,eAAe,GAC1B,SAAS,eAAe,EACxB,YAAY,MAAM,KACjB,aAAa,CAAC,MAAM,CActB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const makeVoilaHeaders = (metadata, csrfToken) => ({
|
|
2
|
+
"X-CSRF-TOKEN": csrfToken,
|
|
3
|
+
"client-route-id": metadata.clientRouteId,
|
|
4
|
+
"content-type": "application/json",
|
|
5
|
+
"ecom-request-source": "web",
|
|
6
|
+
"ecom-request-source-version": metadata.assetVersion,
|
|
7
|
+
"page-view-id": metadata.pageViewId
|
|
8
|
+
});
|
|
9
|
+
export const getHeaderValues = (headers, headerName) => {
|
|
10
|
+
const found = Object.entries(headers).find(([key]) => key.toLowerCase() === headerName);
|
|
11
|
+
if (found === undefined) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const value = found[1];
|
|
15
|
+
if (value === undefined) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return typeof value === "string" ? [value] : value;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/voila/headers.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAAyB,EACzB,SAAiB,EACiB,EAAE,CAAC,CAAC;IACtC,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,QAAQ,CAAC,aAAa;IACzC,cAAc,EAAE,kBAAkB;IAClC,qBAAqB,EAAE,KAAK;IAC5B,6BAA6B,EAAE,QAAQ,CAAC,YAAY;IACpD,cAAc,EAAE,QAAQ,CAAC,UAAU;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAwB,EACxB,UAAkB,EACK,EAAE;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAA;IAEvF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAEtB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AACpD,CAAC,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import { Either } from "effect";
|
|
3
|
+
import { type SessionSnapshot } from "../domain/schemas/index.js";
|
|
4
|
+
import { type ResponseHeaders } from "./headers.js";
|
|
5
|
+
import { type CookieJarPort } from "./session-snapshot.js";
|
|
6
|
+
export type VoilaHttpMethod = "DELETE" | "GET" | "PATCH" | "POST" | "PUT";
|
|
7
|
+
export interface VoilaHttpRequest {
|
|
8
|
+
readonly body?: string;
|
|
9
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
10
|
+
readonly method: VoilaHttpMethod;
|
|
11
|
+
readonly url: URL;
|
|
12
|
+
}
|
|
13
|
+
export interface VoilaTransportRequest {
|
|
14
|
+
readonly body?: string;
|
|
15
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
16
|
+
readonly method: VoilaHttpMethod;
|
|
17
|
+
readonly url: URL;
|
|
18
|
+
}
|
|
19
|
+
export interface VoilaTransportResponse {
|
|
20
|
+
readonly body: string;
|
|
21
|
+
readonly headers: ResponseHeaders;
|
|
22
|
+
readonly status: number;
|
|
23
|
+
}
|
|
24
|
+
export interface VoilaTransport {
|
|
25
|
+
readonly request: (request: VoilaTransportRequest) => Promise<Either.Either<VoilaTransportResponse, unknown>>;
|
|
26
|
+
}
|
|
27
|
+
export interface VoilaJsonResult<A> {
|
|
28
|
+
readonly session: SessionSnapshot;
|
|
29
|
+
readonly value: A;
|
|
30
|
+
}
|
|
31
|
+
export type VoilaSdkError = {
|
|
32
|
+
readonly _tag: "VoilaMissingCsrfToken";
|
|
33
|
+
readonly message: string;
|
|
34
|
+
} | {
|
|
35
|
+
readonly _tag: "VoilaUnsupportedOrigin";
|
|
36
|
+
readonly message: string;
|
|
37
|
+
readonly origin: string;
|
|
38
|
+
} | {
|
|
39
|
+
readonly _tag: "VoilaSessionPersistenceFailure";
|
|
40
|
+
readonly message: string;
|
|
41
|
+
} | {
|
|
42
|
+
readonly _tag: "VoilaNetworkFailure";
|
|
43
|
+
readonly message: string;
|
|
44
|
+
} | {
|
|
45
|
+
readonly _tag: "VoilaUnauthorizedSession";
|
|
46
|
+
readonly message: string;
|
|
47
|
+
readonly status: 401 | 403;
|
|
48
|
+
} | {
|
|
49
|
+
readonly _tag: "VoilaNon2xxResponse";
|
|
50
|
+
readonly message: string;
|
|
51
|
+
readonly status: number;
|
|
52
|
+
} | {
|
|
53
|
+
readonly _tag: "VoilaMalformedJson";
|
|
54
|
+
readonly message: string;
|
|
55
|
+
} | {
|
|
56
|
+
readonly _tag: "VoilaSchemaDecodeFailure";
|
|
57
|
+
readonly message: string;
|
|
58
|
+
};
|
|
59
|
+
export declare const requestVoilaJson: <A, I>(schema: Schema.Schema<A, I, never>, session: SessionSnapshot, request: VoilaHttpRequest, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<VoilaJsonResult<A>, VoilaSdkError>>;
|
|
60
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/voila/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { parseJson, parseUnknown } from "../domain/parse.js";
|
|
3
|
+
import {} from "../domain/schemas/index.js";
|
|
4
|
+
import { getHeaderValues, makeVoilaHeaders } from "./headers.js";
|
|
5
|
+
import { toughCookieJarPort } from "./session-snapshot.js";
|
|
6
|
+
import { VOILA_BASE_URL } from "./urls.js";
|
|
7
|
+
const emptyStringLength = 0;
|
|
8
|
+
const unauthorizedStatus = 401;
|
|
9
|
+
const forbiddenStatus = 403;
|
|
10
|
+
const successStatusMin = 200;
|
|
11
|
+
const successStatusMax = 300;
|
|
12
|
+
const setCookieHeader = "set-cookie";
|
|
13
|
+
const missingCsrfToken = () => ({
|
|
14
|
+
_tag: "VoilaMissingCsrfToken",
|
|
15
|
+
message: "Session snapshot is missing a CSRF token"
|
|
16
|
+
});
|
|
17
|
+
const unsupportedOrigin = (origin) => ({
|
|
18
|
+
_tag: "VoilaUnsupportedOrigin",
|
|
19
|
+
message: "Only same-origin Voila requests are supported",
|
|
20
|
+
origin
|
|
21
|
+
});
|
|
22
|
+
const sessionPersistenceFailure = (_cause) => ({
|
|
23
|
+
_tag: "VoilaSessionPersistenceFailure",
|
|
24
|
+
message: "Session cookies could not be restored or persisted"
|
|
25
|
+
});
|
|
26
|
+
const setCookiePersistenceFailure = () => ({
|
|
27
|
+
_tag: "VoilaSessionPersistenceFailure",
|
|
28
|
+
message: "Session cookies could not be restored or persisted"
|
|
29
|
+
});
|
|
30
|
+
const networkFailure = (_cause) => ({
|
|
31
|
+
_tag: "VoilaNetworkFailure",
|
|
32
|
+
message: "Voila network request failed"
|
|
33
|
+
});
|
|
34
|
+
const unauthorizedSession = (status) => ({
|
|
35
|
+
_tag: "VoilaUnauthorizedSession",
|
|
36
|
+
message: "Voila session is unauthorized or expired",
|
|
37
|
+
status
|
|
38
|
+
});
|
|
39
|
+
const non2xxResponse = (status) => ({
|
|
40
|
+
_tag: "VoilaNon2xxResponse",
|
|
41
|
+
message: "Voila returned a non-success response",
|
|
42
|
+
status
|
|
43
|
+
});
|
|
44
|
+
const malformedJson = () => ({
|
|
45
|
+
_tag: "VoilaMalformedJson",
|
|
46
|
+
message: "Voila returned malformed JSON"
|
|
47
|
+
});
|
|
48
|
+
const schemaDecodeFailure = () => ({
|
|
49
|
+
_tag: "VoilaSchemaDecodeFailure",
|
|
50
|
+
message: "Voila response JSON does not match the SDK schema"
|
|
51
|
+
});
|
|
52
|
+
const isSuccessStatus = (status) => status >= successStatusMin && status < successStatusMax;
|
|
53
|
+
const isUnauthorizedStatus = (status) => status === unauthorizedStatus || status === forbiddenStatus;
|
|
54
|
+
const makeRequestHeaders = (request, session, cookieHeader) => {
|
|
55
|
+
const cookieHeaders = cookieHeader.length === emptyStringLength ? {} : { cookie: cookieHeader };
|
|
56
|
+
return {
|
|
57
|
+
...request.headers,
|
|
58
|
+
...makeVoilaHeaders(session.metadata, session.csrf.token),
|
|
59
|
+
...cookieHeaders
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
const applySetCookieHeaders = (cookieJarPort, session, response, url) => Either.flatMap(Either.mapLeft(cookieJarPort.deserialize(session.cookieJar), sessionPersistenceFailure), (cookieJar) => {
|
|
63
|
+
for (const cookie of getHeaderValues(response.headers, setCookieHeader)) {
|
|
64
|
+
try {
|
|
65
|
+
cookieJar.setCookieSync(cookie, url.href);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return Either.left(setCookiePersistenceFailure());
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return Either.flatMap(Either.mapLeft(cookieJarPort.serialize(cookieJar), sessionPersistenceFailure), (cookieJarSnapshot) => Either.right({
|
|
72
|
+
...session,
|
|
73
|
+
cookieJar: cookieJarSnapshot
|
|
74
|
+
}));
|
|
75
|
+
});
|
|
76
|
+
export const requestVoilaJson = async (schema, session, request, transport, cookieJarPort = toughCookieJarPort) => {
|
|
77
|
+
if (session.csrf.token.trim().length === emptyStringLength) {
|
|
78
|
+
return Either.left(missingCsrfToken());
|
|
79
|
+
}
|
|
80
|
+
if (request.url.origin !== VOILA_BASE_URL) {
|
|
81
|
+
return Either.left(unsupportedOrigin(request.url.origin));
|
|
82
|
+
}
|
|
83
|
+
const cookieJar = cookieJarPort.deserialize(session.cookieJar);
|
|
84
|
+
if (Either.isLeft(cookieJar)) {
|
|
85
|
+
return Either.left(sessionPersistenceFailure(cookieJar.left));
|
|
86
|
+
}
|
|
87
|
+
const cookieHeader = cookieJar.right.getCookieStringSync(request.url.href);
|
|
88
|
+
const transportRequestBase = {
|
|
89
|
+
headers: makeRequestHeaders(request, session, cookieHeader),
|
|
90
|
+
method: request.method,
|
|
91
|
+
url: request.url
|
|
92
|
+
};
|
|
93
|
+
const transportRequest = request.body === undefined
|
|
94
|
+
? transportRequestBase
|
|
95
|
+
: {
|
|
96
|
+
...transportRequestBase,
|
|
97
|
+
body: request.body
|
|
98
|
+
};
|
|
99
|
+
let response;
|
|
100
|
+
try {
|
|
101
|
+
response = await transport.request(transportRequest);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return Either.left(networkFailure(error));
|
|
105
|
+
}
|
|
106
|
+
if (Either.isLeft(response)) {
|
|
107
|
+
return Either.left(networkFailure(response.left));
|
|
108
|
+
}
|
|
109
|
+
if (isUnauthorizedStatus(response.right.status)) {
|
|
110
|
+
return Either.left(unauthorizedSession(response.right.status));
|
|
111
|
+
}
|
|
112
|
+
if (!isSuccessStatus(response.right.status)) {
|
|
113
|
+
return Either.left(non2xxResponse(response.right.status));
|
|
114
|
+
}
|
|
115
|
+
const updatedSession = applySetCookieHeaders(cookieJarPort, session, response.right, request.url);
|
|
116
|
+
if (Either.isLeft(updatedSession)) {
|
|
117
|
+
return Either.left(updatedSession.left);
|
|
118
|
+
}
|
|
119
|
+
return Either.flatMap(Either.mapLeft(parseJson(response.right.body), malformedJson), (payload) => Either.map(Either.mapLeft(parseUnknown(schema, payload), schemaDecodeFailure), (value) => ({
|
|
120
|
+
session: updatedSession.right,
|
|
121
|
+
value
|
|
122
|
+
})));
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/voila/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ParseResult } from "effect";
|
|
2
|
+
import { Either } from "effect";
|
|
3
|
+
import { type InitialState } from "../domain/schemas/index.js";
|
|
4
|
+
export type InitialStateExtractionError = {
|
|
5
|
+
readonly _tag: "InitialStateScriptMissing";
|
|
6
|
+
readonly marker: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly _tag: "InitialStateJsonMissing";
|
|
9
|
+
readonly marker: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly _tag: "InitialStateJsonMalformed";
|
|
12
|
+
readonly cause: Error;
|
|
13
|
+
} | {
|
|
14
|
+
readonly _tag: "InitialStateSchemaMismatch";
|
|
15
|
+
readonly cause: ParseResult.ParseError;
|
|
16
|
+
};
|
|
17
|
+
export declare const extractInitialStatePayload: (html: string) => Either.Either<unknown, InitialStateExtractionError>;
|
|
18
|
+
export declare const extractInitialState: (html: string) => Either.Either<InitialState, InitialStateExtractionError>;
|
|
19
|
+
//# sourceMappingURL=initial-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initial-state.d.ts","sourceRoot":"","sources":["../../../src/voila/initial-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,4BAA4B,CAAA;AAclF,MAAM,MAAM,2BAA2B,GACnC;IACA,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAA;IAC3C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAA;CACvC,CAAA;AAqIH,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAIzG,CAAA;AAEH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAIvG,CAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { parseJson, parseUnknown } from "../domain/parse.js";
|
|
3
|
+
import { InitialStateSchema } from "../domain/schemas/index.js";
|
|
4
|
+
const initialStateMarker = "window.__INITIAL_STATE__";
|
|
5
|
+
const assignmentToken = "=";
|
|
6
|
+
const scriptOpenStart = "<script";
|
|
7
|
+
const scriptOpenEnd = ">";
|
|
8
|
+
const scriptClose = "</script>";
|
|
9
|
+
const objectStart = "{";
|
|
10
|
+
const objectEnd = "}";
|
|
11
|
+
const quote = "\"";
|
|
12
|
+
const escape = "\\";
|
|
13
|
+
const missingIndex = -1;
|
|
14
|
+
const whitespaceCharacters = new Set([" ", "\n", "\r", "\t"]);
|
|
15
|
+
const scriptMissing = () => ({
|
|
16
|
+
_tag: "InitialStateScriptMissing",
|
|
17
|
+
marker: initialStateMarker
|
|
18
|
+
});
|
|
19
|
+
const jsonMissing = () => ({
|
|
20
|
+
_tag: "InitialStateJsonMissing",
|
|
21
|
+
marker: initialStateMarker
|
|
22
|
+
});
|
|
23
|
+
const jsonMalformed = (cause) => ({
|
|
24
|
+
_tag: "InitialStateJsonMalformed",
|
|
25
|
+
cause
|
|
26
|
+
});
|
|
27
|
+
const schemaMismatch = (cause) => ({
|
|
28
|
+
_tag: "InitialStateSchemaMismatch",
|
|
29
|
+
cause
|
|
30
|
+
});
|
|
31
|
+
const skipWhitespace = (html, fromIndex) => {
|
|
32
|
+
let index = fromIndex;
|
|
33
|
+
while (index < html.length && whitespaceCharacters.has(html.charAt(index))) {
|
|
34
|
+
index += 1;
|
|
35
|
+
}
|
|
36
|
+
return index;
|
|
37
|
+
};
|
|
38
|
+
const findJsonStart = (html, fromIndex) => {
|
|
39
|
+
const assignmentIndex = skipWhitespace(html, fromIndex);
|
|
40
|
+
if (html[assignmentIndex] !== assignmentToken) {
|
|
41
|
+
return missingIndex;
|
|
42
|
+
}
|
|
43
|
+
const objectIndex = skipWhitespace(html, assignmentIndex + assignmentToken.length);
|
|
44
|
+
if (html[objectIndex] !== objectStart) {
|
|
45
|
+
return missingIndex;
|
|
46
|
+
}
|
|
47
|
+
return objectIndex;
|
|
48
|
+
};
|
|
49
|
+
const findJsonEnd = (html, fromIndex) => {
|
|
50
|
+
let depth = 0;
|
|
51
|
+
let index = fromIndex;
|
|
52
|
+
let inString = false;
|
|
53
|
+
let escaped = false;
|
|
54
|
+
while (index < html.length) {
|
|
55
|
+
const character = html[index];
|
|
56
|
+
if (escaped) {
|
|
57
|
+
escaped = false;
|
|
58
|
+
}
|
|
59
|
+
else if (character === escape) {
|
|
60
|
+
escaped = inString;
|
|
61
|
+
}
|
|
62
|
+
else if (character === quote) {
|
|
63
|
+
inString = !inString;
|
|
64
|
+
}
|
|
65
|
+
else if (!inString && character === objectStart) {
|
|
66
|
+
depth += 1;
|
|
67
|
+
}
|
|
68
|
+
else if (!inString && character === objectEnd) {
|
|
69
|
+
depth -= 1;
|
|
70
|
+
if (depth === 0) {
|
|
71
|
+
return index;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
index += 1;
|
|
75
|
+
}
|
|
76
|
+
return missingIndex;
|
|
77
|
+
};
|
|
78
|
+
const findInitialStateScript = (html) => {
|
|
79
|
+
let searchIndex = 0;
|
|
80
|
+
while (searchIndex < html.length) {
|
|
81
|
+
const openStartIndex = html.indexOf(scriptOpenStart, searchIndex);
|
|
82
|
+
if (openStartIndex < 0) {
|
|
83
|
+
return Either.left(scriptMissing());
|
|
84
|
+
}
|
|
85
|
+
const openEndIndex = html.indexOf(scriptOpenEnd, openStartIndex + scriptOpenStart.length);
|
|
86
|
+
if (openEndIndex < 0) {
|
|
87
|
+
return Either.left(scriptMissing());
|
|
88
|
+
}
|
|
89
|
+
const closeIndex = html.indexOf(scriptClose, openEndIndex + scriptOpenEnd.length);
|
|
90
|
+
if (closeIndex < 0) {
|
|
91
|
+
return Either.left(scriptMissing());
|
|
92
|
+
}
|
|
93
|
+
const scriptBody = html.slice(openEndIndex + scriptOpenEnd.length, closeIndex);
|
|
94
|
+
if (scriptBody.includes(initialStateMarker)) {
|
|
95
|
+
return Either.right(scriptBody);
|
|
96
|
+
}
|
|
97
|
+
searchIndex = closeIndex + scriptClose.length;
|
|
98
|
+
}
|
|
99
|
+
return Either.left(scriptMissing());
|
|
100
|
+
};
|
|
101
|
+
const extractInitialStateJson = (html) => {
|
|
102
|
+
return Either.flatMap(findInitialStateScript(html), (scriptBody) => {
|
|
103
|
+
const markerIndex = scriptBody.indexOf(initialStateMarker);
|
|
104
|
+
const jsonStart = findJsonStart(scriptBody, markerIndex + initialStateMarker.length);
|
|
105
|
+
if (jsonStart < 0) {
|
|
106
|
+
return Either.left(jsonMissing());
|
|
107
|
+
}
|
|
108
|
+
const jsonEnd = findJsonEnd(scriptBody, jsonStart);
|
|
109
|
+
if (jsonEnd < 0) {
|
|
110
|
+
return Either.left(jsonMissing());
|
|
111
|
+
}
|
|
112
|
+
return Either.right(scriptBody.slice(jsonStart, jsonEnd + 1));
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
export const extractInitialStatePayload = (html) => Either.flatMap(extractInitialStateJson(html), (json) => Either.mapLeft(parseJson(json), jsonMalformed));
|
|
116
|
+
export const extractInitialState = (html) => Either.flatMap(extractInitialStatePayload(html), (payload) => Either.mapLeft(parseUnknown(InitialStateSchema, payload), schemaMismatch));
|
|
117
|
+
//# sourceMappingURL=initial-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initial-state.js","sourceRoot":"","sources":["../../../src/voila/initial-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import type { SdkSessionSnapshot, SessionHealth } from "../domain/schemas/index.js";
|
|
3
|
+
import type { VoilaTransport } from "./http-client.js";
|
|
4
|
+
import type { CookieJarPort } from "./session-snapshot.js";
|
|
5
|
+
export type CheckSessionHealthError = {
|
|
6
|
+
readonly _tag: "SessionHealthSnapshotInvalid";
|
|
7
|
+
readonly message: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const checkSessionHealth: (snapshot: SdkSessionSnapshot, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<SessionHealth, CheckSessionHealthError>>;
|
|
10
|
+
//# sourceMappingURL=session-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../../src/voila/session-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,KAAK,EAGV,kBAAkB,EAClB,aAAa,EAEd,MAAM,4BAA4B,CAAA;AAGnC,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAQ1D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAmQD,eAAO,MAAM,kBAAkB,GAC7B,UAAU,kBAAkB,EAC5B,WAAW,cAAc,EACzB,gBAAgB,aAAa,KAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC,CA4B/D,CAAA"}
|