@fireproof/core-cli 0.24.0-dev-multi-clerks-0 → 0.24.0-dev-multi-clerks-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +2 -0
- package/main.js.map +1 -1
- package/package.json +10 -9
- package/well-known-cmd.d.ts +22 -0
- package/well-known-cmd.js +108 -0
- package/well-known-cmd.js.map +1 -0
package/main.js
CHANGED
|
@@ -10,6 +10,7 @@ import { preSignedUrlCmd } from "./pre-signed-url.js";
|
|
|
10
10
|
import { dependabotCmd } from "./dependabot-cmd.js";
|
|
11
11
|
import { testContainerCmd } from "./test-container-cmd.js";
|
|
12
12
|
import { deviceIdCmd } from "./device-id-cmd.js";
|
|
13
|
+
import { wellKnownCmd } from "./well-known-cmd.js";
|
|
13
14
|
(async () => {
|
|
14
15
|
dotenv.config(process.env.FP_ENV ?? ".env");
|
|
15
16
|
const sthis = ensureSuperThis();
|
|
@@ -31,6 +32,7 @@ import { deviceIdCmd } from "./device-id-cmd.js";
|
|
|
31
32
|
dependabot: dependabotCmd(sthis),
|
|
32
33
|
testContainer: testContainerCmd(sthis),
|
|
33
34
|
deviceId: deviceIdCmd(sthis),
|
|
35
|
+
wellKnown: wellKnownCmd(sthis),
|
|
34
36
|
},
|
|
35
37
|
});
|
|
36
38
|
await run(cmd, process.argv.slice(2));
|
package/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../jsr/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../jsr/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAGhC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,GAAG,GAAG,WAAW,CAAC;QACtB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;YAClB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;YAClB,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;YAC5B,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC;YACjC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;YACtB,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC;YAChC,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC;YAC1C,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC;YAChC,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC;YACtC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;YAC5B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;SAC/B;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAExC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fireproof/core-cli",
|
|
3
|
-
"version": "0.24.0-dev-multi-clerks-
|
|
3
|
+
"version": "0.24.0-dev-multi-clerks-1",
|
|
4
4
|
"description": "Live ledger for the web.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": "./run.js",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"url": "https://github.com/fireproof-storage/fireproof/issues"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@adviser/cement": "^0.5.
|
|
35
|
-
"@fireproof/core-device-id": "0.24.0-dev-multi-clerks-
|
|
36
|
-
"@fireproof/core-keybag": "0.24.0-dev-multi-clerks-
|
|
37
|
-
"@fireproof/core-runtime": "0.24.0-dev-multi-clerks-
|
|
38
|
-
"@fireproof/core-types-base": "0.24.0-dev-multi-clerks-
|
|
39
|
-
"@fireproof/vendor": "0.24.0-dev-multi-clerks-
|
|
34
|
+
"@adviser/cement": "^0.5.2",
|
|
35
|
+
"@fireproof/core-device-id": "0.24.0-dev-multi-clerks-1",
|
|
36
|
+
"@fireproof/core-keybag": "0.24.0-dev-multi-clerks-1",
|
|
37
|
+
"@fireproof/core-runtime": "0.24.0-dev-multi-clerks-1",
|
|
38
|
+
"@fireproof/core-types-base": "0.24.0-dev-multi-clerks-1",
|
|
39
|
+
"@fireproof/vendor": "0.24.0-dev-multi-clerks-1",
|
|
40
40
|
"@hono/node-server": "^1.19.6",
|
|
41
41
|
"@pnpm/lockfile-file": "^9.1.3",
|
|
42
42
|
"@typescript/native-preview": "7.0.0-dev.20251123.1",
|
|
@@ -52,11 +52,12 @@
|
|
|
52
52
|
"zx": "^8.8.5"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@fireproof/core-cli": "0.24.0-dev-multi-clerks-
|
|
55
|
+
"@fireproof/core-cli": "0.24.0-dev-multi-clerks-1",
|
|
56
56
|
"@types/fs-extra": "^11.0.4",
|
|
57
57
|
"@types/semver": "^7.7.1",
|
|
58
58
|
"tsx": "^4.20.4",
|
|
59
|
-
"vitest": "^4.0.8"
|
|
59
|
+
"vitest": "^4.0.8",
|
|
60
|
+
"why-is-node-running": "^3.2.2"
|
|
60
61
|
},
|
|
61
62
|
"scripts": {
|
|
62
63
|
"build": "node ./run.js tsc",
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SuperThis } from "@fireproof/core-types-base";
|
|
2
|
+
export declare function wellKnownCmd(_sthis: SuperThis): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
|
|
3
|
+
parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
4
|
+
json: boolean;
|
|
5
|
+
jsons: boolean;
|
|
6
|
+
pem: boolean;
|
|
7
|
+
env: boolean;
|
|
8
|
+
presetKey: string;
|
|
9
|
+
envPrefix: string;
|
|
10
|
+
urls: string[];
|
|
11
|
+
}>>;
|
|
12
|
+
} & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
|
|
13
|
+
json: boolean;
|
|
14
|
+
jsons: boolean;
|
|
15
|
+
pem: boolean;
|
|
16
|
+
env: boolean;
|
|
17
|
+
presetKey: string;
|
|
18
|
+
envPrefix: string;
|
|
19
|
+
urls: string[];
|
|
20
|
+
}, Promise<void>> & {
|
|
21
|
+
run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
|
|
22
|
+
} & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as rt from "@fireproof/core-runtime";
|
|
2
|
+
import { command, restPositionals, string, option, flag } from "cmd-ts";
|
|
3
|
+
import { exportSPKI, importJWK } from "jose";
|
|
4
|
+
export function wellKnownCmd(_sthis) {
|
|
5
|
+
return command({
|
|
6
|
+
name: "well-known",
|
|
7
|
+
description: "Fetch well-known JWKS from URLs",
|
|
8
|
+
version: "1.0.0",
|
|
9
|
+
args: {
|
|
10
|
+
json: flag({
|
|
11
|
+
long: "json",
|
|
12
|
+
description: "Output as JSON (default)",
|
|
13
|
+
defaultValue: () => false,
|
|
14
|
+
}),
|
|
15
|
+
jsons: flag({
|
|
16
|
+
long: "jsons",
|
|
17
|
+
description: "Output as single-line quoted JSON string",
|
|
18
|
+
defaultValue: () => false,
|
|
19
|
+
}),
|
|
20
|
+
pem: flag({
|
|
21
|
+
long: "pem",
|
|
22
|
+
description: "Output as PEM format per key",
|
|
23
|
+
defaultValue: () => false,
|
|
24
|
+
}),
|
|
25
|
+
env: flag({
|
|
26
|
+
long: "env",
|
|
27
|
+
description: "Output as environment variables with single-lined PEM",
|
|
28
|
+
defaultValue: () => false,
|
|
29
|
+
}),
|
|
30
|
+
presetKey: option({
|
|
31
|
+
type: string,
|
|
32
|
+
long: "presetKey",
|
|
33
|
+
defaultValue: () => "",
|
|
34
|
+
description: "Preset key to include (will be processed with coerceJWKPublic)",
|
|
35
|
+
}),
|
|
36
|
+
envPrefix: option({
|
|
37
|
+
type: string,
|
|
38
|
+
long: "env-prefix",
|
|
39
|
+
defaultValue: () => "CLERK_PUB_JWT_KEY",
|
|
40
|
+
description: "Prefix for environment variable names (used with --env)",
|
|
41
|
+
}),
|
|
42
|
+
urls: restPositionals({
|
|
43
|
+
type: string,
|
|
44
|
+
displayName: "urls",
|
|
45
|
+
description: "URLs to fetch well-known JWKS from",
|
|
46
|
+
}),
|
|
47
|
+
},
|
|
48
|
+
handler: async (args) => {
|
|
49
|
+
const urls = args.urls.flatMap((url) => url.split(",").map((u) => u.trim())).filter((u) => u.length > 0);
|
|
50
|
+
const presetKeys = args.presetKey ? await rt.sts.coerceJWKPublic(_sthis, args.presetKey) : [];
|
|
51
|
+
const results = urls.length > 0
|
|
52
|
+
? await rt.sts.fetchWellKnownJwks(urls, {
|
|
53
|
+
fetch: globalThis.fetch,
|
|
54
|
+
fetchTimeoutMs: 5000,
|
|
55
|
+
})
|
|
56
|
+
: [];
|
|
57
|
+
if (urls.length === 0 && presetKeys.length === 0) {
|
|
58
|
+
console.error("Error: At least one URL or presetKey must be provided");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const hasCustomEnvPrefix = args.envPrefix !== "CLERK_PUB_JWT_KEY";
|
|
62
|
+
const format = args.pem ? "pem" : args.env || hasCustomEnvPrefix ? "env" : args.jsons ? "jsons" : "json";
|
|
63
|
+
const keyMap = new Map();
|
|
64
|
+
for (const key of presetKeys) {
|
|
65
|
+
if (key.kid) {
|
|
66
|
+
keyMap.set(key.kid, key);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
keyMap.set(JSON.stringify(key), key);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const result of results) {
|
|
73
|
+
if (result.type === "ok") {
|
|
74
|
+
for (const key of result.keys) {
|
|
75
|
+
if (key.kid) {
|
|
76
|
+
keyMap.set(key.kid, key);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
keyMap.set(JSON.stringify(key), key);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const combinedOutput = { keys: Array.from(keyMap.values()) };
|
|
85
|
+
switch (format) {
|
|
86
|
+
case "json":
|
|
87
|
+
console.log(JSON.stringify(combinedOutput, null, 2));
|
|
88
|
+
break;
|
|
89
|
+
case "pem":
|
|
90
|
+
{
|
|
91
|
+
for (const jwk of combinedOutput.keys) {
|
|
92
|
+
const publicKey = await importJWK(jwk, "RS256");
|
|
93
|
+
console.log(await exportSPKI(publicKey));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
case "env":
|
|
98
|
+
console.log(`${args.envPrefix}=${JSON.stringify(JSON.stringify(combinedOutput))}`);
|
|
99
|
+
break;
|
|
100
|
+
case "jsons":
|
|
101
|
+
default:
|
|
102
|
+
console.log(JSON.stringify(combinedOutput));
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=well-known-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"well-known-cmd.js","sourceRoot":"","sources":["../jsr/well-known-cmd.ts"],"names":[],"mappings":"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"}
|