@authup/server-auth-console 1.0.0-beta.64 → 1.0.0-beta.66
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/README.md +78 -0
- package/dist/{server-Brhsp_x-.mjs → application-h8KbQSdz.mjs} +188 -97
- package/dist/application-h8KbQSdz.mjs.map +1 -0
- package/dist/bin.mjs +11 -13
- package/dist/bin.mjs.map +1 -1
- package/dist/config.d.ts +5 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/constants.d.ts +7 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/handler.d.ts.map +1 -1
- package/dist/index.d.mts +90 -42
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +10 -20
- package/dist/index.mjs.map +1 -1
- package/dist/payload.d.ts +42 -0
- package/dist/payload.d.ts.map +1 -1
- package/dist/render.d.ts +8 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/resolve.d.ts +9 -15
- package/dist/resolve.d.ts.map +1 -1
- package/dist/types.d.ts +2 -2
- package/package.json +12 -9
- package/dist/server-Brhsp_x-.mjs.map +0 -1
package/dist/config.d.ts
CHANGED
|
@@ -18,20 +18,20 @@ export declare const CONFIG_SCHEMA: import("@authup/server-config-kit").Schema<i
|
|
|
18
18
|
core: Pick<CoreConfig, "host" | "port">;
|
|
19
19
|
} & import("@authup/server-config").AuthConsoleConfig>, "publicUrl" | "internalUrl" | "db", string>;
|
|
20
20
|
/**
|
|
21
|
-
* Turn the configuration namespace into the service's own shape:
|
|
22
|
-
*
|
|
23
|
-
* rename. An empty `url` means the console sits on server-core's own origin
|
|
21
|
+
* Turn the configuration namespace into the service's own shape: validate the
|
|
22
|
+
* input against the declared zod types, fill the defaults, derive the one key
|
|
23
|
+
* that is derived rather than configured, and rename. An empty `url` means the console sits on server-core's own origin
|
|
24
24
|
* under the default segment, which is the single-origin deployment.
|
|
25
25
|
*
|
|
26
26
|
* The defaults are layered SECTION-AWARE ({@link mergeSchemaData}): a spread
|
|
27
27
|
* would let an input carrying one key of a section replace the whole section
|
|
28
28
|
* and take every other key's default with it.
|
|
29
29
|
*/
|
|
30
|
-
export declare function resolveConfig(input: Partial<ConfigInput>): Config
|
|
30
|
+
export declare function resolveConfig(input: Partial<ConfigInput>): Promise<Config>;
|
|
31
31
|
/**
|
|
32
32
|
* The standalone entry's configuration, read from the environment alone.
|
|
33
33
|
* `authup.yml` reaches this service through the CLI roles, which compose this
|
|
34
34
|
* very registry into the one document loader.
|
|
35
35
|
*/
|
|
36
|
-
export declare function readConfigFromEnv(): Config
|
|
36
|
+
export declare function readConfigFromEnv(): Promise<Config>;
|
|
37
37
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa;;;mGAcxB,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAC/B,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC,CA4BlB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAK,OAAO,CAAC,MAAM,CAAC,CAO1D"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import type { CONTRACT_VERSION as BundleContractVersion } from '@authup/client-auth-console';
|
|
2
|
+
/**
|
|
3
|
+
* The render contract this service compiles against. The literal type fails
|
|
4
|
+
* the build the moment the bundle's constant moves without this one.
|
|
5
|
+
*/
|
|
6
|
+
export declare const CONTRACT_VERSION: typeof BundleContractVersion;
|
|
1
7
|
/**
|
|
2
8
|
* The vite base the auth console bundle is built with. Asset hrefs in the
|
|
3
9
|
* shell are emitted against it, so the service mounts its assets there and
|
|
@@ -14,7 +20,7 @@ export declare const BASE_PATH = "/console/auth";
|
|
|
14
20
|
* The pages the service renders. Each is a route of the console bundle's
|
|
15
21
|
* own router, and each is what a server-core page GET now redirects to.
|
|
16
22
|
*/
|
|
17
|
-
export declare const PAGES: readonly ["/authorize", "/register", "/activate", "/password-forgot", "/password-reset", "/logout"];
|
|
23
|
+
export declare const PAGES: readonly ["/authorize", "/register", "/activate", "/password-forgot", "/password-reset", "/logout", "/device"];
|
|
18
24
|
/**
|
|
19
25
|
* Where this service mounts the bundle's `assets/` directory. The public
|
|
20
26
|
* asset URL is the service's own public path plus this route, which is what
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAG,OAAO,qBAAyB,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,KAAK,gHAQR,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,eAAO,MAAM,WAAW,aAAa,CAAC"}
|
package/dist/handler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AASjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AASjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAcnC,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAiBlD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAC/B,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,cAAc,EAC9B,MAAM,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CA8GhB"}
|
package/dist/index.d.mts
CHANGED
|
@@ -3,6 +3,7 @@ import { AuthConsoleConfig, CoreConfig, RootConfig, SECTION_KEY, ThemeConfig, To
|
|
|
3
3
|
import { App, IApp, IAppEvent } from "routup";
|
|
4
4
|
import { AuthorizeInfo, Client, StatusResponseFeatures } from "@authup/core-http-kit";
|
|
5
5
|
import { Application } from "orkos";
|
|
6
|
+
import { CONTRACT_VERSION as CONTRACT_VERSION$1 } from "@authup/client-auth-console";
|
|
6
7
|
//#region src/types.d.ts
|
|
7
8
|
/**
|
|
8
9
|
* The `authup.yml` NAMESPACE: the sections this service selects keys from.
|
|
@@ -13,7 +14,7 @@ import { Application } from "orkos";
|
|
|
13
14
|
* `distPath` below are this service's names for values the document calls
|
|
14
15
|
* something else, so they belong to {@link Config} alone.
|
|
15
16
|
*/
|
|
16
|
-
type ConfigInput = ToObjectLiteral<RootConfig & {
|
|
17
|
+
export type ConfigInput = ToObjectLiteral<RootConfig & {
|
|
17
18
|
[SECTION_KEY.THEME]: ThemeConfig;
|
|
18
19
|
[SECTION_KEY.CORE]: Pick<CoreConfig, 'host' | 'port'>;
|
|
19
20
|
} & AuthConsoleConfig>;
|
|
@@ -22,7 +23,7 @@ type ConfigInput = ToObjectLiteral<RootConfig & {
|
|
|
22
23
|
* and server-core is the external thing it calls, hence `url` for its own
|
|
23
24
|
* address and `apiUrl` for the API's.
|
|
24
25
|
*/
|
|
25
|
-
type Config = {
|
|
26
|
+
export type Config = {
|
|
26
27
|
/**
|
|
27
28
|
* The public URL this service is reachable at, e.g.
|
|
28
29
|
* `https://example.com/console/auth`. Its path component becomes the
|
|
@@ -67,10 +68,10 @@ type Config = {
|
|
|
67
68
|
};
|
|
68
69
|
/**
|
|
69
70
|
* How a page becomes a document. The default is this service's own
|
|
70
|
-
* `
|
|
71
|
-
* source substitutes one that reads through a vite dev server instead.
|
|
71
|
+
* `createRenderPage`, reading the built bundle; a caller serving the console
|
|
72
|
+
* from source substitutes one that reads through a vite dev server instead.
|
|
72
73
|
*/
|
|
73
|
-
type RenderPage = (event: IAppEvent, config: Config, ctx: {
|
|
74
|
+
export type RenderPage = (event: IAppEvent, config: Config, ctx: {
|
|
74
75
|
url: string;
|
|
75
76
|
data: Record<string, any>;
|
|
76
77
|
theme?: IThemeProvider;
|
|
@@ -89,7 +90,7 @@ type RenderPage = (event: IAppEvent, config: Config, ctx: {
|
|
|
89
90
|
* construction time, before the caller has said where to look. Pass
|
|
90
91
|
* `listen: false` to be mounted on someone else's listener.
|
|
91
92
|
*/
|
|
92
|
-
declare function createApplication(context?: Partial<Omit<CreateApplicationContext<Config>, 'createHandler'>>): Application;
|
|
93
|
+
export declare function createApplication(context?: Partial<Omit<CreateApplicationContext<Config>, 'createHandler'>>): Application;
|
|
93
94
|
//#endregion
|
|
94
95
|
//#region src/config.d.ts
|
|
95
96
|
/**
|
|
@@ -105,53 +106,58 @@ declare function createApplication(context?: Partial<Omit<CreateApplicationConte
|
|
|
105
106
|
* (`url`, `port`, `host`); every other section stays under the key the
|
|
106
107
|
* document nests it at.
|
|
107
108
|
*/
|
|
108
|
-
declare const CONFIG_SCHEMA: import("@authup/server-config-kit").Schema<import("@authup/server-config").ToObjectLiteral<import("@authup/server-config").RootConfig & {
|
|
109
|
+
export declare const CONFIG_SCHEMA: import("@authup/server-config-kit").Schema<import("@authup/server-config").ToObjectLiteral<import("@authup/server-config").RootConfig & {
|
|
109
110
|
theme: import("@authup/server-config").ThemeConfig;
|
|
110
111
|
core: Pick<CoreConfig, "host" | "port">;
|
|
111
112
|
} & import("@authup/server-config").AuthConsoleConfig>, "publicUrl" | "internalUrl" | "db", string>;
|
|
112
113
|
/**
|
|
113
|
-
* Turn the configuration namespace into the service's own shape:
|
|
114
|
-
*
|
|
115
|
-
* rename. An empty `url` means the console sits on server-core's own origin
|
|
114
|
+
* Turn the configuration namespace into the service's own shape: validate the
|
|
115
|
+
* input against the declared zod types, fill the defaults, derive the one key
|
|
116
|
+
* that is derived rather than configured, and rename. An empty `url` means the console sits on server-core's own origin
|
|
116
117
|
* under the default segment, which is the single-origin deployment.
|
|
117
118
|
*
|
|
118
119
|
* The defaults are layered SECTION-AWARE ({@link mergeSchemaData}): a spread
|
|
119
120
|
* would let an input carrying one key of a section replace the whole section
|
|
120
121
|
* and take every other key's default with it.
|
|
121
122
|
*/
|
|
122
|
-
declare function resolveConfig(input: Partial<ConfigInput>): Config
|
|
123
|
+
export declare function resolveConfig(input: Partial<ConfigInput>): Promise<Config>;
|
|
123
124
|
/**
|
|
124
125
|
* The standalone entry's configuration, read from the environment alone.
|
|
125
126
|
* `authup.yml` reaches this service through the CLI roles, which compose this
|
|
126
127
|
* very registry into the one document loader.
|
|
127
128
|
*/
|
|
128
|
-
declare function readConfigFromEnv(): Config
|
|
129
|
+
export declare function readConfigFromEnv(): Promise<Config>;
|
|
129
130
|
//#endregion
|
|
130
131
|
//#region src/constants.d.ts
|
|
132
|
+
/**
|
|
133
|
+
* The render contract this service compiles against. The literal type fails
|
|
134
|
+
* the build the moment the bundle's constant moves without this one.
|
|
135
|
+
*/
|
|
136
|
+
export declare const CONTRACT_VERSION: typeof CONTRACT_VERSION$1;
|
|
131
137
|
/**
|
|
132
138
|
* The vite base the auth console bundle is built with. Asset hrefs in the
|
|
133
139
|
* shell are emitted against it, so the service mounts its assets there and
|
|
134
140
|
* rebases them only when the deployment carries a sub-path.
|
|
135
141
|
*/
|
|
136
|
-
declare const VITE_BASE = "/console/auth/";
|
|
142
|
+
export declare const VITE_BASE = "/console/auth/";
|
|
137
143
|
/**
|
|
138
144
|
* The path the service is served under by default, i.e. the path component
|
|
139
145
|
* of `authConsole.url`. It is the same segment server-core mounted
|
|
140
146
|
* the assets at before the split, so a built bundle needs no rebuild.
|
|
141
147
|
*/
|
|
142
|
-
declare const BASE_PATH = "/console/auth";
|
|
148
|
+
export declare const BASE_PATH = "/console/auth";
|
|
143
149
|
/**
|
|
144
150
|
* The pages the service renders. Each is a route of the console bundle's
|
|
145
151
|
* own router, and each is what a server-core page GET now redirects to.
|
|
146
152
|
*/
|
|
147
|
-
declare const PAGES: readonly ["/authorize", "/register", "/activate", "/password-forgot", "/password-reset", "/logout"];
|
|
153
|
+
export declare const PAGES: readonly ["/authorize", "/register", "/activate", "/password-forgot", "/password-reset", "/logout", "/device"];
|
|
148
154
|
/**
|
|
149
155
|
* Where this service mounts the bundle's `assets/` directory. The public
|
|
150
156
|
* asset URL is the service's own public path plus this route, which is what
|
|
151
157
|
* the bundle's fixed vite base is rebased onto.
|
|
152
158
|
*/
|
|
153
|
-
declare const ASSETS_PATH = "/assets";
|
|
154
|
-
declare const HEALTH_PATH = "/healthy";
|
|
159
|
+
export declare const ASSETS_PATH = "/assets";
|
|
160
|
+
export declare const HEALTH_PATH = "/healthy";
|
|
155
161
|
//#endregion
|
|
156
162
|
//#region src/handler.d.ts
|
|
157
163
|
/**
|
|
@@ -163,7 +169,7 @@ declare const HEALTH_PATH = "/healthy";
|
|
|
163
169
|
* proxy, so a service published at `<origin>/console/auth` receives
|
|
164
170
|
* `/authorize`, exactly as server-core received it before the split.
|
|
165
171
|
*/
|
|
166
|
-
declare function createHandler(config: Config, themeProvider?: IThemeProvider, render?: RenderPage): Promise<IApp>;
|
|
172
|
+
export declare function createHandler(config: Config, themeProvider?: IThemeProvider, render?: RenderPage): Promise<IApp>;
|
|
167
173
|
//#endregion
|
|
168
174
|
//#region src/payload.d.ts
|
|
169
175
|
/**
|
|
@@ -178,7 +184,7 @@ declare function createHandler(config: Config, themeProvider?: IThemeProvider, r
|
|
|
178
184
|
* because nothing derived from it reaches a caller -- there is no
|
|
179
185
|
* `redirect_uri` here to be compared byte for byte later.
|
|
180
186
|
*/
|
|
181
|
-
declare function createAPIClient(config: Config): Client;
|
|
187
|
+
export declare function createAPIClient(config: Config): Client;
|
|
182
188
|
/**
|
|
183
189
|
* The feature flags every workflow page gates its form on. A page that
|
|
184
190
|
* cannot reach them must not silently claim a workflow is disabled, so the
|
|
@@ -198,14 +204,14 @@ declare function createAPIClient(config: Config): Client;
|
|
|
198
204
|
* in one process must not share one, and a module slot would additionally
|
|
199
205
|
* leak between test cases.
|
|
200
206
|
*/
|
|
201
|
-
declare function createFeaturesReader(client: Client): () => Promise<StatusResponseFeatures>;
|
|
207
|
+
export declare function createFeaturesReader(client: Client): () => Promise<StatusResponseFeatures>;
|
|
202
208
|
/**
|
|
203
209
|
* The `/authorize` render input, resolved by server-core (plan 101 D2-1).
|
|
204
210
|
* The browser's query is forwarded verbatim: the answer is derived from all
|
|
205
211
|
* of it, the `provider` hint and the closed `error` marker set included.
|
|
206
212
|
*/
|
|
207
|
-
declare function readAuthorizeInfo(client: Client, event: IAppEvent): Promise<AuthorizeInfo>;
|
|
208
|
-
type WorkflowPageOptions = {
|
|
213
|
+
export declare function readAuthorizeInfo(client: Client, event: IAppEvent): Promise<AuthorizeInfo>;
|
|
214
|
+
export type WorkflowPageOptions = {
|
|
209
215
|
realmAware?: boolean;
|
|
210
216
|
tokenAware?: boolean;
|
|
211
217
|
};
|
|
@@ -215,7 +221,49 @@ type WorkflowPageOptions = {
|
|
|
215
221
|
* assembly server-core did before the split, including the open-redirect
|
|
216
222
|
* guard on `redirect`.
|
|
217
223
|
*/
|
|
218
|
-
declare function buildWorkflowPageData(event: IAppEvent, features: StatusResponseFeatures, options?: WorkflowPageOptions): Record<string, any>;
|
|
224
|
+
export declare function buildWorkflowPageData(event: IAppEvent, features: StatusResponseFeatures, options?: WorkflowPageOptions): Record<string, any>;
|
|
225
|
+
/**
|
|
226
|
+
* The RP's own UI language, from the OIDC Core section 3.1.2.1 `ui_locales`
|
|
227
|
+
* parameter: a space-separated list of BCP47 tags in preference order.
|
|
228
|
+
*
|
|
229
|
+
* It rides the authorization request, so it survives the page GET's hop and
|
|
230
|
+
* the rebuild a federated round-trip makes from the stored code request. The
|
|
231
|
+
* four workflow pages take it straight from their own query, since an RP
|
|
232
|
+
* linking to one can say the same thing there.
|
|
233
|
+
*/
|
|
234
|
+
export declare function readUILocalesHint(event: IAppEvent): string | undefined;
|
|
235
|
+
/**
|
|
236
|
+
* The color mode the RP renders in, from authup's own `ui_color_mode`. One
|
|
237
|
+
* value rather than a list, since there is nothing to negotiate.
|
|
238
|
+
*
|
|
239
|
+
* Checked against the enum rather than local literals because the realm's
|
|
240
|
+
* discovery document ADVERTISES that same set as
|
|
241
|
+
* `ui_color_modes_supported`: a second spelling here would let the pages and
|
|
242
|
+
* the document disagree about what the deployment accepts.
|
|
243
|
+
*/
|
|
244
|
+
export declare function readUIColorModeHint(event: IAppEvent): string | undefined;
|
|
245
|
+
/**
|
|
246
|
+
* The `user_code` the device page prefills (RFC 8628 section 3.3.1): the
|
|
247
|
+
* query value uppercased and stripped of everything outside `A-Z0-9`, or
|
|
248
|
+
* `undefined` when nothing bounded remains. The page renders it back, so what
|
|
249
|
+
* reaches the payload is at most 16 alphanumeric characters.
|
|
250
|
+
*/
|
|
251
|
+
export declare function readDeviceUserCode(event: IAppEvent): string | undefined;
|
|
252
|
+
/**
|
|
253
|
+
* The provider a federated login on the device page came back from (#3589).
|
|
254
|
+
* A routing hint and no secret: the pending login itself rides an HttpOnly
|
|
255
|
+
* cookie. Anything that is not a uuid is dropped, the rule `/authorize`
|
|
256
|
+
* reads its own hint by: the page interpolates the value into the
|
|
257
|
+
* completion request path.
|
|
258
|
+
*/
|
|
259
|
+
export declare function readDeviceFederatedLogin(event: IAppEvent): {
|
|
260
|
+
providerId: string;
|
|
261
|
+
} | undefined;
|
|
262
|
+
/**
|
|
263
|
+
* The refusal marker the federated callback may attach. A closed set of one,
|
|
264
|
+
* so nothing request-derived is rendered.
|
|
265
|
+
*/
|
|
266
|
+
export declare function readDeviceError(event: IAppEvent): 'access_denied' | undefined;
|
|
219
267
|
//#endregion
|
|
220
268
|
//#region src/redirect.d.ts
|
|
221
269
|
/**
|
|
@@ -230,44 +278,44 @@ declare function buildWorkflowPageData(event: IAppEvent, features: StatusRespons
|
|
|
230
278
|
* (`javascript:`, `http:`) — both on the raw and once-decoded form so a
|
|
231
279
|
* percent-encoded separator (`%2f`, `%5c`) can't slip past.
|
|
232
280
|
*/
|
|
233
|
-
declare function sanitizeRelativeRedirect(input: unknown): string | undefined;
|
|
281
|
+
export declare function sanitizeRelativeRedirect(input: unknown): string | undefined;
|
|
234
282
|
//#endregion
|
|
235
283
|
//#region src/render.d.ts
|
|
236
|
-
declare const renderPage: RenderPage;
|
|
237
|
-
//#endregion
|
|
238
|
-
//#region src/resolve.d.ts
|
|
239
284
|
/**
|
|
240
|
-
*
|
|
241
|
-
* instead of
|
|
285
|
+
* Refuse a bundle built against another render contract at boot, naming the
|
|
286
|
+
* entry and both versions, instead of failing per request on `/authorize`.
|
|
287
|
+
* A bundle predating the export is version 1. Reads the module itself, which
|
|
288
|
+
* Node's ESM cache then hands the render for free.
|
|
242
289
|
*/
|
|
243
|
-
declare function
|
|
290
|
+
export declare function assertRenderContract(distPath: string): Promise<void>;
|
|
291
|
+
export declare function createRenderPage(distPath?: string): RenderPage;
|
|
292
|
+
//#endregion
|
|
293
|
+
//#region src/resolve.d.ts
|
|
244
294
|
/**
|
|
245
|
-
* Locate the auth console package
|
|
246
|
-
*
|
|
295
|
+
* Locate the auth console package: a substituted one (config `distPath`)
|
|
296
|
+
* first, else the SSR auth workflow UI shipped as
|
|
297
|
+
* `@authup/client-auth-console` (a dependency of THIS service), which the
|
|
247
298
|
* node_modules ancestor walk from this package's own root (locter's
|
|
248
|
-
* `locateUp`) finds
|
|
249
|
-
* apps/client-auth-console) and for a published install alike.
|
|
250
|
-
* positive result is cached.
|
|
299
|
+
* `locateUp`) finds for the workspace (symlink onto
|
|
300
|
+
* apps/client-auth-console) and for a published install alike.
|
|
251
301
|
*
|
|
252
302
|
* The `cwd` anchor is behavioural, not incidental: it decides which
|
|
253
303
|
* node_modules tree is walked, so it stays pinned to this package rather
|
|
254
304
|
* than to the process cwd.
|
|
255
305
|
*/
|
|
256
|
-
declare function resolvePackagePath(): string | undefined;
|
|
306
|
+
export declare function resolvePackagePath(distPath?: string): string | undefined;
|
|
257
307
|
/**
|
|
258
308
|
* Locate the BUILT auth console bundle (`dist/client` template + assets,
|
|
259
|
-
* `dist/server/server.js` render entry).
|
|
260
|
-
*
|
|
261
|
-
* request.
|
|
309
|
+
* `dist/server/server.js` render entry). A half-built package is no bundle:
|
|
310
|
+
* without the render entry there is nothing to render with.
|
|
262
311
|
*/
|
|
263
|
-
declare function resolveDistPath(): string | undefined;
|
|
312
|
+
export declare function resolveDistPath(distPath?: string): string | undefined;
|
|
264
313
|
//#endregion
|
|
265
314
|
//#region src/server.d.ts
|
|
266
315
|
/**
|
|
267
316
|
* The standalone service: the same handler the CLI mounts in process,
|
|
268
317
|
* behind a listener of its own.
|
|
269
318
|
*/
|
|
270
|
-
declare function createServer(config: Config): Promise<App>;
|
|
319
|
+
export declare function createServer(config: Config): Promise<App>;
|
|
271
320
|
//#endregion
|
|
272
|
-
export { ASSETS_PATH, BASE_PATH, CONFIG_SCHEMA, Config, ConfigInput, HEALTH_PATH, PAGES, RenderPage, VITE_BASE, WorkflowPageOptions, buildWorkflowPageData, createAPIClient, createApplication, createFeaturesReader, createHandler, createServer, readAuthorizeInfo, readConfigFromEnv, renderPage, resolveConfig, resolveDistPath, resolvePackagePath, sanitizeRelativeRedirect, setPackagePath };
|
|
273
321
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/application.ts","../src/config.ts","../src/constants.ts","../src/handler.ts","../src/payload.ts","../src/redirect.ts","../src/render.ts","../src/resolve.ts","../src/server.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/application.ts","../src/config.ts","../src/constants.ts","../src/handler.ts","../src/payload.ts","../src/redirect.ts","../src/render.ts","../src/resolve.ts","../src/server.ts"],"mappings":";;;;;;;;;;;;;;;;YA2BY,cAAc,gBACtB;GAEK,YAAY,QAAQ;GAEpB,YAAY,OAAO,KAAK;IAE7B;;;;;;YAQQ;;;;;;EAMR;;;;;;;;EAQA;;;;;;;;;;;;;;;EAeA;;;;;EAKA;EACA;;;;;EAKA;EAEA,OAAO;;;;;;;YAQC,cACR,OAAO,WACP,QAAQ,QACR;EACI;EACA,MAAM;EACN,QAAQ;MAEX;;;;;;;;;;;;;;;wBC1EW,kBACZ,UAAS,QAAQ,KAAK,yBAAyB,6BAC/C;;;;;;;;;;;;;;;;qBCWS,mDAAa,uCAAA,gDAAA;;QAAb,KAAA;oCAcX;;;;;;;;;;;wBAYoB,cAClB,OAAO,QAAQ,eACf,QAAQ;;;;;;wBAmCU,qBAAsB,QAAQ;;;;;;;qBCzFvC,yBAA0B;;;;;;qBAO1B;;;;;;qBAOA;;;;;qBAMA;;;;;;qBAeA;qBAEA;;;;;;;;;;;;wBCMS,cAClB,QAAQ,QACR,gBAAgB,gBAChB,SAAS,aACT,QAAQ;;;;;;;;;;;;;;;wBChCI,gBAAgB,QAAQ,SAAU;;;;;;;;;;;;;;;;;;;;wBAiDlC,qBAAqB,QAAQ,eAAgB,QAAQ;;;;;;wBAmC/C,kBAAkB,QAAQ,QAAQ,OAAO,YAAa,QAAQ;YAUxE;EAIR;EACA;;;;;;;;wBASY,sBACZ,OAAO,WACP,UAAU,wBACV,UAAS,sBACT;;;;;;;;;;wBA6BY,kBAAkB,OAAO;;;;;;;;;;wBA0BzB,oBAAoB,OAAO;;;;;;;wBAe3B,mBAAmB,OAAO;;;;;;;;wBAqB1B,yBAAyB,OAAO;EAAe;;;;;;wBAY/C,gBAAgB,OAAO;;;;;;;;;;;;;;;wBChOvB,yBAAyB;;;;;;;;;wBCanB,qBAAqB,mBAAoB;wBAc/C,iBAAiB,oBAAqB;;;;;;;;;;;;;;;wBCtBtC,mBAAmB;;;;;;wBAYnB,gBAAgB;;;;;;;wBCrBV,aAAa,QAAQ,SAAU,QAAQ"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,26 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
//#region src/
|
|
1
|
+
import { C as CONFIG_SCHEMA, S as VITE_BASE, T as resolveConfig, _ as ASSETS_PATH, a as resolveDistPath, b as HEALTH_PATH, c as createAPIClient, d as readDeviceError, f as readDeviceFederatedLogin, g as sanitizeRelativeRedirect, h as readUILocalesHint, i as createRenderPage, l as createFeaturesReader, m as readUIColorModeHint, n as createHandler, o as resolvePackagePath, p as readDeviceUserCode, r as assertRenderContract, s as buildWorkflowPageData, t as createApplication, u as readAuthorizeInfo, v as BASE_PATH, w as readConfigFromEnv, x as PAGES, y as CONTRACT_VERSION } from "./application-h8KbQSdz.mjs";
|
|
2
|
+
import { App } from "routup";
|
|
3
|
+
//#region src/server.ts
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `authup start console` starts, what the `authup-auth-console` bin starts, and what
|
|
8
|
-
* `authup start` composes onto its own listener, so no caller reaches past
|
|
9
|
-
* the graph for a bare handler.
|
|
10
|
-
*
|
|
11
|
-
* `config` defaults to a FACTORY, not a value: resolving it reads the
|
|
12
|
-
* document, and a console started alongside others must not do that at
|
|
13
|
-
* construction time, before the caller has said where to look. Pass
|
|
14
|
-
* `listen: false` to be mounted on someone else's listener.
|
|
5
|
+
* The standalone service: the same handler the CLI mounts in process,
|
|
6
|
+
* behind a listener of its own.
|
|
15
7
|
*/
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
createHandler: (resolved, theme) => createHandler(resolved, theme)
|
|
21
|
-
});
|
|
8
|
+
async function createServer(config) {
|
|
9
|
+
const app = new App();
|
|
10
|
+
app.use(await createHandler(config));
|
|
11
|
+
return app;
|
|
22
12
|
}
|
|
23
13
|
//#endregion
|
|
24
|
-
export { ASSETS_PATH, BASE_PATH, CONFIG_SCHEMA, HEALTH_PATH, PAGES, VITE_BASE, buildWorkflowPageData, createAPIClient, createApplication, createFeaturesReader, createHandler, createServer, readAuthorizeInfo, readConfigFromEnv,
|
|
14
|
+
export { ASSETS_PATH, BASE_PATH, CONFIG_SCHEMA, CONTRACT_VERSION, HEALTH_PATH, PAGES, VITE_BASE, assertRenderContract, buildWorkflowPageData, createAPIClient, createApplication, createFeaturesReader, createHandler, createRenderPage, createServer, readAuthorizeInfo, readConfigFromEnv, readDeviceError, readDeviceFederatedLogin, readDeviceUserCode, readUIColorModeHint, readUILocalesHint, resolveConfig, resolveDistPath, resolvePackagePath, sanitizeRelativeRedirect };
|
|
25
15
|
|
|
26
16
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/server.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { App } from 'routup';\nimport { createHandler } from './handler';\nimport type { Config } from './types';\n\n/**\n * The standalone service: the same handler the CLI mounts in process,\n * behind a listener of its own.\n */\nexport async function createServer(config: Config) : Promise<App> {\n const app = new App();\n\n app.use(await createHandler(config));\n\n return app;\n}\n"],"mappings":";;;;;;;AAeA,eAAsB,aAAa,QAA+B;CAC9D,MAAM,MAAM,IAAI,IAAI;CAEpB,IAAI,IAAI,MAAM,cAAc,MAAM,CAAC;CAEnC,OAAO;AACX"}
|
package/dist/payload.d.ts
CHANGED
|
@@ -52,4 +52,46 @@ export type WorkflowPageOptions = {
|
|
|
52
52
|
* guard on `redirect`.
|
|
53
53
|
*/
|
|
54
54
|
export declare function buildWorkflowPageData(event: IAppEvent, features: StatusResponseFeatures, options?: WorkflowPageOptions): Record<string, any>;
|
|
55
|
+
/**
|
|
56
|
+
* The RP's own UI language, from the OIDC Core section 3.1.2.1 `ui_locales`
|
|
57
|
+
* parameter: a space-separated list of BCP47 tags in preference order.
|
|
58
|
+
*
|
|
59
|
+
* It rides the authorization request, so it survives the page GET's hop and
|
|
60
|
+
* the rebuild a federated round-trip makes from the stored code request. The
|
|
61
|
+
* four workflow pages take it straight from their own query, since an RP
|
|
62
|
+
* linking to one can say the same thing there.
|
|
63
|
+
*/
|
|
64
|
+
export declare function readUILocalesHint(event: IAppEvent): string | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* The color mode the RP renders in, from authup's own `ui_color_mode`. One
|
|
67
|
+
* value rather than a list, since there is nothing to negotiate.
|
|
68
|
+
*
|
|
69
|
+
* Checked against the enum rather than local literals because the realm's
|
|
70
|
+
* discovery document ADVERTISES that same set as
|
|
71
|
+
* `ui_color_modes_supported`: a second spelling here would let the pages and
|
|
72
|
+
* the document disagree about what the deployment accepts.
|
|
73
|
+
*/
|
|
74
|
+
export declare function readUIColorModeHint(event: IAppEvent): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* The `user_code` the device page prefills (RFC 8628 section 3.3.1): the
|
|
77
|
+
* query value uppercased and stripped of everything outside `A-Z0-9`, or
|
|
78
|
+
* `undefined` when nothing bounded remains. The page renders it back, so what
|
|
79
|
+
* reaches the payload is at most 16 alphanumeric characters.
|
|
80
|
+
*/
|
|
81
|
+
export declare function readDeviceUserCode(event: IAppEvent): string | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* The provider a federated login on the device page came back from (#3589).
|
|
84
|
+
* A routing hint and no secret: the pending login itself rides an HttpOnly
|
|
85
|
+
* cookie. Anything that is not a uuid is dropped, the rule `/authorize`
|
|
86
|
+
* reads its own hint by: the page interpolates the value into the
|
|
87
|
+
* completion request path.
|
|
88
|
+
*/
|
|
89
|
+
export declare function readDeviceFederatedLogin(event: IAppEvent): {
|
|
90
|
+
providerId: string;
|
|
91
|
+
} | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* The refusal marker the federated callback may attach. A closed set of one,
|
|
94
|
+
* so nothing request-derived is rendered.
|
|
95
|
+
*/
|
|
96
|
+
export declare function readDeviceError(event: IAppEvent): 'access_denied' | undefined;
|
|
55
97
|
//# sourceMappingURL=payload.d.ts.map
|
package/dist/payload.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAkB,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAkB,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAI,MAAM,CAEvD;AA4BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAI,MAAM,OAAO,CAAC,sBAAsB,CAAC,CA4B3F;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAI,OAAO,CAAC,aAAa,CAAC,CAQjG;AAED,MAAM,MAAM,mBAAmB,GAAG;IAI9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,sBAAsB,EAChC,OAAO,GAAE,mBAAwB,GACjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAI,MAAM,GAAG,SAAS,CAevE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAI,MAAM,GAAG,SAAS,CAOzE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAI,MAAM,GAAG,SAAS,CAYxE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAI;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAM9F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAI,eAAe,GAAG,SAAS,CAE9E"}
|
package/dist/render.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import type { RenderPage } from './types';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Refuse a bundle built against another render contract at boot, naming the
|
|
4
|
+
* entry and both versions, instead of failing per request on `/authorize`.
|
|
5
|
+
* A bundle predating the export is version 1. Reads the module itself, which
|
|
6
|
+
* Node's ESM cache then hands the render for free.
|
|
7
|
+
*/
|
|
8
|
+
export declare function assertRenderContract(distPath: string): Promise<void>;
|
|
9
|
+
export declare function createRenderPage(distPath?: string): RenderPage;
|
|
3
10
|
//# sourceMappingURL=render.d.ts.map
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,CAY3E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAI,UAAU,CAoG/D"}
|
package/dist/resolve.d.ts
CHANGED
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
export declare function setPackagePath(value: string | undefined): void;
|
|
6
|
-
/**
|
|
7
|
-
* Locate the auth console package. The SSR auth workflow UI ships as
|
|
8
|
-
* `@authup/client-auth-console` (a dependency of THIS service), so the
|
|
2
|
+
* Locate the auth console package: a substituted one (config `distPath`)
|
|
3
|
+
* first, else the SSR auth workflow UI shipped as
|
|
4
|
+
* `@authup/client-auth-console` (a dependency of THIS service), which the
|
|
9
5
|
* node_modules ancestor walk from this package's own root (locter's
|
|
10
|
-
* `locateUp`) finds
|
|
11
|
-
* apps/client-auth-console) and for a published install alike.
|
|
12
|
-
* positive result is cached.
|
|
6
|
+
* `locateUp`) finds for the workspace (symlink onto
|
|
7
|
+
* apps/client-auth-console) and for a published install alike.
|
|
13
8
|
*
|
|
14
9
|
* The `cwd` anchor is behavioural, not incidental: it decides which
|
|
15
10
|
* node_modules tree is walked, so it stays pinned to this package rather
|
|
16
11
|
* than to the process cwd.
|
|
17
12
|
*/
|
|
18
|
-
export declare function resolvePackagePath(): string | undefined;
|
|
13
|
+
export declare function resolvePackagePath(distPath?: string): string | undefined;
|
|
19
14
|
/**
|
|
20
15
|
* Locate the BUILT auth console bundle (`dist/client` template + assets,
|
|
21
|
-
* `dist/server/server.js` render entry).
|
|
22
|
-
*
|
|
23
|
-
* request.
|
|
16
|
+
* `dist/server/server.js` render entry). A half-built package is no bundle:
|
|
17
|
+
* without the render entry there is nothing to render with.
|
|
24
18
|
*/
|
|
25
|
-
export declare function resolveDistPath(): string | undefined;
|
|
19
|
+
export declare function resolveDistPath(distPath?: string): string | undefined;
|
|
26
20
|
//# sourceMappingURL=resolve.d.ts.map
|
package/dist/resolve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAI,MAAM,GAAG,SAAS,CAKzE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAI,MAAM,GAAG,SAAS,CAetE"}
|
package/dist/types.d.ts
CHANGED
|
@@ -64,8 +64,8 @@ export type Config = {
|
|
|
64
64
|
};
|
|
65
65
|
/**
|
|
66
66
|
* How a page becomes a document. The default is this service's own
|
|
67
|
-
* `
|
|
68
|
-
* source substitutes one that reads through a vite dev server instead.
|
|
67
|
+
* `createRenderPage`, reading the built bundle; a caller serving the console
|
|
68
|
+
* from source substitutes one that reads through a vite dev server instead.
|
|
69
69
|
*/
|
|
70
70
|
export type RenderPage = (event: IAppEvent, config: Config, ctx: {
|
|
71
71
|
url: string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@authup/server-auth-console",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.0-beta.
|
|
4
|
+
"version": "1.0.0-beta.66",
|
|
5
5
|
"description": "The SSR service behind authup's hosted auth pages: it renders the auth console bundle and hydrates it anonymously over HTTP.",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
7
7
|
"bin": {
|
|
@@ -51,21 +51,24 @@
|
|
|
51
51
|
},
|
|
52
52
|
"homepage": "https://github.com/authup/authup#readme",
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@authup/client-auth-console": "^1.0.0-beta.
|
|
55
|
-
"@authup/core-http-kit": "^1.0.0-beta.
|
|
56
|
-
"@authup/errors": "^1.0.0-beta.
|
|
57
|
-
"@authup/kit": "^1.0.0-beta.
|
|
58
|
-
"@authup/server-config
|
|
59
|
-
"@authup/server-config": "^1.0.0-beta.
|
|
60
|
-
"@authup/server-console-kit": "^1.0.0-beta.
|
|
54
|
+
"@authup/client-auth-console": "^1.0.0-beta.66",
|
|
55
|
+
"@authup/core-http-kit": "^1.0.0-beta.66",
|
|
56
|
+
"@authup/errors": "^1.0.0-beta.66",
|
|
57
|
+
"@authup/kit": "^1.0.0-beta.66",
|
|
58
|
+
"@authup/server-config": "^1.0.0-beta.66",
|
|
59
|
+
"@authup/server-config-kit": "^1.0.0-beta.66",
|
|
60
|
+
"@authup/server-console-kit": "^1.0.0-beta.66",
|
|
61
|
+
"@authup/specs": "^1.0.0-beta.66",
|
|
61
62
|
"@routup/assets": "^5.0.0",
|
|
62
63
|
"@routup/basic": "^3.0.0",
|
|
63
64
|
"locter": "^4.1.1",
|
|
64
65
|
"orkos": "^1.1.1",
|
|
65
66
|
"routup": "^6.1.0",
|
|
66
|
-
"
|
|
67
|
+
"validup": "^2.0.1",
|
|
68
|
+
"zod": "^4.6.5"
|
|
67
69
|
},
|
|
68
70
|
"devDependencies": {
|
|
71
|
+
"@types/node": "^26.6.1",
|
|
69
72
|
"cross-env": "^10.1.0",
|
|
70
73
|
"vitest": "^4.0.18"
|
|
71
74
|
},
|