@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,176 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { parseJson, parseUnknown } from "../domain/parse.js";
|
|
3
|
+
import { ActiveCustomerSessionResponseSchema, SessionHealthSchema } from "../domain/schemas/index.js";
|
|
4
|
+
import { getHeaderValues, makeVoilaHeaders } from "./headers.js";
|
|
5
|
+
import { makeAuthenticatedSdkSessionSnapshot, makeGuestSdkSessionSnapshot, toughCookieJarPort } from "./session-snapshot.js";
|
|
6
|
+
import { makeActiveCustomerSessionRequest } from "./urls.js";
|
|
7
|
+
const emptyStringLength = 0;
|
|
8
|
+
const forbiddenStatus = 403;
|
|
9
|
+
const setCookieHeader = "set-cookie";
|
|
10
|
+
const successStatusMax = 300;
|
|
11
|
+
const successStatusMin = 200;
|
|
12
|
+
const unauthorizedStatus = 401;
|
|
13
|
+
const sessionHealthSnapshotInvalid = () => ({
|
|
14
|
+
_tag: "SessionHealthSnapshotInvalid",
|
|
15
|
+
message: "Session health could not build a typed SDK session snapshot"
|
|
16
|
+
});
|
|
17
|
+
const decodeSessionHealth = (health) => Either.mapLeft(parseUnknown(SessionHealthSchema, health), sessionHealthSnapshotInvalid);
|
|
18
|
+
const responseSaysAuthenticated = (response) => response.authenticated === true
|
|
19
|
+
|| response.isAuthenticated === true
|
|
20
|
+
|| response.customer?.authenticated === true
|
|
21
|
+
|| response.status?.toLowerCase() === "authenticated"
|
|
22
|
+
|| (typeof response.cartId === "string" && typeof response.regionId === "string");
|
|
23
|
+
const makeSdkSnapshotWithSession = (previous, session) => previous.kind === "authenticated"
|
|
24
|
+
? Either.mapLeft(makeAuthenticatedSdkSessionSnapshot(session, previous.state, previous.account), sessionHealthSnapshotInvalid)
|
|
25
|
+
: Either.mapLeft(makeGuestSdkSessionSnapshot(session), sessionHealthSnapshotInvalid);
|
|
26
|
+
const makeActiveSession = (previous, response, session) => {
|
|
27
|
+
if (previous.kind === "authenticated" && !responseSaysAuthenticated(response)) {
|
|
28
|
+
return makeReauthRequired(previous, session);
|
|
29
|
+
}
|
|
30
|
+
return previous.kind === "authenticated"
|
|
31
|
+
? Either.mapLeft(makeAuthenticatedSdkSessionSnapshot(session, "authenticated", previous.account), sessionHealthSnapshotInvalid).pipe(Either.flatMap((updatedSession) => decodeSessionHealth({
|
|
32
|
+
session: updatedSession,
|
|
33
|
+
status: "active"
|
|
34
|
+
})))
|
|
35
|
+
: Either.mapLeft(makeGuestSdkSessionSnapshot(session), sessionHealthSnapshotInvalid).pipe(Either.flatMap((updatedSession) => decodeSessionHealth({
|
|
36
|
+
session: updatedSession,
|
|
37
|
+
status: "active"
|
|
38
|
+
})));
|
|
39
|
+
};
|
|
40
|
+
const makeReauthRequired = (previous, session = previous.session) => previous.kind === "authenticated"
|
|
41
|
+
? Either.mapLeft(makeAuthenticatedSdkSessionSnapshot(session, "reauth-required", previous.account), sessionHealthSnapshotInvalid).pipe(Either.flatMap((session) => decodeSessionHealth({
|
|
42
|
+
session,
|
|
43
|
+
status: "reauth-required"
|
|
44
|
+
})))
|
|
45
|
+
: Either.flatMap(makeGuestSdkSessionSnapshot(session), (updatedSession) => decodeSessionHealth({
|
|
46
|
+
session: updatedSession,
|
|
47
|
+
status: "unauthorized"
|
|
48
|
+
})).pipe(Either.mapLeft(sessionHealthSnapshotInvalid));
|
|
49
|
+
const isSuccessStatus = (status) => status >= successStatusMin && status < successStatusMax;
|
|
50
|
+
const isUnauthorizedStatus = (status) => status === unauthorizedStatus || status === forbiddenStatus;
|
|
51
|
+
const applySetCookieHeaders = (cookieJarPort, session, response) => {
|
|
52
|
+
const cookieHeaders = getHeaderValues(response.headers, setCookieHeader);
|
|
53
|
+
if (cookieHeaders.length === emptyStringLength) {
|
|
54
|
+
return Either.right(session);
|
|
55
|
+
}
|
|
56
|
+
const jar = cookieJarPort.deserialize(session.cookieJar);
|
|
57
|
+
if (Either.isLeft(jar)) {
|
|
58
|
+
return Either.left("persistence");
|
|
59
|
+
}
|
|
60
|
+
for (const cookie of cookieHeaders) {
|
|
61
|
+
try {
|
|
62
|
+
jar.right.setCookieSync(cookie, makeActiveCustomerSessionRequest().url.href);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return Either.left("persistence");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return Either.map(Either.mapLeft(cookieJarPort.serialize(jar.right), () => "persistence"), (cookieJar) => ({
|
|
69
|
+
...session,
|
|
70
|
+
cookieJar
|
|
71
|
+
}));
|
|
72
|
+
};
|
|
73
|
+
const makeTransportHeaders = (cookieJarPort, session) => {
|
|
74
|
+
const jar = cookieJarPort.deserialize(session.cookieJar);
|
|
75
|
+
if (Either.isLeft(jar)) {
|
|
76
|
+
return Either.left("persistence");
|
|
77
|
+
}
|
|
78
|
+
const cookieHeader = jar.right.getCookieStringSync(makeActiveCustomerSessionRequest().url.href);
|
|
79
|
+
return Either.right({
|
|
80
|
+
...makeVoilaHeaders(session.metadata, session.csrf.token),
|
|
81
|
+
...(cookieHeader.length === emptyStringLength ? {} : { cookie: cookieHeader })
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
const requestActiveCustomerSession = async (session, transport, cookieJarPort) => {
|
|
85
|
+
if (session.csrf.token.trim().length === emptyStringLength) {
|
|
86
|
+
return {
|
|
87
|
+
_tag: "ActiveCustomerSessionUnauthorized",
|
|
88
|
+
session
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const headers = makeTransportHeaders(cookieJarPort, session);
|
|
92
|
+
if (Either.isLeft(headers)) {
|
|
93
|
+
return {
|
|
94
|
+
_tag: "ActiveCustomerSessionRetry",
|
|
95
|
+
reason: "persistence",
|
|
96
|
+
session
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const request = makeActiveCustomerSessionRequest();
|
|
100
|
+
let response;
|
|
101
|
+
try {
|
|
102
|
+
response = await transport.request({
|
|
103
|
+
headers: headers.right,
|
|
104
|
+
method: request.method,
|
|
105
|
+
url: request.url
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return {
|
|
110
|
+
_tag: "ActiveCustomerSessionRetry",
|
|
111
|
+
reason: "network",
|
|
112
|
+
session
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (Either.isLeft(response)) {
|
|
116
|
+
return {
|
|
117
|
+
_tag: "ActiveCustomerSessionRetry",
|
|
118
|
+
reason: "network",
|
|
119
|
+
session
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const updatedSession = applySetCookieHeaders(cookieJarPort, session, response.right);
|
|
123
|
+
if (Either.isLeft(updatedSession)) {
|
|
124
|
+
return {
|
|
125
|
+
_tag: "ActiveCustomerSessionRetry",
|
|
126
|
+
reason: "persistence",
|
|
127
|
+
session
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (isUnauthorizedStatus(response.right.status)) {
|
|
131
|
+
return {
|
|
132
|
+
_tag: "ActiveCustomerSessionUnauthorized",
|
|
133
|
+
session: updatedSession.right
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (!isSuccessStatus(response.right.status)) {
|
|
137
|
+
return {
|
|
138
|
+
_tag: "ActiveCustomerSessionRetry",
|
|
139
|
+
reason: "server",
|
|
140
|
+
session: updatedSession.right
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const parsed = Either.flatMap(parseJson(response.right.body), (payload) => parseUnknown(ActiveCustomerSessionResponseSchema, payload));
|
|
144
|
+
if (Either.isLeft(parsed)) {
|
|
145
|
+
return {
|
|
146
|
+
_tag: "ActiveCustomerSessionSchemaChanged",
|
|
147
|
+
session: updatedSession.right
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
_tag: "ActiveCustomerSessionOk",
|
|
152
|
+
session: updatedSession.right,
|
|
153
|
+
value: parsed.right
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
export const checkSessionHealth = async (snapshot, transport, cookieJarPort) => {
|
|
157
|
+
const result = await requestActiveCustomerSession(snapshot.session, transport, cookieJarPort ?? toughCookieJarPort);
|
|
158
|
+
switch (result._tag) {
|
|
159
|
+
case "ActiveCustomerSessionOk":
|
|
160
|
+
return makeActiveSession(snapshot, result.value, result.session);
|
|
161
|
+
case "ActiveCustomerSessionRetry":
|
|
162
|
+
return Either.flatMap(makeSdkSnapshotWithSession(snapshot, result.session), (updatedSnapshot) => decodeSessionHealth({
|
|
163
|
+
reason: result.reason,
|
|
164
|
+
session: updatedSnapshot,
|
|
165
|
+
status: "retry"
|
|
166
|
+
}));
|
|
167
|
+
case "ActiveCustomerSessionSchemaChanged":
|
|
168
|
+
return Either.flatMap(makeSdkSnapshotWithSession(snapshot, result.session), (updatedSnapshot) => decodeSessionHealth({
|
|
169
|
+
session: updatedSnapshot,
|
|
170
|
+
status: "schema-changed"
|
|
171
|
+
}));
|
|
172
|
+
case "ActiveCustomerSessionUnauthorized":
|
|
173
|
+
return makeReauthRequired(snapshot, result.session);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=session-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../../src/voila/session-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { CookieJar } from "tough-cookie";
|
|
3
|
+
import { type AuthAccountSummary, type AuthenticatedSdkSessionSnapshot, type CsrfState, type GuestSdkSessionSnapshot, type SdkSessionSnapshot, type SdkSessionSnapshotDiagnostic, type SerializedCookieJarSnapshot, type SessionMetadata, type SessionSnapshot, type SessionSnapshotDiagnostic } from "../domain/schemas/index.js";
|
|
4
|
+
export type CookieJarPortError = {
|
|
5
|
+
readonly _tag: "CookieJarSerializationUnsupported";
|
|
6
|
+
} | {
|
|
7
|
+
readonly _tag: "CookieJarSerializationFailed";
|
|
8
|
+
readonly message: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly _tag: "CookieJarSnapshotSchemaMismatch";
|
|
11
|
+
readonly message: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly _tag: "CookieJarSnapshotImportFailed";
|
|
14
|
+
readonly message: string;
|
|
15
|
+
};
|
|
16
|
+
export interface CookieJarPort {
|
|
17
|
+
readonly create: () => CookieJar;
|
|
18
|
+
readonly deserialize: (snapshot: SerializedCookieJarSnapshot) => Either.Either<CookieJar, CookieJarPortError>;
|
|
19
|
+
readonly serialize: (jar: SerializableCookieJar) => Either.Either<SerializedCookieJarSnapshot, CookieJarPortError>;
|
|
20
|
+
}
|
|
21
|
+
export interface SerializableCookieJar {
|
|
22
|
+
readonly serializeSync: () => unknown;
|
|
23
|
+
}
|
|
24
|
+
export type SessionSnapshotError = CookieJarPortError | {
|
|
25
|
+
readonly _tag: "SessionSnapshotSchemaMismatch";
|
|
26
|
+
readonly message: string;
|
|
27
|
+
};
|
|
28
|
+
export declare const createCookieJar: () => CookieJar;
|
|
29
|
+
export declare const serializeCookieJar: (jar: SerializableCookieJar) => Either.Either<SerializedCookieJarSnapshot, CookieJarPortError>;
|
|
30
|
+
export declare const deserializeCookieJar: (snapshot: SerializedCookieJarSnapshot) => Either.Either<CookieJar, CookieJarPortError>;
|
|
31
|
+
export declare const toughCookieJarPort: CookieJarPort;
|
|
32
|
+
export declare const decodeSessionSnapshot: (input: unknown) => Either.Either<SessionSnapshot, SessionSnapshotError>;
|
|
33
|
+
export declare const decodeSdkSessionSnapshot: (input: unknown) => Either.Either<SdkSessionSnapshot, SessionSnapshotError>;
|
|
34
|
+
export declare const makeSessionSnapshot: (metadata: SessionMetadata, csrf: CsrfState, cookieJar: SerializedCookieJarSnapshot) => Either.Either<SessionSnapshot, SessionSnapshotError>;
|
|
35
|
+
export declare const makeGuestSdkSessionSnapshot: (session: SessionSnapshot) => Either.Either<GuestSdkSessionSnapshot, SessionSnapshotError>;
|
|
36
|
+
export declare const makeAuthenticatedSdkSessionSnapshot: (session: SessionSnapshot, state: AuthenticatedSdkSessionSnapshot["state"], account?: AuthAccountSummary) => Either.Either<AuthenticatedSdkSessionSnapshot, SessionSnapshotError>;
|
|
37
|
+
export declare const redactSessionSnapshot: (snapshot: SessionSnapshot) => SessionSnapshotDiagnostic;
|
|
38
|
+
export declare const formatSessionSnapshotDiagnostic: (snapshot: SessionSnapshot) => string;
|
|
39
|
+
export declare const redactSdkSessionSnapshot: (snapshot: SdkSessionSnapshot) => SdkSessionSnapshotDiagnostic;
|
|
40
|
+
export declare const formatSdkSessionSnapshotDiagnostic: (snapshot: SdkSessionSnapshot) => string;
|
|
41
|
+
//# sourceMappingURL=session-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-snapshot.d.ts","sourceRoot":"","sources":["../../../src/voila/session-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,+BAA+B,EAEpC,KAAK,SAAS,EACd,KAAK,uBAAuB,EAE5B,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EAGjC,KAAK,2BAA2B,EAEhC,KAAK,eAAe,EAEpB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAG/B,MAAM,4BAA4B,CAAA;AAEnC,MAAM,MAAM,kBAAkB,GAC1B;IACA,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAA;CACnD,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAA;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,2BAA2B,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IAC7G,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,kBAAkB,CAAC,CAAA;CACnH;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAA;CACtC;AAED,MAAM,MAAM,oBAAoB,GAC5B,kBAAkB,GAClB;IACA,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AA0BH,eAAO,MAAM,eAAe,QAAO,SAA4B,CAAA;AAE/D,eAAO,MAAM,kBAAkB,GAC7B,KAAK,qBAAqB,KACzB,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,kBAAkB,CAc/D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,UAAU,2BAA2B,KACpC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAM7C,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,aAIhC,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,oBAAoB,CACf,CAAA;AAE3F,eAAO,MAAM,wBAAwB,GACnC,OAAO,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CACqC,CAAA;AAE9F,eAAO,MAAM,mBAAmB,GAC9B,UAAU,eAAe,EACzB,MAAM,SAAS,EACf,WAAW,2BAA2B,KACrC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,oBAAoB,CAKlD,CAAA;AAEJ,eAAO,MAAM,2BAA2B,GACtC,SAAS,eAAe,KACvB,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,CAO3D,CAAA;AAEH,eAAO,MAAM,mCAAmC,GAC9C,SAAS,eAAe,EACxB,OAAO,+BAA+B,CAAC,OAAO,CAAC,EAC/C,UAAU,kBAAkB,KAC3B,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,oBAAoB,CASnE,CAAA;AASH,eAAO,MAAM,qBAAqB,GAAI,UAAU,eAAe,KAAG,yBAW/D,CAAA;AAEH,eAAO,MAAM,+BAA+B,GAAI,UAAU,eAAe,KAAG,MAC3B,CAAA;AAajD,eAAO,MAAM,wBAAwB,GAAI,UAAU,kBAAkB,KAAG,4BAYrE,CAAA;AAEH,eAAO,MAAM,kCAAkC,GAAI,UAAU,kBAAkB,KAAG,MAC9B,CAAA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { CookieJar } from "tough-cookie";
|
|
3
|
+
import { parseUnknown } from "../domain/parse.js";
|
|
4
|
+
import { AuthenticatedSdkSessionSnapshotSchema, GuestSdkSessionSnapshotSchema, SdkSessionSnapshotDiagnosticSchema, SdkSessionSnapshotSchema, SerializedCookieJarSnapshotSchema, SessionSnapshotDiagnosticSchema, SessionSnapshotSchema } from "../domain/schemas/index.js";
|
|
5
|
+
const cookieJarSerializationUnsupported = () => ({
|
|
6
|
+
_tag: "CookieJarSerializationUnsupported"
|
|
7
|
+
});
|
|
8
|
+
const cookieJarSerializationFailed = (_cause) => ({
|
|
9
|
+
_tag: "CookieJarSerializationFailed",
|
|
10
|
+
message: "Cookie jar serialization failed"
|
|
11
|
+
});
|
|
12
|
+
const cookieJarSnapshotSchemaMismatch = () => ({
|
|
13
|
+
_tag: "CookieJarSnapshotSchemaMismatch",
|
|
14
|
+
message: "Serialized cookie jar snapshot does not match the SDK schema"
|
|
15
|
+
});
|
|
16
|
+
const cookieJarSnapshotImportFailed = (_cause) => ({
|
|
17
|
+
_tag: "CookieJarSnapshotImportFailed",
|
|
18
|
+
message: "Cookie jar snapshot import failed"
|
|
19
|
+
});
|
|
20
|
+
const sessionSnapshotSchemaMismatch = () => ({
|
|
21
|
+
_tag: "SessionSnapshotSchemaMismatch",
|
|
22
|
+
message: "Session snapshot does not match the SDK schema"
|
|
23
|
+
});
|
|
24
|
+
export const createCookieJar = () => new CookieJar();
|
|
25
|
+
export const serializeCookieJar = (jar) => {
|
|
26
|
+
let snapshot;
|
|
27
|
+
try {
|
|
28
|
+
snapshot = jar.serializeSync();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return Either.left(cookieJarSerializationFailed(error));
|
|
32
|
+
}
|
|
33
|
+
if (snapshot === undefined) {
|
|
34
|
+
return Either.left(cookieJarSerializationUnsupported());
|
|
35
|
+
}
|
|
36
|
+
return Either.mapLeft(parseUnknown(SerializedCookieJarSnapshotSchema, snapshot), cookieJarSnapshotSchemaMismatch);
|
|
37
|
+
};
|
|
38
|
+
export const deserializeCookieJar = (snapshot) => {
|
|
39
|
+
try {
|
|
40
|
+
return Either.right(CookieJar.deserializeSync(JSON.stringify(snapshot)));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return Either.left(cookieJarSnapshotImportFailed(error));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
export const toughCookieJarPort = {
|
|
47
|
+
create: createCookieJar,
|
|
48
|
+
deserialize: deserializeCookieJar,
|
|
49
|
+
serialize: serializeCookieJar
|
|
50
|
+
};
|
|
51
|
+
export const decodeSessionSnapshot = (input) => Either.mapLeft(parseUnknown(SessionSnapshotSchema, input), sessionSnapshotSchemaMismatch);
|
|
52
|
+
export const decodeSdkSessionSnapshot = (input) => Either.mapLeft(parseUnknown(SdkSessionSnapshotSchema, input), sessionSnapshotSchemaMismatch);
|
|
53
|
+
export const makeSessionSnapshot = (metadata, csrf, cookieJar) => decodeSessionSnapshot({
|
|
54
|
+
cookieJar,
|
|
55
|
+
csrf,
|
|
56
|
+
metadata
|
|
57
|
+
});
|
|
58
|
+
export const makeGuestSdkSessionSnapshot = (session) => Either.mapLeft(parseUnknown(GuestSdkSessionSnapshotSchema, {
|
|
59
|
+
kind: "guest",
|
|
60
|
+
session
|
|
61
|
+
}), sessionSnapshotSchemaMismatch);
|
|
62
|
+
export const makeAuthenticatedSdkSessionSnapshot = (session, state, account) => Either.mapLeft(parseUnknown(AuthenticatedSdkSessionSnapshotSchema, {
|
|
63
|
+
...(account === undefined ? {} : { account }),
|
|
64
|
+
kind: "authenticated",
|
|
65
|
+
session,
|
|
66
|
+
state
|
|
67
|
+
}), sessionSnapshotSchemaMismatch);
|
|
68
|
+
const redactSessionMetadata = (metadata) => ({
|
|
69
|
+
assetVersion: metadata.assetVersion,
|
|
70
|
+
clientRouteId: "[redacted]",
|
|
71
|
+
pageViewId: "[redacted]",
|
|
72
|
+
regionId: metadata.regionId
|
|
73
|
+
});
|
|
74
|
+
export const redactSessionSnapshot = (snapshot) => Either.getOrThrow(parseUnknown(SessionSnapshotDiagnosticSchema, {
|
|
75
|
+
cookieJar: {
|
|
76
|
+
cookieCount: snapshot.cookieJar.cookies.length,
|
|
77
|
+
storeType: snapshot.cookieJar.storeType,
|
|
78
|
+
version: snapshot.cookieJar.version
|
|
79
|
+
},
|
|
80
|
+
csrf: "[redacted]",
|
|
81
|
+
metadata: redactSessionMetadata(snapshot.metadata)
|
|
82
|
+
}));
|
|
83
|
+
export const formatSessionSnapshotDiagnostic = (snapshot) => JSON.stringify(redactSessionSnapshot(snapshot));
|
|
84
|
+
const redactAccountSummary = (account) => account === undefined
|
|
85
|
+
? undefined
|
|
86
|
+
: {
|
|
87
|
+
...(account.displayName === undefined ? {} : { displayName: "[redacted]" }),
|
|
88
|
+
...(account.emailHint === undefined ? {} : { emailHint: "[redacted]" }),
|
|
89
|
+
...(account.stableAccountIdHash === undefined ? {} : { stableAccountIdHash: "[redacted]" })
|
|
90
|
+
};
|
|
91
|
+
export const redactSdkSessionSnapshot = (snapshot) => Either.getOrThrow(parseUnknown(SdkSessionSnapshotDiagnosticSchema, {
|
|
92
|
+
...redactSessionSnapshot(snapshot.session),
|
|
93
|
+
...(() => {
|
|
94
|
+
const account = snapshot.kind === "authenticated" ? redactAccountSummary(snapshot.account) : undefined;
|
|
95
|
+
return account === undefined ? {} : { account };
|
|
96
|
+
})(),
|
|
97
|
+
kind: snapshot.kind,
|
|
98
|
+
state: snapshot.kind === "authenticated" ? snapshot.state : "guest"
|
|
99
|
+
}));
|
|
100
|
+
export const formatSdkSessionSnapshotDiagnostic = (snapshot) => JSON.stringify(redactSdkSessionSnapshot(snapshot));
|
|
101
|
+
//# sourceMappingURL=session-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-snapshot.js","sourceRoot":"","sources":["../../../src/voila/session-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { type SdkSessionSnapshot } from "../domain/schemas/index.js";
|
|
3
|
+
export interface SessionStoragePort {
|
|
4
|
+
readonly read: () => Promise<unknown>;
|
|
5
|
+
readonly write: (contents: string) => Promise<unknown>;
|
|
6
|
+
}
|
|
7
|
+
export type SessionStorageError = {
|
|
8
|
+
readonly _tag: "SessionStorageSnapshotInvalid";
|
|
9
|
+
readonly message: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly _tag: "SessionStorageWriteFailure";
|
|
12
|
+
readonly message: string;
|
|
13
|
+
} | {
|
|
14
|
+
readonly _tag: "SessionStorageReadFailure";
|
|
15
|
+
readonly message: string;
|
|
16
|
+
} | {
|
|
17
|
+
readonly _tag: "SessionStorageContentsInvalid";
|
|
18
|
+
readonly message: string;
|
|
19
|
+
};
|
|
20
|
+
export declare const saveSdkSessionSnapshot: (storage: SessionStoragePort, snapshot: unknown) => Promise<Either.Either<undefined, SessionStorageError>>;
|
|
21
|
+
export declare const loadSdkSessionSnapshot: (storage: SessionStoragePort) => Promise<Either.Either<SdkSessionSnapshot, SessionStorageError>>;
|
|
22
|
+
//# sourceMappingURL=session-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../../src/voila/session-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAGvC,OAAO,EAAE,KAAK,kBAAkB,EAA4B,MAAM,4BAA4B,CAAA;AAE9F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACvD;AAED,MAAM,MAAM,mBAAmB,GAC3B;IACA,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAA;IAC3C,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,+BAA+B,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAsBH,eAAO,MAAM,sBAAsB,GACjC,SAAS,kBAAkB,EAC3B,UAAU,OAAO,KAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CA0BvD,CAAA;AAED,eAAO,MAAM,sBAAsB,GACjC,SAAS,kBAAkB,KAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAuBhE,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Either, Schema } from "effect";
|
|
2
|
+
import { parseJson, parseUnknown } from "../domain/parse.js";
|
|
3
|
+
import { SdkSessionSnapshotSchema } from "../domain/schemas/index.js";
|
|
4
|
+
const sessionStorageSnapshotInvalid = () => ({
|
|
5
|
+
_tag: "SessionStorageSnapshotInvalid",
|
|
6
|
+
message: "Session snapshot does not match the SDK schema"
|
|
7
|
+
});
|
|
8
|
+
const sessionStorageWriteFailure = () => ({
|
|
9
|
+
_tag: "SessionStorageWriteFailure",
|
|
10
|
+
message: "Session snapshot could not be written"
|
|
11
|
+
});
|
|
12
|
+
const sessionStorageReadFailure = () => ({
|
|
13
|
+
_tag: "SessionStorageReadFailure",
|
|
14
|
+
message: "Session snapshot could not be read"
|
|
15
|
+
});
|
|
16
|
+
const sessionStorageContentsInvalid = () => ({
|
|
17
|
+
_tag: "SessionStorageContentsInvalid",
|
|
18
|
+
message: "Stored session snapshot is corrupt or stale"
|
|
19
|
+
});
|
|
20
|
+
export const saveSdkSessionSnapshot = async (storage, snapshot) => {
|
|
21
|
+
const decoded = Either.mapLeft(parseUnknown(SdkSessionSnapshotSchema, snapshot), sessionStorageSnapshotInvalid);
|
|
22
|
+
if (Either.isLeft(decoded)) {
|
|
23
|
+
return Either.left(decoded.left);
|
|
24
|
+
}
|
|
25
|
+
const encoded = Either.mapLeft(Schema.encodeEither(SdkSessionSnapshotSchema)(decoded.right), sessionStorageSnapshotInvalid);
|
|
26
|
+
if (Either.isLeft(encoded)) {
|
|
27
|
+
return Either.left(encoded.left);
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
await storage.write(JSON.stringify(encoded.right));
|
|
31
|
+
return Either.right(undefined);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return Either.left(sessionStorageWriteFailure());
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export const loadSdkSessionSnapshot = async (storage) => {
|
|
38
|
+
let contents;
|
|
39
|
+
try {
|
|
40
|
+
contents = await storage.read();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return Either.left(sessionStorageReadFailure());
|
|
44
|
+
}
|
|
45
|
+
if (typeof contents !== "string") {
|
|
46
|
+
return Either.left(sessionStorageContentsInvalid());
|
|
47
|
+
}
|
|
48
|
+
const parsed = Either.mapLeft(parseJson(contents), sessionStorageContentsInvalid);
|
|
49
|
+
if (Either.isLeft(parsed)) {
|
|
50
|
+
return Either.left(parsed.left);
|
|
51
|
+
}
|
|
52
|
+
return Either.mapLeft(parseUnknown(SdkSessionSnapshotSchema, parsed.right), sessionStorageContentsInvalid);
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=session-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../../src/voila/session-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAA2B,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAyB9F,MAAM,6BAA6B,GAAG,GAAwB,EAAE,CAAC,CAAC;IAChE,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,gDAAgD;CAC1D,CAAC,CAAA;AAEF,MAAM,0BAA0B,GAAG,GAAwB,EAAE,CAAC,CAAC;IAC7D,IAAI,EAAE,4BAA4B;IAClC,OAAO,EAAE,uCAAuC;CACjD,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,GAAwB,EAAE,CAAC,CAAC;IAC5D,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,oCAAoC;CAC9C,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,GAAwB,EAAE,CAAC,CAAC;IAChE,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,6CAA6C;CACvD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,OAA2B,EAC3B,QAAiB,EACuC,EAAE;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAC5B,YAAY,CAAC,wBAAwB,EAAE,QAAQ,CAAC,EAChD,6BAA6B,CAC9B,CAAA;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAC5B,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAC5D,6BAA6B,CAC9B,CAAA;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAElD,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAA;IAClD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,OAA2B,EACsC,EAAE;IACnE,IAAI,QAAiB,CAAA;IAErB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,6BAA6B,CAAC,CAAA;IAEjF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CACnB,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,KAAK,CAAC,EACpD,6BAA6B,CAC9B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Either } from "effect";
|
|
2
|
+
import { type ActiveShoppingContextResponse, type DeliveryContextChangeResult, type DeliveryContextPreviewResponse, type DeliveryPropositionDetailsResponse, type NormalizedActiveShoppingContext, type NormalizedDeliveryContextPreview, type NormalizedDeliveryPropositionDetails, type SessionSnapshot } from "../domain/schemas/index.js";
|
|
3
|
+
import type { VoilaJsonResult, VoilaSdkError, VoilaTransport } from "./http-client.js";
|
|
4
|
+
import type { CookieJarPort } from "./session-snapshot.js";
|
|
5
|
+
import type { ActiveShoppingContextRequestError, ApplyDeliveryContextChangeRequestError, DeliveryContextPreviewRequestError, DeliveryPropositionDetailsRequestError, SetActiveCartPropositionRequestError, SetActiveDeliveryDestinationRequestError } from "./urls.js";
|
|
6
|
+
export type ShoppingContextNormalizationError = {
|
|
7
|
+
readonly _tag: "ShoppingContextSchemaMismatch";
|
|
8
|
+
readonly message: string;
|
|
9
|
+
};
|
|
10
|
+
export type GetActiveShoppingContextError = ActiveShoppingContextRequestError | VoilaSdkError;
|
|
11
|
+
export type GetActiveShoppingContextResult = VoilaJsonResult<NormalizedActiveShoppingContext>;
|
|
12
|
+
export type GetDeliveryPropositionDetailsError = DeliveryPropositionDetailsRequestError | VoilaSdkError;
|
|
13
|
+
export type GetDeliveryPropositionDetailsResult = VoilaJsonResult<NormalizedDeliveryPropositionDetails>;
|
|
14
|
+
export type PreviewDeliveryContextChangeError = DeliveryContextPreviewRequestError | VoilaSdkError;
|
|
15
|
+
export type PreviewDeliveryContextChangeResult = VoilaJsonResult<NormalizedDeliveryContextPreview>;
|
|
16
|
+
export type SetActiveDeliveryDestinationContextError = SetActiveDeliveryDestinationRequestError | VoilaSdkError;
|
|
17
|
+
export type SetActiveCartPropositionContextError = SetActiveCartPropositionRequestError | VoilaSdkError;
|
|
18
|
+
export type SetActiveShoppingContextResult = VoilaJsonResult<NormalizedActiveShoppingContext>;
|
|
19
|
+
export type ApplyDeliveryContextChangeError = ApplyDeliveryContextChangeRequestError | DeliveryContextPreviewRequestError | SetActiveCartPropositionRequestError | SetActiveDeliveryDestinationRequestError | ShoppingContextNormalizationError | VoilaSdkError;
|
|
20
|
+
export type ApplyDeliveryContextChangeResult = VoilaJsonResult<DeliveryContextChangeResult>;
|
|
21
|
+
export declare const normalizeActiveShoppingContext: (response: ActiveShoppingContextResponse) => NormalizedActiveShoppingContext;
|
|
22
|
+
export declare const normalizeDeliveryPropositionDetailsResponse: (response: DeliveryPropositionDetailsResponse) => NormalizedDeliveryPropositionDetails;
|
|
23
|
+
export declare const normalizeDeliveryContextPreviewResponse: (response: DeliveryContextPreviewResponse) => NormalizedDeliveryContextPreview;
|
|
24
|
+
export declare const parseActiveShoppingContextResponse: (input: unknown) => Either.Either<NormalizedActiveShoppingContext, ShoppingContextNormalizationError>;
|
|
25
|
+
export declare const parseDeliveryPropositionDetailsResponse: (input: unknown) => Either.Either<NormalizedDeliveryPropositionDetails, ShoppingContextNormalizationError>;
|
|
26
|
+
export declare const parseDeliveryContextPreviewResponse: (input: unknown) => Either.Either<NormalizedDeliveryContextPreview, ShoppingContextNormalizationError>;
|
|
27
|
+
export declare const getActiveShoppingContext: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<GetActiveShoppingContextResult, GetActiveShoppingContextError>>;
|
|
28
|
+
export declare const getDeliveryPropositionDetails: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<GetDeliveryPropositionDetailsResult, GetDeliveryPropositionDetailsError>>;
|
|
29
|
+
export declare const previewDeliveryContextChange: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<PreviewDeliveryContextChangeResult, PreviewDeliveryContextChangeError>>;
|
|
30
|
+
export declare const setActiveDeliveryDestinationContext: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<SetActiveShoppingContextResult, SetActiveDeliveryDestinationContextError>>;
|
|
31
|
+
export declare const setActiveCartPropositionContext: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<SetActiveShoppingContextResult, SetActiveCartPropositionContextError>>;
|
|
32
|
+
export declare const applyDeliveryContextChange: (session: SessionSnapshot, input: unknown, transport: VoilaTransport, cookieJarPort?: CookieJarPort) => Promise<Either.Either<ApplyDeliveryContextChangeResult, ApplyDeliveryContextChangeError>>;
|
|
33
|
+
//# sourceMappingURL=shopping-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shopping-context.d.ts","sourceRoot":"","sources":["../../../src/voila/shopping-context.ts"],"names":[],"mappings":"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"}
|