@o3co/create-auth-provider 0.17.0-rc.3 → 0.17.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/templates/standalone/README.ja.md +3 -1
- package/templates/standalone/README.md +21 -1
- package/templates/standalone/package.json +6 -6
- package/templates/standalone/src/__tests__/documented-env-overrides.test.mts +3 -2
- package/templates/standalone/src/__tests__/logout-session-cookie.test.mts +113 -0
- package/templates/standalone/src/__tests__/repositories-logger.test.mts +119 -0
- package/templates/standalone/src/modules.mts +9 -3
- package/templates/standalone/tests/package-lock.json +95 -95
- package/templates/standalone/tests/package.json +1 -1
- package/templates/versions.json +18 -18
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@o3co/create-auth-provider",
|
|
3
|
-
"version": "0.17.0-rc.
|
|
3
|
+
"version": "0.17.0-rc.4",
|
|
4
4
|
"description": "Scaffold a new o3co/auth.provider project from one of its templates",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@o3co/ts.hocon": "^1.13.0",
|
|
32
|
-
"@types/node": "^26.6.
|
|
32
|
+
"@types/node": "^26.6.4",
|
|
33
33
|
"typescript": "^6.0.3",
|
|
34
|
-
"vitest": "^5.0.
|
|
34
|
+
"vitest": "^5.0.3"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
37
|
"build": "tsc",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @o3co/auth-provider-standalone
|
|
2
2
|
|
|
3
|
-
最終更新: 2026-10-
|
|
3
|
+
最終更新: 2026-10-07
|
|
4
4
|
|
|
5
5
|
auth.provider のデプロイ可能なサーバーテンプレート。これは composition root であり、設定を読み込み、モジュールをロードし、Express サーバーを起動する。`@o3co/create-auth-provider` で生成される。
|
|
6
6
|
|
|
@@ -465,6 +465,8 @@ core.federations {
|
|
|
465
465
|
| `REPOSITORIES_USER_HTTP_TIMEOUT` | `5000` | HTTP リクエストタイムアウト(ミリ秒)。`2147483647` 以下の正の整数 |
|
|
466
466
|
| `REPOSITORIES_USER_HTTP_MAX_RESPONSE_BYTES` | `1048576` | 上流レスポンスボディの受け入れ上限(バイト) |
|
|
467
467
|
|
|
468
|
+
**`yaml` のユーザーファイル**はユーザー名をキーとし、各エントリは `password` と、任意で `id`(無ければユーザー名)とクレームを持つ。パスワードは平文か bcrypt ハッシュ: `$2` で始まるものはハッシュとして読み、コスト 04 から 15 の整った `$2a$`・`$2b$`・`$2y$` ハッシュ(`$2y$` は `$2b$` として比較する)でなければならない(比較 1 回は、コスト 15 で約 2 秒、10 で約 60 ms、Node の libuv スレッドプールの 1 スレッドを使う)。`$2b$` と `$2y$` はパスワードの先頭 72 バイト(UTF-8 の日本語で約 24 文字)しか比較しない。`$2a$` は 254 バイトまでのパスワードでは同じ 72 バイトを読むが、それより長いものは長さを 256 で割った余りとして数えるため、255 バイト以上のパスワードは別のパスワードとして比較されることがある。新しいエントリには `$2b$` を使う。平文のエントリは全長で比較する。bcrypt エントリはすべて一つのコストを使う。これらの規則に反するパスワード、複数のコストにまたがる bcrypt エントリ(コストを名指しする)、空の `id` やユーザー名、同じ id を持つ二人のユーザー、エントリ内の `username` キーは、フィールドと、ユーザーかコストを名指しし、値は出さずに起動時に拒否される。`yaml` バックエンドで起動するたびに、環境を問わず `user_repository_in_memory` をテンプレートのロガーに warn で記録する(`LOGGING_LEVEL` が効く): ユーザーファイルは開発とテスト用である。[core パッケージの README](../../packages/core/README.ja.md#yaml-からクライアントとユーザーを読み込む) を参照。
|
|
469
|
+
|
|
468
470
|
ユーザー認証 URL は 2 つとも上流ストアへ**平文のユーザー資格情報**を運ぶため、いずれも絶対 `https://` URL でなければならない。`http://` は loopback ホスト(`localhost`、`127.0.0.0/8` 内のアドレス、`[::1]`)に限って許可され、ローカル開発で証明書を用意せずに済むようにしている。プライベートレンジのアドレス(`http://10.0.0.5/…`)やコンテナネットワークのサービス名(`http://user-service/…`)には依然として `https://` が必要 — これらはデプロイが端から端まで制御していないネットワークを越えるため。URL のどちらか、タイムアウト、レスポンス上限のいずれかが使えない値なら、最初のログイン時ではなく起動時に失敗する。
|
|
469
471
|
|
|
470
472
|
各 URL には、リダイレクトするエンドポイントではなく応答するエンドポイントを設定する: どのリクエストも `3xx` を追わないので、リダイレクトする URL ではすべての呼び出しが失敗する — [Store が自分で守るべきこと](../../packages/foundation/README.ja.md#store-が自分で守るべきこと) を参照。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @o3co/auth-provider-standalone
|
|
2
2
|
|
|
3
|
-
Last updated: 2026-10-
|
|
3
|
+
Last updated: 2026-10-07
|
|
4
4
|
|
|
5
5
|
Deployable server template for auth.provider. This is the composition root — it reads config, loads modules, and starts the Express server. Generated by `@o3co/create-auth-provider`.
|
|
6
6
|
|
|
@@ -751,6 +751,26 @@ and the production compose file mounts it (see [Docker](#docker)).
|
|
|
751
751
|
| `REPOSITORIES_USER_HTTP_TIMEOUT` | `5000` | HTTP request timeout in milliseconds. Positive integer ≤ `2147483647` |
|
|
752
752
|
| `REPOSITORIES_USER_HTTP_MAX_RESPONSE_BYTES` | `1048576` | Largest upstream response body accepted, in bytes |
|
|
753
753
|
|
|
754
|
+
**The `yaml` users file** is keyed by username; each entry holds `password`,
|
|
755
|
+
and optionally `id` (the username when absent) and claims. A password is plain
|
|
756
|
+
text, or a bcrypt hash: anything starting with `$2` is read as one, and must be
|
|
757
|
+
a well-formed `$2a$`, `$2b$` or `$2y$` hash (the last compared as `$2b$`) at a
|
|
758
|
+
cost from 04 to 15 (a compare at 15 takes about 2 s, at 10 about 60 ms, on a
|
|
759
|
+
thread of Node's libuv pool). `$2b$` and `$2y$` compare only the first 72
|
|
760
|
+
bytes of a password (about 24 Japanese characters in UTF-8). `$2a$` reads the
|
|
761
|
+
same 72 bytes of a password up to 254 bytes long, but counts a longer one's
|
|
762
|
+
length modulo 256, so a password of 255 bytes or more can compare as a
|
|
763
|
+
different one; use `$2b$` for new entries. A plain-text entry is compared over
|
|
764
|
+
its full length.
|
|
765
|
+
Every bcrypt entry uses one cost. Boot refuses a password that breaks these
|
|
766
|
+
rules, bcrypt entries at more than one cost (naming the costs), an empty `id`
|
|
767
|
+
or username, two users with the same id, and a `username` key inside an entry,
|
|
768
|
+
naming the field and the user or the costs, never a value. Each start with the `yaml` backend logs
|
|
769
|
+
`user_repository_in_memory` at warn on the template's logger (`LOGGING_LEVEL`
|
|
770
|
+
applies), whatever the environment: the users file is meant for development
|
|
771
|
+
and tests. See
|
|
772
|
+
[the core package's README](../../packages/core/README.md#loading-clients-and-users-from-yaml).
|
|
773
|
+
|
|
754
774
|
Both user-authentication URLs carry **plaintext user credentials** to the
|
|
755
775
|
upstream store, so both must be absolute `https://` URLs. `http://` is accepted
|
|
756
776
|
only for a loopback host — `localhost`, an address in `127.0.0.0/8`, or `[::1]`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@o3co/auth-provider-standalone",
|
|
3
|
-
"version": "0.17.0-rc.
|
|
3
|
+
"version": "0.17.0-rc.4",
|
|
4
4
|
"private": true,
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"engines": {
|
|
@@ -37,19 +37,19 @@
|
|
|
37
37
|
"express-session": "^1.19.0",
|
|
38
38
|
"helmet": "^8.3.0",
|
|
39
39
|
"ioredis": "^6.0.0",
|
|
40
|
-
"pino": "^10.
|
|
40
|
+
"pino": "^10.4.0",
|
|
41
41
|
"prom-client": "^15.1.3",
|
|
42
|
-
"redis": "^6.
|
|
42
|
+
"redis": "^6.3.0",
|
|
43
43
|
"zod": "^4.6.5"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/express": "^5.0.6",
|
|
47
47
|
"@types/express-session": "^1",
|
|
48
|
-
"@types/node": "^26.6.
|
|
48
|
+
"@types/node": "^26.6.4",
|
|
49
49
|
"@types/supertest": "^7.2.1",
|
|
50
|
-
"supertest": "^7.3.
|
|
50
|
+
"supertest": "^7.3.1",
|
|
51
51
|
"tsx": "^4.23.15",
|
|
52
52
|
"typescript": "^6.0.3",
|
|
53
|
-
"vitest": "^5.0.
|
|
53
|
+
"vitest": "^5.0.3"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -139,7 +139,6 @@ const DOCUMENTED_ENV: Readonly<Record<string, string>> = {
|
|
|
139
139
|
OAUTH_SESSION_ENABLED: "false",
|
|
140
140
|
OAUTH_AUTHORIZATION_GRANTS_AUTHORIZATION_CODE_ENABLED: "true",
|
|
141
141
|
OAUTH_AUTHORIZATION_GRANTS_REFRESH_TOKEN_ENABLED: "true",
|
|
142
|
-
OAUTH_AUTHORIZATION_GRANTS_REFRESH_TOKEN_UNKNOWN_FAMILY_POLICY: "reject",
|
|
143
142
|
OAUTH_AUTHORIZATION_GRANTS_CLIENT_CREDENTIALS_ENABLED: "true",
|
|
144
143
|
OAUTH_AUTHORIZATION_GRANTS_JWT_BEARER_ENABLED: "false",
|
|
145
144
|
|
|
@@ -341,7 +340,9 @@ const DELIBERATELY_UNSET: Readonly<Record<string, string>> = {
|
|
|
341
340
|
OAUTH_GRANTS_REFRESH_TOKEN_ENABLED:
|
|
342
341
|
"renamed OAUTH_AUTHORIZATION_GRANTS_REFRESH_TOKEN_ENABLED, and only captured — set at any value, beside its new name or not, it fails boot",
|
|
343
342
|
OAUTH_REFRESH_TOKEN_UNKNOWN_FAMILY_POLICY:
|
|
344
|
-
"
|
|
343
|
+
"the variable of a removed key, and only captured — any value fails boot",
|
|
344
|
+
OAUTH_AUTHORIZATION_GRANTS_REFRESH_TOKEN_UNKNOWN_FAMILY_POLICY:
|
|
345
|
+
"the variable of a removed key, and only captured — any value fails boot",
|
|
345
346
|
OAUTH_GRANTS_CLIENT_CREDENTIALS_ENABLED:
|
|
346
347
|
"renamed OAUTH_AUTHORIZATION_GRANTS_CLIENT_CREDENTIALS_ENABLED, and only captured — set at any value, beside its new name or not, it fails boot",
|
|
347
348
|
OAUTH_GRANTS_JWT_BEARER_ENABLED:
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 1o1 Co. Ltd.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The template's two logout endpoints and the session cookie: the session
|
|
19
|
+
* store module expires the cookie of a session destroyed during the request,
|
|
20
|
+
* whichever route destroyed it, so `POST /oauth/logout` — whose package knows
|
|
21
|
+
* no cookie name — and `POST /session/logout` both answer with the cookie
|
|
22
|
+
* expired, with the attributes the login set it with.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import type { SessionCookiePolicy } from "@o3co/auth-provider-core";
|
|
26
|
+
import request from "supertest";
|
|
27
|
+
import { describe, expect, it } from "vitest";
|
|
28
|
+
import { authorize, codeFrom, compose, login, redeem } from "./all-modules-composition.fixture.mjs";
|
|
29
|
+
|
|
30
|
+
/** The `Set-Cookie` lines among `lines` for the cookie `name`. */
|
|
31
|
+
const linesNamed = (lines: readonly string[], name: string): string[] =>
|
|
32
|
+
lines.filter((line) => line.startsWith(`${name}=`));
|
|
33
|
+
|
|
34
|
+
/** A response's `Set-Cookie` lines. */
|
|
35
|
+
const setCookies = (res: request.Response): string[] =>
|
|
36
|
+
([] as string[]).concat(res.headers["set-cookie"] ?? []);
|
|
37
|
+
|
|
38
|
+
/** A `Set-Cookie` line's attributes, lower-cased, with its value and expiry left out. */
|
|
39
|
+
const attributesOf = (line: string): string[] =>
|
|
40
|
+
line
|
|
41
|
+
.split(";")
|
|
42
|
+
.slice(1)
|
|
43
|
+
.map((part) => part.trim().toLowerCase())
|
|
44
|
+
.filter((part) => !part.startsWith("expires=") && !part.startsWith("max-age="))
|
|
45
|
+
.sort();
|
|
46
|
+
|
|
47
|
+
/** The CSRF token a login reissued, read off its double-submit cookie. */
|
|
48
|
+
const csrfTokenOf = (cookies: readonly string[]): string => {
|
|
49
|
+
const cookie = cookies.find((c) => /^[^=]*\.csrf=/.test(c));
|
|
50
|
+
if (cookie === undefined) throw new Error("the login reissued no CSRF cookie");
|
|
51
|
+
return decodeURIComponent(cookie.slice(cookie.indexOf("=") + 1).split(";")[0] ?? "");
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The one `Set-Cookie` line of `res` for the session cookie, checked to
|
|
56
|
+
* expire it with the attributes of `setLine`, the line the login set it with.
|
|
57
|
+
*/
|
|
58
|
+
function expectExpired(res: request.Response, name: string, setLine: string): void {
|
|
59
|
+
const lines = linesNamed(setCookies(res), name);
|
|
60
|
+
expect(lines).toHaveLength(1);
|
|
61
|
+
const [line] = lines as [string];
|
|
62
|
+
expect(line.startsWith(`${name}=;`)).toBe(true);
|
|
63
|
+
expect(line).toContain("Expires=Thu, 01 Jan 1970 00:00:00 GMT");
|
|
64
|
+
expect(attributesOf(line)).toEqual(attributesOf(setLine));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
describe("the session cookie at the template's logout endpoints", () => {
|
|
68
|
+
it("POST /oauth/logout expires the session cookie, with the attributes the login set it with", async () => {
|
|
69
|
+
const { app, handle } = await compose();
|
|
70
|
+
try {
|
|
71
|
+
const policy = handle.components.sessionCookiePolicy as SessionCookiePolicy;
|
|
72
|
+
const { res: signedIn, cookies } = await login(app);
|
|
73
|
+
expect(signedIn.status).toBe(200);
|
|
74
|
+
const [setLine] = linesNamed(cookies, policy.name);
|
|
75
|
+
expect(setLine).toBeDefined();
|
|
76
|
+
const tokens = await redeem(app, codeFrom(await authorize(app, cookies)));
|
|
77
|
+
expect(tokens.status).toBe(200);
|
|
78
|
+
|
|
79
|
+
const res = await request(app)
|
|
80
|
+
.post("/oauth/logout")
|
|
81
|
+
.set("Cookie", cookies)
|
|
82
|
+
.type("form")
|
|
83
|
+
.send({ id_token_hint: tokens.body.id_token as string });
|
|
84
|
+
|
|
85
|
+
expect(res.status).toBe(200);
|
|
86
|
+
expect(res.body).toEqual({ logged_out: true });
|
|
87
|
+
expectExpired(res, policy.name, setLine as string);
|
|
88
|
+
} finally {
|
|
89
|
+
await handle.dispose();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it("POST /session/logout expires the session cookie, with the attributes the login set it with", async () => {
|
|
94
|
+
const { app, handle } = await compose();
|
|
95
|
+
try {
|
|
96
|
+
const policy = handle.components.sessionCookiePolicy as SessionCookiePolicy;
|
|
97
|
+
const { res: signedIn, cookies } = await login(app);
|
|
98
|
+
expect(signedIn.status).toBe(200);
|
|
99
|
+
const [setLine] = linesNamed(cookies, policy.name);
|
|
100
|
+
expect(setLine).toBeDefined();
|
|
101
|
+
|
|
102
|
+
const res = await request(app)
|
|
103
|
+
.post("/session/logout")
|
|
104
|
+
.set("Cookie", cookies)
|
|
105
|
+
.set("x-csrf-token", csrfTokenOf(cookies));
|
|
106
|
+
|
|
107
|
+
expect(res.status).toBe(200);
|
|
108
|
+
expectExpired(res, policy.name, setLine as string);
|
|
109
|
+
} finally {
|
|
110
|
+
await handle.dispose();
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 1o1 Co. Ltd.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The repositories module builds its user repository with the composition's
|
|
19
|
+
* logger: the yaml user builder's `user_repository_in_memory` line reaches the
|
|
20
|
+
* `logger` bootstrap component (the template's pino logger, at its level),
|
|
21
|
+
* not the console.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import fs from "node:fs";
|
|
25
|
+
import os from "node:os";
|
|
26
|
+
import path from "node:path";
|
|
27
|
+
import {
|
|
28
|
+
type BootstrapMap,
|
|
29
|
+
createApp,
|
|
30
|
+
defineModule,
|
|
31
|
+
type Logger,
|
|
32
|
+
type UserRepository,
|
|
33
|
+
} from "@o3co/auth-provider-core";
|
|
34
|
+
import {
|
|
35
|
+
CORE_RELOCATIONS,
|
|
36
|
+
makeValidCoreConfig,
|
|
37
|
+
renamedVariableCaptures,
|
|
38
|
+
} from "@o3co/auth-provider-core/testing";
|
|
39
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
40
|
+
import { repositoriesModuleFor } from "../modules.mjs";
|
|
41
|
+
|
|
42
|
+
const spyLogger = () => {
|
|
43
|
+
const logger = {
|
|
44
|
+
trace: vi.fn(),
|
|
45
|
+
debug: vi.fn(),
|
|
46
|
+
info: vi.fn(),
|
|
47
|
+
warn: vi.fn(),
|
|
48
|
+
error: vi.fn(),
|
|
49
|
+
fatal: vi.fn(),
|
|
50
|
+
child: vi.fn(),
|
|
51
|
+
};
|
|
52
|
+
logger.child.mockReturnValue(logger);
|
|
53
|
+
return logger;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
describe("the repositories module's user repository", () => {
|
|
57
|
+
let dir: string;
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), "repositories-logger-"));
|
|
60
|
+
});
|
|
61
|
+
afterEach(() => {
|
|
62
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
63
|
+
vi.restoreAllMocks();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("warns user_repository_in_memory on the composition's logger, built through createApp, and not on the console", async () => {
|
|
67
|
+
const usersPath = path.join(dir, "users.yaml");
|
|
68
|
+
fs.writeFileSync(usersPath, 'alice:\n password: "plainpass"\n');
|
|
69
|
+
const clientsPath = path.join(dir, "clients.yaml");
|
|
70
|
+
fs.writeFileSync(clientsPath, "");
|
|
71
|
+
const consoleWarn = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
72
|
+
const logger = spyLogger();
|
|
73
|
+
let built: UserRepository | undefined;
|
|
74
|
+
const reader = defineModule({
|
|
75
|
+
name: "test:user-repository-reader",
|
|
76
|
+
requires: ["userRepository"] as const,
|
|
77
|
+
provides: {
|
|
78
|
+
userRepositoryRead: ({ userRepository }: { userRepository: UserRepository }) => {
|
|
79
|
+
built = userRepository;
|
|
80
|
+
return true;
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
lifecycle: { userRepositoryRead: { eager: true } },
|
|
84
|
+
} as never);
|
|
85
|
+
|
|
86
|
+
const repositories = repositoriesModuleFor({ client: "yaml", user: "yaml" });
|
|
87
|
+
const handle = await createApp({
|
|
88
|
+
modules: [repositories, reader],
|
|
89
|
+
bootstrapComponents: {
|
|
90
|
+
config: {
|
|
91
|
+
...makeValidCoreConfig(),
|
|
92
|
+
repositories: {
|
|
93
|
+
client: { yaml: { path: clientsPath } },
|
|
94
|
+
user: { yaml: { path: usersPath }, http: {} },
|
|
95
|
+
},
|
|
96
|
+
// What a resolution with none of the renamed variables set captures.
|
|
97
|
+
"renamed-variables": renamedVariableCaptures({
|
|
98
|
+
modules: [repositories],
|
|
99
|
+
core: CORE_RELOCATIONS,
|
|
100
|
+
env: {},
|
|
101
|
+
}),
|
|
102
|
+
},
|
|
103
|
+
pathResolver: (p: string) => p,
|
|
104
|
+
logger: logger as unknown as Logger,
|
|
105
|
+
} as unknown as BootstrapMap,
|
|
106
|
+
});
|
|
107
|
+
try {
|
|
108
|
+
expect((await built?.authenticate("alice", "plainpass"))?.username).toBe("alice");
|
|
109
|
+
expect(
|
|
110
|
+
logger.warn.mock.calls.filter(([, event]) => event === "user_repository_in_memory"),
|
|
111
|
+
).toEqual([[{ store: "userRepository", adapter: "yaml" }, "user_repository_in_memory"]]);
|
|
112
|
+
expect(
|
|
113
|
+
consoleWarn.mock.calls.filter((args) => args.includes("user_repository_in_memory")),
|
|
114
|
+
).toEqual([]);
|
|
115
|
+
} finally {
|
|
116
|
+
await handle.dispose();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
@@ -240,7 +240,10 @@ export function repositoriesModuleFor(selection: RepositorySelection): Module {
|
|
|
240
240
|
// Forwarded into the repository factories so client/user adapters can
|
|
241
241
|
// register disposal callbacks (file-watch closers, say). Without it, a
|
|
242
242
|
// builder's `ctx.lifecycle?.register` is a no-op and those resources leak.
|
|
243
|
-
|
|
243
|
+
// The logger is the composition's, so what a builder logs (the yaml user
|
|
244
|
+
// repository's `user_repository_in_memory`) goes where the template's
|
|
245
|
+
// logging goes, at its level, rather than to the console.
|
|
246
|
+
optional: ["lifecycleRegistrar", "logger"] as const,
|
|
244
247
|
provides: {
|
|
245
248
|
clientRepository: async ({ section, lifecycleRegistrar }) => {
|
|
246
249
|
const { clientFactory } = createRepositoryFactories({ lifecycle: lifecycleRegistrar });
|
|
@@ -250,8 +253,11 @@ export function repositoriesModuleFor(selection: RepositorySelection): Module {
|
|
|
250
253
|
path: path.resolve(process.cwd(), file.path),
|
|
251
254
|
});
|
|
252
255
|
},
|
|
253
|
-
userRepository: async ({ section, lifecycleRegistrar }) => {
|
|
254
|
-
const { userFactory } = createRepositoryFactories({
|
|
256
|
+
userRepository: async ({ section, lifecycleRegistrar, logger }) => {
|
|
257
|
+
const { userFactory } = createRepositoryFactories({
|
|
258
|
+
lifecycle: lifecycleRegistrar,
|
|
259
|
+
logger,
|
|
260
|
+
});
|
|
255
261
|
registerBuiltinAdapters({ userFactory });
|
|
256
262
|
return userFactory.create(
|
|
257
263
|
flattenAdapterConfig({
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"jsonwebtoken": "^9.0.3"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"vitest": "^5.0.
|
|
15
|
+
"vitest": "^5.0.3"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"node_modules/@jridgewell/resolve-uri": {
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"node_modules/@oxc-project/types": {
|
|
47
|
-
"version": "0.
|
|
48
|
-
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.
|
|
49
|
-
"integrity": "sha512-
|
|
47
|
+
"version": "0.152.0",
|
|
48
|
+
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.152.0.tgz",
|
|
49
|
+
"integrity": "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==",
|
|
50
50
|
"dev": true,
|
|
51
51
|
"license": "MIT",
|
|
52
52
|
"peer": true,
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
}
|
|
56
56
|
},
|
|
57
57
|
"node_modules/@rolldown/binding-android-arm-eabi": {
|
|
58
|
-
"version": "1.2.
|
|
59
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.
|
|
60
|
-
"integrity": "sha512-
|
|
58
|
+
"version": "1.2.12",
|
|
59
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.12.tgz",
|
|
60
|
+
"integrity": "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==",
|
|
61
61
|
"cpu": [
|
|
62
62
|
"arm"
|
|
63
63
|
],
|
|
@@ -73,9 +73,9 @@
|
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
"node_modules/@rolldown/binding-android-arm64": {
|
|
76
|
-
"version": "1.2.
|
|
77
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.
|
|
78
|
-
"integrity": "sha512-
|
|
76
|
+
"version": "1.2.12",
|
|
77
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.12.tgz",
|
|
78
|
+
"integrity": "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==",
|
|
79
79
|
"cpu": [
|
|
80
80
|
"arm64"
|
|
81
81
|
],
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
93
|
"node_modules/@rolldown/binding-darwin-arm64": {
|
|
94
|
-
"version": "1.2.
|
|
95
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.
|
|
96
|
-
"integrity": "sha512-
|
|
94
|
+
"version": "1.2.12",
|
|
95
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.12.tgz",
|
|
96
|
+
"integrity": "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==",
|
|
97
97
|
"cpu": [
|
|
98
98
|
"arm64"
|
|
99
99
|
],
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
}
|
|
110
110
|
},
|
|
111
111
|
"node_modules/@rolldown/binding-darwin-x64": {
|
|
112
|
-
"version": "1.2.
|
|
113
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.
|
|
114
|
-
"integrity": "sha512-
|
|
112
|
+
"version": "1.2.12",
|
|
113
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.12.tgz",
|
|
114
|
+
"integrity": "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==",
|
|
115
115
|
"cpu": [
|
|
116
116
|
"x64"
|
|
117
117
|
],
|
|
@@ -127,9 +127,9 @@
|
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
129
|
"node_modules/@rolldown/binding-freebsd-x64": {
|
|
130
|
-
"version": "1.2.
|
|
131
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.
|
|
132
|
-
"integrity": "sha512-
|
|
130
|
+
"version": "1.2.12",
|
|
131
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.12.tgz",
|
|
132
|
+
"integrity": "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==",
|
|
133
133
|
"cpu": [
|
|
134
134
|
"x64"
|
|
135
135
|
],
|
|
@@ -145,9 +145,9 @@
|
|
|
145
145
|
}
|
|
146
146
|
},
|
|
147
147
|
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
|
|
148
|
-
"version": "1.2.
|
|
149
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.
|
|
150
|
-
"integrity": "sha512
|
|
148
|
+
"version": "1.2.12",
|
|
149
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.12.tgz",
|
|
150
|
+
"integrity": "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==",
|
|
151
151
|
"cpu": [
|
|
152
152
|
"arm"
|
|
153
153
|
],
|
|
@@ -163,9 +163,9 @@
|
|
|
163
163
|
}
|
|
164
164
|
},
|
|
165
165
|
"node_modules/@rolldown/binding-linux-arm64-gnu": {
|
|
166
|
-
"version": "1.2.
|
|
167
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.
|
|
168
|
-
"integrity": "sha512-
|
|
166
|
+
"version": "1.2.12",
|
|
167
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.12.tgz",
|
|
168
|
+
"integrity": "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==",
|
|
169
169
|
"cpu": [
|
|
170
170
|
"arm64"
|
|
171
171
|
],
|
|
@@ -184,9 +184,9 @@
|
|
|
184
184
|
}
|
|
185
185
|
},
|
|
186
186
|
"node_modules/@rolldown/binding-linux-arm64-musl": {
|
|
187
|
-
"version": "1.2.
|
|
188
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.
|
|
189
|
-
"integrity": "sha512-
|
|
187
|
+
"version": "1.2.12",
|
|
188
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.12.tgz",
|
|
189
|
+
"integrity": "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==",
|
|
190
190
|
"cpu": [
|
|
191
191
|
"arm64"
|
|
192
192
|
],
|
|
@@ -205,9 +205,9 @@
|
|
|
205
205
|
}
|
|
206
206
|
},
|
|
207
207
|
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
|
|
208
|
-
"version": "1.2.
|
|
209
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.
|
|
210
|
-
"integrity": "sha512-
|
|
208
|
+
"version": "1.2.12",
|
|
209
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.12.tgz",
|
|
210
|
+
"integrity": "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==",
|
|
211
211
|
"cpu": [
|
|
212
212
|
"ppc64"
|
|
213
213
|
],
|
|
@@ -226,9 +226,9 @@
|
|
|
226
226
|
}
|
|
227
227
|
},
|
|
228
228
|
"node_modules/@rolldown/binding-linux-s390x-gnu": {
|
|
229
|
-
"version": "1.2.
|
|
230
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.
|
|
231
|
-
"integrity": "sha512-
|
|
229
|
+
"version": "1.2.12",
|
|
230
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.12.tgz",
|
|
231
|
+
"integrity": "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==",
|
|
232
232
|
"cpu": [
|
|
233
233
|
"s390x"
|
|
234
234
|
],
|
|
@@ -247,9 +247,9 @@
|
|
|
247
247
|
}
|
|
248
248
|
},
|
|
249
249
|
"node_modules/@rolldown/binding-linux-x64-gnu": {
|
|
250
|
-
"version": "1.2.
|
|
251
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.
|
|
252
|
-
"integrity": "sha512-
|
|
250
|
+
"version": "1.2.12",
|
|
251
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.12.tgz",
|
|
252
|
+
"integrity": "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==",
|
|
253
253
|
"cpu": [
|
|
254
254
|
"x64"
|
|
255
255
|
],
|
|
@@ -268,9 +268,9 @@
|
|
|
268
268
|
}
|
|
269
269
|
},
|
|
270
270
|
"node_modules/@rolldown/binding-linux-x64-musl": {
|
|
271
|
-
"version": "1.2.
|
|
272
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.
|
|
273
|
-
"integrity": "sha512-
|
|
271
|
+
"version": "1.2.12",
|
|
272
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.12.tgz",
|
|
273
|
+
"integrity": "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==",
|
|
274
274
|
"cpu": [
|
|
275
275
|
"x64"
|
|
276
276
|
],
|
|
@@ -289,9 +289,9 @@
|
|
|
289
289
|
}
|
|
290
290
|
},
|
|
291
291
|
"node_modules/@rolldown/binding-openharmony-arm64": {
|
|
292
|
-
"version": "1.2.
|
|
293
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.
|
|
294
|
-
"integrity": "sha512-
|
|
292
|
+
"version": "1.2.12",
|
|
293
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.12.tgz",
|
|
294
|
+
"integrity": "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==",
|
|
295
295
|
"cpu": [
|
|
296
296
|
"arm64"
|
|
297
297
|
],
|
|
@@ -307,9 +307,9 @@
|
|
|
307
307
|
}
|
|
308
308
|
},
|
|
309
309
|
"node_modules/@rolldown/binding-win32-arm64-msvc": {
|
|
310
|
-
"version": "1.2.
|
|
311
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.
|
|
312
|
-
"integrity": "sha512-
|
|
310
|
+
"version": "1.2.12",
|
|
311
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.12.tgz",
|
|
312
|
+
"integrity": "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==",
|
|
313
313
|
"cpu": [
|
|
314
314
|
"arm64"
|
|
315
315
|
],
|
|
@@ -325,9 +325,9 @@
|
|
|
325
325
|
}
|
|
326
326
|
},
|
|
327
327
|
"node_modules/@rolldown/binding-win32-x64-msvc": {
|
|
328
|
-
"version": "1.2.
|
|
329
|
-
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.
|
|
330
|
-
"integrity": "sha512
|
|
328
|
+
"version": "1.2.12",
|
|
329
|
+
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.12.tgz",
|
|
330
|
+
"integrity": "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==",
|
|
331
331
|
"cpu": [
|
|
332
332
|
"x64"
|
|
333
333
|
],
|
|
@@ -376,14 +376,14 @@
|
|
|
376
376
|
"license": "MIT"
|
|
377
377
|
},
|
|
378
378
|
"node_modules/@vitest/mocker": {
|
|
379
|
-
"version": "5.0.
|
|
380
|
-
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.
|
|
381
|
-
"integrity": "sha512-
|
|
379
|
+
"version": "5.0.3",
|
|
380
|
+
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.3.tgz",
|
|
381
|
+
"integrity": "sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==",
|
|
382
382
|
"dev": true,
|
|
383
383
|
"license": "MIT",
|
|
384
384
|
"dependencies": {
|
|
385
385
|
"@jridgewell/trace-mapping": "0.3.31",
|
|
386
|
-
"@vitest/spy": "5.0.
|
|
386
|
+
"@vitest/spy": "5.0.3",
|
|
387
387
|
"estree-walker": "^3.0.3",
|
|
388
388
|
"magic-string": "^1.2.3"
|
|
389
389
|
},
|
|
@@ -404,9 +404,9 @@
|
|
|
404
404
|
}
|
|
405
405
|
},
|
|
406
406
|
"node_modules/@vitest/spy": {
|
|
407
|
-
"version": "5.0.
|
|
408
|
-
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.
|
|
409
|
-
"integrity": "sha512-
|
|
407
|
+
"version": "5.0.3",
|
|
408
|
+
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.3.tgz",
|
|
409
|
+
"integrity": "sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==",
|
|
410
410
|
"dev": true,
|
|
411
411
|
"license": "MIT",
|
|
412
412
|
"funding": {
|
|
@@ -1317,14 +1317,14 @@
|
|
|
1317
1317
|
}
|
|
1318
1318
|
},
|
|
1319
1319
|
"node_modules/rolldown": {
|
|
1320
|
-
"version": "1.2.
|
|
1321
|
-
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.
|
|
1322
|
-
"integrity": "sha512-
|
|
1320
|
+
"version": "1.2.12",
|
|
1321
|
+
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz",
|
|
1322
|
+
"integrity": "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==",
|
|
1323
1323
|
"dev": true,
|
|
1324
1324
|
"license": "MIT",
|
|
1325
1325
|
"peer": true,
|
|
1326
1326
|
"dependencies": {
|
|
1327
|
-
"@oxc-project/types": "=0.
|
|
1327
|
+
"@oxc-project/types": "=0.152.0",
|
|
1328
1328
|
"@rolldown/pluginutils": "^1.0.0"
|
|
1329
1329
|
},
|
|
1330
1330
|
"bin": {
|
|
@@ -1334,21 +1334,21 @@
|
|
|
1334
1334
|
"node": "^20.19.0 || >=22.12.0"
|
|
1335
1335
|
},
|
|
1336
1336
|
"optionalDependencies": {
|
|
1337
|
-
"@rolldown/binding-android-arm-eabi": "1.2.
|
|
1338
|
-
"@rolldown/binding-android-arm64": "1.2.
|
|
1339
|
-
"@rolldown/binding-darwin-arm64": "1.2.
|
|
1340
|
-
"@rolldown/binding-darwin-x64": "1.2.
|
|
1341
|
-
"@rolldown/binding-freebsd-x64": "1.2.
|
|
1342
|
-
"@rolldown/binding-linux-arm-gnueabihf": "1.2.
|
|
1343
|
-
"@rolldown/binding-linux-arm64-gnu": "1.2.
|
|
1344
|
-
"@rolldown/binding-linux-arm64-musl": "1.2.
|
|
1345
|
-
"@rolldown/binding-linux-ppc64-gnu": "1.2.
|
|
1346
|
-
"@rolldown/binding-linux-s390x-gnu": "1.2.
|
|
1347
|
-
"@rolldown/binding-linux-x64-gnu": "1.2.
|
|
1348
|
-
"@rolldown/binding-linux-x64-musl": "1.2.
|
|
1349
|
-
"@rolldown/binding-openharmony-arm64": "1.2.
|
|
1350
|
-
"@rolldown/binding-win32-arm64-msvc": "1.2.
|
|
1351
|
-
"@rolldown/binding-win32-x64-msvc": "1.2.
|
|
1337
|
+
"@rolldown/binding-android-arm-eabi": "1.2.12",
|
|
1338
|
+
"@rolldown/binding-android-arm64": "1.2.12",
|
|
1339
|
+
"@rolldown/binding-darwin-arm64": "1.2.12",
|
|
1340
|
+
"@rolldown/binding-darwin-x64": "1.2.12",
|
|
1341
|
+
"@rolldown/binding-freebsd-x64": "1.2.12",
|
|
1342
|
+
"@rolldown/binding-linux-arm-gnueabihf": "1.2.12",
|
|
1343
|
+
"@rolldown/binding-linux-arm64-gnu": "1.2.12",
|
|
1344
|
+
"@rolldown/binding-linux-arm64-musl": "1.2.12",
|
|
1345
|
+
"@rolldown/binding-linux-ppc64-gnu": "1.2.12",
|
|
1346
|
+
"@rolldown/binding-linux-s390x-gnu": "1.2.12",
|
|
1347
|
+
"@rolldown/binding-linux-x64-gnu": "1.2.12",
|
|
1348
|
+
"@rolldown/binding-linux-x64-musl": "1.2.12",
|
|
1349
|
+
"@rolldown/binding-openharmony-arm64": "1.2.12",
|
|
1350
|
+
"@rolldown/binding-win32-arm64-msvc": "1.2.12",
|
|
1351
|
+
"@rolldown/binding-win32-x64-msvc": "1.2.12"
|
|
1352
1352
|
}
|
|
1353
1353
|
},
|
|
1354
1354
|
"node_modules/safe-buffer": {
|
|
@@ -1384,9 +1384,9 @@
|
|
|
1384
1384
|
}
|
|
1385
1385
|
},
|
|
1386
1386
|
"node_modules/source-map-js": {
|
|
1387
|
-
"version": "1.2.
|
|
1388
|
-
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.
|
|
1389
|
-
"integrity": "sha512-
|
|
1387
|
+
"version": "1.2.2",
|
|
1388
|
+
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
|
|
1389
|
+
"integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
|
|
1390
1390
|
"dev": true,
|
|
1391
1391
|
"license": "BSD-3-Clause",
|
|
1392
1392
|
"peer": true,
|
|
@@ -1439,9 +1439,9 @@
|
|
|
1439
1439
|
}
|
|
1440
1440
|
},
|
|
1441
1441
|
"node_modules/vite": {
|
|
1442
|
-
"version": "8.3.
|
|
1443
|
-
"resolved": "https://registry.npmjs.org/vite/-/vite-8.3.
|
|
1444
|
-
"integrity": "sha512
|
|
1442
|
+
"version": "8.3.2",
|
|
1443
|
+
"resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz",
|
|
1444
|
+
"integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==",
|
|
1445
1445
|
"dev": true,
|
|
1446
1446
|
"license": "MIT",
|
|
1447
1447
|
"peer": true,
|
|
@@ -1449,7 +1449,7 @@
|
|
|
1449
1449
|
"lightningcss": "^1.33.0",
|
|
1450
1450
|
"picomatch": "^4.0.7",
|
|
1451
1451
|
"postcss": "^8.5.28",
|
|
1452
|
-
"rolldown": "~1.2.
|
|
1452
|
+
"rolldown": "~1.2.11",
|
|
1453
1453
|
"tinyglobby": "^0.2.17"
|
|
1454
1454
|
},
|
|
1455
1455
|
"bin": {
|
|
@@ -1518,14 +1518,14 @@
|
|
|
1518
1518
|
}
|
|
1519
1519
|
},
|
|
1520
1520
|
"node_modules/vitest": {
|
|
1521
|
-
"version": "5.0.
|
|
1522
|
-
"resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.
|
|
1523
|
-
"integrity": "sha512-
|
|
1521
|
+
"version": "5.0.3",
|
|
1522
|
+
"resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.3.tgz",
|
|
1523
|
+
"integrity": "sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==",
|
|
1524
1524
|
"dev": true,
|
|
1525
1525
|
"license": "MIT",
|
|
1526
1526
|
"dependencies": {
|
|
1527
1527
|
"@types/chai": "^5.2.2",
|
|
1528
|
-
"@vitest/mocker": "5.0.
|
|
1528
|
+
"@vitest/mocker": "5.0.3",
|
|
1529
1529
|
"chai": "^6.2.2",
|
|
1530
1530
|
"es-module-lexer": "^2.3.2",
|
|
1531
1531
|
"expect-type": "^1.4.0",
|
|
@@ -1536,7 +1536,7 @@
|
|
|
1536
1536
|
"tinybench": "^6.1.4",
|
|
1537
1537
|
"tinyexec": "^1.3.0",
|
|
1538
1538
|
"tinyglobby": "^0.2.17",
|
|
1539
|
-
"why-is-node-running": "
|
|
1539
|
+
"why-is-node-running": "3.2.1"
|
|
1540
1540
|
},
|
|
1541
1541
|
"bin": {
|
|
1542
1542
|
"vitest": "vitest.mjs"
|
|
@@ -1551,12 +1551,12 @@
|
|
|
1551
1551
|
"@edge-runtime/vm": "*",
|
|
1552
1552
|
"@opentelemetry/api": "^1.9.0",
|
|
1553
1553
|
"@types/node": "^22.0.0 || >=24.0.0",
|
|
1554
|
-
"@vitest/browser-playwright": "5.0.
|
|
1555
|
-
"@vitest/browser-preview": "5.0.
|
|
1554
|
+
"@vitest/browser-playwright": "5.0.3",
|
|
1555
|
+
"@vitest/browser-preview": "5.0.3",
|
|
1556
1556
|
"@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0",
|
|
1557
|
-
"@vitest/coverage-istanbul": "5.0.
|
|
1558
|
-
"@vitest/coverage-v8": "5.0.
|
|
1559
|
-
"@vitest/ui": "5.0.
|
|
1557
|
+
"@vitest/coverage-istanbul": "5.0.3",
|
|
1558
|
+
"@vitest/coverage-v8": "5.0.3",
|
|
1559
|
+
"@vitest/ui": "5.0.3",
|
|
1560
1560
|
"happy-dom": "*",
|
|
1561
1561
|
"jsdom": "*",
|
|
1562
1562
|
"vite": "^6.4.0 || ^7.0.0 || ^8.0.0"
|
|
@@ -1601,9 +1601,9 @@
|
|
|
1601
1601
|
}
|
|
1602
1602
|
},
|
|
1603
1603
|
"node_modules/why-is-node-running": {
|
|
1604
|
-
"version": "3.2.
|
|
1605
|
-
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.
|
|
1606
|
-
"integrity": "sha512-
|
|
1604
|
+
"version": "3.2.1",
|
|
1605
|
+
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.1.tgz",
|
|
1606
|
+
"integrity": "sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==",
|
|
1607
1607
|
"dev": true,
|
|
1608
1608
|
"license": "MIT",
|
|
1609
1609
|
"bin": {
|
package/templates/versions.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"@o3co/auth-provider-core": "0.17.0-rc.
|
|
3
|
-
"@o3co/auth-provider-device-grant": "0.17.0-rc.
|
|
4
|
-
"@o3co/auth-provider-dpop": "0.17.0-rc.
|
|
5
|
-
"@o3co/auth-provider-mtls": "0.17.0-rc.
|
|
6
|
-
"@o3co/auth-provider-federation-apple": "0.17.0-rc.
|
|
7
|
-
"@o3co/auth-provider-federation-google": "0.17.0-rc.
|
|
8
|
-
"@o3co/auth-provider-federation-github": "0.17.0-rc.
|
|
9
|
-
"@o3co/auth-provider-federation-grants": "0.17.0-rc.
|
|
10
|
-
"@o3co/auth-provider-federation-oidc": "0.17.0-rc.
|
|
11
|
-
"@o3co/auth-provider-oauth": "0.17.0-rc.
|
|
12
|
-
"@o3co/auth-provider-oauth-token-exchange": "0.17.0-rc.
|
|
13
|
-
"@o3co/auth-provider-session": "0.17.0-rc.
|
|
14
|
-
"@o3co/auth-provider-foundation": "0.17.0-rc.
|
|
15
|
-
"@o3co/auth-provider-mfa": "0.17.0-rc.
|
|
16
|
-
"@o3co/auth-provider-redis": "0.17.0-rc.
|
|
17
|
-
"@o3co/auth-provider-standard": "0.17.0-rc.
|
|
18
|
-
"@o3co/auth-provider-test-kit": "0.17.0-rc.
|
|
19
|
-
"@o3co/auth-provider-webauthn": "0.17.0-rc.
|
|
2
|
+
"@o3co/auth-provider-core": "0.17.0-rc.4",
|
|
3
|
+
"@o3co/auth-provider-device-grant": "0.17.0-rc.4",
|
|
4
|
+
"@o3co/auth-provider-dpop": "0.17.0-rc.4",
|
|
5
|
+
"@o3co/auth-provider-mtls": "0.17.0-rc.4",
|
|
6
|
+
"@o3co/auth-provider-federation-apple": "0.17.0-rc.4",
|
|
7
|
+
"@o3co/auth-provider-federation-google": "0.17.0-rc.4",
|
|
8
|
+
"@o3co/auth-provider-federation-github": "0.17.0-rc.4",
|
|
9
|
+
"@o3co/auth-provider-federation-grants": "0.17.0-rc.4",
|
|
10
|
+
"@o3co/auth-provider-federation-oidc": "0.17.0-rc.4",
|
|
11
|
+
"@o3co/auth-provider-oauth": "0.17.0-rc.4",
|
|
12
|
+
"@o3co/auth-provider-oauth-token-exchange": "0.17.0-rc.4",
|
|
13
|
+
"@o3co/auth-provider-session": "0.17.0-rc.4",
|
|
14
|
+
"@o3co/auth-provider-foundation": "0.17.0-rc.4",
|
|
15
|
+
"@o3co/auth-provider-mfa": "0.17.0-rc.4",
|
|
16
|
+
"@o3co/auth-provider-redis": "0.17.0-rc.4",
|
|
17
|
+
"@o3co/auth-provider-standard": "0.17.0-rc.4",
|
|
18
|
+
"@o3co/auth-provider-test-kit": "0.17.0-rc.4",
|
|
19
|
+
"@o3co/auth-provider-webauthn": "0.17.0-rc.4"
|
|
20
20
|
}
|