myfirstdemoprojectkulliax 0.1.0 → 0.1.1
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/package.json +2 -2
- package/lib/CsrfTokenCache.d.ts +0 -56
- package/lib/CsrfTokenCache.d.ts.map +0 -1
- package/lib/CsrfTokenCache.js.map +0 -1
- package/lib/attachCsrfCache.d.ts +0 -29
- package/lib/attachCsrfCache.d.ts.map +0 -1
- package/lib/attachCsrfCache.js.map +0 -1
- package/lib/capDestinationTokenFetcher.d.ts +0 -30
- package/lib/capDestinationTokenFetcher.d.ts.map +0 -1
- package/lib/capDestinationTokenFetcher.js.map +0 -1
- package/lib/csrfFetch.d.ts +0 -23
- package/lib/csrfFetch.d.ts.map +0 -1
- package/lib/csrfFetch.js.map +0 -1
- package/lib/index.d.ts +0 -9
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/sharedCsrfCaches.d.ts +0 -48
- package/lib/sharedCsrfCaches.d.ts.map +0 -1
- package/lib/sharedCsrfCaches.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myfirstdemoprojectkulliax",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "CAP plugin that caches SAP CSRF tokens per destination-backed remote service, injects them into outgoing requests, and refreshes them in the background before they expire.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sap",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"main": "./lib/index.js",
|
|
14
14
|
"types": "./lib/index.d.ts",
|
|
15
15
|
"files": [
|
|
16
|
-
"lib",
|
|
16
|
+
"lib/**/*.js",
|
|
17
17
|
"cds-plugin.js",
|
|
18
18
|
"README.md",
|
|
19
19
|
"LICENSE"
|
package/lib/CsrfTokenCache.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
export type CsrfToken = {
|
|
2
|
-
token: string;
|
|
3
|
-
cookies: string[];
|
|
4
|
-
};
|
|
5
|
-
export type CsrfTokenFetcher = () => Promise<CsrfToken>;
|
|
6
|
-
export type CsrfTokenCacheOptions = {
|
|
7
|
-
/** How long a token stays valid on the backend, in seconds. S/4 defaults to 1800 (30 minutes). */
|
|
8
|
-
validitySeconds?: number;
|
|
9
|
-
/** How long before `validitySeconds` runs out the cache proactively re-fetches in the background. */
|
|
10
|
-
bufferSeconds?: number;
|
|
11
|
-
/** Proactively re-fetch `bufferSeconds` before expiry instead of only fetching lazily on demand. Defaults to `true`. */
|
|
12
|
-
autoRefresh?: boolean;
|
|
13
|
-
};
|
|
14
|
-
/** Shared by every token-fetch implementation and by `attachCsrfCache`'s 403 detection, so the header name and its "Required" rejection value are spelled out exactly once. */
|
|
15
|
-
export declare const CSRF_TOKEN_HEADER = "x-csrf-token";
|
|
16
|
-
/** A cookie's path/domain/etc. attributes are not valid in a request `Cookie` header - only `name=value` survives. */
|
|
17
|
-
export declare function toCookieHeader(cookies: string[]): string | undefined;
|
|
18
|
-
/** True for the exact rejection S/4 (and CAP itself) use to signal an expired/invalid token: `403` + `x-csrf-token: Required`. */
|
|
19
|
-
export declare function isCsrfRequiredRejection(status: number | undefined, csrfTokenHeaderValue: string | null | undefined): boolean;
|
|
20
|
-
/** Thrown by every token-fetch implementation when the preflight didn't come back with a usable token - one wording, so the two call sites can't drift apart. */
|
|
21
|
-
export declare function missingCsrfTokenError(url: string, status: number): Error;
|
|
22
|
-
/**
|
|
23
|
-
* Caches a CSRF token obtained from `fetchToken` and proactively re-fetches it `bufferSeconds`
|
|
24
|
-
* before `validitySeconds` (the backend-side lifetime, 30 minutes on S/4) runs out - the buffer is
|
|
25
|
-
* only a safety margin for *when* to refresh early, not a cut into the token's usable lifetime:
|
|
26
|
-
* `getToken()` keeps serving the last known token up to the full `validitySeconds`, even if a
|
|
27
|
-
* background refresh attempt failed, and only fetches synchronously once that hard limit is hit.
|
|
28
|
-
* Concurrent `getToken()` calls share a single in-flight fetch.
|
|
29
|
-
*
|
|
30
|
-
* Framework-agnostic by design: `fetchToken` can be backed by native `fetch` ({@link buildCsrfTokenFetcher})
|
|
31
|
-
* or by a connected `cds.RemoteService`'s destination ({@link buildCapDestinationCsrfTokenFetcher}) -
|
|
32
|
-
* the cache itself has no HTTP dependency.
|
|
33
|
-
*/
|
|
34
|
-
export declare class CsrfTokenCache {
|
|
35
|
-
private readonly log;
|
|
36
|
-
private readonly validitySeconds;
|
|
37
|
-
private readonly bufferSeconds;
|
|
38
|
-
private readonly autoRefresh;
|
|
39
|
-
private readonly fetchToken;
|
|
40
|
-
private cached?;
|
|
41
|
-
private pending?;
|
|
42
|
-
private refreshTimer?;
|
|
43
|
-
constructor(fetchToken: CsrfTokenFetcher, options?: CsrfTokenCacheOptions);
|
|
44
|
-
/** Returns a valid token, fetching (and caching) one first if necessary - and logs which of the two it was, so the cache's effect is visible in the request log. */
|
|
45
|
-
getToken(): Promise<CsrfToken>;
|
|
46
|
-
/** Drops the cached token, forcing the next `getToken()` call to fetch a fresh one. */
|
|
47
|
-
invalidate(): void;
|
|
48
|
-
/** Clears the proactive refresh timer. Call on shutdown/in tests so the process/test can exit cleanly. */
|
|
49
|
-
dispose(): void;
|
|
50
|
-
/** Shared by `getToken()` and the proactive refresh timer, so a request racing the timer joins the same fetch - and logs whether it started that fetch or joined a running one. */
|
|
51
|
-
private triggerRefresh;
|
|
52
|
-
private refresh;
|
|
53
|
-
private scheduleRefresh;
|
|
54
|
-
private clearRefreshTimer;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=CsrfTokenCache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CsrfTokenCache.d.ts","sourceRoot":"","sources":["../src/CsrfTokenCache.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAA;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAChC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wHAAwH;IACxH,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAID,+KAA+K;AAC/K,eAAO,MAAM,iBAAiB,iBAAiB,CAAA;AAE/C,sHAAsH;AACtH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,kIAAkI;AAClI,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE5H;AAED,iKAAiK;AACjK,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAExE;AAKD;;;;;;;;;;;GAWG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,YAAY,CAAC,CAA+B;gBAExC,UAAU,EAAE,gBAAgB,EAAE,OAAO,GAAE,qBAA0B;IAW7E,oKAAoK;IAC9J,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAQpC,uFAAuF;IACvF,UAAU,IAAI,IAAI;IAKlB,0GAA0G;IAC1G,OAAO,IAAI,IAAI;IAIf,mLAAmL;IACnL,OAAO,CAAC,cAAc;YAUR,OAAO;IASrB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;CAI5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CsrfTokenCache.js","sourceRoot":"","sources":["../src/CsrfTokenCache.ts"],"names":[],"mappings":";;;;;;AAwBA,wCAEC;AAGD,0DAEC;AAGD,sDAEC;AApCD,mDAA0B;AAoB1B,+KAA+K;AAClK,QAAA,iBAAiB,GAAG,cAAc,CAAA;AAE/C,sHAAsH;AACtH,SAAgB,cAAc,CAAC,OAAiB;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9F,CAAC;AAED,kIAAkI;AAClI,SAAgB,uBAAuB,CAAC,MAA0B,EAAE,oBAA+C;IAC/G,OAAO,MAAM,KAAK,GAAG,IAAI,oBAAoB,EAAE,WAAW,EAAE,KAAK,UAAU,CAAA;AAC/E,CAAC;AAED,iKAAiK;AACjK,SAAgB,qBAAqB,CAAC,GAAW,EAAE,MAAc;IAC7D,OAAO,IAAI,KAAK,CAAC,sCAAsC,GAAG,UAAU,MAAM,GAAG,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,wBAAwB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAA;AACxF,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAA;AAElF;;;;;;;;;;;GAWG;AACH,MAAa,cAAc;IACN,GAAG,CAA4B;IAC/B,eAAe,CAAQ;IACvB,aAAa,CAAQ;IACrB,WAAW,CAAS;IAEpB,UAAU,CAAkB;IACrC,MAAM,CAAc;IACpB,OAAO,CAAqB;IAC5B,YAAY,CAAgC;IAEpD,YAAY,UAA4B,EAAE,UAAiC,EAAE;QACzE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,wBAAwB,CAAA;QAC1E,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,sBAAsB,CAAA;QACpE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAA;QAC9C,IAAI,CAAC,GAAG,GAAG,aAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAEhC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe;YACpE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,aAAa,kDAAkD,IAAI,CAAC,eAAe,IAAI,CAAC,CAAA;IAC3I,CAAC;IAED,oKAAoK;IACpK,KAAK,CAAC,QAAQ;QACV,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4CAA4C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YAC3G,OAAO,IAAI,CAAC,MAAM,CAAA;QACtB,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAA;IAChC,CAAC;IAED,uFAAuF;IACvF,UAAU;QACN,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC5B,CAAC;IAED,0GAA0G;IAC1G,OAAO;QACH,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC5B,CAAC;IAED,mLAAmL;IAC3K,cAAc;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;YAChE,OAAO,IAAI,CAAC,OAAO,CAAA;QACvB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA,CAAC,CAAC,CAAC,CAAA;IACpF,CAAC;IAEO,KAAK,CAAC,OAAO;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACrC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,EAAE,CAAA;QAC9E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACvG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;IAEO,eAAe,CAAC,SAAiB;QACrC,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;QAE7B,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;QAChF,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oFAAoF,EAAE,KAAK,CAAC,CAAC,CAAA;QACnH,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IAC/B,CAAC;IAEO,iBAAiB;QACrB,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;IACjC,CAAC;CACJ;AA9ED,wCA8EC"}
|
package/lib/attachCsrfCache.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import cds from "@sap/cds";
|
|
2
|
-
import { CsrfTokenCache, CsrfTokenCacheOptions } from "./CsrfTokenCache";
|
|
3
|
-
/**
|
|
4
|
-
* Programmatic overrides for {@link attachCsrfCache} - the cache's own timing options, plus this
|
|
5
|
-
* plugin's `share` switch, which the `csrf` config expresses as `csrf.share`.
|
|
6
|
-
*/
|
|
7
|
-
export type AttachCsrfCacheOptions = CsrfTokenCacheOptions & {
|
|
8
|
-
/** Overrides `csrf.share` for this service: share the destination's token cache (optionally within the named group) instead of caching a token of its own. */
|
|
9
|
-
share?: boolean | string;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Attaches a {@link CsrfTokenCache} to a connected `cds.RemoteService`: caches the CSRF token
|
|
13
|
-
* instead of letting CAP fetch a fresh one on every write (its csrf middleware - Cloud SDK or
|
|
14
|
-
* native fetch alike - only skips its own preflight once `x-csrf-token` is already present on the
|
|
15
|
-
* outgoing request), and retries once, with a fresh token, if the backend ever rejects the cached
|
|
16
|
-
* one as expired.
|
|
17
|
-
*
|
|
18
|
-
* A service without a destination, without any `csrf` configuration, or with `csrf.cache: false`
|
|
19
|
-
* (e.g. a `--with-mocks` stand-in used in dev/test) is left untouched - there is nothing to cache a
|
|
20
|
-
* token for, or the config explicitly opted out. Called automatically by this package's
|
|
21
|
-
* `cds-plugin.js` for every served remote service; only call it directly for a service the plugin's
|
|
22
|
-
* auto-discovery does not reach (e.g. a service served in a separate process).
|
|
23
|
-
*
|
|
24
|
-
* With `csrf.share` (or `options.share`) turned on, the service does not get a cache of its own but
|
|
25
|
-
* joins the one shared by every other service on the same destination - one token fetch for all of
|
|
26
|
-
* them instead of one each; see {@link acquireSharedCsrfCache}.
|
|
27
|
-
*/
|
|
28
|
-
export declare function attachCsrfCache(srv: cds.RemoteService, options?: AttachCsrfCacheOptions): CsrfTokenCache | undefined;
|
|
29
|
-
//# sourceMappingURL=attachCsrfCache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachCsrfCache.d.ts","sourceRoot":"","sources":["../src/attachCsrfCache.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAA;AAC1B,OAAO,EAAqB,cAAc,EAAE,qBAAqB,EAA2C,MAAM,kBAAkB,CAAA;AAgDpI;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,GAAG;IACzD,8JAA8J;IAC9J,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC3B,CAAA;AAiCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,GAAE,sBAA2B,GAAG,cAAc,GAAG,SAAS,CA6DxH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachCsrfCache.js","sourceRoot":"","sources":["../src/attachCsrfCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { CsrfTokenFetcher } from "./CsrfTokenCache";
|
|
2
|
-
type NativeFetchResponse = {
|
|
3
|
-
data: unknown;
|
|
4
|
-
headers: Record<string, string | string[] | undefined>;
|
|
5
|
-
status: number;
|
|
6
|
-
};
|
|
7
|
-
type CloudSdkResponse = {
|
|
8
|
-
status: number;
|
|
9
|
-
headers: Record<string, string | string[] | undefined>;
|
|
10
|
-
};
|
|
11
|
-
type CloudSdkExecutor = (destination: unknown, requestConfig: unknown) => Promise<CloudSdkResponse>;
|
|
12
|
-
export type CapInternals = {
|
|
13
|
-
shouldUseCloudSdk: (destination: unknown) => boolean;
|
|
14
|
-
nativeFetch: (destination: unknown, requestConfig: unknown) => Promise<NativeFetchResponse>;
|
|
15
|
-
};
|
|
16
|
-
export type CsrfPreflightMethod = "get" | "head";
|
|
17
|
-
export type CapDestinationTokenFetcherOverrides = {
|
|
18
|
-
capInternals?: CapInternals | null;
|
|
19
|
-
cloudSdkFetch?: CloudSdkExecutor | null;
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Builds a {@link CsrfTokenFetcher} for a connected `cds.RemoteService`'s destination, letting CAP's
|
|
23
|
-
* own `shouldUseCloudSdk()` decide between the SAP Cloud SDK and native `fetch` - see the module
|
|
24
|
-
* comment above for why that decision must not be hardcoded to one client, and why the Cloud SDK
|
|
25
|
-
* itself must stay optional. `overrides` exists so tests can supply fakes directly instead of
|
|
26
|
-
* mocking a runtime `require()` of a deep `node_modules` path.
|
|
27
|
-
*/
|
|
28
|
-
export declare function buildCapDestinationCsrfTokenFetcher(destination: string, destinationOptions: Record<string, unknown>, csrfUrl: string, method?: CsrfPreflightMethod, overrides?: CapDestinationTokenFetcherOverrides): CsrfTokenFetcher;
|
|
29
|
-
export {};
|
|
30
|
-
//# sourceMappingURL=capDestinationTokenFetcher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capDestinationTokenFetcher.d.ts","sourceRoot":"","sources":["../src/capDestinationTokenFetcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,gBAAgB,EAAyB,MAAM,kBAAkB,CAAA;AAI7F,KAAK,mBAAmB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AACpH,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;CAAE,CAAA;AAGlG,KAAK,gBAAgB,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAEnG,MAAM,MAAM,YAAY,GAAG;IACvB,iBAAiB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAA;IACpD,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAC9F,CAAA;AAsED,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,MAAM,CAAA;AAEhD,MAAM,MAAM,mCAAmC,GAAG;IAC9C,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,aAAa,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAC1C,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CAC/C,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,mBAA2B,EACnC,SAAS,GAAE,mCAAwC,GACpD,gBAAgB,CAwBlB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capDestinationTokenFetcher.js","sourceRoot":"","sources":["../src/capDestinationTokenFetcher.ts"],"names":[],"mappings":";;;;;AAkGA,kFA8BC;AAhID,mDAA0B;AAC1B,qDAA6F;AAE7F,MAAM,GAAG,GAAG,aAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAYjC,kCAAkC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,IAAI,YAA6C,CAAA;AAEjD,SAAS,mBAAmB;IACxB,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAA;IAEnD,IAAI,CAAC;QACD,uKAAuK;QACvK,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,sDAAsD,CAAC,CAAA;QAC7F,iEAAiE;QACjE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iDAAiD,CAAC,CAAA;QACtG,OAAO,YAAY,GAAG,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAA;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,sHAAsH,EAAE,KAAK,CAAC,CAAA;QACvI,OAAO,YAAY,GAAG,IAAI,CAAA;IAC9B,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,IAAI,gBAAqD,CAAA;AAEzD,SAAS,uBAAuB;IAC5B,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAA;IAE3D,IAAI,CAAC;QACD,iEAAiE;QACjE,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAA;QACpE,OAAO,gBAAgB,GAAG,kBAAkB,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,gBAAgB,GAAG,IAAI,CAAA;IAClC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,SAAwC;IACzD,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,OAAgC,EAAE,MAAc,EAAE,OAAe;IAChF,MAAM,KAAK,GAAG,OAAO,CAAC,kCAAiB,CAAC,CAAA;IACxC,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3C,MAAM,IAAA,sCAAqB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAChD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAkC,CAAC,EAAE,CAAA;AAClG,CAAC;AASD;;;;;;GAMG;AACH,SAAgB,mCAAmC,CAC/C,WAAmB,EACnB,kBAA2C,EAC3C,OAAe,EACf,SAA8B,KAAK,EACnC,YAAiD,EAAE;IAEnD,MAAM,cAAc,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAC9E,MAAM,YAAY,GAAmB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IAEvE,OAAO,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAA;QACtG,mIAAmI;QACnI,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAE/E,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,eAAe,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAA;YAChH,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,kCAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;gBACzH,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAChE,CAAC;QACL,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,kCAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;YAC/I,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,8EAA8E,CAAC,CAAA;IAC/I,CAAC,CAAA;AACL,CAAC"}
|
package/lib/csrfFetch.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { CsrfTokenCache, CsrfTokenFetcher } from "./CsrfTokenCache";
|
|
2
|
-
/**
|
|
3
|
-
* Native-`fetch` token fetcher - kept deliberately separate from {@link buildCapDestinationCsrfTokenFetcher}
|
|
4
|
-
* (see that module for why): this one has no SAP Cloud SDK dependency at all and works with any
|
|
5
|
-
* plain HTTP(S) endpoint reachable via Node's global `fetch`.
|
|
6
|
-
*
|
|
7
|
-
* Builds a {@link CsrfTokenFetcher}: a GET request carrying `x-csrf-token: Fetch` against `url`,
|
|
8
|
-
* answered with the token in the same response header and the session cookie(s) needed to present
|
|
9
|
-
* it back on the next write. GET (not HEAD) is used because it is the verb every SAP gateway/OData
|
|
10
|
-
* implementation is guaranteed to answer a CSRF-fetch on, including services that don't implement HEAD.
|
|
11
|
-
*/
|
|
12
|
-
export declare function buildCsrfTokenFetcher(url: string, init?: RequestInit, fetchImpl?: typeof fetch): CsrfTokenFetcher;
|
|
13
|
-
/**
|
|
14
|
-
* Wraps a fetch-compatible function so every non-safe request is transparently armed with the
|
|
15
|
-
* cached CSRF token, and retried exactly once - with a freshly fetched token - if the backend
|
|
16
|
-
* rejects it as expired (`403` + `x-csrf-token: Required`). Safe methods pass through untouched.
|
|
17
|
-
*
|
|
18
|
-
* This is the piece that makes the cache usable with plain native `fetch` calls, independent of
|
|
19
|
-
* any CAP/Cloud SDK service - see {@link buildCsrfTokenFetcher} for a matching token fetcher, and
|
|
20
|
-
* `attachCsrfCache` for the equivalent wiring against a `cds.RemoteService`.
|
|
21
|
-
*/
|
|
22
|
-
export declare function createCsrfFetch(cache: CsrfTokenCache, fetchImpl?: typeof fetch): typeof fetch;
|
|
23
|
-
//# sourceMappingURL=csrfFetch.d.ts.map
|
package/lib/csrfFetch.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csrfFetch.d.ts","sourceRoot":"","sources":["../src/csrfFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,cAAc,EAAE,gBAAgB,EAAkE,MAAM,kBAAkB,CAAA;AAIjK;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,gBAAgB,CAc5H;AAcD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,KAAK,CAepG"}
|
package/lib/csrfFetch.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csrfFetch.js","sourceRoot":"","sources":["../src/csrfFetch.ts"],"names":[],"mappings":";;AAcA,sDAcC;AAuBD,0CAeC;AAlED,qDAAiK;AAEjK,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;AAEjE;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,GAAW,EAAE,OAAoB,EAAE,EAAE,YAA0B,KAAK;IACtG,OAAO,KAAK,IAAI,EAAE;QACd,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAClC,GAAG,IAAI;YACP,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,kCAAiB,CAAC,EAAE,OAAO,EAAE;SAC7D,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAiB,CAAC,CAAA;QACrD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK;YACtB,MAAM,IAAA,sCAAqB,EAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QAErD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,CAAA;IACtE,CAAC,CAAA;AACL,CAAC;AAED,SAAS,eAAe,CAAC,IAA6B,EAAE,KAAgB;IACpE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,CAAC,GAAG,CAAC,kCAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClD,IAAI,YAAY;QAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACrD,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,QAAkB;IACvC,OAAO,IAAA,wCAAuB,EAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAiB,CAAC,CAAC,CAAA;AAC5F,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAC,KAAqB,EAAE,YAA0B,KAAK;IAClF,OAAO,CAAC,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;QACpD,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YACxB,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAEjC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACpC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACnG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC1B,OAAO,QAAQ,CAAA;QAEnB,KAAK,CAAC,UAAU,EAAE,CAAA;QAClB,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACzC,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IAC5F,CAAC,CAAiB,CAAA;AACtB,CAAC"}
|
package/lib/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { CSRF_TOKEN_HEADER, CsrfTokenCache, toCookieHeader } from "./CsrfTokenCache";
|
|
2
|
-
export type { CsrfToken, CsrfTokenFetcher, CsrfTokenCacheOptions } from "./CsrfTokenCache";
|
|
3
|
-
export { buildCsrfTokenFetcher, createCsrfFetch } from "./csrfFetch";
|
|
4
|
-
export { buildCapDestinationCsrfTokenFetcher } from "./capDestinationTokenFetcher";
|
|
5
|
-
export { attachCsrfCache } from "./attachCsrfCache";
|
|
6
|
-
export type { AttachCsrfCacheOptions } from "./attachCsrfCache";
|
|
7
|
-
export { acquireSharedCsrfCache, resetSharedCsrfCaches, sharedCsrfCacheKey, sharedCsrfCacheMembers } from "./sharedCsrfCaches";
|
|
8
|
-
export type { SharedCsrfCache, SharedCsrfCacheScope } from "./sharedCsrfCaches";
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpF,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC9H,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA"}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAoF;AAA3E,mHAAA,iBAAiB,OAAA;AAAE,gHAAA,cAAc,OAAA;AAAE,gHAAA,cAAc,OAAA;AAE1D,yCAAoE;AAA3D,kHAAA,qBAAqB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC/C,2EAAkF;AAAzE,iJAAA,mCAAmC,OAAA;AAC5C,qDAAmD;AAA1C,kHAAA,eAAe,OAAA;AAExB,uDAA8H;AAArH,0HAAA,sBAAsB,OAAA;AAAE,yHAAA,qBAAqB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAAE,0HAAA,sBAAsB,OAAA"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { CsrfTokenCache } from "./CsrfTokenCache";
|
|
2
|
-
/**
|
|
3
|
-
* Everything that has to match before two remote services may present the *same* CSRF token.
|
|
4
|
-
*
|
|
5
|
-
* An S/4 CSRF token is bound to the HTTP session behind the destination, not to the OData service
|
|
6
|
-
* path it was fetched from - so a token fetched for `zsd_o2c_order_processing` is equally valid on
|
|
7
|
-
* `api_purchaseorder_2` as long as both go to the same system, through the same destination, with
|
|
8
|
-
* the same destination resolution (`destinationOptions` decide *which* concrete destination, and
|
|
9
|
-
* therefore which backend user/session, a name resolves to - a different `selectionStrategy` or a
|
|
10
|
-
* different `jwt` can mean a different session entirely, so they are part of the identity here).
|
|
11
|
-
*
|
|
12
|
-
* `group` narrows that further, for the case where two services share a destination but must not
|
|
13
|
-
* share a token (different backend clients behind one destination name, or simply to keep one
|
|
14
|
-
* service's token isolated while the rest share one).
|
|
15
|
-
*/
|
|
16
|
-
export type SharedCsrfCacheScope = {
|
|
17
|
-
destination: string;
|
|
18
|
-
destinationOptions?: Record<string, unknown>;
|
|
19
|
-
group?: string;
|
|
20
|
-
};
|
|
21
|
-
/** The identity of a shared cache - see {@link SharedCsrfCacheScope} for why each part is in it. */
|
|
22
|
-
export declare function sharedCsrfCacheKey(scope: SharedCsrfCacheScope): string;
|
|
23
|
-
export type SharedCsrfCache = {
|
|
24
|
-
cache: CsrfTokenCache;
|
|
25
|
-
key: string;
|
|
26
|
-
/** `true` if an existing cache was joined, `false` if this call created it. */
|
|
27
|
-
joined: boolean;
|
|
28
|
-
/** The service that created the cache (the caller itself when `joined` is `false`). */
|
|
29
|
-
owner: string;
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Returns the {@link CsrfTokenCache} for `scope`, creating it via `create` on first use and handing
|
|
33
|
-
* the very same instance to every later caller with the same scope. That is what lets several
|
|
34
|
-
* remote services on one destination fetch a single token instead of one each - and it also means
|
|
35
|
-
* an `invalidate()` after a rejected token (from *any* of them) refreshes the token for all of
|
|
36
|
-
* them at once.
|
|
37
|
-
*
|
|
38
|
-
* The first service in wins: the shared cache keeps fetching from that service's `csrf.url`, with
|
|
39
|
-
* its method and validity. A service joining with different settings is served the existing cache
|
|
40
|
-
* and warned about, rather than silently getting a second one - two caches on one destination is
|
|
41
|
-
* exactly what sharing was turned on to avoid.
|
|
42
|
-
*/
|
|
43
|
-
export declare function acquireSharedCsrfCache(scope: SharedCsrfCacheScope, member: string, settings: string, create: () => CsrfTokenCache): SharedCsrfCache;
|
|
44
|
-
/** The services sharing the cache under `key`, owner first - for diagnostics and tests. */
|
|
45
|
-
export declare function sharedCsrfCacheMembers(key: string): string[];
|
|
46
|
-
/** Disposes every shared cache (stopping its refresh timer) and empties the registry. For tests and for a clean shutdown/restart of the server process. */
|
|
47
|
-
export declare function resetSharedCsrfCaches(): void;
|
|
48
|
-
//# sourceMappingURL=sharedCsrfCaches.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sharedCsrfCaches.d.ts","sourceRoot":"","sources":["../src/sharedCsrfCaches.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAuBD,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAEtE;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,cAAc,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,MAAM,EAAE,OAAO,CAAA;IACf,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,cAAc,GAC7B,eAAe,CAejB;AAED,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,2JAA2J;AAC3J,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sharedCsrfCaches.js","sourceRoot":"","sources":["../src/sharedCsrfCaches.ts"],"names":[],"mappings":"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"}
|