@vibes.diy/identity 2.6.9 → 2.6.10
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/dash-api/dash-client.d.ts +31 -0
- package/dash-api/dash-client.js +152 -0
- package/dash-api/dash-client.js.map +1 -0
- package/dash-api/dash-client.test.d.ts +1 -0
- package/dash-api/dash-client.test.js +50 -0
- package/dash-api/dash-client.test.js.map +1 -0
- package/dash-api/token.js +2 -2
- package/dash-api/token.js.map +1 -1
- package/device-id/csr.js +1 -1
- package/device-id/csr.js.map +1 -1
- package/device-id/validator.js +1 -1
- package/device-id/validator.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/keybag/keybag-golden.fixture.json +77 -0
- package/keybag/keybag-golden.test.d.ts +1 -0
- package/keybag/keybag-golden.test.js +131 -0
- package/keybag/keybag-golden.test.js.map +1 -0
- package/package.json +2 -3
- package/types/cert-payload.js +1 -1
- package/types/cert-payload.js.map +1 -1
- package/types/device-id-payload.d.ts +6 -0
- package/types/device-id-payload.js +111 -0
- package/types/device-id-payload.js.map +1 -0
- package/types/device-id-payload.test.d.ts +1 -0
- package/types/device-id-payload.test.js +87 -0
- package/types/device-id-payload.test.js.map +1 -0
- package/types/wire.d.ts +6 -0
- package/types/wire.js +40 -0
- package/types/wire.js.map +1 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import type { ReqEnsureUser, ResEnsureUser, ReqFindUser, ResFindUser, ReqCreateTenant, ResCreateTenant, ReqUpdateTenant, ResUpdateTenant, ReqDeleteTenant, ResDeleteTenant, ReqRedeemInvite, ResRedeemInvite, ReqListTenantsByUser, ResListTenantsByUser, ReqInviteUser, ResInviteUser, ReqListInvites, ResListInvites, ReqDeleteInvite, ResDeleteInvite, ReqUpdateUserTenant, ResUpdateUserTenant, ReqCreateLedger, ResCreateLedger, ReqUpdateLedger, ResUpdateLedger, ReqDeleteLedger, ResDeleteLedger, ReqListLedgersByUser, ResListLedgersByUser, ReqCloudSessionToken, ResCloudSessionToken, ReqCertFromCsr, ResCertFromCsr, ReqExtendToken, ReqTokenByResultId, ResExtendToken, ResTokenByResultId, ReqEnsureCloudToken, ResEnsureCloudToken, ClerkDashboardApiConfig, DashboardApiConfigIntern, FPApiInterface, DashboardApiConfig, WithoutTypeAndAuth } from "@fireproof/core-types-protocols-dashboard";
|
|
3
|
+
import type { LoadedClerk, GetTokenOptions } from "@clerk/shared/types";
|
|
4
|
+
export declare class DashboardApiImpl<T> implements FPApiInterface {
|
|
5
|
+
#private;
|
|
6
|
+
readonly cfg: DashboardApiConfigIntern<T>;
|
|
7
|
+
constructor(cfg: DashboardApiConfig<T>);
|
|
8
|
+
private request;
|
|
9
|
+
ensureUser(req: WithoutTypeAndAuth<ReqEnsureUser>): Promise<Result<ResEnsureUser>>;
|
|
10
|
+
findUser(req: WithoutTypeAndAuth<ReqFindUser>): Promise<Result<ResFindUser>>;
|
|
11
|
+
createTenant(req: WithoutTypeAndAuth<ReqCreateTenant>): Promise<Result<ResCreateTenant>>;
|
|
12
|
+
updateTenant(req: WithoutTypeAndAuth<ReqUpdateTenant>): Promise<Result<ResUpdateTenant>>;
|
|
13
|
+
deleteTenant(req: WithoutTypeAndAuth<ReqDeleteTenant>): Promise<Result<ResDeleteTenant>>;
|
|
14
|
+
connectUserToTenant(req: WithoutTypeAndAuth<ReqRedeemInvite>): Promise<Result<ResRedeemInvite>>;
|
|
15
|
+
listTenantsByUser(req: WithoutTypeAndAuth<ReqListTenantsByUser>): Promise<Result<ResListTenantsByUser>>;
|
|
16
|
+
inviteUser(req: WithoutTypeAndAuth<ReqInviteUser>): Promise<Result<ResInviteUser>>;
|
|
17
|
+
listInvites(req: WithoutTypeAndAuth<ReqListInvites>): Promise<Result<ResListInvites>>;
|
|
18
|
+
deleteInvite(req: WithoutTypeAndAuth<ReqDeleteInvite>): Promise<Result<ResDeleteInvite>>;
|
|
19
|
+
updateUserTenant(req: WithoutTypeAndAuth<ReqUpdateUserTenant>): Promise<Result<ResUpdateUserTenant>>;
|
|
20
|
+
createLedger(req: WithoutTypeAndAuth<ReqCreateLedger>): Promise<Result<ResCreateLedger>>;
|
|
21
|
+
updateLedger(req: WithoutTypeAndAuth<ReqUpdateLedger>): Promise<Result<ResUpdateLedger>>;
|
|
22
|
+
deleteLedger(req: WithoutTypeAndAuth<ReqDeleteLedger>): Promise<Result<ResDeleteLedger>>;
|
|
23
|
+
listLedgersByUser(req: WithoutTypeAndAuth<ReqListLedgersByUser>): Promise<Result<ResListLedgersByUser>>;
|
|
24
|
+
getCloudSessionToken(req: WithoutTypeAndAuth<ReqCloudSessionToken>): Promise<Result<ResCloudSessionToken>>;
|
|
25
|
+
getCertFromCsr(req: WithoutTypeAndAuth<ReqCertFromCsr>): Promise<Result<ResCertFromCsr>>;
|
|
26
|
+
redeemInvite(req: ReqRedeemInvite): Promise<Result<ResRedeemInvite>>;
|
|
27
|
+
getTokenByResultId(req: ReqTokenByResultId): Promise<Result<ResTokenByResultId>>;
|
|
28
|
+
extendToken(req: ReqExtendToken): Promise<Result<ResExtendToken>>;
|
|
29
|
+
ensureCloudToken(req: WithoutTypeAndAuth<ReqEnsureCloudToken>): Promise<Result<ResEnsureCloudToken>>;
|
|
30
|
+
}
|
|
31
|
+
export declare function clerkDashApi<T extends GetTokenOptions = GetTokenOptions>(clerk: LoadedClerk, iopts: ClerkDashboardApiConfig<T>): DashboardApiImpl<T>;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Result, KeyedResolvOnce, WaitingForValue, Option, exception2Result } from "@adviser/cement";
|
|
2
|
+
export class DashboardApiImpl {
|
|
3
|
+
cfg;
|
|
4
|
+
constructor(cfg) {
|
|
5
|
+
this.cfg = {
|
|
6
|
+
gracePeriodMs: 5000,
|
|
7
|
+
...cfg,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
async request(req) {
|
|
11
|
+
let auth = req.auth;
|
|
12
|
+
if (!req.auth) {
|
|
13
|
+
const rAuth = await this.cfg.getToken(this.cfg.getTokenCtx);
|
|
14
|
+
if (rAuth.isErr()) {
|
|
15
|
+
return Result.Err(rAuth);
|
|
16
|
+
}
|
|
17
|
+
auth = rAuth.Ok();
|
|
18
|
+
}
|
|
19
|
+
const reqBody = JSON.stringify({
|
|
20
|
+
...req,
|
|
21
|
+
auth,
|
|
22
|
+
});
|
|
23
|
+
const res = await this.cfg.fetch(this.cfg.apiUrl, {
|
|
24
|
+
method: "PUT",
|
|
25
|
+
headers: {
|
|
26
|
+
"Content-Type": "application/json",
|
|
27
|
+
Accept: "application/json",
|
|
28
|
+
},
|
|
29
|
+
body: reqBody,
|
|
30
|
+
});
|
|
31
|
+
if (res.ok) {
|
|
32
|
+
const jso = await res.json();
|
|
33
|
+
return Result.Ok(jso);
|
|
34
|
+
}
|
|
35
|
+
const body = await res.text();
|
|
36
|
+
return Result.Err(`HTTP: ${res.status} ${res.statusText}: ${body}`);
|
|
37
|
+
}
|
|
38
|
+
ensureUser(req) {
|
|
39
|
+
return this.request({ ...req, type: "reqEnsureUser" });
|
|
40
|
+
}
|
|
41
|
+
findUser(req) {
|
|
42
|
+
return this.request({ ...req, type: "reqFindUser" });
|
|
43
|
+
}
|
|
44
|
+
createTenant(req) {
|
|
45
|
+
return this.request({ ...req, type: "reqCreateTenant" });
|
|
46
|
+
}
|
|
47
|
+
updateTenant(req) {
|
|
48
|
+
return this.request({ ...req, type: "reqUpdateTenant" });
|
|
49
|
+
}
|
|
50
|
+
deleteTenant(req) {
|
|
51
|
+
return this.request({ ...req, type: "reqDeleteTenant" });
|
|
52
|
+
}
|
|
53
|
+
connectUserToTenant(req) {
|
|
54
|
+
return this.request({ ...req, type: "reqRedeemInvite" });
|
|
55
|
+
}
|
|
56
|
+
listTenantsByUser(req) {
|
|
57
|
+
return this.request({ ...req, type: "reqListTenantsByUser" });
|
|
58
|
+
}
|
|
59
|
+
inviteUser(req) {
|
|
60
|
+
return this.request({ ...req, type: "reqInviteUser" });
|
|
61
|
+
}
|
|
62
|
+
listInvites(req) {
|
|
63
|
+
return this.request({ ...req, type: "reqListInvites" });
|
|
64
|
+
}
|
|
65
|
+
deleteInvite(req) {
|
|
66
|
+
return this.request({ ...req, type: "reqDeleteInvite" });
|
|
67
|
+
}
|
|
68
|
+
updateUserTenant(req) {
|
|
69
|
+
return this.request({ ...req, type: "reqUpdateUserTenant" });
|
|
70
|
+
}
|
|
71
|
+
createLedger(req) {
|
|
72
|
+
return this.request({ ...req, type: "reqCreateLedger" });
|
|
73
|
+
}
|
|
74
|
+
updateLedger(req) {
|
|
75
|
+
return this.request({ ...req, type: "reqUpdateLedger" });
|
|
76
|
+
}
|
|
77
|
+
deleteLedger(req) {
|
|
78
|
+
return this.request({ ...req, type: "reqDeleteLedger" });
|
|
79
|
+
}
|
|
80
|
+
listLedgersByUser(req) {
|
|
81
|
+
return this.request({ ...req, type: "reqListLedgersByUser" });
|
|
82
|
+
}
|
|
83
|
+
getCloudSessionToken(req) {
|
|
84
|
+
return this.request({ ...req, type: "reqCloudSessionToken" });
|
|
85
|
+
}
|
|
86
|
+
getCertFromCsr(req) {
|
|
87
|
+
return this.request({ ...req, type: "reqCertFromCsr" });
|
|
88
|
+
}
|
|
89
|
+
redeemInvite(req) {
|
|
90
|
+
return this.request({ ...req, type: "reqRedeemInvite" });
|
|
91
|
+
}
|
|
92
|
+
getTokenByResultId(req) {
|
|
93
|
+
return this.request({ ...req, type: "reqTokenByResultId" });
|
|
94
|
+
}
|
|
95
|
+
extendToken(req) {
|
|
96
|
+
return this.request({ ...req, type: "reqExtendToken" });
|
|
97
|
+
}
|
|
98
|
+
#ensureCloudToken = new KeyedResolvOnce();
|
|
99
|
+
ensureCloudToken(req) {
|
|
100
|
+
return this.#ensureCloudToken
|
|
101
|
+
.get(JSON.stringify({
|
|
102
|
+
appId: req.appId,
|
|
103
|
+
env: req.env ?? "prod",
|
|
104
|
+
tenant: req.tenant ?? undefined,
|
|
105
|
+
ledger: req.ledger ?? undefined,
|
|
106
|
+
}))
|
|
107
|
+
.once(async (my) => {
|
|
108
|
+
const rRes = await this.request({ ...req, type: "reqEnsureCloudToken" });
|
|
109
|
+
if (rRes.isErr()) {
|
|
110
|
+
return Result.Err(rRes);
|
|
111
|
+
}
|
|
112
|
+
const res = rRes.Ok();
|
|
113
|
+
const resetAfter = res.expiresInSec * 1000 - this.cfg.gracePeriodMs;
|
|
114
|
+
my.self.setResetAfter(resetAfter < 0 ? 60000 : resetAfter);
|
|
115
|
+
return rRes;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const keyedDashApis = new KeyedResolvOnce();
|
|
120
|
+
export function clerkDashApi(clerk, iopts) {
|
|
121
|
+
return keyedDashApis.get(iopts.apiUrl).once(() => {
|
|
122
|
+
const waitForToken = new WaitingForValue();
|
|
123
|
+
const dashApi = new DashboardApiImpl({
|
|
124
|
+
...iopts,
|
|
125
|
+
getTokenCtx: iopts.getTokenCtx ?? { template: iopts.template ?? "with-email" },
|
|
126
|
+
gracePeriodMs: iopts.gracePeriodMs && iopts.gracePeriodMs > 0 ? iopts.gracePeriodMs : 5000,
|
|
127
|
+
getToken: () => waitForToken
|
|
128
|
+
.waitValue()
|
|
129
|
+
.then((token) => Result.Ok({ type: "clerk", token }))
|
|
130
|
+
.catch((err) => Result.Err(err)),
|
|
131
|
+
fetch: iopts.fetch ?? fetch.bind(globalThis),
|
|
132
|
+
});
|
|
133
|
+
clerk.addListener(({ session }) => {
|
|
134
|
+
const preValue = waitForToken.value();
|
|
135
|
+
waitForToken.setValue(Option.None());
|
|
136
|
+
if (!(session && typeof session.getToken == "function")) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
exception2Result(() => session.getToken(dashApi.cfg.getTokenCtx)).then((rGetToken) => {
|
|
140
|
+
if (rGetToken.isErr()) {
|
|
141
|
+
waitForToken.setError(rGetToken.Err());
|
|
142
|
+
waitForToken.setValue(preValue);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const token = rGetToken.Ok();
|
|
146
|
+
waitForToken.setValue(Option.From(token));
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
return dashApi;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=dash-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dash-client.js","sourceRoot":"","sources":["../../jsr/dash-api/dash-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { clerkDashApi, DashboardApiImpl } from "./dash-client.js";
|
|
3
|
+
function fakeClerk(token) {
|
|
4
|
+
return {
|
|
5
|
+
addListener: (cb) => {
|
|
6
|
+
cb({ session: { getToken: async () => token } });
|
|
7
|
+
return () => undefined;
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
describe("dash-client (owned browser dashboard HTTP client)", () => {
|
|
12
|
+
it("clerkDashApi returns a DashboardApiImpl", () => {
|
|
13
|
+
const api = clerkDashApi(fakeClerk("t"), {
|
|
14
|
+
apiUrl: "https://dash.test/api/unique-1",
|
|
15
|
+
fetch: (async () => ({ ok: true, json: async () => ({}) })),
|
|
16
|
+
});
|
|
17
|
+
expect(api).toBeInstanceOf(DashboardApiImpl);
|
|
18
|
+
});
|
|
19
|
+
it("issues a single PUT with the Clerk token injected as auth, body is the request DTO", async () => {
|
|
20
|
+
let captured;
|
|
21
|
+
const api = clerkDashApi(fakeClerk("clerk-token-abc"), {
|
|
22
|
+
apiUrl: "https://dash.test/api/unique-2",
|
|
23
|
+
fetch: (async (url, init) => {
|
|
24
|
+
captured = { url, init };
|
|
25
|
+
return { ok: true, json: async () => ({ type: "resEnsureUser", userExisted: false }) };
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
const res = await api.ensureUser({});
|
|
29
|
+
expect(res.isOk()).toBe(true);
|
|
30
|
+
expect(captured?.url).toBe("https://dash.test/api/unique-2");
|
|
31
|
+
expect(captured?.init.method).toBe("PUT");
|
|
32
|
+
const body = JSON.parse(captured?.init.body);
|
|
33
|
+
expect(body.type).toBe("reqEnsureUser");
|
|
34
|
+
expect(body.auth).toEqual({ type: "clerk", token: "clerk-token-abc" });
|
|
35
|
+
});
|
|
36
|
+
it("surfaces a non-ok HTTP response as a Result.Err", async () => {
|
|
37
|
+
const api = clerkDashApi(fakeClerk("t"), {
|
|
38
|
+
apiUrl: "https://dash.test/api/unique-3",
|
|
39
|
+
fetch: (async () => ({
|
|
40
|
+
ok: false,
|
|
41
|
+
status: 403,
|
|
42
|
+
statusText: "Forbidden",
|
|
43
|
+
text: async () => "nope",
|
|
44
|
+
})),
|
|
45
|
+
});
|
|
46
|
+
const res = await api.findUser({});
|
|
47
|
+
expect(res.isErr()).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=dash-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dash-client.test.js","sourceRoot":"","sources":["../../jsr/dash-api/dash-client.test.ts"],"names":[],"mappings":"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"}
|
package/dash-api/token.js
CHANGED
|
@@ -2,8 +2,8 @@ import { Lazy, Result, param, exception2Result, isArrayBuffer, isUint8Array } fr
|
|
|
2
2
|
import { sts, ensureSuperThis } from "@fireproof/core-runtime";
|
|
3
3
|
import { decodeProtectedHeader, exportJWK } from "jose";
|
|
4
4
|
import { ClerkClaimSchema } from "../clerk-claim.js";
|
|
5
|
-
import { JWKPublicSchema } from "../types/wire.js";
|
|
6
|
-
import { FPDeviceIDSessionSchema
|
|
5
|
+
import { JWKPublicSchema, toJwksAlg } from "../types/wire.js";
|
|
6
|
+
import { FPDeviceIDSessionSchema } from "../types/device-id-payload.js";
|
|
7
7
|
import { DeviceIdCA } from "../device-id/ca.js";
|
|
8
8
|
import { DeviceIdVerifyMsg } from "../device-id/verify.js";
|
|
9
9
|
import { ClerkApiToken } from "./clerk-token.js";
|
package/dash-api/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../jsr/dash-api/token.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../jsr/dash-api/token.ts"],"names":[],"mappings":"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"}
|
package/device-id/csr.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { calculateJwkThumbprint, SignJWT } from "jose";
|
|
2
|
-
import { FPDeviceIDCSRPayloadSchema } from "
|
|
2
|
+
import { FPDeviceIDCSRPayloadSchema } from "../types/device-id-payload.js";
|
|
3
3
|
import { exception2Result } from "@adviser/cement";
|
|
4
4
|
export class DeviceIdCSR {
|
|
5
5
|
#key;
|
package/device-id/csr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csr.js","sourceRoot":"","sources":["../../jsr/device-id/csr.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAqC,MAAM,MAAM,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"csr.js","sourceRoot":"","sources":["../../jsr/device-id/csr.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAqC,MAAM,MAAM,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAU,MAAM,iBAAiB,CAAC;AAG3D,MAAM,OAAO,WAAW;IACb,IAAI,CAAc;IAClB,MAAM,CAAY;IAE3B,YAAY,KAAgB,EAAE,GAAgB;QAC5C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAgB,EAAE,UAAU,GAAwB,EAAE;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,0BAA0B,CAAC,KAAK,CAAC;YACtC,GAAG,EAAE,OAAO,CAAC,UAAU;YACvB,GAAG,EAAE,YAAY;YACjB,GAAG,EAAE,uBAAuB;YAC5B,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG,GAAG,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG;YAC/B,GAAG,EAAE;gBACH,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACtC,UAAU,EAAE;oBACV,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI,EAAE;oBAC/C,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;oBACxE,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,IAAI,CAAC,YAAY,CAAC;iBAChE;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA6B;QACzC,OAAO,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,OAAyB,CAAC;iBACrD,kBAAkB,CAAC;gBAClB,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE,MAAM,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC;aACvD,CAAC;iBACD,WAAW,EAAE;iBACb,iBAAiB,CAAC,IAAI,CAAC;iBACvB,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC5C,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAgB,EAAE,UAAU,GAAwB,EAAE;QACpE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
package/device-id/validator.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FPDeviceIDCSRPayloadSchema } from "
|
|
1
|
+
import { FPDeviceIDCSRPayloadSchema } from "../types/device-id-payload.js";
|
|
2
2
|
import { JWKPublicSchema } from "../types/wire.js";
|
|
3
3
|
import { jwtVerify, decodeProtectedHeader, calculateJwkThumbprint } from "jose";
|
|
4
4
|
import { sts } from "@fireproof/core-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../jsr/device-id/validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../jsr/device-id/validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,sBAAsB,EAAY,MAAM,MAAM,CAAC;AAC1F,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAa9C,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,WAAW,CAAC,MAAc;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvF,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;YACrE,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;YACnF,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,0BAA0B,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACrF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;YACxD,CAAC;YACD,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjD,sBAAsB,CAAC,SAAgB,CAAC;gBACxC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAgB,CAAC;aACrD,CAAC,CAAC;YACH,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oDAAoD,EAAE,CAAC;YACvF,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;CACF"}
|
package/index.d.ts
CHANGED
|
@@ -7,4 +7,4 @@ export type { SuperThis, FPDeviceIDSession, DocTypes, JWKPrivate, JWKPublic, Dev
|
|
|
7
7
|
export type { DeviceIdCAIf } from "@fireproof/core-types-device-id";
|
|
8
8
|
export { JWKPrivateSchema, JWKPublicSchema } from "./types/wire.js";
|
|
9
9
|
export { ClerkApiToken } from "./dash-api/clerk-token.js";
|
|
10
|
-
export { clerkDashApi, DashboardApiImpl } from "
|
|
10
|
+
export { clerkDashApi, DashboardApiImpl } from "./dash-api/dash-client.js";
|
package/index.js
CHANGED
|
@@ -3,5 +3,5 @@ export { ClerkClaimSchema, ClerkEmailTemplateClaimSchema } from "./clerk-claim.j
|
|
|
3
3
|
export { ensureSuperThis, ensureLogger, runtimeFn, hashObjectSync, sts } from "@fireproof/core-runtime";
|
|
4
4
|
export { JWKPrivateSchema, JWKPublicSchema } from "./types/wire.js";
|
|
5
5
|
export { ClerkApiToken } from "./dash-api/clerk-token.js";
|
|
6
|
-
export { clerkDashApi, DashboardApiImpl } from "
|
|
6
|
+
export { clerkDashApi, DashboardApiImpl } from "./dash-api/dash-client.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../jsr/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAmB,MAAM,kBAAkB,CAAC;AAGpG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAgCxG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../jsr/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAmB,MAAM,kBAAkB,CAAC;AAGpG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAgCxG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAcpE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "z3QkefAC57rcrs",
|
|
3
|
+
"clazz": "DeviceIdKeyBagItem",
|
|
4
|
+
"item": {
|
|
5
|
+
"deviceId": {
|
|
6
|
+
"kty": "EC",
|
|
7
|
+
"crv": "P-256",
|
|
8
|
+
"x": "Lg_s0u4Z4I2YLvwe7C_0mlJ9wZSZ-O7HZ-5OmLHT_Hc",
|
|
9
|
+
"y": "DMFTlfuSWnL6PKo_yAOtlw4T-z3bFrniHYhrHzw7rRg",
|
|
10
|
+
"d": "oNaLQAKo7fbIHFNi1t6LG9v6IZvWNJYfYQ8KLCs5w1Y"
|
|
11
|
+
},
|
|
12
|
+
"cert": {
|
|
13
|
+
"certificateJWT": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkNFUlQrSldUIiwia2lkIjoiWUxkd1RWZk5sOVVUUUczMno2ek5FNVI3QTh4NjBiaXlreXJfa2ljektSTSIsIng1YyI6W119.eyJpc3MiOiJUZXN0IERldmljZSBDQSIsInN1YiI6ImdvbGRlbi1kZXZpY2UiLCJhdWQiOiJjZXJ0aWZpY2F0ZS1hdXRob3JpdHkiLCJpYXQiOjE3ODI2MjM2ODUsIm5iZiI6MTc4MjYyMzY4NSwiZXhwIjoxODE0MTU5Njg1LCJqdGkiOiJ6NzQxcUx1R1J6Vm5EYlliaXdyZUtjQkRKTlN1Q3d5TGRHRkVwbnBvMjNFemIiLCJjcmVhdGluZ1VzZXIiOnsidHlwZSI6ImNsZXJrIiwiY2xhaW1zIjp7ImF6cCI6ImdvbGRlbi1hcHAiLCJleHAiOjE3MDAwMDM2MDAsImlhdCI6MTcwMDAwMDAwMCwiaXNzIjoiZ29sZGVuLWlzc3VlciIsImp0aSI6ImdvbGRlbi1qdGkiLCJuYmYiOjE3MDAwMDAwMDAsInBhcmFtcyI6eyJuaWNrIjoiZ29sZGVuIiwiZW1haWwiOiJnb2xkZW5AZXhhbXBsZS5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyc3QiOiJGaXJzdCIsImltYWdlX3VybCI6Imh0dHA6Ly9leGFtcGxlLmNvbS9pLnBuZyIsImxhc3QiOiJMYXN0IiwibmFtZSI6IkdvbGRlbiBEZXZpY2UiLCJwdWJsaWNfbWV0YSI6e319LCJyb2xlIjoiZGV2aWNlLWlkIiwic3ViIjoiZ29sZGVuLXN1YmplY3QiLCJ1c2VySWQiOiJnb2xkZW4tdXNlciIsImF1ZCI6WyJodHRwOi8vdGVzdC1hdWRpZW5jZS5sb2NhbGhvc3QvIl19fSwiY2VydGlmaWNhdGUiOnsidmVyc2lvbiI6IjMiLCJzZXJpYWxOdW1iZXIiOiJ6NzQxcUx1R1J6Vm5EYlliaXdyZUtjQkRKTlN1Q3d5TGRHRkVwbnBvMjNFemIiLCJzdWJqZWN0Ijp7ImNvbW1vbk5hbWUiOiJnb2xkZW4tZGV2aWNlIn0sImlzc3VlciI6eyJjb21tb25OYW1lIjoiVGVzdCBEZXZpY2UgQ0EiLCJvcmdhbml6YXRpb24iOiJUZXN0IE9yZ2FuaXphdGlvbiIsImxvY2FsaXR5IjoiVGVzdCBDaXR5Iiwic3RhdGVPclByb3ZpbmNlTmFtZSI6IlRlc3QgU3RhdGUiLCJjb3VudHJ5TmFtZSI6IlVTIn0sInZhbGlkaXR5Ijp7Im5vdEJlZm9yZSI6IjIwMjYtMDYtMjhUMDU6MTQ6NDUuMDAwWiIsIm5vdEFmdGVyIjoiMjAyNy0wNi0yOFQwNToxNDo0NS4wMDBaIn0sInN1YmplY3RQdWJsaWNLZXlJbmZvIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiTGdfczB1NFo0STJZTHZ3ZTdDXzBtbEo5d1pTWi1PN0haLTVPbUxIVF9IYyIsInkiOiJETUZUbGZ1U1duTDZQS29feUFPdGx3NFQtejNiRnJuaUhZaHJIenc3clJnIn0sInNpZ25hdHVyZUFsZ29yaXRobSI6IkVTMjU2Iiwia2V5VXNhZ2UiOlsiZGlnaXRhbFNpZ25hdHVyZSIsImtleUVuY2lwaGVybWVudCJdLCJleHRlbmRlZEtleVVzYWdlIjpbInNlcnZlckF1dGgiXX19.F_A_U8TMoRmIZWuMM5kIf9ujrt3Bgt2imgcBkzDTfVU9CJTfPMJ5F4NIsOfFWjwj6szTbSGnVk3B9k0tAleJgA",
|
|
14
|
+
"certificatePayload": {
|
|
15
|
+
"iss": "Test Device CA",
|
|
16
|
+
"sub": "golden-device",
|
|
17
|
+
"aud": "certificate-authority",
|
|
18
|
+
"iat": 1782623685,
|
|
19
|
+
"nbf": 1782623685,
|
|
20
|
+
"exp": 1814159685,
|
|
21
|
+
"jti": "z741qLuGRzVnDbYbiwreKcBDJNSuCwyLdGFEpnpo23Ezb",
|
|
22
|
+
"creatingUser": {
|
|
23
|
+
"type": "clerk",
|
|
24
|
+
"claims": {
|
|
25
|
+
"azp": "golden-app",
|
|
26
|
+
"exp": 1700003600,
|
|
27
|
+
"iat": 1700000000,
|
|
28
|
+
"iss": "golden-issuer",
|
|
29
|
+
"jti": "golden-jti",
|
|
30
|
+
"nbf": 1700000000,
|
|
31
|
+
"params": {
|
|
32
|
+
"nick": "golden",
|
|
33
|
+
"email": "golden@example.com",
|
|
34
|
+
"email_verified": true,
|
|
35
|
+
"first": "First",
|
|
36
|
+
"image_url": "http://example.com/i.png",
|
|
37
|
+
"last": "Last",
|
|
38
|
+
"name": "Golden Device",
|
|
39
|
+
"public_meta": {}
|
|
40
|
+
},
|
|
41
|
+
"role": "device-id",
|
|
42
|
+
"sub": "golden-subject",
|
|
43
|
+
"userId": "golden-user",
|
|
44
|
+
"aud": ["http://test-audience.localhost/"]
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"certificate": {
|
|
48
|
+
"version": "3",
|
|
49
|
+
"serialNumber": "z741qLuGRzVnDbYbiwreKcBDJNSuCwyLdGFEpnpo23Ezb",
|
|
50
|
+
"subject": {
|
|
51
|
+
"commonName": "golden-device"
|
|
52
|
+
},
|
|
53
|
+
"issuer": {
|
|
54
|
+
"commonName": "Test Device CA",
|
|
55
|
+
"organization": "Test Organization",
|
|
56
|
+
"locality": "Test City",
|
|
57
|
+
"stateOrProvinceName": "Test State",
|
|
58
|
+
"countryName": "US"
|
|
59
|
+
},
|
|
60
|
+
"validity": {
|
|
61
|
+
"notBefore": "2026-06-28T05:14:45.000Z",
|
|
62
|
+
"notAfter": "2027-06-28T05:14:45.000Z"
|
|
63
|
+
},
|
|
64
|
+
"subjectPublicKeyInfo": {
|
|
65
|
+
"kty": "EC",
|
|
66
|
+
"crv": "P-256",
|
|
67
|
+
"x": "Lg_s0u4Z4I2YLvwe7C_0mlJ9wZSZ-O7HZ-5OmLHT_Hc",
|
|
68
|
+
"y": "DMFTlfuSWnL6PKo_yAOtlw4T-z3bFrniHYhrHzw7rRg"
|
|
69
|
+
},
|
|
70
|
+
"signatureAlgorithm": "ES256",
|
|
71
|
+
"keyUsage": ["digitalSignature", "keyEncipherment"],
|
|
72
|
+
"extendedKeyUsage": ["serverAuth"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { mkdtempSync, readdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { hashStringSync } from "@fireproof/core-runtime";
|
|
6
|
+
import { ensureSuperThis } from "../index.js";
|
|
7
|
+
import { getKeyBag } from "../node.js";
|
|
8
|
+
const DEVICE_ID_FILENAME = "z3QkefAC57rcrs.json";
|
|
9
|
+
const DEVICE_ID = "z3QkefAC57rcrs";
|
|
10
|
+
const FIXTURE = JSON.parse(readFileSync(new URL("./keybag-golden.fixture.json", import.meta.url), "utf8"));
|
|
11
|
+
const deviceId = FIXTURE.item.deviceId;
|
|
12
|
+
const cert = FIXTURE.item.cert;
|
|
13
|
+
function tmpKeybag() {
|
|
14
|
+
const dir = mkdtempSync(join(tmpdir(), "kb-golden-"));
|
|
15
|
+
const sthis = ensureSuperThis();
|
|
16
|
+
sthis.env.set("FP_KEYBAG_URL", `file://${dir}`);
|
|
17
|
+
return { dir, sthis };
|
|
18
|
+
}
|
|
19
|
+
describe("keybag golden — on-disk WRITE contract (two-phase enroll)", () => {
|
|
20
|
+
it("setDeviceId(jwk) persists a key-only envelope (no cert key)", async () => {
|
|
21
|
+
const { dir, sthis } = tmpKeybag();
|
|
22
|
+
await (await getKeyBag(sthis)).setDeviceId(deviceId);
|
|
23
|
+
expect(readdirSync(dir)).toEqual([DEVICE_ID_FILENAME]);
|
|
24
|
+
const onDisk = JSON.parse(readFileSync(join(dir, DEVICE_ID_FILENAME), "utf8"));
|
|
25
|
+
expect(onDisk).toEqual({ id: DEVICE_ID, clazz: "DeviceIdKeyBagItem", item: { deviceId } });
|
|
26
|
+
expect("cert" in onDisk.item).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
it("setDeviceId(jwk, cert) writes the full envelope (structurally equal to the golden file)", async () => {
|
|
29
|
+
const { dir, sthis } = tmpKeybag();
|
|
30
|
+
const kb = await getKeyBag(sthis);
|
|
31
|
+
await kb.setDeviceId(deviceId);
|
|
32
|
+
await kb.setDeviceId(deviceId, cert);
|
|
33
|
+
const onDisk = JSON.parse(readFileSync(join(dir, DEVICE_ID_FILENAME), "utf8"));
|
|
34
|
+
expect(onDisk).toEqual({ id: DEVICE_ID, clazz: "DeviceIdKeyBagItem", item: { deviceId, cert } });
|
|
35
|
+
expect(onDisk).toEqual(FIXTURE);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("keybag golden — on-disk READ contract (pre-existing file parses)", () => {
|
|
39
|
+
it("a pre-existing key+cert file reads back to the same key and cert", async () => {
|
|
40
|
+
const { dir, sthis } = tmpKeybag();
|
|
41
|
+
writeFileSync(join(dir, DEVICE_ID_FILENAME), JSON.stringify(FIXTURE));
|
|
42
|
+
const devid = await (await getKeyBag(sthis)).getDeviceId();
|
|
43
|
+
expect(devid.error).toBeUndefined();
|
|
44
|
+
expect(devid.deviceId.IsSome()).toBe(true);
|
|
45
|
+
expect(devid.deviceId.Unwrap()).toEqual(deviceId);
|
|
46
|
+
expect(devid.cert.IsSome()).toBe(true);
|
|
47
|
+
expect(devid.cert.Unwrap()).toEqual(cert);
|
|
48
|
+
});
|
|
49
|
+
it("a pre-existing key-only file yields deviceId present, cert absent", async () => {
|
|
50
|
+
const { dir, sthis } = tmpKeybag();
|
|
51
|
+
const keyOnly = { id: DEVICE_ID, clazz: "DeviceIdKeyBagItem", item: { deviceId } };
|
|
52
|
+
writeFileSync(join(dir, DEVICE_ID_FILENAME), JSON.stringify(keyOnly));
|
|
53
|
+
const devid = await (await getKeyBag(sthis)).getDeviceId();
|
|
54
|
+
expect(devid.deviceId.IsSome()).toBe(true);
|
|
55
|
+
expect(devid.cert.IsNone()).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
it("rejects a file with a malformed cert (strict cert-payload parse, not silent accept)", async () => {
|
|
58
|
+
const { dir, sthis } = tmpKeybag();
|
|
59
|
+
const malformed = {
|
|
60
|
+
id: DEVICE_ID,
|
|
61
|
+
clazz: "DeviceIdKeyBagItem",
|
|
62
|
+
item: { deviceId, cert: { certificateJWT: "a.b.c", certificatePayload: { sub: "x", certificate: { commonName: "x" } } } },
|
|
63
|
+
};
|
|
64
|
+
writeFileSync(join(dir, DEVICE_ID_FILENAME), JSON.stringify(malformed));
|
|
65
|
+
const devid = await (await getKeyBag(sthis)).getDeviceId();
|
|
66
|
+
expect(devid.error).toBeDefined();
|
|
67
|
+
expect(devid.deviceId.IsNone()).toBe(true);
|
|
68
|
+
expect(devid.cert.IsNone()).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe("keybag golden — contract locks", () => {
|
|
72
|
+
it("default node keybag path is $HOME/.fireproof/keybag/<id>.json", async () => {
|
|
73
|
+
const home = mkdtempSync(join(tmpdir(), "kb-home-"));
|
|
74
|
+
const sthis = ensureSuperThis();
|
|
75
|
+
sthis.env.delete("FP_KEYBAG_URL");
|
|
76
|
+
sthis.env.set("HOME", home);
|
|
77
|
+
await (await getKeyBag(sthis)).setDeviceId(deviceId);
|
|
78
|
+
expect(existsSync(join(home, ".fireproof", "keybag", DEVICE_ID_FILENAME))).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
it("the filename derives from a frozen hash of the device-id key string", () => {
|
|
81
|
+
expect(hashStringSync("FIREProof:deviceId")).toBe(DEVICE_ID);
|
|
82
|
+
expect(`${DEVICE_ID}.json`).toBe(DEVICE_ID_FILENAME);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe("keybag golden — memory provider parity (lift must keep memory:// working)", () => {
|
|
86
|
+
function memSthis() {
|
|
87
|
+
const sthis = ensureSuperThis();
|
|
88
|
+
sthis.env.set("FP_KEYBAG_URL", `memory://kb-golden-${sthis.nextId().str}`);
|
|
89
|
+
return sthis;
|
|
90
|
+
}
|
|
91
|
+
it("memory:// round-trips key-only then key+cert", async () => {
|
|
92
|
+
const sthis = memSthis();
|
|
93
|
+
const kb = await getKeyBag(sthis);
|
|
94
|
+
await kb.setDeviceId(deviceId);
|
|
95
|
+
let devid = await kb.getDeviceId();
|
|
96
|
+
expect(devid.deviceId.IsSome()).toBe(true);
|
|
97
|
+
expect(devid.deviceId.Unwrap()).toEqual(deviceId);
|
|
98
|
+
expect(devid.cert.IsNone()).toBe(true);
|
|
99
|
+
await kb.setDeviceId(deviceId, cert);
|
|
100
|
+
devid = await kb.getDeviceId();
|
|
101
|
+
expect(devid.deviceId.Unwrap()).toEqual(deviceId);
|
|
102
|
+
expect(devid.cert.IsSome()).toBe(true);
|
|
103
|
+
expect(devid.cert.Unwrap()).toEqual(cert);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe("keybag golden — node-only boundary (keybag must not reach the browser bundle)", () => {
|
|
107
|
+
it("the browser surface (index.js) does not expose the keybag", async () => {
|
|
108
|
+
const browser = await import("../index.js");
|
|
109
|
+
expect("getKeyBag" in browser).toBe(false);
|
|
110
|
+
expect("createDeviceIdGetToken" in browser).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe("keybag golden — corruption / partial-write failure mode (characterization)", () => {
|
|
114
|
+
it("unparseable files throw (empty / non-JSON / truncated)", async () => {
|
|
115
|
+
for (const contents of ["", "%%% not json %%%", '{"id":"z3QkefAC57rcrs","clazz":"DeviceIdK']) {
|
|
116
|
+
const { dir, sthis } = tmpKeybag();
|
|
117
|
+
writeFileSync(join(dir, DEVICE_ID_FILENAME), contents);
|
|
118
|
+
const kb = await getKeyBag(sthis);
|
|
119
|
+
await expect(kb.getDeviceId()).rejects.toThrow();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
it("parseable JSON of the wrong shape returns a structured error, not a throw", async () => {
|
|
123
|
+
const { dir, sthis } = tmpKeybag();
|
|
124
|
+
writeFileSync(join(dir, DEVICE_ID_FILENAME), JSON.stringify({ hello: "world" }));
|
|
125
|
+
const devid = await (await getKeyBag(sthis)).getDeviceId();
|
|
126
|
+
expect(devid.error).toBeDefined();
|
|
127
|
+
expect(devid.deviceId.IsNone()).toBe(true);
|
|
128
|
+
expect(devid.cert.IsNone()).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=keybag-golden.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keybag-golden.test.js","sourceRoot":"","sources":["../../jsr/keybag/keybag-golden.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibes.diy/identity",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"exports": {
|
|
@@ -14,10 +14,9 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@adviser/cement": "~0.5.34",
|
|
17
|
+
"@clerk/shared": "~4.6.0",
|
|
17
18
|
"@fireproof/core-cli": "~0.24.19",
|
|
18
|
-
"@fireproof/core-device-id": "~0.24.19",
|
|
19
19
|
"@fireproof/core-keybag": "~0.24.19",
|
|
20
|
-
"@fireproof/core-protocols-dashboard": "~0.24.19",
|
|
21
20
|
"@fireproof/core-runtime": "~0.24.19",
|
|
22
21
|
"@fireproof/core-types-base": "~0.24.19",
|
|
23
22
|
"@fireproof/core-types-device-id": "~0.24.19",
|
package/types/cert-payload.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { SubjectSchema, ExtensionsSchema } from "
|
|
2
|
+
import { SubjectSchema, ExtensionsSchema } from "./device-id-payload.js";
|
|
3
3
|
import { JWKPublicSchema } from "./wire.js";
|
|
4
4
|
import { ClerkClaimSchema } from "../clerk-claim.js";
|
|
5
5
|
const CreatingUserSchema = z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cert-payload.js","sourceRoot":"","sources":["../../jsr/types/cert-payload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cert-payload.js","sourceRoot":"","sources":["../../jsr/types/cert-payload.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQrD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;IACF,oBAAoB,EAAE,eAAe;IACrC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,IAAI,CAAC;QACL,kBAAkB;QAClB,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB;QAClB,cAAc;QACd,aAAa;QACb,SAAS;QACT,cAAc;QACd,cAAc;KACf,CAAC,CACH;IACD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CACvB,CAAC,CAAC,IAAI,CAAC;QACL,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,UAAU;QACV,WAAW;QACX,WAAW;QACX,WAAW;QACX,OAAO;KACR,CAAC,CACH;IACD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,wBAAwB,GAAkC,CAAC;KACrE,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,WAAW,EAAE,iBAAiB;IAC9B,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,QAAQ,EAAmC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Subject, Extensions, FPDeviceIDCSRPayload, FPDeviceIDSession } from "@fireproof/core-types-base";
|
|
3
|
+
export declare const SubjectSchema: z.ZodType<Subject>;
|
|
4
|
+
export declare const ExtensionsSchema: z.ZodType<Extensions>;
|
|
5
|
+
export declare const FPDeviceIDCSRPayloadSchema: z.ZodType<FPDeviceIDCSRPayload>;
|
|
6
|
+
export declare const FPDeviceIDSessionSchema: z.ZodType<FPDeviceIDSession>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { JWKPublicSchema } from "./wire.js";
|
|
3
|
+
import { ClerkClaimSchema } from "../clerk-claim.js";
|
|
4
|
+
const JWTPayloadSchema = z.object({
|
|
5
|
+
azp: z.string().optional(),
|
|
6
|
+
iss: z.string().optional(),
|
|
7
|
+
sub: z.string().optional(),
|
|
8
|
+
aud: z.union([z.string(), z.array(z.string())]).optional(),
|
|
9
|
+
exp: z.number().int().optional(),
|
|
10
|
+
nbf: z.number().int().optional(),
|
|
11
|
+
iat: z.number().int().optional(),
|
|
12
|
+
jti: z.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
const CreatingUserSchema = z.object({
|
|
15
|
+
type: z.literal("clerk"),
|
|
16
|
+
claims: ClerkClaimSchema,
|
|
17
|
+
});
|
|
18
|
+
export const SubjectSchema = z.object({
|
|
19
|
+
commonName: z.string(),
|
|
20
|
+
countryName: z.string().length(2).optional(),
|
|
21
|
+
stateOrProvinceName: z.string().optional(),
|
|
22
|
+
locality: z.string().optional(),
|
|
23
|
+
organization: z.string().optional(),
|
|
24
|
+
organizationalUnitName: z.string().optional(),
|
|
25
|
+
emailAddress: z.string().email().optional(),
|
|
26
|
+
serialNumber: z.string().optional(),
|
|
27
|
+
streetAddress: z.string().optional(),
|
|
28
|
+
postalCode: z.string().optional(),
|
|
29
|
+
businessCategory: z.string().optional(),
|
|
30
|
+
jurisdictionCountryName: z.string().length(2).optional(),
|
|
31
|
+
jurisdictionStateOrProvinceName: z.string().optional(),
|
|
32
|
+
jurisdictionLocalityName: z.string().optional(),
|
|
33
|
+
});
|
|
34
|
+
export const ExtensionsSchema = z.object({
|
|
35
|
+
subjectAltName: z.array(z.string()).optional(),
|
|
36
|
+
keyUsage: z
|
|
37
|
+
.array(z.enum([
|
|
38
|
+
"digitalSignature",
|
|
39
|
+
"nonRepudiation",
|
|
40
|
+
"keyEncipherment",
|
|
41
|
+
"dataEncipherment",
|
|
42
|
+
"keyAgreement",
|
|
43
|
+
"keyCertSign",
|
|
44
|
+
"cRLSign",
|
|
45
|
+
"encipherOnly",
|
|
46
|
+
"decipherOnly",
|
|
47
|
+
]))
|
|
48
|
+
.optional(),
|
|
49
|
+
extendedKeyUsage: z
|
|
50
|
+
.array(z.enum([
|
|
51
|
+
"serverAuth",
|
|
52
|
+
"clientAuth",
|
|
53
|
+
"codeSigning",
|
|
54
|
+
"emailProtection",
|
|
55
|
+
"timeStamping",
|
|
56
|
+
"OCSPSigning",
|
|
57
|
+
"ipsecIKE",
|
|
58
|
+
"msCodeInd",
|
|
59
|
+
"msCodeCom",
|
|
60
|
+
"msCTLSign",
|
|
61
|
+
"msEFS",
|
|
62
|
+
]))
|
|
63
|
+
.optional(),
|
|
64
|
+
basicConstraints: z
|
|
65
|
+
.object({
|
|
66
|
+
cA: z.boolean().optional(),
|
|
67
|
+
pathLenConstraint: z.number().int().min(0).optional(),
|
|
68
|
+
})
|
|
69
|
+
.optional(),
|
|
70
|
+
authorityKeyIdentifier: z.string().optional(),
|
|
71
|
+
subjectKeyIdentifier: z.string().optional(),
|
|
72
|
+
certificatePolicies: z
|
|
73
|
+
.array(z.object({
|
|
74
|
+
policyIdentifier: z.string(),
|
|
75
|
+
policyQualifiers: z.array(z.string()).optional(),
|
|
76
|
+
}))
|
|
77
|
+
.optional(),
|
|
78
|
+
crlDistributionPoints: z.array(z.string().url()).optional(),
|
|
79
|
+
authorityInfoAccess: z
|
|
80
|
+
.object({
|
|
81
|
+
ocsp: z.array(z.string().url()).optional(),
|
|
82
|
+
caIssuers: z.array(z.string().url()).optional(),
|
|
83
|
+
})
|
|
84
|
+
.optional(),
|
|
85
|
+
nameConstraints: z
|
|
86
|
+
.object({
|
|
87
|
+
permitted: z.array(z.string()).optional(),
|
|
88
|
+
excluded: z.array(z.string()).optional(),
|
|
89
|
+
})
|
|
90
|
+
.optional(),
|
|
91
|
+
});
|
|
92
|
+
export const FPDeviceIDCSRPayloadSchema = JWTPayloadSchema.extend({
|
|
93
|
+
creatingUser: CreatingUserSchema.optional(),
|
|
94
|
+
csr: z
|
|
95
|
+
.object({
|
|
96
|
+
subject: SubjectSchema,
|
|
97
|
+
publicKey: JWKPublicSchema,
|
|
98
|
+
extensions: ExtensionsSchema.optional(),
|
|
99
|
+
})
|
|
100
|
+
.strict()
|
|
101
|
+
.readonly(),
|
|
102
|
+
})
|
|
103
|
+
.strict()
|
|
104
|
+
.readonly();
|
|
105
|
+
export const FPDeviceIDSessionSchema = JWTPayloadSchema.extend({
|
|
106
|
+
deviceId: z.string(),
|
|
107
|
+
seq: z.number().int().min(0),
|
|
108
|
+
})
|
|
109
|
+
.strict()
|
|
110
|
+
.readonly();
|
|
111
|
+
//# sourceMappingURL=device-id-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-id-payload.js","sourceRoot":"","sources":["../../jsr/types/device-id-payload.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAuB,CAAC,CAAC,MAAM,CAAC;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxD,+BAA+B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtD,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChD,CAAuB,CAAC;AAEzB,MAAM,CAAC,MAAM,gBAAgB,GAA0B,CAAC,CAAC,MAAM,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC;QACL,kBAAkB;QAClB,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB;QAClB,cAAc;QACd,aAAa;QACb,SAAS;QACT,cAAc;QACd,cAAc;KACf,CAAC,CACH;SACA,QAAQ,EAAE;IACb,gBAAgB,EAAE,CAAC;SAChB,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC;QACL,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,UAAU;QACV,WAAW;QACX,WAAW;QACX,WAAW;QACX,OAAO;KACR,CAAC,CACH;SACA,QAAQ,EAAE;IACb,gBAAgB,EAAE,CAAC;SAChB,MAAM,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC1B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtD,CAAC;SACD,QAAQ,EAAE;IACb,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,mBAAmB,EAAE,CAAC;SACnB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC5B,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CACH;SACA,QAAQ,EAAE;IACb,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3D,mBAAmB,EAAE,CAAC;SACnB,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC1C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;KAChD,CAAC;SACD,QAAQ,EAAE;IACb,eAAe,EAAE,CAAC;SACf,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACzC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC;SACD,QAAQ,EAAE;CACd,CAA0B,CAAC;AAE5B,MAAM,CAAC,MAAM,0BAA0B,GAAoC,gBAAgB,CAAC,MAAM,CAAC;IACjG,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,GAAG,EAAE,CAAC;SACH,MAAM,CAAC;QACN,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,eAAe;QAC1B,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;KACxC,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;CACd,CAAC;KACC,MAAM,EAAE;KACR,QAAQ,EAAqC,CAAC;AAEjD,MAAM,CAAC,MAAM,uBAAuB,GAAiC,gBAAgB,CAAC,MAAM,CAAC;IAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC;KACC,MAAM,EAAE;KACR,QAAQ,EAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { SubjectSchema, ExtensionsSchema, FPDeviceIDSessionSchema, FPDeviceIDCSRPayloadSchema } from "./device-id-payload.js";
|
|
3
|
+
import { SubjectSchema as UpstreamSubject, ExtensionsSchema as UpstreamExtensions, FPDeviceIDSessionSchema as UpstreamSession, FPDeviceIDCSRPayloadSchema as UpstreamCSR, } from "@fireproof/core-types-base";
|
|
4
|
+
const publicKey = { kty: "EC", crv: "P-256", x: "abc", y: "def" };
|
|
5
|
+
const subject = { commonName: "device-1" };
|
|
6
|
+
const fullClerkClaim = {
|
|
7
|
+
role: "member",
|
|
8
|
+
sub: "u_1",
|
|
9
|
+
userId: "u_1",
|
|
10
|
+
params: {
|
|
11
|
+
email: "a@b.c",
|
|
12
|
+
email_verified: true,
|
|
13
|
+
first: "First",
|
|
14
|
+
image_url: "http://x/y.png",
|
|
15
|
+
last: "Last",
|
|
16
|
+
name: "Full Name",
|
|
17
|
+
public_meta: {},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const leanClerkClaim = {
|
|
21
|
+
role: "member",
|
|
22
|
+
sub: "u_1",
|
|
23
|
+
userId: "u_1",
|
|
24
|
+
params: { email: "a@b.c", email_verified: true, public_meta: {} },
|
|
25
|
+
};
|
|
26
|
+
const now = 1_700_000_000;
|
|
27
|
+
const validSession = { iss: "x", sub: "device-id", deviceId: "dev", seq: 1, exp: now + 120, nbf: now - 2, iat: now, jti: "j" };
|
|
28
|
+
const csrPayload = (creatingUser) => ({
|
|
29
|
+
sub: "device-1",
|
|
30
|
+
iss: "csr-client",
|
|
31
|
+
aud: "certificate-authority",
|
|
32
|
+
iat: now,
|
|
33
|
+
exp: now + 3600,
|
|
34
|
+
jti: "j",
|
|
35
|
+
...(creatingUser ? { creatingUser } : {}),
|
|
36
|
+
csr: {
|
|
37
|
+
subject,
|
|
38
|
+
publicKey,
|
|
39
|
+
extensions: { subjectAltName: [], keyUsage: ["digitalSignature"], extendedKeyUsage: ["serverAuth"] },
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
describe("device-id payload schemas — owned vs upstream parity (non-Clerk parts)", () => {
|
|
43
|
+
it("Subject: owned and upstream agree on accept/reject", () => {
|
|
44
|
+
expect(SubjectSchema.safeParse(subject).success).toBe(true);
|
|
45
|
+
expect(SubjectSchema.safeParse(subject).success).toBe(UpstreamSubject.safeParse(subject).success);
|
|
46
|
+
expect(SubjectSchema.safeParse({}).success).toBe(false);
|
|
47
|
+
expect(SubjectSchema.safeParse({}).success).toBe(UpstreamSubject.safeParse({}).success);
|
|
48
|
+
const badCountry = { commonName: "d", countryName: "USA" };
|
|
49
|
+
expect(SubjectSchema.safeParse(badCountry).success).toBe(false);
|
|
50
|
+
expect(SubjectSchema.safeParse(badCountry).success).toBe(UpstreamSubject.safeParse(badCountry).success);
|
|
51
|
+
});
|
|
52
|
+
it("Extensions: owned and upstream agree", () => {
|
|
53
|
+
const ext = { keyUsage: ["digitalSignature"], extendedKeyUsage: ["serverAuth"] };
|
|
54
|
+
expect(ExtensionsSchema.safeParse(ext).success).toBe(true);
|
|
55
|
+
expect(ExtensionsSchema.safeParse(ext).success).toBe(UpstreamExtensions.safeParse(ext).success);
|
|
56
|
+
const badEnum = { keyUsage: ["notAUsage"] };
|
|
57
|
+
expect(ExtensionsSchema.safeParse(badEnum).success).toBe(false);
|
|
58
|
+
expect(ExtensionsSchema.safeParse(badEnum).success).toBe(UpstreamExtensions.safeParse(badEnum).success);
|
|
59
|
+
});
|
|
60
|
+
it("FPDeviceIDSession: owned and upstream agree (valid + strict + seq bounds)", () => {
|
|
61
|
+
expect(FPDeviceIDSessionSchema.safeParse(validSession).success).toBe(true);
|
|
62
|
+
expect(UpstreamSession.safeParse(validSession).success).toBe(true);
|
|
63
|
+
const extra = { ...validSession, bogus: 1 };
|
|
64
|
+
expect(FPDeviceIDSessionSchema.safeParse(extra).success).toBe(false);
|
|
65
|
+
expect(FPDeviceIDSessionSchema.safeParse(extra).success).toBe(UpstreamSession.safeParse(extra).success);
|
|
66
|
+
const negSeq = { ...validSession, seq: -1 };
|
|
67
|
+
expect(FPDeviceIDSessionSchema.safeParse(negSeq).success).toBe(false);
|
|
68
|
+
expect(FPDeviceIDSessionSchema.safeParse(negSeq).success).toBe(UpstreamSession.safeParse(negSeq).success);
|
|
69
|
+
});
|
|
70
|
+
it("FPDeviceIDCSRPayload: owned and upstream agree on a CSR with no clerk claim", () => {
|
|
71
|
+
expect(FPDeviceIDCSRPayloadSchema.safeParse(csrPayload()).success).toBe(true);
|
|
72
|
+
expect(UpstreamCSR.safeParse(csrPayload()).success).toBe(true);
|
|
73
|
+
const extra = { ...csrPayload(), csr: { ...csrPayload().csr, bogus: 1 } };
|
|
74
|
+
expect(FPDeviceIDCSRPayloadSchema.safeParse(extra).success).toBe(false);
|
|
75
|
+
expect(FPDeviceIDCSRPayloadSchema.safeParse(extra).success).toBe(UpstreamCSR.safeParse(extra).success);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("device-id CSR payload — owned Clerk-claim leniency (patch-removal gate)", () => {
|
|
79
|
+
it("accepts a CSR whose creatingUser clerk claim omits first/image_url/last/name", () => {
|
|
80
|
+
expect(FPDeviceIDCSRPayloadSchema.safeParse(csrPayload({ type: "clerk", claims: leanClerkClaim })).success).toBe(true);
|
|
81
|
+
expect(UpstreamCSR.safeParse(csrPayload({ type: "clerk", claims: leanClerkClaim })).success).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
it("accepts a CSR whose creatingUser carries a fully-populated clerk claim", () => {
|
|
84
|
+
expect(FPDeviceIDCSRPayloadSchema.safeParse(csrPayload({ type: "clerk", claims: fullClerkClaim })).success).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=device-id-payload.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-id-payload.test.js","sourceRoot":"","sources":["../../jsr/types/device-id-payload.test.ts"],"names":[],"mappings":"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"}
|
package/types/wire.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
import type { ClerkClaim } from "../clerk-claim.js";
|
|
3
4
|
import type { JWKPublic } from "@fireproof/core-types-base";
|
|
@@ -117,6 +118,11 @@ export declare const JWKPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
117
118
|
}>;
|
|
118
119
|
x: z.ZodString;
|
|
119
120
|
}, z.core.$strip>], "kty">>;
|
|
121
|
+
export declare function toJwksAlg(jwk: {
|
|
122
|
+
kty?: string;
|
|
123
|
+
crv?: string;
|
|
124
|
+
alg?: string;
|
|
125
|
+
}): Result<string>;
|
|
120
126
|
export interface DashAuthType {
|
|
121
127
|
readonly type: "ucan" | "clerk" | "device-id";
|
|
122
128
|
readonly token: string;
|
package/types/wire.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
const JWKCommon = z.object({
|
|
3
4
|
kty: z.enum(["RSA", "EC", "oct", "OKP"]),
|
|
@@ -38,4 +39,43 @@ export const JWKPublicSchema = JWKCommon.and(z.discriminatedUnion("kty", [
|
|
|
38
39
|
z.object({ kty: z.literal("oct"), k: z.string() }),
|
|
39
40
|
z.object({ kty: z.literal("OKP"), crv: z.enum(["Ed25519", "Ed448", "X25519", "X448"]), x: z.string() }),
|
|
40
41
|
]));
|
|
42
|
+
export function toJwksAlg(jwk) {
|
|
43
|
+
if (jwk.alg) {
|
|
44
|
+
return Result.Ok(jwk.alg);
|
|
45
|
+
}
|
|
46
|
+
switch (jwk.kty) {
|
|
47
|
+
case "EC": {
|
|
48
|
+
switch (jwk.crv) {
|
|
49
|
+
case "P-256":
|
|
50
|
+
return Result.Ok("ES256");
|
|
51
|
+
case "P-384":
|
|
52
|
+
return Result.Ok("ES384");
|
|
53
|
+
case "P-521":
|
|
54
|
+
return Result.Ok("ES512");
|
|
55
|
+
case "secp256k1":
|
|
56
|
+
return Result.Ok("ES256K");
|
|
57
|
+
default:
|
|
58
|
+
return Result.Err(`Unsupported EC curve: ${jwk.crv}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
case "RSA": {
|
|
62
|
+
return Result.Ok("RS256");
|
|
63
|
+
}
|
|
64
|
+
case "OKP": {
|
|
65
|
+
switch (jwk.crv) {
|
|
66
|
+
case "Ed25519":
|
|
67
|
+
return Result.Ok("EdDSA");
|
|
68
|
+
case "Ed448":
|
|
69
|
+
return Result.Ok("EdDSA");
|
|
70
|
+
default:
|
|
71
|
+
return Result.Err(`Unsupported OKP curve: ${jwk.crv}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
case "oct": {
|
|
75
|
+
return Result.Ok("HS256");
|
|
76
|
+
}
|
|
77
|
+
default:
|
|
78
|
+
return Result.Err(`Unsupported key type: ${jwk.kty}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
41
81
|
//# sourceMappingURL=wire.js.map
|
package/types/wire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../jsr/types/wire.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../jsr/types/wire.ts"],"names":[],"mappings":"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"}
|