@passflow/core 0.20.0 → 0.20.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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5944 -0
- package/dist/index.d.ts +5944 -0
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -7
- package/dist/lib/api/app.d.ts +0 -11
- package/dist/lib/api/app.d.ts.map +0 -1
- package/dist/lib/api/auth.d.ts +0 -42
- package/dist/lib/api/auth.d.ts.map +0 -1
- package/dist/lib/api/axios-client.d.ts +0 -109
- package/dist/lib/api/axios-client.d.ts.map +0 -1
- package/dist/lib/api/cli-auth.d.ts +0 -12
- package/dist/lib/api/cli-auth.d.ts.map +0 -1
- package/dist/lib/api/index.d.ts +0 -11
- package/dist/lib/api/index.d.ts.map +0 -1
- package/dist/lib/api/invitation.d.ts +0 -80
- package/dist/lib/api/invitation.d.ts.map +0 -1
- package/dist/lib/api/model.d.ts +0 -844
- package/dist/lib/api/model.d.ts.map +0 -1
- package/dist/lib/api/setting.d.ts +0 -13
- package/dist/lib/api/setting.d.ts.map +0 -1
- package/dist/lib/api/tenant.d.ts +0 -216
- package/dist/lib/api/tenant.d.ts.map +0 -1
- package/dist/lib/api/two-factor.d.ts +0 -137
- package/dist/lib/api/two-factor.d.ts.map +0 -1
- package/dist/lib/api/upgrade.d.ts +0 -39
- package/dist/lib/api/upgrade.d.ts.map +0 -1
- package/dist/lib/api/user.d.ts +0 -22
- package/dist/lib/api/user.d.ts.map +0 -1
- package/dist/lib/constants/index.d.ts +0 -33
- package/dist/lib/constants/index.d.ts.map +0 -1
- package/dist/lib/device/index.d.ts +0 -17
- package/dist/lib/device/index.d.ts.map +0 -1
- package/dist/lib/index.d.ts +0 -22
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/interceptors/fetch-registry.d.ts +0 -96
- package/dist/lib/interceptors/fetch-registry.d.ts.map +0 -1
- package/dist/lib/m2m/client.d.ts +0 -196
- package/dist/lib/m2m/client.d.ts.map +0 -1
- package/dist/lib/m2m/errors.d.ts +0 -107
- package/dist/lib/m2m/errors.d.ts.map +0 -1
- package/dist/lib/m2m/index.d.ts +0 -27
- package/dist/lib/m2m/index.d.ts.map +0 -1
- package/dist/lib/m2m/types.d.ts +0 -217
- package/dist/lib/m2m/types.d.ts.map +0 -1
- package/dist/lib/passflow.d.ts +0 -1224
- package/dist/lib/passflow.d.ts.map +0 -1
- package/dist/lib/pkce.d.ts +0 -13
- package/dist/lib/pkce.d.ts.map +0 -1
- package/dist/lib/platform/index.d.ts +0 -4
- package/dist/lib/platform/index.d.ts.map +0 -1
- package/dist/lib/platform/types.d.ts +0 -206
- package/dist/lib/platform/types.d.ts.map +0 -1
- package/dist/lib/platform/web-adapter.d.ts +0 -104
- package/dist/lib/platform/web-adapter.d.ts.map +0 -1
- package/dist/lib/services/auth-service.d.ts +0 -197
- package/dist/lib/services/auth-service.d.ts.map +0 -1
- package/dist/lib/services/index.d.ts +0 -8
- package/dist/lib/services/index.d.ts.map +0 -1
- package/dist/lib/services/invitation-service.d.ts +0 -44
- package/dist/lib/services/invitation-service.d.ts.map +0 -1
- package/dist/lib/services/logger.d.ts +0 -24
- package/dist/lib/services/logger.d.ts.map +0 -1
- package/dist/lib/services/tenant-service.d.ts +0 -200
- package/dist/lib/services/tenant-service.d.ts.map +0 -1
- package/dist/lib/services/tenant-user-membership.d.ts +0 -76
- package/dist/lib/services/tenant-user-membership.d.ts.map +0 -1
- package/dist/lib/services/token-cache-service.d.ts +0 -36
- package/dist/lib/services/token-cache-service.d.ts.map +0 -1
- package/dist/lib/services/two-factor-service.d.ts +0 -193
- package/dist/lib/services/two-factor-service.d.ts.map +0 -1
- package/dist/lib/services/user-service.d.ts +0 -41
- package/dist/lib/services/user-service.d.ts.map +0 -1
- package/dist/lib/storage/index.d.ts +0 -106
- package/dist/lib/storage/index.d.ts.map +0 -1
- package/dist/lib/store.d.ts +0 -175
- package/dist/lib/store.d.ts.map +0 -1
- package/dist/lib/token/delivery-manager.d.ts +0 -121
- package/dist/lib/token/delivery-manager.d.ts.map +0 -1
- package/dist/lib/token/index.d.ts +0 -4
- package/dist/lib/token/index.d.ts.map +0 -1
- package/dist/lib/token/membership.d.ts +0 -37
- package/dist/lib/token/membership.d.ts.map +0 -1
- package/dist/lib/token/service.d.ts +0 -47
- package/dist/lib/token/service.d.ts.map +0 -1
- package/dist/lib/token/token.d.ts +0 -55
- package/dist/lib/token/token.d.ts.map +0 -1
- package/dist/lib/types/index.d.ts +0 -24
- package/dist/lib/types/index.d.ts.map +0 -1
- package/dist/lib/upgrade/acr.d.ts +0 -85
- package/dist/lib/upgrade/acr.d.ts.map +0 -1
- package/dist/lib/upgrade/axios-adapter.d.ts +0 -81
- package/dist/lib/upgrade/axios-adapter.d.ts.map +0 -1
- package/dist/lib/upgrade/challenge.d.ts +0 -217
- package/dist/lib/upgrade/challenge.d.ts.map +0 -1
- package/dist/lib/upgrade/client.d.ts +0 -29
- package/dist/lib/upgrade/client.d.ts.map +0 -1
- package/dist/lib/upgrade/controller.d.ts +0 -435
- package/dist/lib/upgrade/controller.d.ts.map +0 -1
- package/dist/lib/upgrade/core.d.ts +0 -353
- package/dist/lib/upgrade/core.d.ts.map +0 -1
- package/dist/lib/upgrade/errors.d.ts +0 -208
- package/dist/lib/upgrade/errors.d.ts.map +0 -1
- package/dist/lib/upgrade/facade.d.ts +0 -188
- package/dist/lib/upgrade/facade.d.ts.map +0 -1
- package/dist/lib/upgrade/factors.d.ts +0 -97
- package/dist/lib/upgrade/factors.d.ts.map +0 -1
- package/dist/lib/upgrade/fetch-adapter.d.ts +0 -30
- package/dist/lib/upgrade/fetch-adapter.d.ts.map +0 -1
- package/dist/lib/upgrade/index.d.ts +0 -17
- package/dist/lib/upgrade/index.d.ts.map +0 -1
- package/dist/lib/upgrade/markers.d.ts +0 -64
- package/dist/lib/upgrade/markers.d.ts.map +0 -1
- package/dist/lib/upgrade/replay.d.ts +0 -132
- package/dist/lib/upgrade/replay.d.ts.map +0 -1
- package/dist/lib/upgrade/select.d.ts +0 -48
- package/dist/lib/upgrade/select.d.ts.map +0 -1
- package/dist/lib/upgrade/session.d.ts +0 -72
- package/dist/lib/upgrade/session.d.ts.map +0 -1
- package/dist/lib/upgrade/snapshot.d.ts +0 -196
- package/dist/lib/upgrade/snapshot.d.ts.map +0 -1
- package/dist/lib/upgrade/transport.d.ts +0 -69
- package/dist/lib/upgrade/transport.d.ts.map +0 -1
- package/dist/lib/utils/validation.d.ts +0 -54
- package/dist/lib/utils/validation.d.ts.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session and user identity pinning for an upgrade flight (§13.4 revision 6).
|
|
3
|
-
*
|
|
4
|
-
* ## The rule
|
|
5
|
-
*
|
|
6
|
-
* An upgrade flight is bound to the **session and user identity it began
|
|
7
|
-
* under**, and that identity is verified **at the moment tokens are applied** —
|
|
8
|
-
* not only around `prepare` and `commit`. On mismatch the rotated tokens are
|
|
9
|
-
* discarded, never applied, and the flight settles as `session changed
|
|
10
|
-
* mid-flight`.
|
|
11
|
-
*
|
|
12
|
-
* ## Why the epoch counter was not enough
|
|
13
|
-
*
|
|
14
|
-
* The round-1 epoch check wraps the two rounds that talk to the server. It does
|
|
15
|
-
* not wrap token APPLICATION, which happens inside `AuthService.refreshToken`
|
|
16
|
-
* after the commit returns. A logout and re-login during an in-flight upgrade
|
|
17
|
-
* therefore let user A's flight write its rotated tokens over user B's live
|
|
18
|
-
* session: the request was authorized as A, the storage belongs to B, and
|
|
19
|
-
* nothing in between compared the two principals.
|
|
20
|
-
*
|
|
21
|
-
* An epoch tells you something changed. An identity check tells you **whether
|
|
22
|
-
* it is still the same principal**, which is the property actually required.
|
|
23
|
-
* Both run, and they are complementary rather than redundant.
|
|
24
|
-
*
|
|
25
|
-
* ## Why this module is pure
|
|
26
|
-
*
|
|
27
|
-
* It imports nothing and reads no storage, so the token-applying path can be
|
|
28
|
-
* given a pin by value and the comparison can be tested with literals. Reading
|
|
29
|
-
* the identity is the host's job — it is the only code that knows where the
|
|
30
|
-
* session lives in each delivery mode.
|
|
31
|
-
*/
|
|
32
|
-
/**
|
|
33
|
-
* The principal an upgrade flight is pinned to.
|
|
34
|
-
*
|
|
35
|
-
* `sub` is the user. `sid` is the session when the server issues one; it is
|
|
36
|
-
* absent in tokens that carry no session claim, and the field is then simply
|
|
37
|
-
* not part of the comparison — a missing claim cannot be made to prove
|
|
38
|
-
* anything, and inventing a value would make two different sessions compare
|
|
39
|
-
* equal or unequal arbitrarily.
|
|
40
|
-
*/
|
|
41
|
-
export type UpgradeSessionPin = {
|
|
42
|
-
readonly sub: string;
|
|
43
|
-
readonly sid?: string;
|
|
44
|
-
};
|
|
45
|
-
/** Claims the pin is read from. Deliberately `unknown`-typed: it is a parsed JWT body. */
|
|
46
|
-
export type UpgradeSessionClaims = {
|
|
47
|
-
sub?: unknown;
|
|
48
|
-
sid?: unknown;
|
|
49
|
-
} | null | undefined;
|
|
50
|
-
/**
|
|
51
|
-
* Reads a pin from token claims, or `undefined` when there is no identity to
|
|
52
|
-
* pin to.
|
|
53
|
-
*
|
|
54
|
-
* `sub` is mandatory: without a user there is no principal, and a pin that
|
|
55
|
-
* compares nothing would report "unchanged" for every change.
|
|
56
|
-
*/
|
|
57
|
-
export declare const readSessionPin: (claims: UpgradeSessionClaims) => UpgradeSessionPin | undefined;
|
|
58
|
-
/**
|
|
59
|
-
* Is `current` the same principal the flight was pinned to?
|
|
60
|
-
*
|
|
61
|
-
* `false` when `current` is absent: a pin exists, so the identity WAS readable
|
|
62
|
-
* when the flight began, and an identity that has since become unreadable is a
|
|
63
|
-
* change — the session was torn down. That is fail-closed on token
|
|
64
|
-
* APPLICATION (nothing is written) and still fail-open on session STATE
|
|
65
|
-
* (nothing is invalidated, nobody is logged out). §13.4 revision 6 keeps those
|
|
66
|
-
* two axes separate on purpose.
|
|
67
|
-
*
|
|
68
|
-
* When both sides carry a `sid` it must match as well, which is what catches a
|
|
69
|
-
* logout and re-login as the SAME user.
|
|
70
|
-
*/
|
|
71
|
-
export declare const sessionPinMatches: (pin: UpgradeSessionPin, current: UpgradeSessionPin | undefined) => boolean;
|
|
72
|
-
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../lib/upgrade/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,0FAA0F;AAC1F,MAAM,MAAM,oBAAoB,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAEvF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,WAAY,oBAAoB,KAAG,iBAAiB,GAAG,SAKjF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,QAAS,iBAAiB,WAAW,iBAAiB,GAAG,SAAS,KAAG,OAQlG,CAAC"}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The request snapshot: ONE normalised, immutable description of the request
|
|
3
|
-
* that carried a challenge, captured before dispatch.
|
|
4
|
-
*
|
|
5
|
-
* ## Why this module exists
|
|
6
|
-
*
|
|
7
|
-
* Every authorization decision the upgrade feature makes — is this URL in scope,
|
|
8
|
-
* what does the diagnostic name, what does the replay re-send — must be made on
|
|
9
|
-
* the SAME description of the request, and that description must be the one the
|
|
10
|
-
* platform will actually act on. Three defects in this feature were the same
|
|
11
|
-
* defect from three angles:
|
|
12
|
-
*
|
|
13
|
-
* 1. the scope check hand-parsed the caller's URL *string*, while the browser
|
|
14
|
-
* normalises it before dispatch;
|
|
15
|
-
* 2. the challenge context re-read the caller's live `input` at challenge
|
|
16
|
-
* time, while the replay was pinned to the plan-time URL and body;
|
|
17
|
-
* 3. the replay could re-send a different header set than the one that was
|
|
18
|
-
* examined.
|
|
19
|
-
*
|
|
20
|
-
* So the request is normalised and frozen ONCE, here, and the snapshot is the
|
|
21
|
-
* only thing the scope check, the challenge context, the diagnostics and the
|
|
22
|
-
* replay are given. Nothing downstream holds a live reference to the caller's
|
|
23
|
-
* `Request`, `RequestInit` or axios config.
|
|
24
|
-
*
|
|
25
|
-
* ## The normalisation rule, and why it is the platform's own parser
|
|
26
|
-
*
|
|
27
|
-
* **Resolve with `new URL(raw, base)` and compare `origin` on the result.**
|
|
28
|
-
*
|
|
29
|
-
* WHATWG URL parsing is not a string scan. For a special scheme it converts
|
|
30
|
-
* backslashes to forward slashes and strips ASCII tab (0x09), LF (0x0A) and CR
|
|
31
|
-
* (0x0D) *before* parsing. A scope check that inspects the raw string therefore
|
|
32
|
-
* sees a same-origin relative path where the browser resolves a foreign origin:
|
|
33
|
-
* `'/\\evil.example/x'`, `'/\t/evil.example/x'` and `'\\\\evil.example/x'` all
|
|
34
|
-
* resolve to `https://evil.example` (§13.4's SF-3, SF-4, SF-7). Each one would
|
|
35
|
-
* attach a step-up-elevated credential to a request leaving for an
|
|
36
|
-
* attacker-controlled host.
|
|
37
|
-
*
|
|
38
|
-
* **The percent-encoded forms are the mirror image, and they are POSITIVES.**
|
|
39
|
-
* `'/%5Cevil.example/x'`, `'/%09/evil.example/x'` and `'/%2F%2Fevil.example/x'`
|
|
40
|
-
* all resolve to the page's OWN origin and must stay in scope (SF-9..SF-12):
|
|
41
|
-
* the parser decodes nothing that could change the authority, so `%5C` is not a
|
|
42
|
-
* backslash, `%09` stays an ordinary path character and `%2F%2F` does not begin
|
|
43
|
-
* an authority. They are legitimate same-origin requests with odd-looking paths.
|
|
44
|
-
*
|
|
45
|
-
* That asymmetry is the entire argument for resolving rather than filtering. A
|
|
46
|
-
* list of rejected characters is a denylist against a parser, and the parser is
|
|
47
|
-
* the authority: it is bypassed by the raw forms, whose bytes it rewrites before
|
|
48
|
-
* it parses them, AND it is wrong in the opposite direction on the encoded
|
|
49
|
-
* forms, which it refuses as hostile when the platform treats them as plain
|
|
50
|
-
* path text. Resolving first gets both directions — and the vectors nobody has
|
|
51
|
-
* thought of yet — for free.
|
|
52
|
-
*
|
|
53
|
-
* The operative consequence for anyone editing this file: hand the input to
|
|
54
|
-
* `new URL` **undecoded and un-normalised**. Any decoding, trimming or
|
|
55
|
-
* rewriting before that call reintroduces one half of the defect or the other.
|
|
56
|
-
*
|
|
57
|
-
* Off the browser there is no document, so there is no "same origin" to resolve
|
|
58
|
-
* against. A relative URL is then resolved against a RESERVED sentinel origin
|
|
59
|
-
* (`.invalid` is reserved by RFC 2606 and can never be a real host), which keeps
|
|
60
|
-
* exactly one code path: a URL that resolves to the sentinel's origin is a
|
|
61
|
-
* genuinely relative one, and anything that steers the authority elsewhere —
|
|
62
|
-
* `//evil.example/x` included — resolves away from it and is no longer relative.
|
|
63
|
-
* The sentinel is `https:` precisely because it must be a SPECIAL scheme: the
|
|
64
|
-
* backslash and tab rules above apply only to special schemes, so a custom
|
|
65
|
-
* scheme would be a different parser and would miss the vectors.
|
|
66
|
-
*/
|
|
67
|
-
import type { BodyKind } from './replay';
|
|
68
|
-
/** One captured header. Lower-cased name, value verbatim. */
|
|
69
|
-
export type SnapshotHeader = readonly [name: string, value: string];
|
|
70
|
-
/**
|
|
71
|
-
* The frozen description of one request.
|
|
72
|
-
*
|
|
73
|
-
* Immutable by construction: `Object.freeze` on the snapshot and on its header
|
|
74
|
-
* list, and the body already captured by value where the shape is mutable. It
|
|
75
|
-
* carries no live reference to anything the caller can still change.
|
|
76
|
-
*/
|
|
77
|
-
export type RequestSnapshot = {
|
|
78
|
-
/** Exactly what the caller passed, for diagnostics only. NEVER for a decision. */
|
|
79
|
-
readonly raw: string;
|
|
80
|
-
/**
|
|
81
|
-
* The absolute, platform-normalised URL the request will actually be sent to,
|
|
82
|
-
* or `raw` when it could not be resolved at all (a malformed URL).
|
|
83
|
-
*
|
|
84
|
-
* This is the value every decision and the replay use.
|
|
85
|
-
*/
|
|
86
|
-
readonly href: string;
|
|
87
|
-
/**
|
|
88
|
-
* The URL to actually DISPATCH a replay to.
|
|
89
|
-
*
|
|
90
|
-
* Identical to `href` wherever a real base existed — a browser, or any host
|
|
91
|
-
* that resolved the URL absolutely — which is the case every decision cares
|
|
92
|
-
* about. It falls back to `raw` only when resolution used the reserved
|
|
93
|
-
* sentinel base, i.e. a relative URL on a host with no document: the
|
|
94
|
-
* sentinel's origin is a reserved name that resolves to nothing, so sending
|
|
95
|
-
* `href` there would send the request into a hole. The transport's own base
|
|
96
|
-
* (axios' `baseURL`, the runtime's fetch base) then resolves the captured
|
|
97
|
-
* string, exactly as it did for the original send.
|
|
98
|
-
*
|
|
99
|
-
* It is still a captured STRING, never the caller's object, so the TOCTOU
|
|
100
|
-
* this module exists to close stays closed on that path too.
|
|
101
|
-
*/
|
|
102
|
-
readonly dispatchUrl: string;
|
|
103
|
-
/** The resolved origin, or `undefined` when the URL could not be resolved. */
|
|
104
|
-
readonly origin?: string;
|
|
105
|
-
/** The resolved pathname, or the raw path when the URL could not be resolved. */
|
|
106
|
-
readonly pathname: string;
|
|
107
|
-
/** False when the URL could not be parsed even against the base. */
|
|
108
|
-
readonly resolved: boolean;
|
|
109
|
-
/**
|
|
110
|
-
* True when the resolved origin is the base's own — the page's origin on a
|
|
111
|
-
* browser, the sentinel's off it, which means "genuinely relative".
|
|
112
|
-
*
|
|
113
|
-
* This is what a same-origin path-prefix pattern (`backend: '/api'`) tests,
|
|
114
|
-
* and it is the one bit that makes `'/\\evil.example/x'` fail where `'/api/x'`
|
|
115
|
-
* passes.
|
|
116
|
-
*/
|
|
117
|
-
readonly relativeToBase: boolean;
|
|
118
|
-
/** Upper-cased, with the same precedence the transport itself applies. */
|
|
119
|
-
readonly method: string;
|
|
120
|
-
/** The effective header set, captured once. Frozen. */
|
|
121
|
-
readonly headers: readonly SnapshotHeader[];
|
|
122
|
-
/** How the body can be re-sent, which is what decides replayability. */
|
|
123
|
-
readonly bodyKind: BodyKind;
|
|
124
|
-
/**
|
|
125
|
-
* The already-captured body. `undefined` means "the caller passed no body
|
|
126
|
-
* key", which is distinct from an explicit `null`.
|
|
127
|
-
*/
|
|
128
|
-
readonly body?: unknown;
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* The reserved origin a relative URL is resolved against when there is no
|
|
132
|
-
* document. RFC 2606 reserves `.invalid`, so no real deployment can collide
|
|
133
|
-
* with it, and `https:` keeps the parser on its special-scheme rules.
|
|
134
|
-
*/
|
|
135
|
-
export declare const RELATIVE_BASE = "https://passflow-relative.invalid";
|
|
136
|
-
/** What a URL normalised to. Pure: it takes the base, it does not read one. */
|
|
137
|
-
export type NormalisedUrl = {
|
|
138
|
-
href: string;
|
|
139
|
-
origin?: string;
|
|
140
|
-
pathname: string;
|
|
141
|
-
resolved: boolean;
|
|
142
|
-
relativeToBase: boolean;
|
|
143
|
-
/** True when no real base existed and the reserved sentinel was used. */
|
|
144
|
-
sentinelBase: boolean;
|
|
145
|
-
};
|
|
146
|
-
/**
|
|
147
|
-
* Resolves one URL with the platform's own parser.
|
|
148
|
-
*
|
|
149
|
-
* `base` defaults to the document base (or the sentinel off the browser). The
|
|
150
|
-
* ONLY comparison any caller may make afterwards is on `origin` — never on the
|
|
151
|
-
* raw string.
|
|
152
|
-
*/
|
|
153
|
-
export declare const normaliseUrl: (raw: string, base?: string) => NormalisedUrl;
|
|
154
|
-
/**
|
|
155
|
-
* Captures a header bag by value.
|
|
156
|
-
*
|
|
157
|
-
* Every shape the two transports produce arrives here: a DOM `Headers`, an
|
|
158
|
-
* `AxiosHeaders`, a plain object, an entry array, or an array-valued node bag.
|
|
159
|
-
* Copying is the point — the caller may still hold and mutate the original.
|
|
160
|
-
*/
|
|
161
|
-
export declare const captureHeaders: (headers: unknown) => readonly SnapshotHeader[];
|
|
162
|
-
/** Reads a captured header. Case is already normalised, so this is exact. */
|
|
163
|
-
export declare const snapshotHeader: (snapshot: RequestSnapshot, name: string) => string | undefined;
|
|
164
|
-
/** What a caller must supply to take a snapshot. Everything else is derived. */
|
|
165
|
-
export type RequestSnapshotInit = {
|
|
166
|
-
url: string;
|
|
167
|
-
method?: string;
|
|
168
|
-
headers?: unknown;
|
|
169
|
-
bodyKind: BodyKind;
|
|
170
|
-
/** Pass the key only when the caller supplied a body, so `undefined` stays meaningful. */
|
|
171
|
-
body?: unknown;
|
|
172
|
-
/** Overrides the document base. Tests and non-browser hosts only. */
|
|
173
|
-
base?: string;
|
|
174
|
-
};
|
|
175
|
-
/**
|
|
176
|
-
* Takes the snapshot. Call it ONCE per request, BEFORE dispatch.
|
|
177
|
-
*
|
|
178
|
-
* Frozen on the way out: a snapshot that could be edited after the scope
|
|
179
|
-
* decision would reintroduce the very TOCTOU this module removes.
|
|
180
|
-
*/
|
|
181
|
-
export declare const createRequestSnapshot: (init: RequestSnapshotInit) => RequestSnapshot;
|
|
182
|
-
/**
|
|
183
|
-
* Applies the §5.5 credential swap to a captured header set, by EXACT match.
|
|
184
|
-
*
|
|
185
|
-
* Equality with the token we hold is what proves the header was ours; any other
|
|
186
|
-
* value is forwarded untouched, because rewriting a header we do not own would
|
|
187
|
-
* be a security bug. Returns the same frozen array when nothing changed, so the
|
|
188
|
-
* common path allocates nothing.
|
|
189
|
-
*/
|
|
190
|
-
export declare const swapAuthorization: (headers: readonly SnapshotHeader[], swap?: {
|
|
191
|
-
from: string;
|
|
192
|
-
to: string;
|
|
193
|
-
}) => readonly SnapshotHeader[];
|
|
194
|
-
/** The captured headers as the plain object both transports accept. */
|
|
195
|
-
export declare const headersToObject: (headers: readonly SnapshotHeader[]) => Record<string, string>;
|
|
196
|
-
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../lib/upgrade/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,sCAAsC,CAAC;AAuBjE,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,QAAS,MAAM,SAAQ,MAAM,KAAsB,aAgC3E,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,YAAa,OAAO,KAAG,SAAS,cAAc,EA4CxE,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,cAAc,aAAc,eAAe,QAAQ,MAAM,KAAG,MAAM,GAAG,SAQjF,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAAU,mBAAmB,KAAG,eAkBjE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,YACnB,SAAS,cAAc,EAAE,SAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,KAClC,SAAS,cAAc,EAazB,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,YAAa,SAAS,cAAc,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzF,CAAC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The HTTP adapter behind the `UpgradeTransport` port.
|
|
3
|
-
*
|
|
4
|
-
* It owns no axios instance. Both rounds arrive as narrow, function-shaped
|
|
5
|
-
* dependencies, which keeps HTTP vocabulary one level away from the controller
|
|
6
|
-
* and lets every test here be a synchronous fake instead of an HTTP mock.
|
|
7
|
-
*
|
|
8
|
-
* It is also STATELESS by design: no cached challenge id, no cached prepare
|
|
9
|
-
* result, no attempt counter. A challenge is single-use and the server consumes
|
|
10
|
-
* it atomically, so there is nothing a second attempt could legitimately reuse.
|
|
11
|
-
* Statelessness is the whole of this module's obligation to "never reuse a spent
|
|
12
|
-
* challenge_id", and it is checkable by calling `prepare()` twice.
|
|
13
|
-
*/
|
|
14
|
-
import type { UpgradeRefreshField, UpgradeStartWire } from '../api/model';
|
|
15
|
-
import type { UpgradeTransport } from './controller';
|
|
16
|
-
import { type UpgradePrepared } from './factors';
|
|
17
|
-
import type { UpgradeSessionPin } from './session';
|
|
18
|
-
export type UpgradeTransportDeps = {
|
|
19
|
-
/** `POST /auth/upgrade/start`. Returns the raw snake_case body; rejects with `PassflowError`. */
|
|
20
|
-
startUpgrade(payload: {
|
|
21
|
-
method: string;
|
|
22
|
-
relying_party_id?: string;
|
|
23
|
-
}): Promise<UpgradeStartWire>;
|
|
24
|
-
/**
|
|
25
|
-
* `POST /auth/refresh` carrying `upgrade`. Resolves once the elevated tokens
|
|
26
|
-
* are STORED.
|
|
27
|
-
*
|
|
28
|
-
* `pin` is the session and user identity the flight began under (§13.4
|
|
29
|
-
* revision 6). The host verifies it immediately before it applies the rotated
|
|
30
|
-
* tokens and discards them on mismatch — the check has to live inside the
|
|
31
|
-
* token-applying path, because that is the only place it cannot be bypassed
|
|
32
|
-
* by another entry point. The transport only carries the value; the facade
|
|
33
|
-
* supplies it, since the flight's start is what it is pinned to.
|
|
34
|
-
*/
|
|
35
|
-
commitRefresh(upgrade: UpgradeRefreshField, pin?: UpgradeSessionPin): Promise<void>;
|
|
36
|
-
/** Reports whether this delivery mode can carry an upgrade at all. BFF cannot. */
|
|
37
|
-
canCommit(): {
|
|
38
|
-
ok: true;
|
|
39
|
-
} | {
|
|
40
|
-
ok: false;
|
|
41
|
-
reason: string;
|
|
42
|
-
};
|
|
43
|
-
/** Optional relying-party id for passkey upgrades; forwarded verbatim. */
|
|
44
|
-
relyingPartyId?: () => string | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* Invalidates the session. Called ONLY for a commit 401 whose error id
|
|
47
|
-
* positively means the session died (`invalidatesSessionOnCommit`) — a
|
|
48
|
-
* genuine expiry during an elevation is still an expiry, and the transport is
|
|
49
|
-
* the only code that can tell, because it knows it issued the request and can
|
|
50
|
-
* read the error id. Everything else, including an id this SDK does not
|
|
51
|
-
* recognise, leaves the session alone.
|
|
52
|
-
*/
|
|
53
|
-
markSessionInvalid?: () => void;
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Normalises the prepare round's wire body.
|
|
57
|
-
*
|
|
58
|
-
* `webauthn` is passed through by reference, never re-serialised: the ceremony
|
|
59
|
-
* hands those exact bytes to the authenticator and the server re-parses them on
|
|
60
|
-
* the way back.
|
|
61
|
-
*
|
|
62
|
-
* A missing `challenge_id` or `expires_at` is a protocol violation, not an
|
|
63
|
-
* optional field. Producing `challengeId: undefined` would surface two round
|
|
64
|
-
* trips later as an opaque 401 with nothing to point at.
|
|
65
|
-
*/
|
|
66
|
-
export declare const toPrepared: (wire: UpgradeStartWire) => UpgradePrepared;
|
|
67
|
-
/** Builds the transport. Returns the port type, so the controller stays HTTP-agnostic. */
|
|
68
|
-
export declare const createUpgradeTransport: (deps: UpgradeTransportDeps) => UpgradeTransport;
|
|
69
|
-
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../lib/upgrade/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQrD,OAAO,EAA0E,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACzH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,iGAAiG;IACjG,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChG;;;;;;;;;;OAUG;IACH,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,kFAAkF;IAClF,SAAS,IAAI;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC1C;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC,CAAC;AAUF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,SAAU,gBAAgB,KAAG,eAenD,CAAC;AAYF,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,SAAU,oBAAoB,KAAG,gBA6ElE,CAAC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validates JWT token format (not signature, just structure)
|
|
3
|
-
* Checks that the token has 3 parts separated by dots and each part is valid base64url
|
|
4
|
-
*
|
|
5
|
-
* @param token - The token string to validate
|
|
6
|
-
* @returns true if the token has valid JWT format, false otherwise
|
|
7
|
-
*/
|
|
8
|
-
export declare function isValidJWTFormat(token: string): boolean;
|
|
9
|
-
/**
|
|
10
|
-
* Sanitizes error messages from URL parameters to prevent XSS
|
|
11
|
-
* Removes HTML tags and limits length
|
|
12
|
-
*
|
|
13
|
-
* @param message - The error message to sanitize
|
|
14
|
-
* @returns Sanitized error message
|
|
15
|
-
*/
|
|
16
|
-
export declare function sanitizeErrorMessage(message: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* Validates email format using RFC 5322 simplified pattern
|
|
19
|
-
*
|
|
20
|
-
* @param email - The email string to validate
|
|
21
|
-
* @returns true if valid email format, false otherwise
|
|
22
|
-
*/
|
|
23
|
-
export declare function isValidEmail(email: string): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Validates phone number format (E.164 format)
|
|
26
|
-
*
|
|
27
|
-
* @param phone - The phone number string to validate
|
|
28
|
-
* @returns true if valid phone format, false otherwise
|
|
29
|
-
*/
|
|
30
|
-
export declare function isValidPhoneNumber(phone: string): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Validates username format
|
|
33
|
-
*
|
|
34
|
-
* @param username - The username string to validate
|
|
35
|
-
* @returns true if valid username format, false otherwise
|
|
36
|
-
*/
|
|
37
|
-
export declare function isValidUsername(username: string): boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Validates TOTP code format (6 or 8 numeric digits)
|
|
40
|
-
*
|
|
41
|
-
* @param code - The TOTP code to validate
|
|
42
|
-
* @param digits - Expected number of digits (6 or 8, defaults to 6 for backward compatibility)
|
|
43
|
-
* @returns true if valid TOTP code format, false otherwise
|
|
44
|
-
*/
|
|
45
|
-
export declare function isValidTOTPCode(code: string, digits?: 6 | 8): boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Normalizes and validates recovery code format
|
|
48
|
-
* Converts to uppercase and removes whitespace
|
|
49
|
-
*
|
|
50
|
-
* @param code - The recovery code to normalize and validate
|
|
51
|
-
* @returns Normalized recovery code if valid, null if invalid
|
|
52
|
-
*/
|
|
53
|
-
export declare function normalizeRecoveryCode(code: string): string | null;
|
|
54
|
-
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../lib/utils/validation.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASnD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASzD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,GAAG,CAAK,GAAG,OAAO,CAMxE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":"7.0.2","root":["../lib/index.ts","../lib/passflow.ts","../lib/pkce.ts","../lib/store.ts","../lib/api/app.ts","../lib/api/auth.ts","../lib/api/axios-client.ts","../lib/api/cli-auth.ts","../lib/api/index.ts","../lib/api/invitation.ts","../lib/api/model.ts","../lib/api/setting.ts","../lib/api/tenant.ts","../lib/api/two-factor.ts","../lib/api/upgrade.ts","../lib/api/user.ts","../lib/constants/index.ts","../lib/device/index.ts","../lib/interceptors/fetch-registry.ts","../lib/m2m/client.ts","../lib/m2m/errors.ts","../lib/m2m/index.ts","../lib/m2m/types.ts","../lib/platform/index.ts","../lib/platform/types.ts","../lib/platform/web-adapter.ts","../lib/services/auth-service.ts","../lib/services/index.ts","../lib/services/invitation-service.ts","../lib/services/logger.ts","../lib/services/tenant-service.ts","../lib/services/tenant-user-membership.ts","../lib/services/token-cache-service.ts","../lib/services/two-factor-service.ts","../lib/services/user-service.ts","../lib/storage/index.ts","../lib/token/delivery-manager.ts","../lib/token/index.ts","../lib/token/membership.ts","../lib/token/service.ts","../lib/token/token.ts","../lib/types/index.ts","../lib/upgrade/acr.ts","../lib/upgrade/axios-adapter.ts","../lib/upgrade/challenge.ts","../lib/upgrade/client.ts","../lib/upgrade/controller.ts","../lib/upgrade/core.ts","../lib/upgrade/errors.ts","../lib/upgrade/facade.ts","../lib/upgrade/factors.ts","../lib/upgrade/fetch-adapter.ts","../lib/upgrade/index.ts","../lib/upgrade/markers.ts","../lib/upgrade/replay.ts","../lib/upgrade/select.ts","../lib/upgrade/session.ts","../lib/upgrade/snapshot.ts","../lib/upgrade/transport.ts","../lib/utils/validation.ts"],"packageJsons":["../node_modules/.pnpm/@simplewebauthn+browser@14.0.0/node_modules/@simplewebauthn/browser/esm/package.json","../node_modules/.pnpm/@simplewebauthn+browser@14.0.0/node_modules/@simplewebauthn/browser/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/package.json","../node_modules/.pnpm/axios@1.21.0/node_modules/axios/package.json","../node_modules/.pnpm/punycode@2.3.1/node_modules/punycode/package.json","../node_modules/.pnpm/undici-types@8.9.0/node_modules/undici-types/package.json","../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/package.json","../package.json"],"missingPackageJsons":["../node_modules/.pnpm/@simplewebauthn+browser@14.0.0/node_modules/@simplewebauthn/browser/esm/helpers/package.json","../node_modules/.pnpm/@simplewebauthn+browser@14.0.0/node_modules/@simplewebauthn/browser/esm/methods/package.json","../node_modules/.pnpm/@simplewebauthn+browser@14.0.0/node_modules/@simplewebauthn/browser/esm/types/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/assert/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/assert/strict/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/async_hooks/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/buffer/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/child_process/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/cluster/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/console/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/constants/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/crypto/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/dgram/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/diagnostics_channel/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/dns/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/dns/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/domain/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/events/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/fs/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/fs/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/http/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/http2/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/https/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/inspector/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/inspector/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/module/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/net/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/assert/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/dns/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/fs/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/inspector/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/path/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/readline/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/stream/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/test/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/timers/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/util/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/web-globals/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/node/zlib/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/os/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/path/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/path/posix/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/path/win32/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/perf_hooks/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/process/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/punycode/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/querystring/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/readline/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/readline/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/repl/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/stream/consumers/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/stream/iter/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/stream/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/stream/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/stream/web/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/string_decoder/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/timers/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/timers/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/tls/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/trace_events/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/tty/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/url/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/util/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/util/types/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/v8/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/vm/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/wasi/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/worker_threads/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/@types/zlib/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/assert/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/assert/strict/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/async_hooks/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/buffer/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/child_process/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/cluster/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/console/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/constants/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/crypto/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/dgram/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/diagnostics_channel/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/dns/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/dns/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/domain/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/events/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/fs/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/fs/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/http/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/http2/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/https/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/inspector/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/inspector/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/module/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/net/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/os/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/path/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/path/posix/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/path/win32/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/perf_hooks/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/process/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/punycode/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/querystring/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/readline/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/readline/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/repl/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/stream/consumers/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/stream/iter/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/stream/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/stream/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/stream/web/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/string_decoder/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/timers/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/timers/promises/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/tls/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/trace_events/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/tty/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/url/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/util/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/util/types/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/v8/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/vm/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/wasi/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/worker_threads/package.json","../node_modules/.pnpm/@types+node@26.6.6/node_modules/zlib/package.json","../node_modules/.pnpm/node_modules/@types/assert/package.json","../node_modules/.pnpm/node_modules/@types/assert/strict/package.json","../node_modules/.pnpm/node_modules/@types/async_hooks/package.json","../node_modules/.pnpm/node_modules/@types/buffer/package.json","../node_modules/.pnpm/node_modules/@types/child_process/package.json","../node_modules/.pnpm/node_modules/@types/cluster/package.json","../node_modules/.pnpm/node_modules/@types/console/package.json","../node_modules/.pnpm/node_modules/@types/constants/package.json","../node_modules/.pnpm/node_modules/@types/crypto/package.json","../node_modules/.pnpm/node_modules/@types/dgram/package.json","../node_modules/.pnpm/node_modules/@types/diagnostics_channel/package.json","../node_modules/.pnpm/node_modules/@types/dns/package.json","../node_modules/.pnpm/node_modules/@types/dns/promises/package.json","../node_modules/.pnpm/node_modules/@types/domain/package.json","../node_modules/.pnpm/node_modules/@types/events/package.json","../node_modules/.pnpm/node_modules/@types/fs/package.json","../node_modules/.pnpm/node_modules/@types/fs/promises/package.json","../node_modules/.pnpm/node_modules/@types/http/package.json","../node_modules/.pnpm/node_modules/@types/http2/package.json","../node_modules/.pnpm/node_modules/@types/https/package.json","../node_modules/.pnpm/node_modules/@types/inspector/package.json","../node_modules/.pnpm/node_modules/@types/inspector/promises/package.json","../node_modules/.pnpm/node_modules/@types/module/package.json","../node_modules/.pnpm/node_modules/@types/net/package.json","../node_modules/.pnpm/node_modules/@types/os/package.json","../node_modules/.pnpm/node_modules/@types/path/package.json","../node_modules/.pnpm/node_modules/@types/path/posix/package.json","../node_modules/.pnpm/node_modules/@types/path/win32/package.json","../node_modules/.pnpm/node_modules/@types/perf_hooks/package.json","../node_modules/.pnpm/node_modules/@types/process/package.json","../node_modules/.pnpm/node_modules/@types/punycode/package.json","../node_modules/.pnpm/node_modules/@types/querystring/package.json","../node_modules/.pnpm/node_modules/@types/readline/package.json","../node_modules/.pnpm/node_modules/@types/readline/promises/package.json","../node_modules/.pnpm/node_modules/@types/repl/package.json","../node_modules/.pnpm/node_modules/@types/stream/consumers/package.json","../node_modules/.pnpm/node_modules/@types/stream/iter/package.json","../node_modules/.pnpm/node_modules/@types/stream/package.json","../node_modules/.pnpm/node_modules/@types/stream/promises/package.json","../node_modules/.pnpm/node_modules/@types/stream/web/package.json","../node_modules/.pnpm/node_modules/@types/string_decoder/package.json","../node_modules/.pnpm/node_modules/@types/timers/package.json","../node_modules/.pnpm/node_modules/@types/timers/promises/package.json","../node_modules/.pnpm/node_modules/@types/tls/package.json","../node_modules/.pnpm/node_modules/@types/trace_events/package.json","../node_modules/.pnpm/node_modules/@types/tty/package.json","../node_modules/.pnpm/node_modules/@types/url/package.json","../node_modules/.pnpm/node_modules/@types/util/package.json","../node_modules/.pnpm/node_modules/@types/util/types/package.json","../node_modules/.pnpm/node_modules/@types/v8/package.json","../node_modules/.pnpm/node_modules/@types/vm/package.json","../node_modules/.pnpm/node_modules/@types/wasi/package.json","../node_modules/.pnpm/node_modules/@types/worker_threads/package.json","../node_modules/.pnpm/node_modules/@types/zlib/package.json","../node_modules/.pnpm/node_modules/assert/package.json","../node_modules/.pnpm/node_modules/assert/strict/package.json","../node_modules/.pnpm/node_modules/async_hooks/package.json","../node_modules/.pnpm/node_modules/buffer/package.json","../node_modules/.pnpm/node_modules/child_process/package.json","../node_modules/.pnpm/node_modules/cluster/package.json","../node_modules/.pnpm/node_modules/console/package.json","../node_modules/.pnpm/node_modules/constants/package.json","../node_modules/.pnpm/node_modules/crypto/package.json","../node_modules/.pnpm/node_modules/dgram/package.json","../node_modules/.pnpm/node_modules/diagnostics_channel/package.json","../node_modules/.pnpm/node_modules/dns/package.json","../node_modules/.pnpm/node_modules/dns/promises/package.json","../node_modules/.pnpm/node_modules/domain/package.json","../node_modules/.pnpm/node_modules/events/package.json","../node_modules/.pnpm/node_modules/fs/package.json","../node_modules/.pnpm/node_modules/fs/promises/package.json","../node_modules/.pnpm/node_modules/http/package.json","../node_modules/.pnpm/node_modules/http2/package.json","../node_modules/.pnpm/node_modules/https/package.json","../node_modules/.pnpm/node_modules/inspector/package.json","../node_modules/.pnpm/node_modules/inspector/promises/package.json","../node_modules/.pnpm/node_modules/module/package.json","../node_modules/.pnpm/node_modules/net/package.json","../node_modules/.pnpm/node_modules/os/package.json","../node_modules/.pnpm/node_modules/path/package.json","../node_modules/.pnpm/node_modules/path/posix/package.json","../node_modules/.pnpm/node_modules/path/win32/package.json","../node_modules/.pnpm/node_modules/perf_hooks/package.json","../node_modules/.pnpm/node_modules/process/package.json","../node_modules/.pnpm/node_modules/querystring/package.json","../node_modules/.pnpm/node_modules/readline/package.json","../node_modules/.pnpm/node_modules/readline/promises/package.json","../node_modules/.pnpm/node_modules/repl/package.json","../node_modules/.pnpm/node_modules/stream/consumers/package.json","../node_modules/.pnpm/node_modules/stream/iter/package.json","../node_modules/.pnpm/node_modules/stream/package.json","../node_modules/.pnpm/node_modules/stream/promises/package.json","../node_modules/.pnpm/node_modules/stream/web/package.json","../node_modules/.pnpm/node_modules/string_decoder/package.json","../node_modules/.pnpm/node_modules/timers/package.json","../node_modules/.pnpm/node_modules/timers/promises/package.json","../node_modules/.pnpm/node_modules/tls/package.json","../node_modules/.pnpm/node_modules/trace_events/package.json","../node_modules/.pnpm/node_modules/tty/package.json","../node_modules/.pnpm/node_modules/url/package.json","../node_modules/.pnpm/node_modules/util/package.json","../node_modules/.pnpm/node_modules/util/types/package.json","../node_modules/.pnpm/node_modules/v8/package.json","../node_modules/.pnpm/node_modules/vm/package.json","../node_modules/.pnpm/node_modules/wasi/package.json","../node_modules/.pnpm/node_modules/worker_threads/package.json","../node_modules/.pnpm/node_modules/zlib/package.json","../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist/package.json","../node_modules/@types/assert/package.json","../node_modules/@types/assert/strict/package.json","../node_modules/@types/async_hooks/package.json","../node_modules/@types/buffer/package.json","../node_modules/@types/child_process/package.json","../node_modules/@types/cluster/package.json","../node_modules/@types/console/package.json","../node_modules/@types/constants/package.json","../node_modules/@types/crypto/package.json","../node_modules/@types/dgram/package.json","../node_modules/@types/diagnostics_channel/package.json","../node_modules/@types/dns/package.json","../node_modules/@types/dns/promises/package.json","../node_modules/@types/domain/package.json","../node_modules/@types/events/package.json","../node_modules/@types/fs/package.json","../node_modules/@types/fs/promises/package.json","../node_modules/@types/http/package.json","../node_modules/@types/http2/package.json","../node_modules/@types/https/package.json","../node_modules/@types/inspector/package.json","../node_modules/@types/inspector/promises/package.json","../node_modules/@types/module/package.json","../node_modules/@types/net/package.json","../node_modules/@types/os/package.json","../node_modules/@types/path/package.json","../node_modules/@types/path/posix/package.json","../node_modules/@types/path/win32/package.json","../node_modules/@types/perf_hooks/package.json","../node_modules/@types/process/package.json","../node_modules/@types/punycode/package.json","../node_modules/@types/querystring/package.json","../node_modules/@types/readline/package.json","../node_modules/@types/readline/promises/package.json","../node_modules/@types/repl/package.json","../node_modules/@types/stream/consumers/package.json","../node_modules/@types/stream/iter/package.json","../node_modules/@types/stream/package.json","../node_modules/@types/stream/promises/package.json","../node_modules/@types/stream/web/package.json","../node_modules/@types/string_decoder/package.json","../node_modules/@types/timers/package.json","../node_modules/@types/timers/promises/package.json","../node_modules/@types/tls/package.json","../node_modules/@types/trace_events/package.json","../node_modules/@types/tty/package.json","../node_modules/@types/url/package.json","../node_modules/@types/util/package.json","../node_modules/@types/util/types/package.json","../node_modules/@types/v8/package.json","../node_modules/@types/vm/package.json","../node_modules/@types/wasi/package.json","../node_modules/@types/worker_threads/package.json","../node_modules/@types/zlib/package.json","../node_modules/assert/package.json","../node_modules/assert/strict/package.json","../node_modules/async_hooks/package.json","../node_modules/buffer/package.json","../node_modules/child_process/package.json","../node_modules/cluster/package.json","../node_modules/console/package.json","../node_modules/constants/package.json","../node_modules/crypto/package.json","../node_modules/dgram/package.json","../node_modules/diagnostics_channel/package.json","../node_modules/dns/package.json","../node_modules/dns/promises/package.json","../node_modules/domain/package.json","../node_modules/events/package.json","../node_modules/fs/package.json","../node_modules/fs/promises/package.json","../node_modules/http/package.json","../node_modules/http2/package.json","../node_modules/https/package.json","../node_modules/inspector/package.json","../node_modules/inspector/promises/package.json","../node_modules/module/package.json","../node_modules/net/package.json","../node_modules/os/package.json","../node_modules/path/package.json","../node_modules/path/posix/package.json","../node_modules/path/win32/package.json","../node_modules/perf_hooks/package.json","../node_modules/process/package.json","../node_modules/punycode/package.json","../node_modules/querystring/package.json","../node_modules/readline/package.json","../node_modules/readline/promises/package.json","../node_modules/repl/package.json","../node_modules/stream/consumers/package.json","../node_modules/stream/iter/package.json","../node_modules/stream/package.json","../node_modules/stream/promises/package.json","../node_modules/stream/web/package.json","../node_modules/string_decoder/package.json","../node_modules/timers/package.json","../node_modules/timers/promises/package.json","../node_modules/tls/package.json","../node_modules/trace_events/package.json","../node_modules/tty/package.json","../node_modules/url/package.json","../node_modules/util/package.json","../node_modules/util/types/package.json","../node_modules/v8/package.json","../node_modules/vm/package.json","../node_modules/wasi/package.json","../node_modules/worker_threads/package.json","../node_modules/zlib/package.json"]}
|