@tinycloud/sdk-core 3.9.0-beta.3 → 3.9.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,8 @@ import { z } from 'zod';
3
3
 
4
4
  declare const CREDENTIAL_ACQUISITION_PROTOCOL: "tinycloud.credentials/acquisition/v1";
5
5
  declare const HOLDER_BINDING_DOMAIN: "tinycloud.credentials/holder-binding/v1";
6
+ /** Signing domain of the held (account, EIP-191) binding. Equal to `ACCOUNT_BINDING_DOMAIN` of held-credentials. */
7
+ declare const ACCOUNT_HOLDER_BINDING_DOMAIN: "tinycloud.credentials/account-binding/v1";
6
8
  declare const CREDENTIAL_CONTRACT_VERSION: 1;
7
9
  declare const CREDENTIAL_STEP_REGISTRY_VERSION: 1;
8
10
  declare const CREDENTIAL_FORMAT: "vc+sd-jwt";
@@ -65,14 +67,20 @@ interface CredentialFlowDescriptor {
65
67
  readonly vct: string;
66
68
  };
67
69
  readonly claims: readonly CredentialClaimDescriptor[];
68
- readonly subjectRelationship: "holder_is_subject";
70
+ readonly subjectRelationship: "holder_is_subject" | "account_is_subject";
69
71
  readonly inputs: readonly CredentialInputDescriptor[];
70
72
  readonly steps: readonly CredentialStepDescriptor[];
73
+ /** Ticket: `{EdDSA, holder-binding/v1}` with `holder_is_subject`. Held: `{EIP191, account-binding/v1}` with `account_is_subject`. */
71
74
  readonly holderBinding: {
72
75
  readonly required: true;
73
76
  readonly alg: "EdDSA";
74
77
  readonly domain: typeof HOLDER_BINDING_DOMAIN;
75
78
  readonly version: 1;
79
+ } | {
80
+ readonly required: true;
81
+ readonly alg: "EIP191";
82
+ readonly domain: typeof ACCOUNT_HOLDER_BINDING_DOMAIN;
83
+ readonly version: 1;
76
84
  };
77
85
  readonly endpoints: Readonly<Record<"request" | "state" | "challenge" | "proof" | "holderBinding" | "holderSignature" | "issue" | "result", CredentialEndpointId>>;
