@tinycloud/cli 0.9.1-beta.1 → 0.9.1-beta.2
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/dist/index.js +137 -23
- package/dist/index.js.map +1 -1
- package/dist/legacy-entry.js +20 -7
- package/dist/legacy-entry.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -17725,7 +17725,7 @@ function validateV3Invariants(value, ctx) {
|
|
|
17725
17725
|
if (value.contentSource.encryptionNetwork !== value.encryptionNetwork) {
|
|
17726
17726
|
ctx.addIssue({ code: external_exports2.ZodIssueCode.custom, path: ["encryptionNetwork"], message: "encryption network is not bound to the source" });
|
|
17727
17727
|
}
|
|
17728
|
-
if (value.attestedEnforcerBinding.enforcerDid !== value.target.nodeAudience || value.attestedEnforcerBinding.
|
|
17728
|
+
if (value.attestedEnforcerBinding.enforcerDid !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.attestedEnforcerBinding.nodeAudience || Date.parse(value.attestedEnforcerBinding.expiresAt) < Date.parse(value.expiry)) {
|
|
17729
17729
|
ctx.addIssue({ code: external_exports2.ZodIssueCode.custom, path: ["attestedEnforcerBinding"], message: "enforcer binding does not cover the target and share lifetime" });
|
|
17730
17730
|
}
|
|
17731
17731
|
if (value.policy.contentSource.shareId !== value.contentSource.shareId || value.policy.contentSource.kvResource !== value.contentSource.kvResource || value.policy.contentSource.selector !== value.contentSource.selector || value.policy.contentSource.encryptionNetwork !== value.encryptionNetwork || value.policy.contentSource.encryptedSymmetricKeyDigestHex !== value.contentSource.encryptedSymmetricKeyDigestHex || value.policy.contentSource.keyVersion !== value.contentSource.keyVersion || value.policy.contentSource.mode !== value.contentSource.mode || value.policy.contentSource.initialCiphertextDigestHex !== value.contentSource.initialCiphertextDigestHex) {
|
|
@@ -18262,10 +18262,10 @@ async function verifyEnvelopeV3(envelope, options) {
|
|
|
18262
18262
|
const binding = parsed.attestedEnforcerBinding;
|
|
18263
18263
|
const { signature: bindingSignature, ...unsignedBinding } = binding;
|
|
18264
18264
|
const expectedBindingDigestHex = hex(sha2562(new TextEncoder().encode(canonicalize2({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));
|
|
18265
|
-
if (binding.enforcerDid !== parsed.target.nodeAudience || binding.
|
|
18265
|
+
if (binding.enforcerDid !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || bindingSignature.suite !== "Ed25519" || Date.parse(binding.issuedAt) > Date.now() || Date.parse(binding.expiresAt) <= Date.now() || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;
|
|
18266
18266
|
try {
|
|
18267
18267
|
const digest4 = sha2562(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize2(unsignedBinding)}`));
|
|
18268
|
-
if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest4, ed25519PublicKeyFromDidKey(binding.
|
|
18268
|
+
if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest4, ed25519PublicKeyFromDidKey(binding.nodeAudience), ED25519_VERIFY_OPTS2)) return false;
|
|
18269
18269
|
} catch {
|
|
18270
18270
|
return false;
|
|
18271
18271
|
}
|
|
@@ -18278,7 +18278,7 @@ async function verifyEnvelopeV3(envelope, options) {
|
|
|
18278
18278
|
const common = ["ownerDid", "policyId", "policyDigestHex", "policyCid", "contentSourceDigestHex", "capabilityCeilingHashHex", "nativeProjectionHashHex", "nodeAudience"];
|
|
18279
18279
|
const policyKeys = [...common, "role", "mode"];
|
|
18280
18280
|
const enforcementKeys = [...policyKeys, "enforcerDid"];
|
|
18281
|
-
if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split("#", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split("#", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize2(policyRoot.payload.att) !== canonicalize2(expectedAttenuation) || canonicalize2(enforcementRoot.payload.att) !== canonicalize2(expectedAttenuation) || policyFact.role !== "policy-authority" || policyFact.mode !== "policy-source" || "enforcerDid" in policyFact || enforcementFact.role !== "policy-enforcement" || enforcementFact.mode !== "conditional-mint" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !==
|
|
18281
|
+
if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split("#", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split("#", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize2(policyRoot.payload.att) !== canonicalize2(expectedAttenuation) || canonicalize2(enforcementRoot.payload.att) !== canonicalize2(expectedAttenuation) || policyFact.role !== "policy-authority" || policyFact.mode !== "policy-source" || "enforcerDid" in policyFact || enforcementFact.role !== "policy-enforcement" || enforcementFact.mode !== "conditional-mint" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== binding.nodeAudience || policyRoot.payload.exp * 1e3 < Date.parse(parsed.expiry)) return false;
|
|
18282
18282
|
} catch {
|
|
18283
18283
|
return false;
|
|
18284
18284
|
}
|
|
@@ -18460,8 +18460,12 @@ async function readResponseBytes(response, limit, tooLargeCode) {
|
|
|
18460
18460
|
function registryFetcher(options, limit, tooLargeCode = "max-bytes-exceeded", stage = "envelope") {
|
|
18461
18461
|
if (options.fetchBlob !== void 0) return async (input) => {
|
|
18462
18462
|
try {
|
|
18463
|
-
|
|
18463
|
+
options.signal?.throwIfAborted();
|
|
18464
|
+
const bytes3 = await options.fetchBlob({ ...input, ...options.signal === void 0 ? {} : { signal: options.signal } });
|
|
18465
|
+
options.signal?.throwIfAborted();
|
|
18466
|
+
return boundedBytes(bytes3, limit, tooLargeCode);
|
|
18464
18467
|
} catch (error) {
|
|
18468
|
+
if (options.signal?.aborted) throw options.signal.reason ?? error;
|
|
18465
18469
|
if (error instanceof ShareReceiveError) throw error;
|
|
18466
18470
|
throw new ShareReceiveError("fetch-failed", "registry unavailable", { stage });
|
|
18467
18471
|
}
|
|
@@ -18471,10 +18475,19 @@ function registryFetcher(options, limit, tooLargeCode = "max-bytes-exceeded", st
|
|
|
18471
18475
|
const base33 = options.registryBaseUrl.replace(/\/+$/, "");
|
|
18472
18476
|
return async ({ cid: cid2 }) => {
|
|
18473
18477
|
try {
|
|
18474
|
-
|
|
18478
|
+
options.signal?.throwIfAborted();
|
|
18479
|
+
const response = await fetchFn(`${base33}/ipfs/${cid2}?format=raw`, {
|
|
18480
|
+
headers: { accept: "application/vnd.ipld.raw" },
|
|
18481
|
+
redirect: "error",
|
|
18482
|
+
...options.signal === void 0 ? {} : { signal: options.signal }
|
|
18483
|
+
});
|
|
18484
|
+
options.signal?.throwIfAborted();
|
|
18475
18485
|
if (!response.ok) throw new ShareReceiveError("fetch-failed", `registry returned ${response.status}`, { stage });
|
|
18476
|
-
|
|
18486
|
+
const bytes3 = await readResponseBytes(response, limit, tooLargeCode);
|
|
18487
|
+
options.signal?.throwIfAborted();
|
|
18488
|
+
return bytes3;
|
|
18477
18489
|
} catch (error) {
|
|
18490
|
+
if (options.signal?.aborted) throw options.signal.reason ?? error;
|
|
18478
18491
|
if (error instanceof ShareReceiveError) throw error;
|
|
18479
18492
|
throw new ShareReceiveError("fetch-failed", "registry unavailable", { stage });
|
|
18480
18493
|
}
|
|
@@ -20265,6 +20278,39 @@ function uiAction(action) {
|
|
|
20265
20278
|
function selectedAction(envelope) {
|
|
20266
20279
|
return envelope.actions.includes("list") ? "tinycloud.kv/list" : envelope.actions.includes("edit") ? "tinycloud.kv/put" : "tinycloud.kv/get";
|
|
20267
20280
|
}
|
|
20281
|
+
function policyAttenuationForV3(envelope) {
|
|
20282
|
+
const policy = object2(envelope.policy, "v3 policy");
|
|
20283
|
+
if (!Array.isArray(policy.capabilityCeiling)) throw new Error("v3 policy capability ceiling is invalid");
|
|
20284
|
+
const attenuation = {};
|
|
20285
|
+
for (const raw of policy.capabilityCeiling) {
|
|
20286
|
+
const capability = object2(raw, "v3 policy capability");
|
|
20287
|
+
if (typeof capability.resource !== "string" || attenuation[capability.resource] !== void 0) throw new Error("v3 policy capability is invalid");
|
|
20288
|
+
if (capability.kind === "encryption") {
|
|
20289
|
+
if (capability.action !== "tinycloud.encryption/decrypt") throw new Error("v3 policy capability is invalid");
|
|
20290
|
+
attenuation[capability.resource] = { [capability.action]: [{}] };
|
|
20291
|
+
continue;
|
|
20292
|
+
}
|
|
20293
|
+
if (capability.kind !== "kv" || capability.selector !== "exact" && capability.selector !== "prefix" || !Array.isArray(capability.actions) || capability.actions.length === 0 || capability.actions.some((action) => typeof action !== "string")) throw new Error("v3 policy capability is invalid");
|
|
20294
|
+
attenuation[capability.resource] = Object.fromEntries(capability.actions.map((action) => [action, [{
|
|
20295
|
+
type: "xyz.tinycloud.resource/selector",
|
|
20296
|
+
kind: capability.selector,
|
|
20297
|
+
value: capability.resource
|
|
20298
|
+
}]]));
|
|
20299
|
+
}
|
|
20300
|
+
return attenuation;
|
|
20301
|
+
}
|
|
20302
|
+
function verifyV3PolicyAuthorization(input) {
|
|
20303
|
+
const compact = verifyCompactUcanAuthorization(input.authorization, input.cid);
|
|
20304
|
+
const fact = compact.payload.fct[0];
|
|
20305
|
+
const factKeys = Object.keys(fact);
|
|
20306
|
+
const legacyShape = factKeys.length === POLICY_SESSION_FACT_KEYS.length && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key)) && POLICY_SESSION_FACT_KEYS.every((key) => key in fact);
|
|
20307
|
+
const v4Shape = factKeys.length === POLICY_SESSION_FACT_KEYS.length + POLICY_SESSION_V4_AUDIT_FACT_KEYS.length && factKeys.every((key) => POLICY_SESSION_FACT_KEYS.includes(key) || POLICY_SESSION_V4_AUDIT_FACT_KEYS.includes(key)) && POLICY_SESSION_FACT_KEYS.every((key) => key in fact) && POLICY_SESSION_V4_AUDIT_FACT_KEYS.every((key) => key in fact);
|
|
20308
|
+
const binding = object2(input.envelope.attestedEnforcerBinding, "v3 attested enforcer binding");
|
|
20309
|
+
const policy = object2(input.envelope.policy, "v3 policy");
|
|
20310
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
20311
|
+
if (!legacyShape && !v4Shape || POLICY_SESSION_DIGEST_FACT_KEYS.some((key) => !LOWER_SHA256_HEX.test(fact[key])) || v4Shape && (!LOWER_SHA256_HEX.test(fact.credentialIdAuditDigestHex) || !LOWER_SHA256_HEX.test(fact.presentationJtiAuditDigestHex)) || compact.payload.aud !== input.holderDid || compact.payload.iss.split("#", 1)[0] !== fact.nodeAudience || fact.profile !== "policy-session-ucan/v1" || fact.ownerDid !== policy.ownerDid || fact.policyId !== policy.policyId || fact.policyCid !== input.envelope.policyCid || fact.contentSourceDigestHex !== input.envelope.contentSourceDigestHex || fact.enforcerDid !== binding.enforcerDid || fact.nodeAudience !== binding.nodeAudience || fact.recipientDid !== input.holderDid || fact.policyDelegationCid !== input.envelope.policyRoot.cid || fact.enforcementDelegationCid !== input.envelope.enforcementRoot.cid || typeof fact.remainingRedelegationDepth !== "number" || !Number.isInteger(fact.remainingRedelegationDepth) || fact.remainingRedelegationDepth < 0 || fact.remainingRedelegationDepth > 8 || compact.payload.prf.length !== 2 || compact.payload.prf[0] !== input.envelope.policyRoot.cid || compact.payload.prf[1] !== input.envelope.enforcementRoot.cid || compact.payload.nbf > now || compact.payload.exp <= now || compact.payload.exp - compact.payload.nbf > 60 || canonicalize2(compact.payload.att) !== canonicalize2(policyAttenuationForV3(input.envelope))) throw new Error("v3 policy delegation signed binding mismatch");
|
|
20312
|
+
return compact;
|
|
20313
|
+
}
|
|
20268
20314
|
function hex2(value) {
|
|
20269
20315
|
return [...value].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
20270
20316
|
}
|
|
@@ -20355,7 +20401,7 @@ function createAddressedAuthorization(input) {
|
|
|
20355
20401
|
}
|
|
20356
20402
|
};
|
|
20357
20403
|
}
|
|
20358
|
-
var __defProp2, __export2, external_exports2, util2, objectUtil2, ZodParsedType2, getParsedType2, ZodIssueCode2, quotelessJson2, ZodError2, errorMap2, en_default2, overrideErrorMap2, makeIssue2, EMPTY_PATH2, ParseStatus2, INVALID2, DIRTY2, OK2, isAborted2, isDirty2, isValid2, isAsync2, errorUtil2, ParseInputLazyPath2, handleResult2, ZodType2, cuidRegex2, cuid2Regex2, ulidRegex2, uuidRegex2, nanoidRegex2, jwtRegex2, durationRegex2, emailRegex2, _emojiRegex2, emojiRegex2, ipv4Regex2, ipv4CidrRegex2, ipv6Regex2, ipv6CidrRegex2, base64Regex2, base64urlRegex2, dateRegexSource2, dateRegex2, ZodString2, ZodNumber2, ZodBigInt2, ZodBoolean2, ZodDate2, ZodSymbol2, ZodUndefined2, ZodNull2, ZodAny2, ZodUnknown2, ZodNever2, ZodVoid2, ZodArray2, ZodObject2, ZodUnion2, getDiscriminator2, ZodDiscriminatedUnion2, ZodIntersection2, ZodTuple2, ZodRecord2, ZodMap2, ZodSet2, ZodFunction2, ZodLazy2, ZodLiteral2, ZodEnum2, ZodNativeEnum2, ZodPromise2, ZodEffects2, ZodOptional2, ZodNullable2, ZodDefault2, ZodCatch2, ZodNaN2, BRAND2, ZodBranded2, ZodPipeline2, ZodReadonly2, late2, ZodFirstPartyTypeKind2, instanceOfType2, stringType2, numberType2, nanType2, bigIntType2, booleanType2, dateType2, symbolType2, undefinedType2, nullType2, anyType2, unknownType2, neverType2, voidType2, arrayType2, objectType2, strictObjectType2, unionType2, discriminatedUnionType2, intersectionType2, tupleType2, recordType2, mapType2, setType2, functionType2, lazyType2, literalType2, enumType2, nativeEnumType2, promiseType2, effectsType2, optionalType2, nullableType2, preprocessType2, pipelineType2, ostring2, onumber2, oboolean2, coerce2, NEVER2, empty, src, _brrp__multiformats_scope_baseX, base_x_default, Encoder, Decoder, ComposedDecoder, Codec, base32, base32upper, base32pad, base32padupper, base32hex, base32hexupper, base32hexpad, base32hexpadupper, base32z, base36, base36upper, base58btc, base58flickr, encode_1, MSB, REST, MSBALL, INT, decode2, MSB$1, REST$1, N1, N2, N3, N4, N5, N6, N7, N8, N9, length, varint, _brrp_varint, varint_default, Digest, cache, CID, DAG_PB_CODE, SHA_256_CODE, cidSymbol, code, SHA256_CODE, base64, base64pad, base64url, base64urlpad, ED25519_MULTICODEC_PREFIX, PUBLIC_KEY_LENGTH, base64UrlString, sessionJwkCommonFields, okpPrivateJwkSchema, ecPrivateJwkSchema, sessionJwkSchema, policyTargetSchema, bearerKeyTargetSchema, recipientDidTargetSchema, authorizationTargetSchema, resourceSelectorSchema, targetSchema, displaySchema, contentPointerSchema, signatureSchema, unsignedShareEnvelopeSchema, shareEnvelopeSchema, recipientMatcherSchema, shareActionSchema, kvContentSourceSchema, sqlContentSourceSchema, contentSourceSchema, v2TargetSchema, shareDecryptionSchema, ownerAuthoritySchema, contentMetadataSchema, unsignedShareEnvelopeV2BaseSchema, unsignedShareEnvelopeV2Schema, shareEnvelopeV2Schema, unifiedResourceSchema, unifiedEncryptionNetworkSchema, unifiedKvCapabilitySchema, unifiedEncryptionCapabilitySchema, unifiedCapabilitySchema, unifiedContentSourceSchema, unifiedPolicyV1Schema, policyCredentialRequirementV1Schema, unifiedPolicyV2Schema, unifiedPolicySchema, unifiedRootSchema, attestedEnforcerBindingV2Schema, v3TargetSchema, unsignedShareEnvelopeV3BaseSchema, unsignedShareEnvelopeV3Schema, shareEnvelopeV3Schema, BEARER_READ_ABILITY, READ_ABILITIES, ED25519_VERIFY_OPTS, ENVELOPE_AAD_LABEL, SEALED_BLOB_VERSION, AAD, KEY_LENGTH, NONCE_LENGTH, TAG_LENGTH, HEADER_LENGTH, ED25519_VERIFY_OPTS2, ENVELOPE_SIGNATURE_DOMAIN, ENVELOPE_V2_SIGNATURE_DOMAIN, ENVELOPE_V3_SIGNATURE_DOMAIN, POLICY_V1_SIGNATURE_DOMAIN, POLICY_V2_SIGNATURE_DOMAIN, CONTENT_SOURCE_V1_DOMAIN, POLICY_CAPABILITY_V1_DOMAIN, NATIVE_PROJECTION_V1_DOMAIN, ATTESTED_ENFORCER_V2_DOMAIN, KEY_LENGTH2, INLINE_PREFIX, MAX_INLINE_BYTES, SHARE_RESULT_VERSION, DEFAULT_MAX_SEALED_BLOB_BYTES, DEFAULT_MAX_CONTENT_BLOB_BYTES, CONTENT_SEALED_OVERHEAD, ShareReceiveError, SHARE_CONTENT_LIMIT, SHARE_SEALED_OVERHEAD, SHARE_PUBLISH_RESULT_VERSION, DEFAULT_SHARE_LIFETIME_MS, SharePublishError, empty2, src2, _brrp__multiformats_scope_baseX2, base_x_default2, Encoder2, Decoder2, ComposedDecoder2, Codec2, base322, base32upper2, base32pad2, base32padupper2, base32hex2, base32hexupper2, base32hexpad2, base32hexpadupper2, base32z2, base362, base36upper2, base58btc2, base58flickr2, encode_12, MSB2, REST2, MSBALL2, INT2, decode6, MSB$12, REST$12, N12, N22, N32, N42, N52, N62, N72, N82, N92, length2, varint2, _brrp_varint2, varint_default2, Digest2, cache2, CID2, DAG_PB_CODE2, SHA_256_CODE2, cidSymbol2, code2, SHA256_CODE2, MAX_CONTENT_BYTES, POLICY_ENFORCEMENT_DOMAIN, POLICY_DOMAIN, OWNER_SHARE_REGISTRATION_DOMAIN, ENVELOPE_DOMAIN, ENVELOPE_DOMAIN2, ShareNotifyError, SHARE_V2_PROTOCOL, DOMAIN, PRESENTATION_DOMAIN, SESSION_DOMAIN, INVOCATION_DOMAIN, BASE64_ALPHABET, ShareRecipientClient;
|
|
20404
|
+
var __defProp2, __export2, external_exports2, util2, objectUtil2, ZodParsedType2, getParsedType2, ZodIssueCode2, quotelessJson2, ZodError2, errorMap2, en_default2, overrideErrorMap2, makeIssue2, EMPTY_PATH2, ParseStatus2, INVALID2, DIRTY2, OK2, isAborted2, isDirty2, isValid2, isAsync2, errorUtil2, ParseInputLazyPath2, handleResult2, ZodType2, cuidRegex2, cuid2Regex2, ulidRegex2, uuidRegex2, nanoidRegex2, jwtRegex2, durationRegex2, emailRegex2, _emojiRegex2, emojiRegex2, ipv4Regex2, ipv4CidrRegex2, ipv6Regex2, ipv6CidrRegex2, base64Regex2, base64urlRegex2, dateRegexSource2, dateRegex2, ZodString2, ZodNumber2, ZodBigInt2, ZodBoolean2, ZodDate2, ZodSymbol2, ZodUndefined2, ZodNull2, ZodAny2, ZodUnknown2, ZodNever2, ZodVoid2, ZodArray2, ZodObject2, ZodUnion2, getDiscriminator2, ZodDiscriminatedUnion2, ZodIntersection2, ZodTuple2, ZodRecord2, ZodMap2, ZodSet2, ZodFunction2, ZodLazy2, ZodLiteral2, ZodEnum2, ZodNativeEnum2, ZodPromise2, ZodEffects2, ZodOptional2, ZodNullable2, ZodDefault2, ZodCatch2, ZodNaN2, BRAND2, ZodBranded2, ZodPipeline2, ZodReadonly2, late2, ZodFirstPartyTypeKind2, instanceOfType2, stringType2, numberType2, nanType2, bigIntType2, booleanType2, dateType2, symbolType2, undefinedType2, nullType2, anyType2, unknownType2, neverType2, voidType2, arrayType2, objectType2, strictObjectType2, unionType2, discriminatedUnionType2, intersectionType2, tupleType2, recordType2, mapType2, setType2, functionType2, lazyType2, literalType2, enumType2, nativeEnumType2, promiseType2, effectsType2, optionalType2, nullableType2, preprocessType2, pipelineType2, ostring2, onumber2, oboolean2, coerce2, NEVER2, empty, src, _brrp__multiformats_scope_baseX, base_x_default, Encoder, Decoder, ComposedDecoder, Codec, base32, base32upper, base32pad, base32padupper, base32hex, base32hexupper, base32hexpad, base32hexpadupper, base32z, base36, base36upper, base58btc, base58flickr, encode_1, MSB, REST, MSBALL, INT, decode2, MSB$1, REST$1, N1, N2, N3, N4, N5, N6, N7, N8, N9, length, varint, _brrp_varint, varint_default, Digest, cache, CID, DAG_PB_CODE, SHA_256_CODE, cidSymbol, code, SHA256_CODE, base64, base64pad, base64url, base64urlpad, ED25519_MULTICODEC_PREFIX, PUBLIC_KEY_LENGTH, base64UrlString, sessionJwkCommonFields, okpPrivateJwkSchema, ecPrivateJwkSchema, sessionJwkSchema, policyTargetSchema, bearerKeyTargetSchema, recipientDidTargetSchema, authorizationTargetSchema, resourceSelectorSchema, targetSchema, displaySchema, contentPointerSchema, signatureSchema, unsignedShareEnvelopeSchema, shareEnvelopeSchema, recipientMatcherSchema, shareActionSchema, kvContentSourceSchema, sqlContentSourceSchema, contentSourceSchema, v2TargetSchema, shareDecryptionSchema, ownerAuthoritySchema, contentMetadataSchema, unsignedShareEnvelopeV2BaseSchema, unsignedShareEnvelopeV2Schema, shareEnvelopeV2Schema, unifiedResourceSchema, unifiedEncryptionNetworkSchema, unifiedKvCapabilitySchema, unifiedEncryptionCapabilitySchema, unifiedCapabilitySchema, unifiedContentSourceSchema, unifiedPolicyV1Schema, policyCredentialRequirementV1Schema, unifiedPolicyV2Schema, unifiedPolicySchema, unifiedRootSchema, attestedEnforcerBindingV2Schema, v3TargetSchema, unsignedShareEnvelopeV3BaseSchema, unsignedShareEnvelopeV3Schema, shareEnvelopeV3Schema, BEARER_READ_ABILITY, READ_ABILITIES, ED25519_VERIFY_OPTS, ENVELOPE_AAD_LABEL, SEALED_BLOB_VERSION, AAD, KEY_LENGTH, NONCE_LENGTH, TAG_LENGTH, HEADER_LENGTH, ED25519_VERIFY_OPTS2, ENVELOPE_SIGNATURE_DOMAIN, ENVELOPE_V2_SIGNATURE_DOMAIN, ENVELOPE_V3_SIGNATURE_DOMAIN, POLICY_V1_SIGNATURE_DOMAIN, POLICY_V2_SIGNATURE_DOMAIN, CONTENT_SOURCE_V1_DOMAIN, POLICY_CAPABILITY_V1_DOMAIN, NATIVE_PROJECTION_V1_DOMAIN, ATTESTED_ENFORCER_V2_DOMAIN, KEY_LENGTH2, INLINE_PREFIX, MAX_INLINE_BYTES, SHARE_RESULT_VERSION, DEFAULT_MAX_SEALED_BLOB_BYTES, DEFAULT_MAX_CONTENT_BLOB_BYTES, CONTENT_SEALED_OVERHEAD, ShareReceiveError, SHARE_CONTENT_LIMIT, SHARE_SEALED_OVERHEAD, SHARE_PUBLISH_RESULT_VERSION, DEFAULT_SHARE_LIFETIME_MS, SharePublishError, empty2, src2, _brrp__multiformats_scope_baseX2, base_x_default2, Encoder2, Decoder2, ComposedDecoder2, Codec2, base322, base32upper2, base32pad2, base32padupper2, base32hex2, base32hexupper2, base32hexpad2, base32hexpadupper2, base32z2, base362, base36upper2, base58btc2, base58flickr2, encode_12, MSB2, REST2, MSBALL2, INT2, decode6, MSB$12, REST$12, N12, N22, N32, N42, N52, N62, N72, N82, N92, length2, varint2, _brrp_varint2, varint_default2, Digest2, cache2, CID2, DAG_PB_CODE2, SHA_256_CODE2, cidSymbol2, code2, SHA256_CODE2, MAX_CONTENT_BYTES, POLICY_ENFORCEMENT_DOMAIN, POLICY_DOMAIN, OWNER_SHARE_REGISTRATION_DOMAIN, ENVELOPE_DOMAIN, ENVELOPE_DOMAIN2, ShareNotifyError, SHARE_V2_PROTOCOL, DOMAIN, PRESENTATION_DOMAIN, SESSION_DOMAIN, INVOCATION_DOMAIN, BASE64_ALPHABET, POLICY_SESSION_FACT_KEYS, POLICY_SESSION_V4_AUDIT_FACT_KEYS, POLICY_SESSION_DIGEST_FACT_KEYS, LOWER_SHA256_HEX, ShareRecipientClient;
|
|
20359
20405
|
var init_dist3 = __esm({
|
|
20360
20406
|
"../share-sdk/dist/index.js"() {
|
|
20361
20407
|
"use strict";
|
|
@@ -25518,11 +25564,61 @@ var init_dist3 = __esm({
|
|
|
25518
25564
|
SESSION_DOMAIN = SHARE_V2_PROTOCOL.sessionDomain;
|
|
25519
25565
|
INVOCATION_DOMAIN = SHARE_V2_PROTOCOL.invocationDomain;
|
|
25520
25566
|
BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
25567
|
+
POLICY_SESSION_FACT_KEYS = [
|
|
25568
|
+
"profile",
|
|
25569
|
+
"ownerDid",
|
|
25570
|
+
"policyId",
|
|
25571
|
+
"policyDigestHex",
|
|
25572
|
+
"policyCid",
|
|
25573
|
+
"policyDelegationCid",
|
|
25574
|
+
"enforcementDelegationCid",
|
|
25575
|
+
"contentSourceDigestHex",
|
|
25576
|
+
"capabilityCeilingHashHex",
|
|
25577
|
+
"nativeProjectionHashHex",
|
|
25578
|
+
"enforcerDid",
|
|
25579
|
+
"nodeAudience",
|
|
25580
|
+
"recipientDid",
|
|
25581
|
+
"challengeId",
|
|
25582
|
+
"claimDigestHex",
|
|
25583
|
+
"claimJti",
|
|
25584
|
+
"vpDigestHex",
|
|
25585
|
+
"credentialEvidenceDigestHex",
|
|
25586
|
+
"decisionContextDigestHex",
|
|
25587
|
+
"issuanceAuditDigestHex",
|
|
25588
|
+
"remainingRedelegationDepth"
|
|
25589
|
+
];
|
|
25590
|
+
POLICY_SESSION_V4_AUDIT_FACT_KEYS = ["credentialIdAuditDigestHex", "presentationJtiAuditDigestHex"];
|
|
25591
|
+
POLICY_SESSION_DIGEST_FACT_KEYS = [
|
|
25592
|
+
"policyDigestHex",
|
|
25593
|
+
"contentSourceDigestHex",
|
|
25594
|
+
"capabilityCeilingHashHex",
|
|
25595
|
+
"nativeProjectionHashHex",
|
|
25596
|
+
"claimDigestHex",
|
|
25597
|
+
"vpDigestHex",
|
|
25598
|
+
"credentialEvidenceDigestHex",
|
|
25599
|
+
"decisionContextDigestHex",
|
|
25600
|
+
"issuanceAuditDigestHex"
|
|
25601
|
+
];
|
|
25602
|
+
LOWER_SHA256_HEX = /^[0-9a-f]{64}$/;
|
|
25521
25603
|
ShareRecipientClient = class {
|
|
25522
25604
|
constructor(options) {
|
|
25523
25605
|
this.options = options;
|
|
25524
25606
|
this.fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
25525
25607
|
this.signer = options.sign;
|
|
25608
|
+
if (options.policyAuthorization !== void 0) {
|
|
25609
|
+
if (options.envelope.version !== 3) throw new Error("policy delegation fast path requires a v3 envelope");
|
|
25610
|
+
const compact = verifyV3PolicyAuthorization({ ...options.policyAuthorization, envelope: options.envelope, holderDid: options.holderDid });
|
|
25611
|
+
const nodeAudience = compact.payload.fct[0].nodeAudience;
|
|
25612
|
+
this.v3Authorization = options.policyAuthorization.authorization;
|
|
25613
|
+
this.v3NodeAudience = nodeAudience;
|
|
25614
|
+
this.nativeSigner = options.sign;
|
|
25615
|
+
this.session = {
|
|
25616
|
+
sessionId: options.policyAuthorization.cid,
|
|
25617
|
+
expiresAt: new Date(compact.payload.exp * 1e3).toISOString(),
|
|
25618
|
+
actions: options.envelope.actions,
|
|
25619
|
+
resource: options.envelope.resource
|
|
25620
|
+
};
|
|
25621
|
+
}
|
|
25526
25622
|
}
|
|
25527
25623
|
fetchFn;
|
|
25528
25624
|
session;
|
|
@@ -25530,6 +25626,7 @@ var init_dist3 = __esm({
|
|
|
25530
25626
|
nativeSigner;
|
|
25531
25627
|
holderProof;
|
|
25532
25628
|
v3Authorization;
|
|
25629
|
+
v3NodeAudience;
|
|
25533
25630
|
v3ContentKey;
|
|
25534
25631
|
v3ContentEnvelope;
|
|
25535
25632
|
async beginChallenge(envelope) {
|
|
@@ -25619,37 +25716,52 @@ var init_dist3 = __esm({
|
|
|
25619
25716
|
}
|
|
25620
25717
|
async establishV3(envelope) {
|
|
25621
25718
|
if (this.options.buildPresentation === void 0) throw new Error("share presentation builder is required");
|
|
25719
|
+
const attestedEnforcer = object2(envelope.attestedEnforcerBinding, "v3 attested enforcer binding");
|
|
25720
|
+
if (attestedEnforcer.enforcerDid !== envelope.target.nodeAudience || typeof attestedEnforcer.nodeAudience !== "string") throw new Error("v3 attested enforcer binding mismatch");
|
|
25721
|
+
try {
|
|
25722
|
+
ed25519PublicKeyFromDidKey(attestedEnforcer.nodeAudience);
|
|
25723
|
+
} catch {
|
|
25724
|
+
throw new Error("v3 attested Node audience is invalid");
|
|
25725
|
+
}
|
|
25622
25726
|
const challengeResponse = await this.fetchFn(new URL("/share/v3/policy/challenges", this.options.nodeOrigin), {
|
|
25623
25727
|
method: "POST",
|
|
25624
25728
|
redirect: "error",
|
|
25625
25729
|
headers: { accept: "application/json", "content-type": "application/json" },
|
|
25626
|
-
body: JSON.stringify({ policyCid: envelope.policyCid, recipientDid: this.options.holderDid, requestedCapabilities: envelope.policy.capabilityCeiling })
|
|
25730
|
+
body: JSON.stringify({ policyCid: envelope.policyCid, recipientDid: this.options.holderDid, requestedCapabilities: envelope.policy.capabilityCeiling }),
|
|
25731
|
+
...this.options.signal === void 0 ? {} : { signal: this.options.signal }
|
|
25627
25732
|
});
|
|
25628
25733
|
if (!challengeResponse.ok) throw new Error(`v3 policy challenge rejected (${challengeResponse.status})`);
|
|
25629
25734
|
const challenge2 = object2(await challengeResponse.json(), "v3 policy challenge");
|
|
25630
|
-
if (typeof challenge2.challengeId !== "string" || typeof challenge2.nonce !== "string" || challenge2.policyCid !== envelope.policyCid || challenge2.recipientDid !== this.options.holderDid) throw new Error("v3 policy challenge binding mismatch");
|
|
25735
|
+
if (typeof challenge2.challengeId !== "string" || typeof challenge2.nonce !== "string" || challenge2.policyCid !== envelope.policyCid || challenge2.recipientDid !== this.options.holderDid || challenge2.nodeAudience !== attestedEnforcer.nodeAudience || challenge2.enforcerDid !== void 0 && challenge2.enforcerDid !== attestedEnforcer.enforcerDid || typeof challenge2.expiresAt !== "string" || !Number.isFinite(Date.parse(challenge2.expiresAt)) || Date.parse(challenge2.expiresAt) <= Date.now()) throw new Error("v3 policy challenge binding mismatch");
|
|
25631
25736
|
const material = await this.options.buildPresentation({
|
|
25632
25737
|
challenge: challenge2,
|
|
25633
25738
|
envelope,
|
|
25634
25739
|
policy: envelope.policy
|
|
25635
25740
|
});
|
|
25636
|
-
if (material.sign === void 0 || material.
|
|
25741
|
+
if (material.sign === void 0 || material.presentation === void 0) throw new Error("v3 ceremony requires a recipient signer and presentation");
|
|
25742
|
+
const accountless = material.presentation.schema === "xyz.tinycloud.policy/presentation/v4";
|
|
25743
|
+
if (accountless ? material.credentialEnvelope === void 0 || material.requirement === void 0 : material.claim === void 0) {
|
|
25744
|
+
throw new Error(accountless ? "v4 ceremony requires a verified credential and requirement" : "v3 ceremony requires a claim");
|
|
25745
|
+
}
|
|
25746
|
+
this.options.onStage?.("policy-admission");
|
|
25637
25747
|
const delegationResponse = await this.fetchFn(new URL("/share/v3/policy/delegations", this.options.nodeOrigin), {
|
|
25638
25748
|
method: "POST",
|
|
25639
25749
|
redirect: "error",
|
|
25640
25750
|
headers: { accept: "application/json", "content-type": "application/json" },
|
|
25641
|
-
body: JSON.stringify({ policyCid: envelope.policyCid, challengeId: challenge2.challengeId, nonce: challenge2.nonce, claim: material.claim, presentation: material.presentation })
|
|
25751
|
+
body: JSON.stringify(accountless ? { policyCid: envelope.policyCid, challengeId: challenge2.challengeId, nonce: challenge2.nonce, requirement: material.requirement, credential: material.credentialEnvelope, presentation: material.presentation } : { policyCid: envelope.policyCid, challengeId: challenge2.challengeId, nonce: challenge2.nonce, claim: material.claim, presentation: material.presentation }),
|
|
25752
|
+
...this.options.signal === void 0 ? {} : { signal: this.options.signal }
|
|
25642
25753
|
});
|
|
25643
25754
|
if (!delegationResponse.ok) throw new Error(`v3 policy delegation rejected (${delegationResponse.status})`);
|
|
25644
25755
|
const delegation = object2(await delegationResponse.json(), "v3 policy delegation");
|
|
25645
25756
|
if (delegation.admitted !== true || typeof delegation.sessionCid !== "string" || typeof delegation.authorization !== "string") throw new Error("v3 policy delegation response is not admitted");
|
|
25646
|
-
const compact =
|
|
25757
|
+
const compact = verifyV3PolicyAuthorization({ authorization: delegation.authorization, cid: delegation.sessionCid, envelope, holderDid: this.options.holderDid });
|
|
25647
25758
|
const fact = compact.payload.fct[0];
|
|
25648
|
-
|
|
25649
|
-
const imported = await this.fetchFn(new URL("/delegate", this.options.nodeOrigin), { method: "POST", redirect: "error", headers: { Authorization: delegation.authorization } });
|
|
25759
|
+
this.options.onStage?.("delegation-import");
|
|
25760
|
+
const imported = await this.fetchFn(new URL("/delegate", this.options.nodeOrigin), { method: "POST", redirect: "error", headers: { Authorization: delegation.authorization }, ...this.options.signal === void 0 ? {} : { signal: this.options.signal } });
|
|
25650
25761
|
if (!imported.ok) throw new Error(`ordinary delegation import rejected (${imported.status})`);
|
|
25651
25762
|
this.signer = material.sign;
|
|
25652
25763
|
this.v3Authorization = delegation.authorization;
|
|
25764
|
+
this.v3NodeAudience = fact.nodeAudience;
|
|
25653
25765
|
this.session = { sessionId: delegation.sessionCid, expiresAt: new Date(compact.payload.exp * 1e3).toISOString(), actions: envelope.actions, resource: envelope.resource };
|
|
25654
25766
|
return this.session;
|
|
25655
25767
|
}
|
|
@@ -25657,18 +25769,18 @@ var init_dist3 = __esm({
|
|
|
25657
25769
|
async decryptV3Content(bytes3) {
|
|
25658
25770
|
const envelope = this.options.envelope;
|
|
25659
25771
|
const signer = this.nativeSigner ?? this.signer;
|
|
25660
|
-
if (envelope.version !== 3 || this.session === void 0 || this.v3Authorization === void 0 || signer === void 0) throw new Error("v3 policy session signer is required");
|
|
25772
|
+
if (envelope.version !== 3 || this.session === void 0 || this.v3Authorization === void 0 || this.v3NodeAudience === void 0 || signer === void 0) throw new Error("v3 policy session signer is required");
|
|
25661
25773
|
const encrypted = parseV3InlineEncryptedEnvelope(bytes3, envelope);
|
|
25662
25774
|
const receiverPrivateKey = crypto.getRandomValues(new Uint8Array(32));
|
|
25663
25775
|
const receiverPublicKey = toBase64Url(x25519.getPublicKey(receiverPrivateKey));
|
|
25664
25776
|
const receiverPublicKeyHash = canonicalHashHex2(receiverPublicKey);
|
|
25665
|
-
const body = { type: "tinycloud.encryption.decrypt/v1", targetNode:
|
|
25777
|
+
const body = { type: "tinycloud.encryption.decrypt/v1", targetNode: this.v3NodeAudience, networkId: encrypted.networkId, alg: encrypted.alg, keyVersion: encrypted.keyVersion, encryptedSymmetricKey: encrypted.encryptedSymmetricKey, encryptedSymmetricKeyHash: encrypted.encryptedSymmetricKeyHash, receiverPublicKey, receiverPublicKeyHash };
|
|
25666
25778
|
const bodyHash = hex2(sha2562(new TextEncoder().encode(canonicalize2(body))));
|
|
25667
25779
|
const session = verifyCompactUcanAuthorization(this.v3Authorization, this.session.sessionId);
|
|
25668
25780
|
const now = Math.floor(Date.now() / 1e3);
|
|
25669
25781
|
const invocation = await signCompactUcanAuthorization({
|
|
25670
25782
|
issuerDid: this.options.holderDid,
|
|
25671
|
-
audienceDid:
|
|
25783
|
+
audienceDid: this.v3NodeAudience,
|
|
25672
25784
|
attenuation: { [encrypted.networkId]: { "tinycloud.encryption/decrypt": [{}] } },
|
|
25673
25785
|
facts: [{ type: body.type, targetNode: body.targetNode, networkId: body.networkId, bodyHash, encryptedSymmetricKeyHash: body.encryptedSymmetricKeyHash, receiverPublicKeyHash, alg: body.alg, keyVersion: body.keyVersion }],
|
|
25674
25786
|
proofs: [session.cid],
|
|
@@ -25678,7 +25790,8 @@ var init_dist3 = __esm({
|
|
|
25678
25790
|
sign: signer
|
|
25679
25791
|
});
|
|
25680
25792
|
try {
|
|
25681
|
-
|
|
25793
|
+
this.options.onStage?.("decryption");
|
|
25794
|
+
const response = await this.fetchFn(new URL("/invoke", this.options.nodeOrigin), { method: "POST", redirect: "error", headers: { accept: "application/json", "content-type": "application/json", Authorization: invocation.authorization }, body: JSON.stringify(body), ...this.options.signal === void 0 ? {} : { signal: this.options.signal } });
|
|
25682
25795
|
if (!response.ok) throw new Error(`v3 decrypt invocation rejected (${response.status})`);
|
|
25683
25796
|
const value = object2(await response.json(), "v3 decrypt response");
|
|
25684
25797
|
const allowed = ["type", "targetNode", "networkId", "invocationCid", "encryptedSymmetricKeyHash", "receiverPublicKeyHash", "wrappedKey", "alg", "keyVersion", "requestHash", "nodeId", "nodeSignature"];
|
|
@@ -25752,7 +25865,7 @@ var init_dist3 = __esm({
|
|
|
25752
25865
|
}
|
|
25753
25866
|
async nativeInvokeV3(request, envelope) {
|
|
25754
25867
|
const signer = this.nativeSigner ?? this.signer;
|
|
25755
|
-
if (this.session === void 0 || this.v3Authorization === void 0 || signer === void 0) throw new Error("v3 policy session signer is required");
|
|
25868
|
+
if (this.session === void 0 || this.v3Authorization === void 0 || this.v3NodeAudience === void 0 || signer === void 0) throw new Error("v3 policy session signer is required");
|
|
25756
25869
|
const session = verifyCompactUcanAuthorization(this.v3Authorization, this.session.sessionId);
|
|
25757
25870
|
if (session.payload.aud !== this.options.holderDid) throw new Error("v3 session recipient mismatch");
|
|
25758
25871
|
const action = request.action === "list" ? "tinycloud.kv/list" : request.action === "put" ? "tinycloud.kv/put" : request.action === "metadata" ? "tinycloud.kv/metadata" : "tinycloud.kv/get";
|
|
@@ -25766,7 +25879,7 @@ var init_dist3 = __esm({
|
|
|
25766
25879
|
if (path !== root && !(capability.selector === "prefix" && path.startsWith(`${root}/`))) throw new Error("v3 KV request is outside the signed selector");
|
|
25767
25880
|
const resource = `${capability.resource.slice(0, split2 + marker.length)}${path}`;
|
|
25768
25881
|
const now = Math.floor(Date.now() / 1e3);
|
|
25769
|
-
const invocation = await signCompactUcanAuthorization({ issuerDid: this.options.holderDid, audienceDid:
|
|
25882
|
+
const invocation = await signCompactUcanAuthorization({ issuerDid: this.options.holderDid, audienceDid: this.v3NodeAudience, attenuation: { [resource]: { [action]: [{ type: "xyz.tinycloud.resource/selector", kind: capability.selector, value: resource }] } }, facts: [{ type: "tinycloud.policy.invocation/v1", policyCid: envelope.policyCid, sessionCid: session.cid }], proofs: [session.cid], notBefore: now, expiresAt: Math.min(now + 60, session.payload.exp), nonce: toBase64Url(crypto.getRandomValues(new Uint8Array(16))), sign: signer });
|
|
25770
25883
|
const headers = new Headers({ accept: "application/json", Authorization: invocation.authorization });
|
|
25771
25884
|
let body;
|
|
25772
25885
|
if (action === "tinycloud.kv/put") {
|
|
@@ -25775,7 +25888,8 @@ var init_dist3 = __esm({
|
|
|
25775
25888
|
headers.set("content-type", request.contentType ?? "application/octet-stream");
|
|
25776
25889
|
if (request.ifMatch !== void 0) headers.set("if-match", request.ifMatch);
|
|
25777
25890
|
}
|
|
25778
|
-
|
|
25891
|
+
this.options.onStage?.("invocation");
|
|
25892
|
+
return this.fetchFn(new URL("/invoke", this.options.nodeOrigin), { method: "POST", redirect: "error", headers, ...body === void 0 ? {} : { body }, ...this.options.signal === void 0 ? {} : { signal: this.options.signal } });
|
|
25779
25893
|
}
|
|
25780
25894
|
};
|
|
25781
25895
|
}
|
|
@@ -32445,7 +32559,7 @@ function validateV3Invariants2(value, ctx) {
|
|
|
32445
32559
|
if (value.contentSource.encryptionNetwork !== value.encryptionNetwork) {
|
|
32446
32560
|
ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["encryptionNetwork"], message: "encryption network is not bound to the source" });
|
|
32447
32561
|
}
|
|
32448
|
-
if (value.attestedEnforcerBinding.enforcerDid !== value.target.nodeAudience || value.attestedEnforcerBinding.
|
|
32562
|
+
if (value.attestedEnforcerBinding.enforcerDid !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.attestedEnforcerBinding.nodeAudience || Date.parse(value.attestedEnforcerBinding.expiresAt) < Date.parse(value.expiry)) {
|
|
32449
32563
|
ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: ["attestedEnforcerBinding"], message: "enforcer binding does not cover the target and share lifetime" });
|
|
32450
32564
|
}
|
|
32451
32565
|
if (value.policy.contentSource.shareId !== value.contentSource.shareId || value.policy.contentSource.kvResource !== value.contentSource.kvResource || value.policy.contentSource.selector !== value.contentSource.selector || value.policy.contentSource.encryptionNetwork !== value.encryptionNetwork || value.policy.contentSource.encryptedSymmetricKeyDigestHex !== value.contentSource.encryptedSymmetricKeyDigestHex || value.policy.contentSource.keyVersion !== value.contentSource.keyVersion || value.policy.contentSource.mode !== value.contentSource.mode || value.policy.contentSource.initialCiphertextDigestHex !== value.contentSource.initialCiphertextDigestHex) {
|