@blakearoberts/visage 0.0.1-rc.1 → 0.0.1-rc.3
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/certs.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/render/oauth2-proxy.d.ts.map +1 -1
- package/dist/types.d.ts +228 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -2
package/dist/certs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certs.d.ts","sourceRoot":"","sources":["../src/certs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"certs.d.ts","sourceRoot":"","sources":["../src/certs.ts"],"names":[],"mappings":"AAOA,KAAK,OAAO,GAAG;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,WAAW,CAAC,EAChC,GAAG,EACH,KAAK,EACL,QAAQ,GACT,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCzB"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { dirname, join } from 'node:path';
|
|
2
2
|
import { spawnSync } from 'node:child_process';
|
|
3
3
|
import { existsSync, mkdirSync, createWriteStream, chmodSync, readFileSync, appendFileSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
4
5
|
import { Readable } from 'node:stream';
|
|
5
6
|
import { pipeline } from 'node:stream/promises';
|
|
6
7
|
import { stringify } from 'yaml';
|
|
@@ -63,10 +64,11 @@ async function ensureCerts({ bin, certs, hostname, }) {
|
|
|
63
64
|
const mkcert = await ensureMkCert(bin);
|
|
64
65
|
const env = {
|
|
65
66
|
...process.env,
|
|
66
|
-
CAROOT: join(
|
|
67
|
+
CAROOT: join(process.env.XDG_CACHE_HOME || join(homedir(), '.cache'), 'visage/ca'),
|
|
67
68
|
TRUST_STORES: process.env.TRUST_STORES ?? 'system',
|
|
68
69
|
};
|
|
69
|
-
|
|
70
|
+
mkdirSync(env.CAROOT, { recursive: true });
|
|
71
|
+
// mkcert -install is idempotent; CA files alone do not prove trust-store state.
|
|
70
72
|
{
|
|
71
73
|
const result = spawnSync(mkcert, ['-install'], {
|
|
72
74
|
env,
|
|
@@ -440,7 +442,7 @@ const DefaultIdpConfig = {
|
|
|
440
442
|
const DefaultOAuth2Client = {
|
|
441
443
|
id: 'visage',
|
|
442
444
|
secret: 'visage-secret',
|
|
443
|
-
scopes: ['openid', 'email', 'profile']};
|
|
445
|
+
scopes: ['openid', 'email', 'profile', 'offline_access']};
|
|
444
446
|
const DefaultProxyPolicy = {
|
|
445
447
|
auth: { enabled: true, forward: true, redirect: false },
|
|
446
448
|
headers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2-proxy.d.ts","sourceRoot":"","sources":["../../src/render/oauth2-proxy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"oauth2-proxy.d.ts","sourceRoot":"","sources":["../../src/render/oauth2-proxy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAWjE"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,22 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-configurable options for the Visage Vite plugin.
|
|
3
|
+
*/
|
|
1
4
|
export type VisageOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Browser-facing hostname for the local Visage HTTPS origin.
|
|
7
|
+
*
|
|
8
|
+
* @defaultValue `'local.vite.app'`
|
|
9
|
+
*/
|
|
2
10
|
readonly host?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Browser-facing HTTPS port for the local Visage proxy.
|
|
13
|
+
*
|
|
14
|
+
* @defaultValue `9001`
|
|
15
|
+
*/
|
|
3
16
|
readonly port?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Session cookie settings normalized into OAuth2 Proxy configuration.
|
|
19
|
+
*/
|
|
4
20
|
readonly cookie?: VisageCookiePolicy;
|
|
21
|
+
/**
|
|
22
|
+
* Identity provider configuration. Omit this to use Visage's managed Dex
|
|
23
|
+
* provider.
|
|
24
|
+
*/
|
|
5
25
|
readonly idp?: VisageDexOptions | VisageIdpOptions;
|
|
26
|
+
/**
|
|
27
|
+
* OAuth2 client settings shared by Dex or an external IdP and OAuth2 Proxy.
|
|
28
|
+
*/
|
|
6
29
|
readonly oauth2?: VisageOAuth2Client;
|
|
30
|
+
/**
|
|
31
|
+
* Additional or replacement Docker Compose services managed with the Vite
|
|
32
|
+
* dev-server lifecycle.
|
|
33
|
+
*/
|
|
7
34
|
readonly services?: Record<string, VisageService>;
|
|
35
|
+
/**
|
|
36
|
+
* Upstream targets that NGINX can route to by path.
|
|
37
|
+
*/
|
|
8
38
|
readonly upstreams?: Record<string, VisageUpstream>;
|
|
9
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Cookie lifetime, scope, and naming policy for the OAuth2 Proxy session.
|
|
42
|
+
*/
|
|
10
43
|
export type VisageCookiePolicy = {
|
|
44
|
+
/**
|
|
45
|
+
* Session cookie name. Host-only cookies are automatically prefixed with
|
|
46
|
+
* `__HOST-` when no domains are configured, so the default rendered
|
|
47
|
+
* host-only cookie name is `__HOST-session`.
|
|
48
|
+
*
|
|
49
|
+
* @defaultValue `'session'`
|
|
50
|
+
*/
|
|
11
51
|
readonly name?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Maximum cookie lifetime using an OAuth2 Proxy duration string.
|
|
54
|
+
*
|
|
55
|
+
* @defaultValue `'8h'`
|
|
56
|
+
*/
|
|
12
57
|
readonly expire?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Interval after which OAuth2 Proxy refreshes the session using an OAuth2
|
|
60
|
+
* Proxy duration string.
|
|
61
|
+
*
|
|
62
|
+
* @defaultValue `'15m'`
|
|
63
|
+
*/
|
|
13
64
|
readonly refresh?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Cookie domains for sharing the session across local hostnames. Leave unset
|
|
67
|
+
* for a host-only cookie.
|
|
68
|
+
*/
|
|
14
69
|
readonly domains?: readonly string[];
|
|
70
|
+
/**
|
|
71
|
+
* Cookie path scope.
|
|
72
|
+
*
|
|
73
|
+
* @defaultValue `'/'`
|
|
74
|
+
*/
|
|
15
75
|
readonly path?: string;
|
|
16
76
|
};
|
|
77
|
+
/**
|
|
78
|
+
* Managed Dex identity provider options.
|
|
79
|
+
*/
|
|
17
80
|
export type VisageDexOptions = {
|
|
81
|
+
/**
|
|
82
|
+
* Selects the managed Dex provider. Omit this for the default managed Dex
|
|
83
|
+
* provider.
|
|
84
|
+
*/
|
|
18
85
|
readonly kind?: 'dex';
|
|
86
|
+
/**
|
|
87
|
+
* Token expiration and rotation settings rendered into the Dex config.
|
|
88
|
+
*/
|
|
19
89
|
readonly expiry?: VisageDexExpiry;
|
|
90
|
+
/**
|
|
91
|
+
* Static username/password users rendered into the Dex config.
|
|
92
|
+
*
|
|
93
|
+
* @defaultValue `[{ email: 'user@example.com', password: 'pass' }]`
|
|
94
|
+
*/
|
|
20
95
|
readonly users?: readonly VisageDexUser[];
|
|
21
96
|
};
|
|
22
97
|
/**
|
|
@@ -25,59 +100,211 @@ export type VisageDexOptions = {
|
|
|
25
100
|
* @see {@link https://dexidp.io/docs/configuration/tokens/#expiration-and-rotation-settings}
|
|
26
101
|
*/
|
|
27
102
|
export type VisageDexExpiry = {
|
|
103
|
+
/**
|
|
104
|
+
* Lifetime for ID tokens issued by Dex.
|
|
105
|
+
*/
|
|
28
106
|
readonly idTokens?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Lifetime for in-progress authorization requests.
|
|
109
|
+
*/
|
|
29
110
|
readonly authRequests?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Lifetime for in-progress device authorization requests.
|
|
113
|
+
*/
|
|
30
114
|
readonly deviceRequests?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Rotation interval for Dex signing keys.
|
|
117
|
+
*/
|
|
31
118
|
readonly signingKeys?: string;
|
|
119
|
+
/**
|
|
120
|
+
* Refresh token lifetime and rotation settings.
|
|
121
|
+
*/
|
|
32
122
|
readonly refreshTokens?: {
|
|
123
|
+
/**
|
|
124
|
+
* Maximum time a refresh token may go unused before it expires.
|
|
125
|
+
*/
|
|
33
126
|
readonly validIfNotUsedFor?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Absolute lifetime for refresh tokens, regardless of use.
|
|
129
|
+
*/
|
|
34
130
|
readonly absoluteLifetime?: string;
|
|
131
|
+
/**
|
|
132
|
+
* Whether Dex should skip refresh-token rotation.
|
|
133
|
+
*/
|
|
35
134
|
readonly disableRotation?: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Grace period during which a rotated refresh token may be reused.
|
|
137
|
+
*/
|
|
36
138
|
readonly reuseInterval?: string;
|
|
37
139
|
};
|
|
38
140
|
};
|
|
141
|
+
/**
|
|
142
|
+
* Static user rendered into the managed Dex password database.
|
|
143
|
+
*/
|
|
39
144
|
export type VisageDexUser = {
|
|
145
|
+
/**
|
|
146
|
+
* Email address used as the Dex login identifier.
|
|
147
|
+
*/
|
|
40
148
|
readonly email: string;
|
|
149
|
+
/**
|
|
150
|
+
* Plain-text development password. Visage hashes this before rendering the
|
|
151
|
+
* Dex config.
|
|
152
|
+
*/
|
|
41
153
|
readonly password: string;
|
|
154
|
+
/**
|
|
155
|
+
* Display username. Defaults to the portion of {@link VisageDexUser.email}
|
|
156
|
+
* before `@`.
|
|
157
|
+
*/
|
|
42
158
|
readonly username?: string;
|
|
159
|
+
/**
|
|
160
|
+
* Stable Dex user ID. Defaults to {@link VisageDexUser.email}.
|
|
161
|
+
*/
|
|
43
162
|
readonly userID?: string;
|
|
44
163
|
};
|
|
164
|
+
/**
|
|
165
|
+
* External OpenID Connect identity provider options.
|
|
166
|
+
*/
|
|
45
167
|
export type VisageIdpOptions = {
|
|
168
|
+
/**
|
|
169
|
+
* Selects the external IdP flow.
|
|
170
|
+
*/
|
|
46
171
|
readonly kind: 'external';
|
|
172
|
+
/**
|
|
173
|
+
* Name of the configured upstream that serves the external IdP.
|
|
174
|
+
*/
|
|
47
175
|
readonly upstream: string;
|
|
176
|
+
/**
|
|
177
|
+
* Public path where the external IdP is exposed through Visage.
|
|
178
|
+
*
|
|
179
|
+
* @defaultValue `'/dex'`
|
|
180
|
+
*/
|
|
48
181
|
readonly path?: string;
|
|
182
|
+
/**
|
|
183
|
+
* OIDC issuer URL. Defaults to the Visage origin plus
|
|
184
|
+
* {@link VisageIdpOptions.path}.
|
|
185
|
+
*/
|
|
49
186
|
readonly issuer?: string;
|
|
187
|
+
/**
|
|
188
|
+
* Browser-facing authorization endpoint URL. Defaults to the Visage origin
|
|
189
|
+
* plus {@link VisageIdpOptions.path} and `/auth`.
|
|
190
|
+
*/
|
|
50
191
|
readonly authorizationEndpoint?: string;
|
|
192
|
+
/**
|
|
193
|
+
* Token endpoint URL used by OAuth2 Proxy.
|
|
194
|
+
*
|
|
195
|
+
* Defaults to the configured IdP upstream origin plus
|
|
196
|
+
* {@link VisageIdpOptions.path} and `/token`.
|
|
197
|
+
*/
|
|
51
198
|
readonly tokenEndpoint?: string;
|
|
199
|
+
/**
|
|
200
|
+
* JWKS endpoint URL used by OAuth2 Proxy.
|
|
201
|
+
*
|
|
202
|
+
* Defaults to the configured IdP upstream origin plus
|
|
203
|
+
* {@link VisageIdpOptions.path} and `/keys`.
|
|
204
|
+
*/
|
|
52
205
|
readonly jwksEndpoint?: string;
|
|
53
206
|
};
|
|
207
|
+
/**
|
|
208
|
+
* OAuth2 client configuration used by OAuth2 Proxy and, for managed Dex, the
|
|
209
|
+
* rendered Dex static client.
|
|
210
|
+
*/
|
|
54
211
|
export type VisageOAuth2Client = {
|
|
212
|
+
/**
|
|
213
|
+
* OAuth2 client identifier.
|
|
214
|
+
*
|
|
215
|
+
* @defaultValue `'visage'`
|
|
216
|
+
*/
|
|
55
217
|
readonly clientId?: string;
|
|
56
218
|
/**
|
|
57
|
-
*
|
|
219
|
+
* OAuth2 client secret.
|
|
220
|
+
*
|
|
221
|
+
* Set to `null` for a public OAuth2 client. OAuth2 Proxy uses PKCE, and
|
|
222
|
+
* managed Dex renders a public static client.
|
|
223
|
+
*
|
|
224
|
+
* @defaultValue `'visage-secret'`
|
|
58
225
|
*/
|
|
59
226
|
readonly clientSecret?: string | null;
|
|
227
|
+
/**
|
|
228
|
+
* OIDC scopes requested by OAuth2 Proxy.
|
|
229
|
+
*
|
|
230
|
+
* @defaultValue `['openid', 'email', 'profile', 'offline_access']`
|
|
231
|
+
*/
|
|
60
232
|
readonly scopes?: readonly string[];
|
|
61
233
|
};
|
|
234
|
+
/**
|
|
235
|
+
* Subset of a Docker Compose service definition managed by Visage.
|
|
236
|
+
*/
|
|
62
237
|
export type VisageService = {
|
|
238
|
+
/**
|
|
239
|
+
* Container image reference used for the service.
|
|
240
|
+
*/
|
|
63
241
|
readonly image: string;
|
|
242
|
+
/**
|
|
243
|
+
* Optional command override rendered into the Compose service.
|
|
244
|
+
*/
|
|
64
245
|
readonly command?: readonly string[];
|
|
246
|
+
/**
|
|
247
|
+
* Compose service dependencies that should start before this service.
|
|
248
|
+
*/
|
|
65
249
|
readonly depends_on?: readonly string[];
|
|
250
|
+
/**
|
|
251
|
+
* Additional host-to-IP mappings rendered into the Compose service.
|
|
252
|
+
*/
|
|
66
253
|
readonly extra_hosts?: readonly string[];
|
|
67
254
|
};
|
|
255
|
+
/**
|
|
256
|
+
* Named proxy target that NGINX routes to for one or more locations.
|
|
257
|
+
*/
|
|
68
258
|
export type VisageUpstream = {
|
|
259
|
+
/**
|
|
260
|
+
* Hostname or Compose service name NGINX should proxy to.
|
|
261
|
+
*/
|
|
69
262
|
readonly host: string;
|
|
263
|
+
/**
|
|
264
|
+
* Port NGINX should proxy to on {@link VisageUpstream.host}.
|
|
265
|
+
*/
|
|
70
266
|
readonly port: number;
|
|
267
|
+
/**
|
|
268
|
+
* Path-location policies for this upstream, keyed by NGINX location path.
|
|
269
|
+
*/
|
|
71
270
|
readonly locations?: {
|
|
72
271
|
readonly [path: string]: VisageProxyPolicy;
|
|
73
272
|
};
|
|
74
273
|
};
|
|
274
|
+
/**
|
|
275
|
+
* Per-location NGINX authentication and header forwarding policy.
|
|
276
|
+
*/
|
|
75
277
|
export type VisageProxyPolicy = {
|
|
278
|
+
/**
|
|
279
|
+
* OAuth2 authentication behavior for this location.
|
|
280
|
+
*/
|
|
76
281
|
readonly auth?: {
|
|
282
|
+
/**
|
|
283
|
+
* Whether requests to this location require OAuth2 authentication.
|
|
284
|
+
*
|
|
285
|
+
* @defaultValue `true`
|
|
286
|
+
*/
|
|
77
287
|
readonly enabled?: boolean;
|
|
288
|
+
/**
|
|
289
|
+
* Whether unauthenticated browser requests should redirect to sign-in.
|
|
290
|
+
*
|
|
291
|
+
* @defaultValue `false`
|
|
292
|
+
*/
|
|
78
293
|
readonly redirect?: boolean;
|
|
294
|
+
/**
|
|
295
|
+
* Whether the authenticated access token should be forwarded upstream as an
|
|
296
|
+
* `Authorization: Bearer ...` header.
|
|
297
|
+
*
|
|
298
|
+
* @defaultValue `true`
|
|
299
|
+
*/
|
|
79
300
|
readonly forward?: boolean;
|
|
80
301
|
};
|
|
302
|
+
/**
|
|
303
|
+
* Request headers to set when proxying to the upstream. Values may include
|
|
304
|
+
* NGINX variables. These are merged with Visage's default proxy headers:
|
|
305
|
+
* `Cookie`, `Host`, `X-Real-IP`, `X-Forwarded-For`, and
|
|
306
|
+
* `X-Forwarded-Proto`.
|
|
307
|
+
*/
|
|
81
308
|
readonly headers?: {
|
|
82
309
|
readonly [key: string]: string;
|
|
83
310
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blakearoberts/visage",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"version": "0.0.1-rc.3",
|
|
4
4
|
"description": "Vite plugin for local development with HMR and OIDC session cookie lifecycle semantics.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Blake Roberts",
|
|
@@ -46,12 +46,15 @@
|
|
|
46
46
|
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
47
47
|
"test": "npm run test:unit",
|
|
48
48
|
"test:e2e": "playwright test test/e2e",
|
|
49
|
-
"test:unit": "node --experimental-strip-types --test test/unit/*.test.ts"
|
|
49
|
+
"test:unit": "node --experimental-strip-types --test test/unit/*.test.ts",
|
|
50
|
+
"format": "prettier --write \"{docs,examples,src,test}/**/*.{ts,tsx,js,jsx,json,css,html,md}\" \"*.{json,md}\"",
|
|
51
|
+
"format:check": "prettier --check \"{docs,examples,src,test}/**/*.{ts,tsx,js,jsx,json,css,html,md}\" \"*.{json,md}\""
|
|
50
52
|
},
|
|
51
53
|
"devDependencies": {
|
|
52
54
|
"@playwright/test": "^1.59.1",
|
|
53
55
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
54
56
|
"@types/node": "^25.6.2",
|
|
57
|
+
"prettier": "^3.8.3",
|
|
55
58
|
"rollup": "^4.60.3",
|
|
56
59
|
"tslib": "^2.8.1",
|
|
57
60
|
"typescript": "^5.9.3",
|