78
86
  readonly lifecycle: {
@@ -108,7 +116,8 @@ interface CredentialRequirement {
108
116
  readonly claims: Readonly<Record<string, string>>;
109
117
  readonly maxAgeSeconds?: number;
110
118
  }
111
- interface CredentialHolderBinding {
119
+ /** The ticket (did:key, EdDSA) holder binding: 19 fields. */
120
+ interface TicketHolderBinding {
112
121
  readonly type: typeof HOLDER_BINDING_DOMAIN;
113
122
  readonly protocol: typeof CREDENTIAL_ACQUISITION_PROTOCOL;
114
123
  readonly requestId: string;
@@ -129,6 +138,13 @@ interface CredentialHolderBinding {
129
138
  readonly issuedAt: string;
130
139
  readonly expiresAt: string;
131
140
  }
141
+ /** The held (account, EIP-191) holder binding: the ticket fields plus `credentialLifetimeSeconds`, a `urn:uuid` v4 `jti`, the account `type`. 20 fields. */
142
+ interface AccountHolderBinding extends Omit<TicketHolderBinding, "type"> {
143
+ readonly type: typeof ACCOUNT_HOLDER_BINDING_DOMAIN;
144
+ readonly credentialLifetimeSeconds: 31_536_000;
145
+ }
146
+ /** A holder binding is exactly one of the two shapes, keyed on `type`. */
147
+ type CredentialHolderBinding = TicketHolderBinding | AccountHolderBinding;
132
148
  interface IssuerVerificationKey {
133
149
  readonly kid: string;
134
150
  readonly alg: "EdDSA";
@@ -929,4 +945,4 @@ interface PolicyCredentialAdmissionV4 {
929
945
  /** Accountless admission. The request deliberately has no account custody fields. */
930
946
  declare function admitPolicyCredentialV4(input: AdmitPolicyCredentialV4Input): Promise<PolicyCredentialAdmissionV4>;
931
947
 
932
- export { type RegisterPolicyV3Input as $, ATTESTED_ENFORCER_BINDING_V2_SCHEMA as A, type BuildPolicyCredentialPresentationV3Input as B, CONTENT_SOURCE_V1_DOMAIN as C, type PolicyChallengeV3 as D, ED25519_JCS_SIGNATURE_SUITE as E, type PolicyCredentialAdmissionV3 as F, type PolicyCredentialAdmissionV4 as G, type PolicyCredentialPresentationV3 as H, type PolicyCredentialPresentationV4 as I, type JsonObject as J, type PolicyCredentialRequirementV1 as K, LAST_V2_CREATE_AT as L, MAX_LEGACY_ENVELOPE_EXPIRES_AT as M, NATIVE_PROJECTION_V1_DOMAIN as N, type PolicyRootStatusV3 as O, type PolicyEngineRecord as P, type PolicyRootV3 as Q, type PolicySessionUcanFactV1 as R, type SignedObjectSigner as S, type PolicySessionUcanV1 as T, type UnsignedPolicyEngineRecord as U, type PolicyStatus as V, ROOT_REVOCATION_V1_DOMAIN as W, ROOT_REVOCATION_V1_SCHEMA as X, ROOT_STATUS_CHECKPOINT_V1_SCHEMA as Y, ROOT_STATUS_RENEWAL_V1_DOMAIN as Z, ROOT_STATUS_V1_DOMAIN as _, type Policy as a, revokePolicyRootV3 as a$, type RegisterPolicyV3Receipt as a0, type SignCompactUcanAuthorizationInput as a1, type SignCompactUcanRootAuthorizationInput as a2, SignatureMaterialError as a3, type SignatureSuite as a4, SignatureVerificationError as a5, SignedObjectCanonicalizationError as a6, SignedObjectDigestError as a7, type SignedObjectErrorCode as a8, SignedObjectIdError as a9, canonicalizeSignedObjectUnsigned as aA, canonicalizeUnifiedPolicyCapability as aB, compactAttenuationContains as aC, contentSourceDigestHex as aD, createAndSignPolicy as aE, createAndSignPolicyEngineRecord as aF, createAndSignPolicyStatus as aG, createAndSignSignedObject as aH, createCompactPolicyDescendant as aI, createCompactPolicyInvocation as aJ, deriveSignedObjectMaterial as aK, getPolicyRootStatusV3 as aL, issuedCredentialEnvelopeFromVerified as aM, mintPolicySessionV3 as aN, normalizeUnifiedPolicyCapability as aO, parseCompactUcanAuthorization as aP, parsePolicySessionUcan as aQ, parseSignedCompactUcanAttenuation as aR, policyCidFromCanonicalBytes as aS, policyDigestHex as aT, policyIdForDigestHex as aU, policyV2DigestHex as aV, projectUnifiedPolicyCapabilities as aW, projectUnifiedPolicyCapability as aX, registerPolicyV3 as aY, renewPolicyRootStatusV3 as aZ, requestPolicyChallengeV3 as a_, type SignedObjectKind as aa, type SignedObjectMaterial as ab, SignedObjectProfileError as ac, SignedObjectSchemaError as ad, type SignedObjectSignature as ae, type SignedObjectVerificationResult as af, type SignedPolicyObject as ag, SigningKeyBindingError as ah, type UnifiedContentSource as ai, type UnifiedEncryptionCapability as aj, type UnifiedKvCapability as ak, type UnifiedNativeCapability as al, type UnifiedPolicyCapability as am, type UnifiedPolicyV1 as an, type UnifiedPolicyV2 as ao, type UnifiedResourceSelector as ap, type UnsignedPolicy as aq, type UnsignedPolicyCredentialPresentationV4 as ar, type UnsignedPolicyObject as as, type UnsignedPolicyStatus as at, type UnsignedUnifiedPolicyV2 as au, UnsupportedSignatureSuiteError as av, admitPolicyCredentialV3 as aw, admitPolicyCredentialV4 as ax, buildPolicyCredentialPresentationV3 as ay, buildPolicyCredentialPresentationV4 as az, type AdmitPolicyCredentialV3Input as b, signCompactPolicyDescendant as b0, signCompactUcanAuthorization as b1, signCompactUcanRootAuthorization as b2, signPolicyCredentialPresentationV4 as b3, signedObjectIdFor as b4, toSignedObjectError as b5, unifiedNativeProjectionHashHex as b6, unifiedPolicyCapabilityContains as b7, unifiedPolicyCapabilityDigestHex as b8, unifiedPolicyCapabilityFromNative as b9, CREDENTIAL_CONTRACT_VERSION as bA, CREDENTIAL_FORMAT as bB, CREDENTIAL_STEP_REGISTRY_VERSION as bC, type CredentialClaimDescriptor as bD, type CredentialEndpointId as bE, type CredentialInputDescriptor as bF, type CredentialProgressEvent as bG, type CredentialStepDescriptor as bH, type CredentialStepType as bI, type CredentialUxState as bJ, HOLDER_BINDING_DOMAIN as bK, type IssuerVerificationKey as bL, validatePolicyCredentialRequirementV1 as ba, validatePolicyEngineRecordSigned as bb, validatePolicyEngineRecordSignedShape as bc, validatePolicyEngineRecordUnsigned as bd, validatePolicySigned as be, validatePolicySignedShape as bf, validatePolicyStatusSigned as bg, validatePolicyStatusSignedShape as bh, validatePolicyStatusUnsigned as bi, validatePolicyUnsigned as bj, validateUnifiedPolicyV2 as bk, verifyPolicy as bl, verifyPolicyEngineRecord as bm, verifyPolicyRootRevocationV3 as bn, verifyPolicyRootStatusCheckpointV3 as bo, verifyPolicyStatus as bp, verifySignedObject as bq, type CredentialHolderBinding as br, type CredentialFlowDescriptor as bs, type CredentialRequirement as bt, type StoredCredentialRecord as bu, type VerifiedCredential as bv, type CredentialStorageReceipt as bw, type IssuedCredentialEnvelope as bx, type CredentialIssuerMetadata as by, CREDENTIAL_ACQUISITION_PROTOCOL as bz, type AdmitPolicyCredentialV4Input as c, type AttestedEnforcerBindingV2 as d, type BuildPolicyCredentialPresentationV4Input as e, type CompactPolicyDescendantInput as f, type CompactPolicyInvocationInput as g, type CompactUcanAuthorizationV1 as h, EIP191_JCS_SIGNATURE_SUITE as i, LAST_V2_READ_AT as j, POLICY_CAPABILITY_V1_DOMAIN as k, POLICY_CAPABILITY_V1_SCHEMA as l, POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE as m, POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA as n, POLICY_ENGINE_RECORD_SCHEMA as o, POLICY_PRESENTATION_V3_DOMAIN as p, POLICY_PRESENTATION_V3_SCHEMA as q, POLICY_PRESENTATION_V4_DOMAIN as r, POLICY_PRESENTATION_V4_SCHEMA as s, POLICY_SCHEMA as t, POLICY_SESSION_UCAN_V1_PROFILE as u, POLICY_STATUS_SCHEMA as v, POLICY_V1_DOMAIN as w, POLICY_V1_SCHEMA as x, POLICY_V2_DOMAIN as y, POLICY_V2_SCHEMA as z };
948
+ export { type RegisterPolicyV3Input as $, ATTESTED_ENFORCER_BINDING_V2_SCHEMA as A, type BuildPolicyCredentialPresentationV3Input as B, CONTENT_SOURCE_V1_DOMAIN as C, type PolicyChallengeV3 as D, ED25519_JCS_SIGNATURE_SUITE as E, type PolicyCredentialAdmissionV3 as F, type PolicyCredentialAdmissionV4 as G, type PolicyCredentialPresentationV3 as H, type PolicyCredentialPresentationV4 as I, type JsonObject as J, type PolicyCredentialRequirementV1 as K, LAST_V2_CREATE_AT as L, MAX_LEGACY_ENVELOPE_EXPIRES_AT as M, NATIVE_PROJECTION_V1_DOMAIN as N, type PolicyRootStatusV3 as O, type PolicyEngineRecord as P, type PolicyRootV3 as Q, type PolicySessionUcanFactV1 as R, type SignedObjectSigner as S, type PolicySessionUcanV1 as T, type UnsignedPolicyEngineRecord as U, type PolicyStatus as V, ROOT_REVOCATION_V1_DOMAIN as W, ROOT_REVOCATION_V1_SCHEMA as X, ROOT_STATUS_CHECKPOINT_V1_SCHEMA as Y, ROOT_STATUS_RENEWAL_V1_DOMAIN as Z, ROOT_STATUS_V1_DOMAIN as _, type Policy as a, revokePolicyRootV3 as a$, type RegisterPolicyV3Receipt as a0, type SignCompactUcanAuthorizationInput as a1, type SignCompactUcanRootAuthorizationInput as a2, SignatureMaterialError as a3, type SignatureSuite as a4, SignatureVerificationError as a5, SignedObjectCanonicalizationError as a6, SignedObjectDigestError as a7, type SignedObjectErrorCode as a8, SignedObjectIdError as a9, canonicalizeSignedObjectUnsigned as aA, canonicalizeUnifiedPolicyCapability as aB, compactAttenuationContains as aC, contentSourceDigestHex as aD, createAndSignPolicy as aE, createAndSignPolicyEngineRecord as aF, createAndSignPolicyStatus as aG, createAndSignSignedObject as aH, createCompactPolicyDescendant as aI, createCompactPolicyInvocation as aJ, deriveSignedObjectMaterial as aK, getPolicyRootStatusV3 as aL, issuedCredentialEnvelopeFromVerified as aM, mintPolicySessionV3 as aN, normalizeUnifiedPolicyCapability as aO, parseCompactUcanAuthorization as aP, parsePolicySessionUcan as aQ, parseSignedCompactUcanAttenuation as aR, policyCidFromCanonicalBytes as aS, policyDigestHex as aT, policyIdForDigestHex as aU, policyV2DigestHex as aV, projectUnifiedPolicyCapabilities as aW, projectUnifiedPolicyCapability as aX, registerPolicyV3 as aY, renewPolicyRootStatusV3 as aZ, requestPolicyChallengeV3 as a_, type SignedObjectKind as aa, type SignedObjectMaterial as ab, SignedObjectProfileError as ac, SignedObjectSchemaError as ad, type SignedObjectSignature as ae, type SignedObjectVerificationResult as af, type SignedPolicyObject as ag, SigningKeyBindingError as ah, type UnifiedContentSource as ai, type UnifiedEncryptionCapability as aj, type UnifiedKvCapability as ak, type UnifiedNativeCapability as al, type UnifiedPolicyCapability as am, type UnifiedPolicyV1 as an, type UnifiedPolicyV2 as ao, type UnifiedResourceSelector as ap, type UnsignedPolicy as aq, type UnsignedPolicyCredentialPresentationV4 as ar, type UnsignedPolicyObject as as, type UnsignedPolicyStatus as at, type UnsignedUnifiedPolicyV2 as au, UnsupportedSignatureSuiteError as av, admitPolicyCredentialV3 as aw, admitPolicyCredentialV4 as ax, buildPolicyCredentialPresentationV3 as ay, buildPolicyCredentialPresentationV4 as az, type AdmitPolicyCredentialV3Input as b, signCompactPolicyDescendant as b0, signCompactUcanAuthorization as b1, signCompactUcanRootAuthorization as b2, signPolicyCredentialPresentationV4 as b3, signedObjectIdFor as b4, toSignedObjectError as b5, unifiedNativeProjectionHashHex as b6, unifiedPolicyCapabilityContains as b7, unifiedPolicyCapabilityDigestHex as b8, unifiedPolicyCapabilityFromNative as b9, ACCOUNT_HOLDER_BINDING_DOMAIN as bA, type AccountHolderBinding as bB, CREDENTIAL_ACQUISITION_PROTOCOL as bC, CREDENTIAL_CONTRACT_VERSION as bD, CREDENTIAL_FORMAT as bE, CREDENTIAL_STEP_REGISTRY_VERSION as bF, type CredentialClaimDescriptor as bG, type CredentialEndpointId as bH, type CredentialInputDescriptor as bI, type CredentialProgressEvent as bJ, type CredentialStepDescriptor as bK, type CredentialStepType as bL, type CredentialUxState as bM, HOLDER_BINDING_DOMAIN as bN, type IssuerVerificationKey as bO, validatePolicyCredentialRequirementV1 as ba, validatePolicyEngineRecordSigned as bb, validatePolicyEngineRecordSignedShape as bc, validatePolicyEngineRecordUnsigned as bd, validatePolicySigned as be, validatePolicySignedShape as bf, validatePolicyStatusSigned as bg, validatePolicyStatusSignedShape as bh, validatePolicyStatusUnsigned as bi, validatePolicyUnsigned as bj, validateUnifiedPolicyV2 as bk, verifyPolicy as bl, verifyPolicyEngineRecord as bm, verifyPolicyRootRevocationV3 as bn, verifyPolicyRootStatusCheckpointV3 as bo, verifyPolicyStatus as bp, verifySignedObject as bq, type TicketHolderBinding as br, type CredentialHolderBinding as bs, type CredentialFlowDescriptor as bt, type CredentialRequirement as bu, type StoredCredentialRecord as bv, type VerifiedCredential as bw, type CredentialStorageReceipt as bx, type IssuedCredentialEnvelope as by, type CredentialIssuerMetadata as bz, type AdmitPolicyCredentialV4Input as c, type AttestedEnforcerBindingV2 as d, type BuildPolicyCredentialPresentationV4Input as e, type CompactPolicyDescendantInput as f, type CompactPolicyInvocationInput as g, type CompactUcanAuthorizationV1 as h, EIP191_JCS_SIGNATURE_SUITE as i, LAST_V2_READ_AT as j, POLICY_CAPABILITY_V1_DOMAIN as k, POLICY_CAPABILITY_V1_SCHEMA as l, POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE as m, POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA as n, POLICY_ENGINE_RECORD_SCHEMA as o, POLICY_PRESENTATION_V3_DOMAIN as p, POLICY_PRESENTATION_V3_SCHEMA as q, POLICY_PRESENTATION_V4_DOMAIN as r, POLICY_PRESENTATION_V4_SCHEMA as s, POLICY_SCHEMA as t, POLICY_SESSION_UCAN_V1_PROFILE as u, POLICY_STATUS_SCHEMA as v, POLICY_V1_DOMAIN as w, POLICY_V1_SCHEMA as x, POLICY_V2_DOMAIN as y, POLICY_V2_SCHEMA as z };
@@ -3,6 +3,8 @@ import { z } from 'zod';
3
3
 
4
4
  declare const CREDENTIAL_ACQUISITION_PROTOCOL: "tinycloud.credentials/acquisition/v1";
5
5
  declare const HOLDER_BINDING_DOMAIN: "tinycloud.credentials/holder-binding/v1";
6
+ /** Signing domain of the held (account, EIP-191) binding. Equal to `ACCOUNT_BINDING_DOMAIN` of held-credentials. */
7
+ declare const ACCOUNT_HOLDER_BINDING_DOMAIN: "tinycloud.credentials/account-binding/v1";
6
8
  declare const CREDENTIAL_CONTRACT_VERSION: 1;
7
9
  declare const CREDENTIAL_STEP_REGISTRY_VERSION: 1;
8
10
  declare const CREDENTIAL_FORMAT: "vc+sd-jwt";
@@ -65,14 +67,20 @@ interface CredentialFlowDescriptor {
65
67
  readonly vct: string;
66
68
  };
67
69
  readonly claims: readonly CredentialClaimDescriptor[];
68
- readonly subjectRelationship: "holder_is_subject";
70
+ readonly subjectRelationship: "holder_is_subject" | "account_is_subject";
69
71
  readonly inputs: readonly CredentialInputDescriptor[];
70
72
  readonly steps: readonly CredentialStepDescriptor[];
73
+ /** Ticket: `{EdDSA, holder-binding/v1}` with `holder_is_subject`. Held: `{EIP191, account-binding/v1}` with `account_is_subject`. */
71
74
  readonly holderBinding: {
72
75
  readonly required: true;
73
76
  readonly alg: "EdDSA";
74
77
  readonly domain: typeof HOLDER_BINDING_DOMAIN;
75
78
  readonly version: 1;
79
+ } | {
80
+ readonly required: true;
81
+ readonly alg: "EIP191";
82
+ readonly domain: typeof ACCOUNT_HOLDER_BINDING_DOMAIN;
83
+ readonly version: 1;
76
84
  };
77
85
  readonly endpoints: Readonly<Record<"request" | "state" | "challenge" | "proof" | "holderBinding" | "holderSignature" | "issue" | "result", CredentialEndpointId>>;
78
86
  readonly lifecycle: {
@@ -108,7 +116,8 @@ interface CredentialRequirement {
108
116
  readonly claims: Readonly<Record<string, string>>;
109
117
  readonly maxAgeSeconds?: number;
110
118
  }
111
- interface CredentialHolderBinding {
119
+ /** The ticket (did:key, EdDSA) holder binding: 19 fields. */
120
+ interface TicketHolderBinding {
112
121
  readonly type: typeof HOLDER_BINDING_DOMAIN;
113
122
  readonly protocol: typeof CREDENTIAL_ACQUISITION_PROTOCOL;
114
123
  readonly requestId: string;
@@ -129,6 +138,13 @@ interface CredentialHolderBinding {
129
138
  readonly issuedAt: string;
130
139
  readonly expiresAt: string;
131
140
  }
141
+ /** The held (account, EIP-191) holder binding: the ticket fields plus `credentialLifetimeSeconds`, a `urn:uuid` v4 `jti`, the account `type`. 20 fields. */
142
+ interface AccountHolderBinding extends Omit<TicketHolderBinding, "type"> {
143
+ readonly type: typeof ACCOUNT_HOLDER_BINDING_DOMAIN;
144
+ readonly credentialLifetimeSeconds: 31_536_000;
145
+ }
146
+ /** A holder binding is exactly one of the two shapes, keyed on `type`. */
147
+ type CredentialHolderBinding = TicketHolderBinding | AccountHolderBinding;
132
148
  interface IssuerVerificationKey {
133
149
  readonly kid: string;
134
150
  readonly alg: "EdDSA";
@@ -929,4 +945,4 @@ interface PolicyCredentialAdmissionV4 {
929
945
  /** Accountless admission. The request deliberately has no account custody fields. */
930
946
  declare function admitPolicyCredentialV4(input: AdmitPolicyCredentialV4Input): Promise<PolicyCredentialAdmissionV4>;
931
947
 
932
- export { type RegisterPolicyV3Input as $, ATTESTED_ENFORCER_BINDING_V2_SCHEMA as A, type BuildPolicyCredentialPresentationV3Input as B, CONTENT_SOURCE_V1_DOMAIN as C, type PolicyChallengeV3 as D, ED25519_JCS_SIGNATURE_SUITE as E, type PolicyCredentialAdmissionV3 as F, type PolicyCredentialAdmissionV4 as G, type PolicyCredentialPresentationV3 as H, type PolicyCredentialPresentationV4 as I, type JsonObject as J, type PolicyCredentialRequirementV1 as K, LAST_V2_CREATE_AT as L, MAX_LEGACY_ENVELOPE_EXPIRES_AT as M, NATIVE_PROJECTION_V1_DOMAIN as N, type PolicyRootStatusV3 as O, type PolicyEngineRecord as P, type PolicyRootV3 as Q, type PolicySessionUcanFactV1 as R, type SignedObjectSigner as S, type PolicySessionUcanV1 as T, type UnsignedPolicyEngineRecord as U, type PolicyStatus as V, ROOT_REVOCATION_V1_DOMAIN as W, ROOT_REVOCATION_V1_SCHEMA as X, ROOT_STATUS_CHECKPOINT_V1_SCHEMA as Y, ROOT_STATUS_RENEWAL_V1_DOMAIN as Z, ROOT_STATUS_V1_DOMAIN as _, type Policy as a, revokePolicyRootV3 as a$, type RegisterPolicyV3Receipt as a0, type SignCompactUcanAuthorizationInput as a1, type SignCompactUcanRootAuthorizationInput as a2, SignatureMaterialError as a3, type SignatureSuite as a4, SignatureVerificationError as a5, SignedObjectCanonicalizationError as a6, SignedObjectDigestError as a7, type SignedObjectErrorCode as a8, SignedObjectIdError as a9, canonicalizeSignedObjectUnsigned as aA, canonicalizeUnifiedPolicyCapability as aB, compactAttenuationContains as aC, contentSourceDigestHex as aD, createAndSignPolicy as aE, createAndSignPolicyEngineRecord as aF, createAndSignPolicyStatus as aG, createAndSignSignedObject as aH, createCompactPolicyDescendant as aI, createCompactPolicyInvocation as aJ, deriveSignedObjectMaterial as aK, getPolicyRootStatusV3 as aL, issuedCredentialEnvelopeFromVerified as aM, mintPolicySessionV3 as aN, normalizeUnifiedPolicyCapability as aO, parseCompactUcanAuthorization as aP, parsePolicySessionUcan as aQ, parseSignedCompactUcanAttenuation as aR, policyCidFromCanonicalBytes as aS, policyDigestHex as aT, policyIdForDigestHex as aU, policyV2DigestHex as aV, projectUnifiedPolicyCapabilities as aW, projectUnifiedPolicyCapability as aX, registerPolicyV3 as aY, renewPolicyRootStatusV3 as aZ, requestPolicyChallengeV3 as a_, type SignedObjectKind as aa, type SignedObjectMaterial as ab, SignedObjectProfileError as ac, SignedObjectSchemaError as ad, type SignedObjectSignature as ae, type SignedObjectVerificationResult as af, type SignedPolicyObject as ag, SigningKeyBindingError as ah, type UnifiedContentSource as ai, type UnifiedEncryptionCapability as aj, type UnifiedKvCapability as ak, type UnifiedNativeCapability as al, type UnifiedPolicyCapability as am, type UnifiedPolicyV1 as an, type UnifiedPolicyV2 as ao, type UnifiedResourceSelector as ap, type UnsignedPolicy as aq, type UnsignedPolicyCredentialPresentationV4 as ar, type UnsignedPolicyObject as as, type UnsignedPolicyStatus as at, type UnsignedUnifiedPolicyV2 as au, UnsupportedSignatureSuiteError as av, admitPolicyCredentialV3 as aw, admitPolicyCredentialV4 as ax, buildPolicyCredentialPresentationV3 as ay, buildPolicyCredentialPresentationV4 as az, type AdmitPolicyCredentialV3Input as b, signCompactPolicyDescendant as b0, signCompactUcanAuthorization as b1, signCompactUcanRootAuthorization as b2, signPolicyCredentialPresentationV4 as b3, signedObjectIdFor as b4, toSignedObjectError as b5, unifiedNativeProjectionHashHex as b6, unifiedPolicyCapabilityContains as b7, unifiedPolicyCapabilityDigestHex as b8, unifiedPolicyCapabilityFromNative as b9, CREDENTIAL_CONTRACT_VERSION as bA, CREDENTIAL_FORMAT as bB, CREDENTIAL_STEP_REGISTRY_VERSION as bC, type CredentialClaimDescriptor as bD, type CredentialEndpointId as bE, type CredentialInputDescriptor as bF, type CredentialProgressEvent as bG, type CredentialStepDescriptor as bH, type CredentialStepType as bI, type CredentialUxState as bJ, HOLDER_BINDING_DOMAIN as bK, type IssuerVerificationKey as bL, validatePolicyCredentialRequirementV1 as ba, validatePolicyEngineRecordSigned as bb, validatePolicyEngineRecordSignedShape as bc, validatePolicyEngineRecordUnsigned as bd, validatePolicySigned as be, validatePolicySignedShape as bf, validatePolicyStatusSigned as bg, validatePolicyStatusSignedShape as bh, validatePolicyStatusUnsigned as bi, validatePolicyUnsigned as bj, validateUnifiedPolicyV2 as bk, verifyPolicy as bl, verifyPolicyEngineRecord as bm, verifyPolicyRootRevocationV3 as bn, verifyPolicyRootStatusCheckpointV3 as bo, verifyPolicyStatus as bp, verifySignedObject as bq, type CredentialHolderBinding as br, type CredentialFlowDescriptor as bs, type CredentialRequirement as bt, type StoredCredentialRecord as bu, type VerifiedCredential as bv, type CredentialStorageReceipt as bw, type IssuedCredentialEnvelope as bx, type CredentialIssuerMetadata as by, CREDENTIAL_ACQUISITION_PROTOCOL as bz, type AdmitPolicyCredentialV4Input as c, type AttestedEnforcerBindingV2 as d, type BuildPolicyCredentialPresentationV4Input as e, type CompactPolicyDescendantInput as f, type CompactPolicyInvocationInput as g, type CompactUcanAuthorizationV1 as h, EIP191_JCS_SIGNATURE_SUITE as i, LAST_V2_READ_AT as j, POLICY_CAPABILITY_V1_DOMAIN as k, POLICY_CAPABILITY_V1_SCHEMA as l, POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE as m, POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA as n, POLICY_ENGINE_RECORD_SCHEMA as o, POLICY_PRESENTATION_V3_DOMAIN as p, POLICY_PRESENTATION_V3_SCHEMA as q, POLICY_PRESENTATION_V4_DOMAIN as r, POLICY_PRESENTATION_V4_SCHEMA as s, POLICY_SCHEMA as t, POLICY_SESSION_UCAN_V1_PROFILE as u, POLICY_STATUS_SCHEMA as v, POLICY_V1_DOMAIN as w, POLICY_V1_SCHEMA as x, POLICY_V2_DOMAIN as y, POLICY_V2_SCHEMA as z };
948
+ export { type RegisterPolicyV3Input as $, ATTESTED_ENFORCER_BINDING_V2_SCHEMA as A, type BuildPolicyCredentialPresentationV3Input as B, CONTENT_SOURCE_V1_DOMAIN as C, type PolicyChallengeV3 as D, ED25519_JCS_SIGNATURE_SUITE as E, type PolicyCredentialAdmissionV3 as F, type PolicyCredentialAdmissionV4 as G, type PolicyCredentialPresentationV3 as H, type PolicyCredentialPresentationV4 as I, type JsonObject as J, type PolicyCredentialRequirementV1 as K, LAST_V2_CREATE_AT as L, MAX_LEGACY_ENVELOPE_EXPIRES_AT as M, NATIVE_PROJECTION_V1_DOMAIN as N, type PolicyRootStatusV3 as O, type PolicyEngineRecord as P, type PolicyRootV3 as Q, type PolicySessionUcanFactV1 as R, type SignedObjectSigner as S, type PolicySessionUcanV1 as T, type UnsignedPolicyEngineRecord as U, type PolicyStatus as V, ROOT_REVOCATION_V1_DOMAIN as W, ROOT_REVOCATION_V1_SCHEMA as X, ROOT_STATUS_CHECKPOINT_V1_SCHEMA as Y, ROOT_STATUS_RENEWAL_V1_DOMAIN as Z, ROOT_STATUS_V1_DOMAIN as _, type Policy as a, revokePolicyRootV3 as a$, type RegisterPolicyV3Receipt as a0, type SignCompactUcanAuthorizationInput as a1, type SignCompactUcanRootAuthorizationInput as a2, SignatureMaterialError as a3, type SignatureSuite as a4, SignatureVerificationError as a5, SignedObjectCanonicalizationError as a6, SignedObjectDigestError as a7, type SignedObjectErrorCode as a8, SignedObjectIdError as a9, canonicalizeSignedObjectUnsigned as aA, canonicalizeUnifiedPolicyCapability as aB, compactAttenuationContains as aC, contentSourceDigestHex as aD, createAndSignPolicy as aE, createAndSignPolicyEngineRecord as aF, createAndSignPolicyStatus as aG, createAndSignSignedObject as aH, createCompactPolicyDescendant as aI, createCompactPolicyInvocation as aJ, deriveSignedObjectMaterial as aK, getPolicyRootStatusV3 as aL, issuedCredentialEnvelopeFromVerified as aM, mintPolicySessionV3 as aN, normalizeUnifiedPolicyCapability as aO, parseCompactUcanAuthorization as aP, parsePolicySessionUcan as aQ, parseSignedCompactUcanAttenuation as aR, policyCidFromCanonicalBytes as aS, policyDigestHex as aT, policyIdForDigestHex as aU, policyV2DigestHex as aV, projectUnifiedPolicyCapabilities as aW, projectUnifiedPolicyCapability as aX, registerPolicyV3 as aY, renewPolicyRootStatusV3 as aZ, requestPolicyChallengeV3 as a_, type SignedObjectKind as aa, type SignedObjectMaterial as ab, SignedObjectProfileError as ac, SignedObjectSchemaError as ad, type SignedObjectSignature as ae, type SignedObjectVerificationResult as af, type SignedPolicyObject as ag, SigningKeyBindingError as ah, type UnifiedContentSource as ai, type UnifiedEncryptionCapability as aj, type UnifiedKvCapability as ak, type UnifiedNativeCapability as al, type UnifiedPolicyCapability as am, type UnifiedPolicyV1 as an, type UnifiedPolicyV2 as ao, type UnifiedResourceSelector as ap, type UnsignedPolicy as aq, type UnsignedPolicyCredentialPresentationV4 as ar, type UnsignedPolicyObject as as, type UnsignedPolicyStatus as at, type UnsignedUnifiedPolicyV2 as au, UnsupportedSignatureSuiteError as av, admitPolicyCredentialV3 as aw, admitPolicyCredentialV4 as ax, buildPolicyCredentialPresentationV3 as ay, buildPolicyCredentialPresentationV4 as az, type AdmitPolicyCredentialV3Input as b, signCompactPolicyDescendant as b0, signCompactUcanAuthorization as b1, signCompactUcanRootAuthorization as b2, signPolicyCredentialPresentationV4 as b3, signedObjectIdFor as b4, toSignedObjectError as b5, unifiedNativeProjectionHashHex as b6, unifiedPolicyCapabilityContains as b7, unifiedPolicyCapabilityDigestHex as b8, unifiedPolicyCapabilityFromNative as b9, ACCOUNT_HOLDER_BINDING_DOMAIN as bA, type AccountHolderBinding as bB, CREDENTIAL_ACQUISITION_PROTOCOL as bC, CREDENTIAL_CONTRACT_VERSION as bD, CREDENTIAL_FORMAT as bE, CREDENTIAL_STEP_REGISTRY_VERSION as bF, type CredentialClaimDescriptor as bG, type CredentialEndpointId as bH, type CredentialInputDescriptor as bI, type CredentialProgressEvent as bJ, type CredentialStepDescriptor as bK, type CredentialStepType as bL, type CredentialUxState as bM, HOLDER_BINDING_DOMAIN as bN, type IssuerVerificationKey as bO, validatePolicyCredentialRequirementV1 as ba, validatePolicyEngineRecordSigned as bb, validatePolicyEngineRecordSignedShape as bc, validatePolicyEngineRecordUnsigned as bd, validatePolicySigned as be, validatePolicySignedShape as bf, validatePolicyStatusSigned as bg, validatePolicyStatusSignedShape as bh, validatePolicyStatusUnsigned as bi, validatePolicyUnsigned as bj, validateUnifiedPolicyV2 as bk, verifyPolicy as bl, verifyPolicyEngineRecord as bm, verifyPolicyRootRevocationV3 as bn, verifyPolicyRootStatusCheckpointV3 as bo, verifyPolicyStatus as bp, verifySignedObject as bq, type TicketHolderBinding as br, type CredentialHolderBinding as bs, type CredentialFlowDescriptor as bt, type CredentialRequirement as bu, type StoredCredentialRecord as bv, type VerifiedCredential as bw, type CredentialStorageReceipt as bx, type IssuedCredentialEnvelope as by, type CredentialIssuerMetadata as bz, type AdmitPolicyCredentialV4Input as c, type AttestedEnforcerBindingV2 as d, type BuildPolicyCredentialPresentationV4Input as e, type CompactPolicyDescendantInput as f, type CompactPolicyInvocationInput as g, type CompactUcanAuthorizationV1 as h, EIP191_JCS_SIGNATURE_SUITE as i, LAST_V2_READ_AT as j, POLICY_CAPABILITY_V1_DOMAIN as k, POLICY_CAPABILITY_V1_SCHEMA as l, POLICY_CREDENTIAL_REQUIREMENT_V1_TYPE as m, POLICY_ENFORCEMENT_DELEGATION_V2_SCHEMA as n, POLICY_ENGINE_RECORD_SCHEMA as o, POLICY_PRESENTATION_V3_DOMAIN as p, POLICY_PRESENTATION_V3_SCHEMA as q, POLICY_PRESENTATION_V4_DOMAIN as r, POLICY_PRESENTATION_V4_SCHEMA as s, POLICY_SCHEMA as t, POLICY_SESSION_UCAN_V1_PROFILE as u, POLICY_STATUS_SCHEMA as v, POLICY_V1_DOMAIN as w, POLICY_V1_SCHEMA as x, POLICY_V2_DOMAIN as y, POLICY_V2_SCHEMA as z };
package/dist/index.cjs CHANGED
@@ -39,6 +39,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
39
39
  // src/index.ts
40
40
  var index_exports = {};
41
41
  __export(index_exports, {
42
+ ACCOUNT_HOLDER_BINDING_DOMAIN: () => ACCOUNT_HOLDER_BINDING_DOMAIN,
42
43
  ACCOUNT_INDEX_SCHEMA: () => import_bootstrap4.ACCOUNT_INDEX_SCHEMA,
43
44
  ACCOUNT_MANIFEST_PERMISSIONS: () => import_bootstrap4.ACCOUNT_MANIFEST_PERMISSIONS,
44
45
  ACCOUNT_REGISTRY_PATH: () => ACCOUNT_REGISTRY_PATH,
@@ -864,6 +865,7 @@ function credentialError(value, fallbackCode = "VERIFICATION_FAILED") {
864
865
  // src/credentials/types.ts
865
866
  var CREDENTIAL_ACQUISITION_PROTOCOL = "tinycloud.credentials/acquisition/v1";
866
867
  var HOLDER_BINDING_DOMAIN = "tinycloud.credentials/holder-binding/v1";
868
+ var ACCOUNT_HOLDER_BINDING_DOMAIN = "tinycloud.credentials/account-binding/v1";
867
869
  var CREDENTIAL_CONTRACT_VERSION = 1;
868
870
  var CREDENTIAL_STEP_REGISTRY_VERSION = 1;
869
871
  var CREDENTIAL_FORMAT = "vc+sd-jwt";
@@ -871,18 +873,22 @@ var CREDENTIAL_FORMAT = "vc+sd-jwt";
871
873
  // src/credentials/binding.ts
872
874
  var OPAQUE = /^[A-Za-z0-9_-]{16,128}$/;
873
875
  var DIGEST = /^[A-Za-z0-9_-]{43}$/;
876
+ var JTI_V4 = /^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
877
+ var ACCOUNT_CREDENTIAL_LIFETIME_SECONDS = 31536e3;
874
878
  function createHolderBinding(input) {
875
879
  return validateCredentialHolderBinding({ type: HOLDER_BINDING_DOMAIN, protocol: CREDENTIAL_ACQUISITION_PROTOCOL, ...input });
876
880
  }
877
881
  function validateCredentialHolderBinding(value) {
878
882
  if (typeof value !== "object" || value === null || Array.isArray(value)) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding is invalid");
879
883
  const raw = value;
880
- const fields = ["type", "protocol", "requestId", "profile", "profileVersion", "descriptorDigest", "requirementDigest", "issuer", "issuerKid", "holderDid", "normalizedClaimsDigest", "challengeNonce", "audience", "openerOrigin", "completionOrigin", "completionContext", "jti", "issuedAt", "expiresAt"].sort();
884
+ const account = raw.type === ACCOUNT_HOLDER_BINDING_DOMAIN;
885
+ const fields = ["type", "protocol", "requestId", "profile", "profileVersion", "descriptorDigest", "requirementDigest", "issuer", "issuerKid", "holderDid", "normalizedClaimsDigest", "challengeNonce", "audience", "openerOrigin", "completionOrigin", "completionContext", "jti", "issuedAt", "expiresAt", ...account ? ["credentialLifetimeSeconds"] : []].sort();
881
886
  const actual = Object.keys(raw).sort();
882
- if (actual.length !== fields.length || actual.some((key, index) => key !== fields[index]) || raw.type !== HOLDER_BINDING_DOMAIN || raw.protocol !== CREDENTIAL_ACQUISITION_PROTOCOL || raw.profileVersion !== 1) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding version is unsupported");
887
+ if (actual.length !== fields.length || actual.some((key, index) => key !== fields[index]) || !account && raw.type !== HOLDER_BINDING_DOMAIN || account && raw.credentialLifetimeSeconds !== ACCOUNT_CREDENTIAL_LIFETIME_SECONDS || raw.protocol !== CREDENTIAL_ACQUISITION_PROTOCOL || raw.profileVersion !== 1) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding version is unsupported");
883
888
  for (const name2 of ["requestId", "profile", "descriptorDigest", "requirementDigest", "issuer", "issuerKid", "holderDid", "normalizedClaimsDigest", "challengeNonce", "audience", "openerOrigin", "completionOrigin", "completionContext", "jti", "issuedAt", "expiresAt"]) if (typeof raw[name2] !== "string" || raw[name2].length === 0) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding field is invalid");
884
889
  for (const name2 of ["descriptorDigest", "requirementDigest", "normalizedClaimsDigest"]) if (!DIGEST.test(raw[name2])) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding digest is invalid");
885
- for (const name2 of ["requestId", "challengeNonce", "jti"]) if (!OPAQUE.test(raw[name2])) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding nonce is invalid");
890
+ for (const name2 of ["requestId", "challengeNonce"]) if (!OPAQUE.test(raw[name2])) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding nonce is invalid");
891
+ if (!(account ? JTI_V4 : OPAQUE).test(raw.jti)) throw new CredentialError("REQUEST_SUBSTITUTED", "Holder binding nonce is invalid");
886
892
  for (const name2 of ["openerOrigin", "completionOrigin"]) {
887
893
  let url;
888
894
  try {
@@ -901,7 +907,8 @@ function holderBindingCanonicalBytes(binding) {
901
907
  return new TextEncoder().encode(jcsCanonicalize(validateCredentialHolderBinding(binding)));
902
908
  }
903
909
  function holderBindingSigningBytes(binding) {
904
- return new TextEncoder().encode(`${HOLDER_BINDING_DOMAIN}\0${jcsCanonicalize(validateCredentialHolderBinding(binding))}`);
910
+ const valid = validateCredentialHolderBinding(binding);
911
+ return new TextEncoder().encode(`${valid.type}\0${jcsCanonicalize(valid)}`);
905
912
  }
906
913
 
907
914
  // src/credentials/descriptor.ts
@@ -991,7 +998,7 @@ function validateCredentialFlowDescriptor(value) {
991
998
  if (claimNames.has(name2) || claim.matching !== "normalized_exact" || typeof claim.selectiveDisclosure !== "boolean") fail("claim is invalid");
992
999
  claimNames.add(name2);
993
1000
  }
994
- if (raw.subjectRelationship !== "holder_is_subject") unsupported("Subject relationship is unsupported");
1001
+ if (raw.subjectRelationship !== "holder_is_subject" && raw.subjectRelationship !== "account_is_subject") unsupported("Subject relationship is unsupported");
995
1002
  if (!Array.isArray(raw.inputs) || raw.inputs.length === 0 || raw.inputs.length > 64) fail("inputs are invalid");
996
1003
  const inputIds = /* @__PURE__ */ new Set();
997
1004
  for (const value2 of raw.inputs) {
@@ -1025,7 +1032,8 @@ function validateCredentialFlowDescriptor(value) {
1025
1032
  if (!raw.steps.some((step) => step.type === "holder_signature")) fail("holder_signature is required");
1026
1033
  const binding = object(raw.holderBinding, "holderBinding");
1027
1034
  exact(binding, ["required", "alg", "domain", "version"], "holderBinding");
1028
- if (binding.required !== true || binding.alg !== "EdDSA" || binding.domain !== HOLDER_BINDING_DOMAIN || binding.version !== 1) unsupported("Holder binding is unsupported");
1035
+ const held = raw.subjectRelationship === "account_is_subject";
1036
+ if (binding.required !== true || binding.alg !== (held ? "EIP191" : "EdDSA") || binding.domain !== (held ? ACCOUNT_HOLDER_BINDING_DOMAIN : HOLDER_BINDING_DOMAIN) || binding.version !== 1) unsupported("Holder binding is unsupported");
1029
1037
  const endpoints = object(raw.endpoints, "endpoints");
1030
1038
  exact(endpoints, Object.keys(ENDPOINTS), "endpoints");
1031
1039
  for (const [name2, id] of Object.entries(ENDPOINTS)) if (endpoints[name2] !== id) fail("endpoint identifiers must use the registered vocabulary");