@vibes.diy/identity 3.0.4 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/clerk-claim.d.ts +1 -0
- package/clerk-claim.js.map +1 -1
- package/dash-api/clerk-token.d.ts +1 -1
- package/dash-api/dash-client.d.ts +1 -1
- package/dash-api/dash-client.js.map +1 -1
- package/dash-api/protocols-base-jwt.d.ts +23 -0
- package/dash-api/protocols-base-jwt.js +13 -0
- package/dash-api/protocols-base-jwt.js.map +1 -0
- package/dash-api/protocols-cloud-types.d.ts +127 -0
- package/dash-api/protocols-cloud-types.js +45 -0
- package/dash-api/protocols-cloud-types.js.map +1 -0
- package/dash-api/protocols-dashboard/dash-types.d.ts +27 -0
- package/dash-api/protocols-dashboard/dash-types.js +2 -0
- package/dash-api/protocols-dashboard/dash-types.js.map +1 -0
- package/dash-api/protocols-dashboard/fp-api-interface.d.ts +24 -0
- package/dash-api/protocols-dashboard/fp-api-interface.js +2 -0
- package/dash-api/protocols-dashboard/fp-api-interface.js.map +1 -0
- package/dash-api/protocols-dashboard/index.d.ts +13 -0
- package/dash-api/protocols-dashboard/index.js +6 -0
- package/dash-api/protocols-dashboard/index.js.map +1 -0
- package/dash-api/protocols-dashboard/msg-is.d.ts +68 -0
- package/dash-api/protocols-dashboard/msg-is.js +184 -0
- package/dash-api/protocols-dashboard/msg-is.js.map +1 -0
- package/dash-api/protocols-dashboard/msg-types.d.ts +429 -0
- package/dash-api/protocols-dashboard/msg-types.js +4 -0
- package/dash-api/protocols-dashboard/msg-types.js.map +1 -0
- package/dash-api/protocols-dashboard/token.d.ts +37 -0
- package/dash-api/protocols-dashboard/token.js +7 -0
- package/dash-api/protocols-dashboard/token.js.map +1 -0
- package/dash-api/token.d.ts +3 -3
- package/dash-api/token.js +6 -0
- package/dash-api/token.js.map +1 -1
- package/device-id/ca.d.ts +6 -2
- package/device-id/ca.js.map +1 -1
- package/device-id/certor.d.ts +3 -2
- package/device-id/certor.js.map +1 -1
- package/device-id/csr.d.ts +2 -1
- package/device-id/csr.js.map +1 -1
- package/device-id/device-id-wire-golden.fixture.json +23 -0
- package/device-id/key.d.ts +2 -2
- package/device-id/register-golden.test.d.ts +1 -0
- package/device-id/register-golden.test.js +98 -0
- package/device-id/register-golden.test.js.map +1 -0
- package/device-id/register.d.ts +22 -0
- package/device-id/register.js +162 -0
- package/device-id/register.js.map +1 -0
- package/device-id/sign.d.ts +3 -1
- package/device-id/sign.js.map +1 -1
- package/device-id/test-helpers.d.ts +19 -0
- package/device-id/test-helpers.js +72 -0
- package/device-id/test-helpers.js.map +1 -0
- package/device-id/validator.d.ts +2 -1
- package/device-id/validator.js.map +1 -1
- package/device-id/verify.d.ts +3 -2
- package/device-id/verify.js.map +1 -1
- package/device-id/wire-golden.test.d.ts +1 -0
- package/device-id/wire-golden.test.js +20 -0
- package/device-id/wire-golden.test.js.map +1 -0
- package/index.d.ts +6 -3
- package/index.js.map +1 -1
- package/keybag/key-bag-file.d.ts +1 -1
- package/keybag/key-bag-memory.d.ts +1 -1
- package/keybag/key-bag.d.ts +3 -1
- package/keybag/key-bag.js.map +1 -1
- package/keybag/keybag-golden.fixture.json +70 -70
- package/keybag/keybag.d.ts +1 -1
- package/keybag/sys-file-system/deno-filesystem.d.ts +1 -1
- package/keybag/sys-file-system/factory.d.ts +1 -1
- package/keybag/sys-file-system/node-filesystem.d.ts +1 -1
- package/node.d.ts +4 -4
- package/node.js +1 -1
- package/node.js.map +1 -1
- package/package.json +9 -7
- package/runtime/superthis.d.ts +1 -1
- package/runtime-context.d.ts +1 -1
- package/server.d.ts +1 -1
- package/server.js +1 -1
- package/server.js.map +1 -1
- package/sts/index.d.ts +2 -1
- package/sts/index.js.map +1 -1
- package/testing.d.ts +7 -0
- package/testing.js +7 -0
- package/testing.js.map +1 -0
- package/types/cert-payload.d.ts +45 -1
- package/types/cert-payload.js.map +1 -1
- package/types/device-id-payload.d.ts +67 -1
- package/types/device-id-payload.js.map +1 -1
- package/types/device-id-payload.test.js +5 -17
- package/types/device-id-payload.test.js.map +1 -1
- package/types/device-id-types.d.ts +93 -0
- package/types/device-id-types.js +2 -0
- package/types/device-id-types.js.map +1 -0
- package/types/keybag-item.d.ts +15 -0
- package/types/keybag-item.js +2 -0
- package/types/keybag-item.js.map +1 -0
- package/types/sthis.d.ts +84 -0
- package/types/sthis.js +2 -0
- package/types/sthis.js.map +1 -0
- package/types/wire.d.ts +53 -1
- package/types/wire.js.map +1 -1
- package/types/wire.test.js +5 -9
- package/types/wire.test.js.map +1 -1
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import
|
|
2
|
+
import { type JWKPublic } from "./wire.js";
|
|
3
|
+
import { type ClerkClaim } from "../clerk-claim.js";
|
|
4
|
+
export interface JWTPayload {
|
|
5
|
+
azp?: string;
|
|
6
|
+
iss?: string;
|
|
7
|
+
sub?: string;
|
|
8
|
+
aud?: string | string[];
|
|
9
|
+
exp?: number;
|
|
10
|
+
nbf?: number;
|
|
11
|
+
iat?: number;
|
|
12
|
+
jti?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Subject {
|
|
15
|
+
commonName: string;
|
|
16
|
+
countryName?: string;
|
|
17
|
+
stateOrProvinceName?: string;
|
|
18
|
+
locality?: string;
|
|
19
|
+
organization?: string;
|
|
20
|
+
organizationalUnitName?: string;
|
|
21
|
+
emailAddress?: string;
|
|
22
|
+
serialNumber?: string;
|
|
23
|
+
streetAddress?: string;
|
|
24
|
+
postalCode?: string;
|
|
25
|
+
businessCategory?: string;
|
|
26
|
+
jurisdictionCountryName?: string;
|
|
27
|
+
jurisdictionStateOrProvinceName?: string;
|
|
28
|
+
jurisdictionLocalityName?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface Extensions {
|
|
31
|
+
subjectAltName?: string[];
|
|
32
|
+
keyUsage?: ("digitalSignature" | "nonRepudiation" | "keyEncipherment" | "dataEncipherment" | "keyAgreement" | "keyCertSign" | "cRLSign" | "encipherOnly" | "decipherOnly")[];
|
|
33
|
+
extendedKeyUsage?: ("serverAuth" | "clientAuth" | "codeSigning" | "emailProtection" | "timeStamping" | "OCSPSigning" | "ipsecIKE" | "msCodeInd" | "msCodeCom" | "msCTLSign" | "msEFS")[];
|
|
34
|
+
basicConstraints?: {
|
|
35
|
+
cA?: boolean;
|
|
36
|
+
pathLenConstraint?: number;
|
|
37
|
+
};
|
|
38
|
+
authorityKeyIdentifier?: string;
|
|
39
|
+
subjectKeyIdentifier?: string;
|
|
40
|
+
certificatePolicies?: {
|
|
41
|
+
policyIdentifier: string;
|
|
42
|
+
policyQualifiers?: string[];
|
|
43
|
+
}[];
|
|
44
|
+
crlDistributionPoints?: string[];
|
|
45
|
+
authorityInfoAccess?: {
|
|
46
|
+
ocsp?: string[];
|
|
47
|
+
caIssuers?: string[];
|
|
48
|
+
};
|
|
49
|
+
nameConstraints?: {
|
|
50
|
+
permitted?: string[];
|
|
51
|
+
excluded?: string[];
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export type FPDeviceIDCSRPayload = Readonly<JWTPayload & {
|
|
55
|
+
creatingUser?: {
|
|
56
|
+
type: "clerk";
|
|
57
|
+
claims: ClerkClaim;
|
|
58
|
+
};
|
|
59
|
+
csr: Readonly<{
|
|
60
|
+
subject: Subject;
|
|
61
|
+
publicKey: JWKPublic;
|
|
62
|
+
extensions?: Extensions;
|
|
63
|
+
}>;
|
|
64
|
+
}>;
|
|
65
|
+
export type FPDeviceIDSession = Readonly<JWTPayload & {
|
|
66
|
+
deviceId: string;
|
|
67
|
+
seq: number;
|
|
68
|
+
}>;
|
|
3
69
|
export declare const SubjectSchema: z.ZodType<Subject>;
|
|
4
70
|
export declare const ExtensionsSchema: z.ZodType<Extensions>;
|
|
5
71
|
export declare const FPDeviceIDCSRPayloadSchema: z.ZodType<FPDeviceIDCSRPayload>;
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"device-id-payload.js","sourceRoot":"","sources":["../../jsr/types/device-id-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
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
3
|
const publicKey = { kty: "EC", crv: "P-256", x: "abc", y: "def" };
|
|
5
4
|
const subject = { commonName: "device-1" };
|
|
6
5
|
const fullClerkClaim = {
|
|
@@ -39,46 +38,35 @@ const csrPayload = (creatingUser) => ({
|
|
|
39
38
|
extensions: { subjectAltName: [], keyUsage: ["digitalSignature"], extendedKeyUsage: ["serverAuth"] },
|
|
40
39
|
},
|
|
41
40
|
});
|
|
42
|
-
describe("device-id payload schemas — owned
|
|
43
|
-
it("Subject:
|
|
41
|
+
describe("device-id payload schemas — owned (frozen at core-types-base 0.24.19)", () => {
|
|
42
|
+
it("Subject: accepts a valid subject, rejects missing commonName / bad countryName", () => {
|
|
44
43
|
expect(SubjectSchema.safeParse(subject).success).toBe(true);
|
|
45
|
-
expect(SubjectSchema.safeParse(subject).success).toBe(UpstreamSubject.safeParse(subject).success);
|
|
46
44
|
expect(SubjectSchema.safeParse({}).success).toBe(false);
|
|
47
|
-
expect(SubjectSchema.safeParse({}).success).toBe(UpstreamSubject.safeParse({}).success);
|
|
48
45
|
const badCountry = { commonName: "d", countryName: "USA" };
|
|
49
46
|
expect(SubjectSchema.safeParse(badCountry).success).toBe(false);
|
|
50
|
-
expect(SubjectSchema.safeParse(badCountry).success).toBe(UpstreamSubject.safeParse(badCountry).success);
|
|
51
47
|
});
|
|
52
|
-
it("Extensions:
|
|
48
|
+
it("Extensions: accepts known usages, rejects an unknown enum member", () => {
|
|
53
49
|
const ext = { keyUsage: ["digitalSignature"], extendedKeyUsage: ["serverAuth"] };
|
|
54
50
|
expect(ExtensionsSchema.safeParse(ext).success).toBe(true);
|
|
55
|
-
expect(ExtensionsSchema.safeParse(ext).success).toBe(UpstreamExtensions.safeParse(ext).success);
|
|
56
51
|
const badEnum = { keyUsage: ["notAUsage"] };
|
|
57
52
|
expect(ExtensionsSchema.safeParse(badEnum).success).toBe(false);
|
|
58
|
-
expect(ExtensionsSchema.safeParse(badEnum).success).toBe(UpstreamExtensions.safeParse(badEnum).success);
|
|
59
53
|
});
|
|
60
|
-
it("FPDeviceIDSession:
|
|
54
|
+
it("FPDeviceIDSession: valid passes; .strict() + seq bounds reject", () => {
|
|
61
55
|
expect(FPDeviceIDSessionSchema.safeParse(validSession).success).toBe(true);
|
|
62
|
-
expect(UpstreamSession.safeParse(validSession).success).toBe(true);
|
|
63
56
|
const extra = { ...validSession, bogus: 1 };
|
|
64
57
|
expect(FPDeviceIDSessionSchema.safeParse(extra).success).toBe(false);
|
|
65
|
-
expect(FPDeviceIDSessionSchema.safeParse(extra).success).toBe(UpstreamSession.safeParse(extra).success);
|
|
66
58
|
const negSeq = { ...validSession, seq: -1 };
|
|
67
59
|
expect(FPDeviceIDSessionSchema.safeParse(negSeq).success).toBe(false);
|
|
68
|
-
expect(FPDeviceIDSessionSchema.safeParse(negSeq).success).toBe(UpstreamSession.safeParse(negSeq).success);
|
|
69
60
|
});
|
|
70
|
-
it("FPDeviceIDCSRPayload:
|
|
61
|
+
it("FPDeviceIDCSRPayload: a CSR with no clerk claim passes; .strict() rejects unknown keys", () => {
|
|
71
62
|
expect(FPDeviceIDCSRPayloadSchema.safeParse(csrPayload()).success).toBe(true);
|
|
72
|
-
expect(UpstreamCSR.safeParse(csrPayload()).success).toBe(true);
|
|
73
63
|
const extra = { ...csrPayload(), csr: { ...csrPayload().csr, bogus: 1 } };
|
|
74
64
|
expect(FPDeviceIDCSRPayloadSchema.safeParse(extra).success).toBe(false);
|
|
75
|
-
expect(FPDeviceIDCSRPayloadSchema.safeParse(extra).success).toBe(UpstreamCSR.safeParse(extra).success);
|
|
76
65
|
});
|
|
77
66
|
});
|
|
78
67
|
describe("device-id CSR payload — owned Clerk-claim leniency (patch-removal gate)", () => {
|
|
79
68
|
it("accepts a CSR whose creatingUser clerk claim omits first/image_url/last/name", () => {
|
|
80
69
|
expect(FPDeviceIDCSRPayloadSchema.safeParse(csrPayload({ type: "clerk", claims: leanClerkClaim })).success).toBe(true);
|
|
81
|
-
expect(UpstreamCSR.safeParse(csrPayload({ type: "clerk", claims: leanClerkClaim })).success).toBe(false);
|
|
82
70
|
});
|
|
83
71
|
it("accepts a CSR whose creatingUser carries a fully-populated clerk claim", () => {
|
|
84
72
|
expect(FPDeviceIDCSRPayloadSchema.safeParse(csrPayload({ type: "clerk", claims: fullClerkClaim })).success).toBe(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-id-payload.test.js","sourceRoot":"","sources":["../../jsr/types/device-id-payload.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"device-id-payload.test.js","sourceRoot":"","sources":["../../jsr/types/device-id-payload.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Result } from "@adviser/cement";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { CertificatePayload, IssueCertificateResult } from "./cert-payload.js";
|
|
4
|
+
import type { JWKPublic, JWKPrivate } from "./wire.js";
|
|
5
|
+
import type { ClerkClaim } from "../clerk-claim.js";
|
|
6
|
+
export interface CAActions {
|
|
7
|
+
generateSerialNumber(pub: JWKPublic): Promise<string>;
|
|
8
|
+
}
|
|
9
|
+
export interface DeviceIdCAJsonParam {
|
|
10
|
+
readonly privateKey: JWKPrivate | string;
|
|
11
|
+
readonly signedCert: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CACertResult {
|
|
14
|
+
readonly certificate: CertificatePayload;
|
|
15
|
+
readonly jwtStr: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DeviceIdTransport {
|
|
18
|
+
issueCertificate(csrJWT: string): Promise<Result<IssueCertificateResult>>;
|
|
19
|
+
}
|
|
20
|
+
export interface DeviceIdProtocol {
|
|
21
|
+
issueCertificate(msg: string): Promise<Result<IssueCertificateResult>>;
|
|
22
|
+
verifyMsg<S>(message: string, schema?: S): Promise<VerifyWithCertificateResult<S>>;
|
|
23
|
+
}
|
|
24
|
+
export interface DeviceIdProtocolSrvOpts {
|
|
25
|
+
readonly actions: CAActions;
|
|
26
|
+
}
|
|
27
|
+
export interface CertorIf {
|
|
28
|
+
asCert(): CertificatePayload;
|
|
29
|
+
parseCertificateSubject(s: string): Record<string, string>;
|
|
30
|
+
asSHA1(): Promise<string>;
|
|
31
|
+
asSHA256(): Promise<string>;
|
|
32
|
+
asBase64(): string;
|
|
33
|
+
}
|
|
34
|
+
export interface HeaderCertInfo {
|
|
35
|
+
readonly certificate: CertorIf;
|
|
36
|
+
readonly certificateChain: CertorIf[];
|
|
37
|
+
readonly thumbprint?: string;
|
|
38
|
+
readonly thumbprintSha256?: string;
|
|
39
|
+
readonly keyId?: string;
|
|
40
|
+
readonly algorithm?: string;
|
|
41
|
+
readonly certificateUrl?: string;
|
|
42
|
+
readonly rawHeader: unknown;
|
|
43
|
+
}
|
|
44
|
+
export interface VerifyWithCertificateSuccess<T = unknown> {
|
|
45
|
+
readonly valid: true;
|
|
46
|
+
readonly payload: T;
|
|
47
|
+
readonly header: unknown;
|
|
48
|
+
readonly certificate: HeaderCertInfo & {
|
|
49
|
+
readonly validation: {
|
|
50
|
+
readonly valid: true;
|
|
51
|
+
readonly subject: Record<string, string>;
|
|
52
|
+
readonly issuer: Record<string, string>;
|
|
53
|
+
readonly serialNumber: string;
|
|
54
|
+
readonly notBefore: Date;
|
|
55
|
+
readonly notAfter: Date;
|
|
56
|
+
readonly publicKey: JWKPublic;
|
|
57
|
+
readonly trustedCA?: CertificatePayload;
|
|
58
|
+
readonly validityPeriod: {
|
|
59
|
+
readonly days: number;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
readonly publicKey: JWKPublic;
|
|
63
|
+
};
|
|
64
|
+
readonly verificationTimestamp: string;
|
|
65
|
+
}
|
|
66
|
+
export interface VerifyWithCertificateError {
|
|
67
|
+
readonly valid: false;
|
|
68
|
+
readonly error: Error;
|
|
69
|
+
readonly errorCode: string;
|
|
70
|
+
readonly partialResults: {
|
|
71
|
+
readonly certificateExtracted: boolean;
|
|
72
|
+
readonly jwtSignatureValid: boolean;
|
|
73
|
+
readonly certificateInfo?: HeaderCertInfo;
|
|
74
|
+
};
|
|
75
|
+
readonly verificationTimestamp: string;
|
|
76
|
+
}
|
|
77
|
+
export type VerifyWithCertificateResult<T> = VerifyWithCertificateSuccess<T extends z.ZodTypeAny ? z.infer<T> : unknown> | VerifyWithCertificateError;
|
|
78
|
+
export interface VerifyWithCertificateOptions {
|
|
79
|
+
readonly clockTolerance: number;
|
|
80
|
+
readonly maxAge?: number;
|
|
81
|
+
readonly deviceIdCA: DeviceIdCAIf;
|
|
82
|
+
}
|
|
83
|
+
export interface DeviceIdKeyIf {
|
|
84
|
+
fingerPrint(): Promise<string>;
|
|
85
|
+
exportPrivateJWK(): Promise<JWKPrivate>;
|
|
86
|
+
publicKey(): Promise<JWKPublic>;
|
|
87
|
+
}
|
|
88
|
+
export interface DeviceIdCAIf {
|
|
89
|
+
getCAKey(): DeviceIdKeyIf;
|
|
90
|
+
processCSR(csrJWS: string, addition: ClerkClaim): Promise<Result<IssueCertificateResult>>;
|
|
91
|
+
caCertificate(): Promise<Result<CACertResult>>;
|
|
92
|
+
issueCertificate(devId: unknown): Promise<Result<IssueCertificateResult>>;
|
|
93
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-id-types.js","sourceRoot":"","sources":["../../jsr/types/device-id-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Option } from "@adviser/cement";
|
|
2
|
+
import type { JWKPrivate } from "./wire.js";
|
|
3
|
+
import type { CertificatePayload } from "./cert-payload.js";
|
|
4
|
+
export type DeviceIdKeyBagItem = Readonly<{
|
|
5
|
+
deviceId: JWKPrivate;
|
|
6
|
+
cert?: Readonly<{
|
|
7
|
+
certificateJWT: string;
|
|
8
|
+
certificatePayload: CertificatePayload;
|
|
9
|
+
}>;
|
|
10
|
+
}>;
|
|
11
|
+
export interface DeviceIdResult {
|
|
12
|
+
readonly deviceId: Option<JWKPrivate>;
|
|
13
|
+
readonly cert: Option<DeviceIdKeyBagItem["cert"]>;
|
|
14
|
+
readonly error?: Error;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keybag-item.js","sourceRoot":"","sources":["../../jsr/types/keybag-item.ts"],"names":[],"mappings":""}
|
package/types/sthis.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { Env, Logger, CryptoRuntime, AppContext, EnvFactoryOpts, Result } from "@adviser/cement";
|
|
2
|
+
export type ToUInt8 = Uint8Array | Result<Uint8Array>;
|
|
3
|
+
export type PromiseToUInt8 = ToUInt8 | Promise<Uint8Array> | Promise<Result<Uint8Array>>;
|
|
4
|
+
export interface FPStats {
|
|
5
|
+
isFile(): boolean;
|
|
6
|
+
isDirectory(): boolean;
|
|
7
|
+
isBlockDevice(): boolean;
|
|
8
|
+
isCharacterDevice(): boolean;
|
|
9
|
+
isSymbolicLink(): boolean;
|
|
10
|
+
isFIFO(): boolean;
|
|
11
|
+
isSocket(): boolean;
|
|
12
|
+
uid: number | Falsy;
|
|
13
|
+
gid: number | Falsy;
|
|
14
|
+
size: number | Falsy;
|
|
15
|
+
atime: Date | Falsy;
|
|
16
|
+
mtime: Date | Falsy;
|
|
17
|
+
ctime: Date | Falsy;
|
|
18
|
+
birthtime: Date | Falsy;
|
|
19
|
+
}
|
|
20
|
+
export type Falsy = false | null | undefined;
|
|
21
|
+
export interface SysFileSystem {
|
|
22
|
+
start(): Promise<SysFileSystem>;
|
|
23
|
+
mkdir(path: string, options?: {
|
|
24
|
+
recursive: boolean;
|
|
25
|
+
}): Promise<string | undefined>;
|
|
26
|
+
readdir(path: string): Promise<string[]>;
|
|
27
|
+
rm(path: string, options?: {
|
|
28
|
+
recursive: boolean;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
copyFile(source: string, destination: string): Promise<void>;
|
|
31
|
+
readfile(path: string): Promise<Uint8Array>;
|
|
32
|
+
stat(path: string): Promise<FPStats>;
|
|
33
|
+
unlink(path: string): Promise<void>;
|
|
34
|
+
writefile(path: string, data: Uint8Array | string): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export interface PathOps {
|
|
37
|
+
join(...args: string[]): string;
|
|
38
|
+
dirname(path: string): string;
|
|
39
|
+
basename(path: string): string;
|
|
40
|
+
}
|
|
41
|
+
export interface BaseXXEndeCoder {
|
|
42
|
+
encode(input: string | ToUInt8): string;
|
|
43
|
+
decodeUint8(input: string): Uint8Array;
|
|
44
|
+
decode(input: string): string;
|
|
45
|
+
}
|
|
46
|
+
export interface TextEndeCoder {
|
|
47
|
+
id(): string;
|
|
48
|
+
encode(input: string): Uint8Array;
|
|
49
|
+
decode(input: ToUInt8): string;
|
|
50
|
+
readonly base64: BaseXXEndeCoder;
|
|
51
|
+
readonly base58: BaseXXEndeCoder;
|
|
52
|
+
}
|
|
53
|
+
export interface TextEndeCodable {
|
|
54
|
+
txt: TextEndeCoder;
|
|
55
|
+
}
|
|
56
|
+
export interface SuperThisOpts {
|
|
57
|
+
readonly logger: Logger;
|
|
58
|
+
readonly pathOps: PathOps;
|
|
59
|
+
readonly crypto: CryptoRuntime;
|
|
60
|
+
readonly env: Partial<EnvFactoryOpts>;
|
|
61
|
+
readonly txt: TextEndeCoder;
|
|
62
|
+
readonly ctx: AppContext;
|
|
63
|
+
}
|
|
64
|
+
export interface SuperThis {
|
|
65
|
+
readonly logger: Logger;
|
|
66
|
+
readonly loggerCollector?: Logger;
|
|
67
|
+
readonly env: Env;
|
|
68
|
+
readonly pathOps: PathOps;
|
|
69
|
+
readonly ctx: AppContext;
|
|
70
|
+
readonly txt: TextEndeCoder;
|
|
71
|
+
timeOrderedNextId(time?: number): {
|
|
72
|
+
str: string;
|
|
73
|
+
toString: () => string;
|
|
74
|
+
};
|
|
75
|
+
nextId(bytes?: number): {
|
|
76
|
+
str: string;
|
|
77
|
+
bin: Uint8Array;
|
|
78
|
+
toString: () => string;
|
|
79
|
+
};
|
|
80
|
+
start(): Promise<void>;
|
|
81
|
+
clone(override: Partial<SuperThisOpts>): SuperThis;
|
|
82
|
+
}
|
|
83
|
+
export type DocObject = NonNullable<unknown>;
|
|
84
|
+
export type DocTypes = DocObject;
|
package/types/sthis.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sthis.js","sourceRoot":"","sources":["../../jsr/types/sthis.ts"],"names":[],"mappings":""}
|
package/types/wire.d.ts
CHANGED
|
@@ -1,7 +1,58 @@
|
|
|
1
1
|
import { Result } from "@adviser/cement";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import type { ClerkClaim } from "../clerk-claim.js";
|
|
4
|
-
|
|
4
|
+
interface JWKCommonFields {
|
|
5
|
+
use?: "sig" | "enc";
|
|
6
|
+
key_ops?: ("sign" | "verify" | "encrypt" | "decrypt" | "wrapKey" | "unwrapKey" | "deriveKey" | "deriveBits")[];
|
|
7
|
+
alg?: string;
|
|
8
|
+
kid?: string;
|
|
9
|
+
x5u?: string;
|
|
10
|
+
x5c?: string[];
|
|
11
|
+
x5t?: string;
|
|
12
|
+
"x5t#S256"?: string;
|
|
13
|
+
}
|
|
14
|
+
export type JWKPublic = JWKCommonFields & ({
|
|
15
|
+
kty: "RSA";
|
|
16
|
+
n: string;
|
|
17
|
+
e: string;
|
|
18
|
+
} | {
|
|
19
|
+
kty: "EC";
|
|
20
|
+
crv: "P-256" | "P-384" | "P-521" | "secp256k1";
|
|
21
|
+
x: string;
|
|
22
|
+
y: string;
|
|
23
|
+
} | {
|
|
24
|
+
kty: "oct";
|
|
25
|
+
k: string;
|
|
26
|
+
} | {
|
|
27
|
+
kty: "OKP";
|
|
28
|
+
crv: "Ed25519" | "Ed448" | "X25519" | "X448";
|
|
29
|
+
x: string;
|
|
30
|
+
});
|
|
31
|
+
export type JWKPrivate = JWKCommonFields & ({
|
|
32
|
+
kty: "RSA";
|
|
33
|
+
n: string;
|
|
34
|
+
e: string;
|
|
35
|
+
d: string;
|
|
36
|
+
p: string;
|
|
37
|
+
q: string;
|
|
38
|
+
dp: string;
|
|
39
|
+
dq: string;
|
|
40
|
+
qi: string;
|
|
41
|
+
} | {
|
|
42
|
+
kty: "EC";
|
|
43
|
+
crv: "P-256" | "P-384" | "P-521" | "secp256k1";
|
|
44
|
+
x: string;
|
|
45
|
+
y: string;
|
|
46
|
+
d: string;
|
|
47
|
+
} | {
|
|
48
|
+
kty: "oct";
|
|
49
|
+
k: string;
|
|
50
|
+
} | {
|
|
51
|
+
kty: "OKP";
|
|
52
|
+
crv: "Ed25519" | "Ed448" | "X25519" | "X448";
|
|
53
|
+
x: string;
|
|
54
|
+
d: string;
|
|
55
|
+
});
|
|
5
56
|
export declare const JWKPrivateSchema: z.ZodIntersection<z.ZodObject<{
|
|
6
57
|
kty: z.ZodEnum<{
|
|
7
58
|
EC: "EC";
|
|
@@ -167,3 +218,4 @@ export interface FPApiParameters {
|
|
|
167
218
|
maxLedgers: number;
|
|
168
219
|
maxAppIdBindings: number;
|
|
169
220
|
}
|
|
221
|
+
export {};
|
package/types/wire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../jsr/types/wire.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../jsr/types/wire.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuCxB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChI,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,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAC3C,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE;IAC1B,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACpB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;KACd,CAAC;IACF,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAClD,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CACvH,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAC1C,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE;IAC1B,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACjE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACvH,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAClD,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CACxG,CAAC,CACH,CAAC;AAKF,MAAM,UAAU,SAAS,CAAC,GAAiD;IACzE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,EAAE,CAAC;YACV,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;gBAChB,KAAK,OAAO;oBACV,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B,KAAK,OAAO;oBACV,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B,KAAK,OAAO;oBACV,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B,KAAK,WAAW;oBACd,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC7B;oBACE,OAAO,MAAM,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,KAAK,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,KAAK,EAAE,CAAC;YACX,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;gBAChB,KAAK,SAAS;oBACZ,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B,KAAK,OAAO;oBACV,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B;oBACE,OAAO,MAAM,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,KAAK,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QACD;YACE,OAAO,MAAM,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
package/types/wire.test.js
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
2
|
import { generateKeyPair, exportJWK } from "jose";
|
|
3
3
|
import { JWKPrivateSchema, JWKPublicSchema } from "./wire.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
it("agrees with upstream on a real ES256 private + public JWK", async () => {
|
|
4
|
+
describe("JWK schema parity (owned; frozen at core-types-base 0.24.19)", () => {
|
|
5
|
+
it("accepts a real ES256 private + public JWK", async () => {
|
|
7
6
|
const { privateKey, publicKey } = await generateKeyPair("ES256", { extractable: true });
|
|
8
7
|
const priv = await exportJWK(privateKey);
|
|
9
8
|
const pub = await exportJWK(publicKey);
|
|
10
9
|
expect(JWKPrivateSchema.safeParse(priv).success).toBe(true);
|
|
11
|
-
expect(JWKPrivateSchema.safeParse(priv).success).toBe(UpstreamPrivate.safeParse(priv).success);
|
|
12
10
|
expect(JWKPublicSchema.safeParse(pub).success).toBe(true);
|
|
13
|
-
expect(JWKPublicSchema.safeParse(
|
|
14
|
-
expect(JWKPublicSchema.safeParse(priv).success).toBe(UpstreamPublic.safeParse(priv).success);
|
|
11
|
+
expect(JWKPublicSchema.safeParse(priv).success).toBe(true);
|
|
15
12
|
});
|
|
16
|
-
it("
|
|
13
|
+
it("rejects a malformed JWK (EC missing y)", () => {
|
|
17
14
|
const bad = { kty: "EC", crv: "P-256", x: "only-x" };
|
|
18
15
|
expect(JWKPublicSchema.safeParse(bad).success).toBe(false);
|
|
19
|
-
expect(
|
|
20
|
-
expect(JWKPrivateSchema.safeParse(bad).success).toBe(UpstreamPrivate.safeParse(bad).success);
|
|
16
|
+
expect(JWKPrivateSchema.safeParse(bad).success).toBe(false);
|
|
21
17
|
});
|
|
22
18
|
});
|
|
23
19
|
//# sourceMappingURL=wire.test.js.map
|
package/types/wire.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.test.js","sourceRoot":"","sources":["../../jsr/types/wire.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"wire.test.js","sourceRoot":"","sources":["../../jsr/types/wire.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQ9D,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAI1D,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|