@multiplatform.one/keycloak 6.6.0 → 7.0.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/dist/cjs/index.cjs +129 -55
- package/dist/cjs/index.native.cjs +239 -130
- package/dist/esm/index.js +131 -57
- package/dist/esm/index.native.js +239 -130
- package/package.json +16 -11
- package/src/betterAuth/client.ts +3 -1
- package/src/betterAuth/expoAuthFlow.native.spec.ts +307 -0
- package/src/betterAuth/expoAuthFlow.native.ts +189 -55
- package/src/frappeToken.native.spec.ts +104 -0
- package/src/frappeToken.native.ts +46 -2
- package/src/frappeToken.spec.ts +141 -0
- package/src/frappeToken.ts +106 -14
- package/src/index.ts +1 -1
- package/src/keycloak/index.ts +24 -7
- package/src/keycloak/index.webext.ts +16 -0
- package/src/oauth/authorizationUrl.spec.ts +83 -0
- package/src/oauth/authorizationUrl.ts +74 -0
- package/src/oauth/callback.spec.ts +72 -0
- package/src/oauth/callback.ts +46 -0
- package/src/oauth/callbackPage.spec.ts +61 -0
- package/src/oauth/callbackPage.ts +57 -0
- package/src/oauth/endpoints.spec.ts +193 -0
- package/src/oauth/endpoints.ts +135 -0
- package/src/oauth/errors.ts +18 -0
- package/src/oauth/form.spec.ts +35 -0
- package/src/oauth/form.ts +30 -0
- package/src/oauth/idToken.spec.ts +191 -0
- package/src/oauth/idToken.ts +153 -0
- package/src/oauth/index.ts +10 -0
- package/src/oauth/jwt.ts +90 -0
- package/src/oauth/loopbackFlow.spec.ts +226 -0
- package/src/oauth/loopbackFlow.ts +114 -0
- package/src/oauth/pkce.spec.ts +60 -0
- package/src/oauth/pkce.ts +80 -0
- package/src/oauth/tokenExchange.spec.ts +331 -0
- package/src/oauth/tokenExchange.ts +232 -0
- package/src/one.ts +30 -3
- package/src/provider/AfterAuth.tsx +7 -0
- package/src/provider/authProvider/index.native.tsx +37 -4
- package/src/session/index.ts +2 -2
- package/src/state.ts +5 -2
- package/types/betterAuth/client.d.ts +2 -791
- package/types/betterAuth/client.d.ts.map +1 -1
- package/types/betterAuth/expoAuthFlow.native.d.ts +50 -3
- package/types/betterAuth/expoAuthFlow.native.d.ts.map +1 -1
- package/types/frappeToken.d.ts +14 -1
- package/types/frappeToken.d.ts.map +1 -1
- package/types/frappeToken.native.d.ts +16 -2
- package/types/frappeToken.native.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/keycloak/index.d.ts.map +1 -1
- package/types/keycloak/index.webext.d.ts.map +1 -1
- package/types/oauth/authorizationUrl.d.ts +32 -0
- package/types/oauth/authorizationUrl.d.ts.map +1 -0
- package/types/oauth/callback.d.ts +26 -0
- package/types/oauth/callback.d.ts.map +1 -0
- package/types/oauth/callbackPage.d.ts +34 -0
- package/types/oauth/callbackPage.d.ts.map +1 -0
- package/types/oauth/endpoints.d.ts +68 -0
- package/types/oauth/endpoints.d.ts.map +1 -0
- package/types/oauth/errors.d.ts +17 -0
- package/types/oauth/errors.d.ts.map +1 -0
- package/types/oauth/form.d.ts +16 -0
- package/types/oauth/form.d.ts.map +1 -0
- package/types/oauth/idToken.d.ts +83 -0
- package/types/oauth/idToken.d.ts.map +1 -0
- package/types/oauth/index.d.ts +11 -0
- package/types/oauth/index.d.ts.map +1 -0
- package/types/oauth/jwt.d.ts +31 -0
- package/types/oauth/jwt.d.ts.map +1 -0
- package/types/oauth/loopbackFlow.d.ts +64 -0
- package/types/oauth/loopbackFlow.d.ts.map +1 -0
- package/types/oauth/pkce.d.ts +49 -0
- package/types/oauth/pkce.d.ts.map +1 -0
- package/types/oauth/tokenExchange.d.ts +89 -0
- package/types/oauth/tokenExchange.d.ts.map +1 -0
- package/types/one.d.ts +7 -0
- package/types/one.d.ts.map +1 -1
- package/types/provider/AfterAuth.d.ts.map +1 -1
- package/types/provider/authProvider/index.native.d.ts.map +1 -1
- package/types/state.d.ts.map +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File: /src/oauth/pkce.ts
|
|
3
|
+
* Project: @multiplatform.one/keycloak
|
|
4
|
+
*
|
|
5
|
+
* PKCE (RFC 7636) for public clients. A desktop app cannot keep a client
|
|
6
|
+
* secret, so the code verifier is what proves the app redeeming the
|
|
7
|
+
* authorization code is the same app that requested it.
|
|
8
|
+
*
|
|
9
|
+
* Crypto is injected rather than imported: the browser has WebCrypto, GJS has
|
|
10
|
+
* GLib.compute_checksum_for_bytes, and neither is reachable from the other.
|
|
11
|
+
* Keeping the primitive behind an interface is also what makes this file
|
|
12
|
+
* testable with fixed vectors.
|
|
13
|
+
*/
|
|
14
|
+
export interface PkceCrypto {
|
|
15
|
+
/** Cryptographically secure random bytes. */
|
|
16
|
+
randomBytes(length: number): Uint8Array;
|
|
17
|
+
/** Raw (not hex) SHA-256 digest. */
|
|
18
|
+
sha256(input: Uint8Array): Uint8Array;
|
|
19
|
+
}
|
|
20
|
+
export interface PkcePair {
|
|
21
|
+
verifier: string;
|
|
22
|
+
challenge: string;
|
|
23
|
+
method: "S256";
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* base64url per RFC 4648 §5 — no padding, URL-safe alphabet.
|
|
27
|
+
*
|
|
28
|
+
* Hand-rolled rather than btoa/Buffer because this runs on all three of
|
|
29
|
+
* browsers, node (tests) and GJS, and GJS has neither of those globals.
|
|
30
|
+
*/
|
|
31
|
+
export declare function base64UrlEncode(bytes: Uint8Array): string;
|
|
32
|
+
/**
|
|
33
|
+
* RFC 7636 §4.1 allows a 43–128 char verifier; 32 random bytes base64url-encode
|
|
34
|
+
* to 43 chars, the shortest length the spec considers secure.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createPkcePair(crypto: PkceCrypto): PkcePair;
|
|
37
|
+
/** Opaque CSRF token echoed back on the redirect (RFC 6749 §10.12). */
|
|
38
|
+
export declare function createStateToken(crypto: Pick<PkceCrypto, "randomBytes">): string;
|
|
39
|
+
/**
|
|
40
|
+
* Replay defence for the ID token (OIDC Core §3.1.2.1). Sent on the
|
|
41
|
+
* authorization request and echoed in the id_token's `nonce` claim, so a
|
|
42
|
+
* token captured from one login cannot be presented as the result of another.
|
|
43
|
+
*
|
|
44
|
+
* Separate from the state token on purpose: state binds the *redirect* to
|
|
45
|
+
* this process, nonce binds the *token* to this authorization request, and
|
|
46
|
+
* reusing one value for both would leak the state into the token.
|
|
47
|
+
*/
|
|
48
|
+
export declare function createNonce(crypto: Pick<PkceCrypto, "randomBytes">): string;
|
|
49
|
+
//# sourceMappingURL=pkce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/oauth/pkce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IACxC,oCAAoC;IACpC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;CACvC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAgBzD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAI3D;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,CAE3E"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File: /src/oauth/tokenExchange.ts
|
|
3
|
+
* Project: @multiplatform.one/keycloak
|
|
4
|
+
*
|
|
5
|
+
* The token endpoint calls, written against a minimal fetch shape so the GJS
|
|
6
|
+
* libsoup fetch shim satisfies it as readily as the platform fetch.
|
|
7
|
+
*
|
|
8
|
+
* This module is also where every ID token this package produces gets
|
|
9
|
+
* validated. Doing it here rather than in the flow is what makes the
|
|
10
|
+
* invariant checkable: a `TokenSet` whose `idToken` is set has had that token
|
|
11
|
+
* validated against the issuer and this client, because there is no other way
|
|
12
|
+
* to construct one — `toTokenSet` is module-private and `TokenSet` is branded,
|
|
13
|
+
* so a consumer cannot object-literal its way past the validation either. It
|
|
14
|
+
* is also the only place OIDC Core §3.1.3.7's "directly from the Token
|
|
15
|
+
* Endpoint" precondition is provably true — see idToken.ts for what that
|
|
16
|
+
* precondition buys and what it does not.
|
|
17
|
+
*/
|
|
18
|
+
import type { OidcEndpoints } from "./endpoints";
|
|
19
|
+
import { type IdTokenClaims } from "./idToken";
|
|
20
|
+
export interface FetchLikeResponse {
|
|
21
|
+
ok: boolean;
|
|
22
|
+
status: number;
|
|
23
|
+
json(): Promise<unknown>;
|
|
24
|
+
text(): Promise<string>;
|
|
25
|
+
}
|
|
26
|
+
export type FetchLike = (url: string, init: {
|
|
27
|
+
method: string;
|
|
28
|
+
headers: Record<string, string>;
|
|
29
|
+
body: string;
|
|
30
|
+
}) => Promise<FetchLikeResponse>;
|
|
31
|
+
declare const tokenSetBrand: unique symbol;
|
|
32
|
+
export interface TokenSet {
|
|
33
|
+
/**
|
|
34
|
+
* Phantom brand — in the type, never on the object. It is what makes the
|
|
35
|
+
* invariant above checkable rather than merely stated: an object literal
|
|
36
|
+
* cannot satisfy this interface, so the only `TokenSet` that exists is one
|
|
37
|
+
* `toTokenSet` returned, and `toTokenSet` cannot return without having put
|
|
38
|
+
* any `idToken` through `validateIdToken` first.
|
|
39
|
+
*/
|
|
40
|
+
readonly [tokenSetBrand]: true;
|
|
41
|
+
accessToken: string;
|
|
42
|
+
/**
|
|
43
|
+
* Present only when it passed `validateIdToken` — `iss`, `aud`, `azp`,
|
|
44
|
+
* `exp` and (on the authorization-code grant) `nonce` have all been
|
|
45
|
+
* checked. Its signature has not been verified; see idToken.ts for why
|
|
46
|
+
* that is sound here and what would break it.
|
|
47
|
+
*/
|
|
48
|
+
idToken?: string;
|
|
49
|
+
/** Claims of the validated `idToken`, so callers need not re-decode it. */
|
|
50
|
+
idTokenClaims?: IdTokenClaims;
|
|
51
|
+
refreshToken?: string;
|
|
52
|
+
/** Access token lifetime in seconds, as reported by the server. */
|
|
53
|
+
expiresIn?: number;
|
|
54
|
+
refreshExpiresIn?: number;
|
|
55
|
+
tokenType?: string;
|
|
56
|
+
scope?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface ExchangeCodeParams {
|
|
59
|
+
endpoints: OidcEndpoints;
|
|
60
|
+
clientId: string;
|
|
61
|
+
code: string;
|
|
62
|
+
codeVerifier: string;
|
|
63
|
+
redirectUri: string;
|
|
64
|
+
/**
|
|
65
|
+
* The nonce from the authorization request this code came back on.
|
|
66
|
+
* Required, not optional: it is the only thing binding the returned ID
|
|
67
|
+
* token to this login, and an optional parameter is one a caller forgets.
|
|
68
|
+
*/
|
|
69
|
+
nonce: string;
|
|
70
|
+
/** Epoch seconds for the `exp`/`iat` checks. Injected by tests. */
|
|
71
|
+
now?: number;
|
|
72
|
+
}
|
|
73
|
+
export declare function exchangeAuthorizationCode(fetchImpl: FetchLike, { endpoints, clientId, code, codeVerifier, redirectUri, nonce, now }: ExchangeCodeParams): Promise<TokenSet>;
|
|
74
|
+
export interface RefreshParams {
|
|
75
|
+
endpoints: OidcEndpoints;
|
|
76
|
+
clientId: string;
|
|
77
|
+
refreshToken: string;
|
|
78
|
+
/** Epoch seconds for the `exp`/`iat` checks. Injected by tests. */
|
|
79
|
+
now?: number;
|
|
80
|
+
}
|
|
81
|
+
export declare function refreshAccessToken(fetchImpl: FetchLike, { endpoints, clientId, refreshToken, now }: RefreshParams): Promise<TokenSet>;
|
|
82
|
+
/**
|
|
83
|
+
* End the Keycloak SSO session via back-channel logout. Preferred over opening
|
|
84
|
+
* the end-session URL in a browser on GNOME: there is no app window to return
|
|
85
|
+
* to, so a browser tab would just be left sitting on a logout page.
|
|
86
|
+
*/
|
|
87
|
+
export declare function endSession(fetchImpl: FetchLike, { endpoints, clientId, refreshToken }: RefreshParams): Promise<void>;
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=tokenExchange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenExchange.d.ts","sourceRoot":"","sources":["../../src/oauth/tokenExchange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,WAAW,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,OAAO,CAAC,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC;AAE3C,MAAM,WAAW,QAAQ;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkFD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,SAAS,EACpB,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,kBAAkB,GACvF,OAAO,CAAC,QAAQ,CAAC,CAuBnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,aAAa,GACxD,OAAO,CAAC,QAAQ,CAAC,CAWnB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,SAAS,EACpB,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,GACnD,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
package/types/one.d.ts
CHANGED
|
@@ -23,6 +23,13 @@ export interface AuthHandlerConfig {
|
|
|
23
23
|
scopes?: string[];
|
|
24
24
|
/** Expo deep-link scheme (e.g. "multiplatform-one") — added to trustedOrigins. */
|
|
25
25
|
expoScheme?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Additional origins allowed to hit the auth route (e.g. LAN device
|
|
28
|
+
* origins). Extends — never replaces — the defaults (baseUrl, keycloak
|
|
29
|
+
* URL, expo scheme). Also readable from the KEYCLOAK_TRUSTED_ORIGINS env
|
|
30
|
+
* var as a comma-separated list.
|
|
31
|
+
*/
|
|
32
|
+
trustedOrigins?: string[];
|
|
26
33
|
}
|
|
27
34
|
export type Auth = ReturnType<typeof createAuth>;
|
|
28
35
|
//# sourceMappingURL=one.d.ts.map
|
package/types/one.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"one.d.ts","sourceRoot":"","sources":["../src/one.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"one.d.ts","sourceRoot":"","sources":["../src/one.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,mCAmEnD;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AfterAuth.d.ts","sourceRoot":"","sources":["../../src/provider/AfterAuth.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAa,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AfterAuth.d.ts","sourceRoot":"","sources":["../../src/provider/AfterAuth.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAa,MAAM,OAAO,CAAC;AAM9E,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,EAAE,cAAc,2CA8D1F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../src/provider/authProvider/index.native.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../src/provider/authProvider/index.native.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,EAAE,iBAAiB,2CAyHnB"}
|
package/types/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,SAAwC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC1F;AAOD,wBAAgB,YAAY,IAAI,SAAS,CAUxC"}
|