@tinycloud/sdk-core 2.11.0-beta.0 → 2.11.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap/index.cjs +0 -4
- package/dist/delegations/index.cjs +93 -112
- package/dist/delegations/index.cjs.map +1 -1
- package/dist/delegations/index.d.cts +3 -2
- package/dist/delegations/index.d.ts +3 -2
- package/dist/delegations/index.js +119 -51
- package/dist/delegations/index.js.map +1 -1
- package/dist/index.cjs +775 -399
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +338 -12
- package/dist/index.d.ts +338 -12
- package/dist/index.js +798 -83
- package/dist/index.js.map +1 -1
- package/dist/policy/index.cjs +10 -74
- package/dist/policy/index.cjs.map +1 -1
- package/dist/policy/index.js +10 -8
- package/dist/policy/index.js.map +1 -1
- package/dist/{recipient-types.schema-B2wH53_t.d.cts → recipient-types.schema-D5pDlIqn.d.cts} +116 -5
- package/dist/{recipient-types.schema-B2wH53_t.d.ts → recipient-types.schema-D5pDlIqn.d.ts} +116 -5
- package/dist/requester/index.cjs +10 -38
- package/dist/requester/index.cjs.map +1 -1
- package/dist/requester/index.js +10 -8
- package/dist/requester/index.js.map +1 -1
- package/package.json +6 -3
package/dist/bootstrap/index.cjs
CHANGED
|
@@ -18,8 +18,4 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
18
18
|
var bootstrap_exports = {};
|
|
19
19
|
module.exports = __toCommonJS(bootstrap_exports);
|
|
20
20
|
__reExport(bootstrap_exports, require("@tinycloud/bootstrap"), module.exports);
|
|
21
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
22
|
-
0 && (module.exports = {
|
|
23
|
-
...require("@tinycloud/bootstrap")
|
|
24
|
-
});
|
|
25
21
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -35,10 +35,12 @@ __export(delegations_exports, {
|
|
|
35
35
|
DelegationErrorCodes: () => DelegationErrorCodes,
|
|
36
36
|
DelegationManager: () => DelegationManager,
|
|
37
37
|
EncodedShareDataSchema: () => EncodedShareDataSchema,
|
|
38
|
+
EncryptedSenderShareHistory: () => import_share_sdk.EncryptedSenderShareHistory,
|
|
38
39
|
MAX_CONTENT_BYTES: () => MAX_CONTENT_BYTES,
|
|
39
40
|
MAX_SEALED_SHARE_CONTENT_BYTES: () => MAX_SEALED_SHARE_CONTENT_BYTES,
|
|
40
41
|
MAX_SHARE_ARTIFACT_BYTES: () => MAX_SHARE_ARTIFACT_BYTES,
|
|
41
42
|
MAX_SHARE_CONTENT_BYTES: () => MAX_SHARE_CONTENT_BYTES,
|
|
43
|
+
MemoryEncryptedShareHistoryStorage: () => import_share_sdk.MemoryEncryptedShareHistoryStorage,
|
|
42
44
|
MemorySenderShareKeyStorage: () => MemorySenderShareKeyStorage,
|
|
43
45
|
MemorySenderShareRecordStorage: () => MemorySenderShareRecordStorage,
|
|
44
46
|
MemoryShareCache: () => MemoryShareCache,
|
|
@@ -53,6 +55,7 @@ __export(delegations_exports, {
|
|
|
53
55
|
ShareConflict: () => ShareConflict,
|
|
54
56
|
ShareEnvelopeError: () => ShareEnvelopeError,
|
|
55
57
|
ShareNativeResponseSchema: () => ShareNativeResponseSchema,
|
|
58
|
+
ShareReceiveError: () => import_share_sdk2.ShareReceiveError,
|
|
56
59
|
ShareRecipientClient: () => ShareRecipientClient,
|
|
57
60
|
ShareRecipientClientOptionsSchema: () => ShareRecipientClientOptionsSchema,
|
|
58
61
|
ShareRecipientPolicySchema: () => ShareRecipientPolicySchema,
|
|
@@ -60,7 +63,10 @@ __export(delegations_exports, {
|
|
|
60
63
|
ShareResourceSchema: () => ShareResourceSchema,
|
|
61
64
|
SharingService: () => SharingService,
|
|
62
65
|
SharingServiceConfigSchema: () => SharingServiceConfigSchema,
|
|
66
|
+
authorizationMethodForTarget: () => import_share_sdk.authorizationMethodForTarget,
|
|
67
|
+
authorizeShare: () => import_share_sdk.authorizeShare,
|
|
63
68
|
canonicalOwnerSharePolicy: () => canonicalOwnerSharePolicy,
|
|
69
|
+
claimShare: () => import_share_sdk.claimShare,
|
|
64
70
|
computeOwnerShareRegistrationCid: () => computeOwnerShareRegistrationCid,
|
|
65
71
|
computeShareCid: () => computeShareCid,
|
|
66
72
|
createDelegatedShareKey: () => createDelegatedShareKey,
|
|
@@ -75,23 +81,37 @@ __export(delegations_exports, {
|
|
|
75
81
|
encodeShareUrl: () => encodeShareUrl,
|
|
76
82
|
encryptShareBytes: () => encryptShareBytes,
|
|
77
83
|
encryptShareBytesAsync: () => encryptShareBytesAsync,
|
|
84
|
+
inspectShare: () => import_share_sdk2.inspectShare,
|
|
78
85
|
intersectShareCapabilities: () => intersectShareCapabilities,
|
|
86
|
+
isLegacyShareLink: () => import_share_sdk.isLegacyShareLink,
|
|
79
87
|
isV2ShareLink: () => isV2ShareLink,
|
|
88
|
+
listShares: () => import_share_sdk.listShares,
|
|
89
|
+
migrateShare: () => import_share_sdk.migrateShare,
|
|
80
90
|
normalizeShareActions: () => normalizeShareActions,
|
|
81
91
|
normalizeShareRecipientTarget: () => normalizeShareRecipientTarget,
|
|
82
92
|
normalizeShareResource: () => normalizeShareResource,
|
|
93
|
+
notifyShare: () => import_share_sdk.notifyShare,
|
|
83
94
|
parseShareArtifact: () => parseShareArtifact,
|
|
84
95
|
parseShareUrl: () => parseShareUrl,
|
|
96
|
+
publishPolicyShare: () => import_share_sdk.publishPolicyShare,
|
|
97
|
+
publishTargetShare: () => import_share_sdk.publishTargetShare,
|
|
98
|
+
receiveLegacyShare: () => import_share_sdk.receiveLegacyShare,
|
|
99
|
+
receiveShare: () => import_share_sdk2.receiveShare,
|
|
85
100
|
restoreDelegatedShareKey: () => restoreDelegatedShareKey,
|
|
101
|
+
resumeShareAuthorization: () => import_share_sdk.resumeShareAuthorization,
|
|
102
|
+
revokeShare: () => import_share_sdk.revokeShare,
|
|
86
103
|
shareCapabilityAllows: () => shareCapabilityAllows,
|
|
87
104
|
shareDeliveryTrustedKid: () => shareDeliveryTrustedKid,
|
|
105
|
+
showShare: () => import_share_sdk.showShare,
|
|
88
106
|
signShareEnvelope: () => signShareEnvelope,
|
|
107
|
+
toShareErrorInfo: () => import_share_sdk2.toShareErrorInfo,
|
|
89
108
|
validateEncodedShareData: () => validateEncodedShareData,
|
|
90
109
|
validateOwnerSharePolicyRegistration: () => validateOwnerSharePolicyRegistration,
|
|
91
110
|
validateOwnerSharePolicyRegistrationBytes: () => validateOwnerSharePolicyRegistrationBytes,
|
|
92
111
|
validateReceiveOptions: () => validateReceiveOptions,
|
|
93
112
|
validateShareDeliveryAuthorizationBytes: () => validateShareDeliveryAuthorizationBytes,
|
|
94
113
|
validateSharingServiceConfig: () => validateSharingServiceConfig,
|
|
114
|
+
verifyBearerEnvelope: () => import_share_sdk2.verifyBearerEnvelope,
|
|
95
115
|
verifyShareCid: () => verifyShareCid,
|
|
96
116
|
verifyShareEnvelope: () => verifyShareEnvelope
|
|
97
117
|
});
|
|
@@ -2244,13 +2264,12 @@ function digest(input, options) {
|
|
|
2244
2264
|
}
|
|
2245
2265
|
var identity2 = { code: code2, name, encode: encode4, digest };
|
|
2246
2266
|
|
|
2247
|
-
// ../../node_modules/multiformats/dist/src/hashes/sha2.js
|
|
2248
|
-
var
|
|
2249
|
-
__export(
|
|
2267
|
+
// ../../node_modules/multiformats/dist/src/hashes/sha2-browser.js
|
|
2268
|
+
var sha2_browser_exports = {};
|
|
2269
|
+
__export(sha2_browser_exports, {
|
|
2250
2270
|
sha256: () => sha256,
|
|
2251
2271
|
sha512: () => sha512
|
|
2252
2272
|
});
|
|
2253
|
-
var import_crypto = __toESM(require("crypto"), 1);
|
|
2254
2273
|
|
|
2255
2274
|
// ../../node_modules/multiformats/dist/src/hashes/hasher.js
|
|
2256
2275
|
var DEFAULT_MIN_DIGEST_LENGTH = 20;
|
|
@@ -2300,16 +2319,19 @@ function createDigest(digest4, code3, truncate) {
|
|
|
2300
2319
|
return create(code3, digest4);
|
|
2301
2320
|
}
|
|
2302
2321
|
|
|
2303
|
-
// ../../node_modules/multiformats/dist/src/hashes/sha2.js
|
|
2322
|
+
// ../../node_modules/multiformats/dist/src/hashes/sha2-browser.js
|
|
2323
|
+
function sha(name2) {
|
|
2324
|
+
return async (data) => new Uint8Array(await crypto.subtle.digest(name2, data));
|
|
2325
|
+
}
|
|
2304
2326
|
var sha256 = from2({
|
|
2305
2327
|
name: "sha2-256",
|
|
2306
2328
|
code: 18,
|
|
2307
|
-
encode: (
|
|
2329
|
+
encode: sha("SHA-256")
|
|
2308
2330
|
});
|
|
2309
2331
|
var sha512 = from2({
|
|
2310
2332
|
name: "sha2-512",
|
|
2311
2333
|
code: 19,
|
|
2312
|
-
encode: (
|
|
2334
|
+
encode: sha("SHA-512")
|
|
2313
2335
|
});
|
|
2314
2336
|
|
|
2315
2337
|
// ../../node_modules/multiformats/dist/src/cid.js
|
|
@@ -2651,7 +2673,7 @@ var cidSymbol = /* @__PURE__ */ Symbol.for("@ipld/js-cid/CID");
|
|
|
2651
2673
|
|
|
2652
2674
|
// ../../node_modules/multiformats/dist/src/basics.js
|
|
2653
2675
|
var bases = { ...identity_exports, ...base2_exports, ...base8_exports, ...base10_exports, ...base16_exports, ...base32_exports, ...base36_exports, ...base58_exports, ...base64_exports, ...base256emoji_exports };
|
|
2654
|
-
var hashes = { ...
|
|
2676
|
+
var hashes = { ...sha2_browser_exports, ...identity_exports2 };
|
|
2655
2677
|
|
|
2656
2678
|
// src/delegations/SharingService.ts
|
|
2657
2679
|
var import_ed255193 = require("@noble/curves/ed25519");
|
|
@@ -2820,6 +2842,10 @@ function normalizeRecipient(recipient) {
|
|
|
2820
2842
|
}
|
|
2821
2843
|
return { kind: recipient.kind, value: domain };
|
|
2822
2844
|
}
|
|
2845
|
+
if (recipient.kind === "recipientDid") {
|
|
2846
|
+
if (!isCanonicalRecipientDid(recipient.value)) throw new ShareEnvelopeError("invalid-envelope", "recipient DID is invalid");
|
|
2847
|
+
return { kind: recipient.kind, value: recipient.value };
|
|
2848
|
+
}
|
|
2823
2849
|
const exact = recipient.value.trim();
|
|
2824
2850
|
const at = exact.lastIndexOf("@");
|
|
2825
2851
|
const normalizedExact = at > 0 ? `${exact.slice(0, at)}@${exact.slice(at + 1).toLowerCase()}` : exact;
|
|
@@ -2828,6 +2854,28 @@ function normalizeRecipient(recipient) {
|
|
|
2828
2854
|
}
|
|
2829
2855
|
return { kind: recipient.kind, value: normalizedExact };
|
|
2830
2856
|
}
|
|
2857
|
+
function isCanonicalRecipientDid(value) {
|
|
2858
|
+
if (value.length === 0 || value.length > 2048 || /[\u0000-\u0020\u007f]/.test(value)) return false;
|
|
2859
|
+
const parts = value.split(":");
|
|
2860
|
+
if (parts.length < 3 || parts[0] !== "did" || !/^[a-z0-9]+$/.test(parts[1] ?? "")) return false;
|
|
2861
|
+
const identifier = parts.slice(2);
|
|
2862
|
+
if (identifier.some((part) => part.length === 0)) return false;
|
|
2863
|
+
if (parts[1] === "web") {
|
|
2864
|
+
const host = identifier[0] ?? "";
|
|
2865
|
+
if (host.length > 253 || host.split(".").some((label) => !label || label.length > 63 || !/^[A-Za-z0-9-]+$/.test(label) || label.startsWith("-") || label.endsWith("-"))) return false;
|
|
2866
|
+
return identifier.slice(1).every((part) => /^[A-Za-z0-9._%-]+$/.test(part));
|
|
2867
|
+
}
|
|
2868
|
+
if (parts[1] === "pkh") return identifier.length >= 3 && identifier.every((part) => /^[A-Za-z0-9._%-]+$/.test(part));
|
|
2869
|
+
if (parts[1] === "key") {
|
|
2870
|
+
try {
|
|
2871
|
+
const bytes2 = base58btc.decode(identifier.join(":"));
|
|
2872
|
+
return bytes2.length === 34 && bytes2[0] === 237 && bytes2[1] === 1;
|
|
2873
|
+
} catch {
|
|
2874
|
+
return false;
|
|
2875
|
+
}
|
|
2876
|
+
}
|
|
2877
|
+
return false;
|
|
2878
|
+
}
|
|
2831
2879
|
function normalizeShareRecipientTarget(recipient) {
|
|
2832
2880
|
const normalized = normalizeRecipient(recipient);
|
|
2833
2881
|
if (normalized === void 0) throw new ShareEnvelopeError("invalid-envelope", "recipient matcher is required");
|
|
@@ -2914,9 +2962,9 @@ function verifyShareEnvelope(envelope, options = {}) {
|
|
|
2914
2962
|
const recipient = normalizeRecipient(envelope.recipient);
|
|
2915
2963
|
if (recipient !== void 0 && JSON.stringify(recipient) !== JSON.stringify(envelope.recipient)) throw new ShareEnvelopeError("invalid-envelope", "recipient is not canonical");
|
|
2916
2964
|
if (recipient?.kind === "exactEmail" || recipient?.kind === "emailDomain") throw new ShareEnvelopeError("unsafe-plaintext", "recipient matchers are not public envelope fields");
|
|
2917
|
-
if (envelope.recipientKind !== void 0 && !["exactEmail", "emailDomain", "bearer"].includes(envelope.recipientKind)) throw new ShareEnvelopeError("invalid-envelope", "recipient mode is invalid");
|
|
2965
|
+
if (envelope.recipientKind !== void 0 && !["exactEmail", "emailDomain", "recipientDid", "bearer"].includes(envelope.recipientKind)) throw new ShareEnvelopeError("invalid-envelope", "recipient mode is invalid");
|
|
2918
2966
|
if (envelope.recipientKind === "bearer" && recipient?.kind !== void 0 && recipient.kind !== "bearer") throw new ShareEnvelopeError("invalid-envelope", "recipient mode does not match recipient");
|
|
2919
|
-
if ((envelope.recipientKind === "exactEmail" || envelope.recipientKind === "emailDomain") && !envelope.encrypted) throw new ShareEnvelopeError("unsafe-plaintext", "
|
|
2967
|
+
if ((envelope.recipientKind === "exactEmail" || envelope.recipientKind === "emailDomain" || envelope.recipientKind === "recipientDid") && !envelope.encrypted) throw new ShareEnvelopeError("unsafe-plaintext", "addressed shares require encryption");
|
|
2920
2968
|
if (typeof envelope.spaceId !== "string" || envelope.spaceId.length === 0 || typeof envelope.content.mimeType !== "string" || envelope.content.mimeType.length === 0 || typeof envelope.content.digest !== "string" || !/^[A-Za-z0-9_-]+$/.test(envelope.content.digest)) throw new ShareEnvelopeError("invalid-envelope", "content metadata is invalid");
|
|
2921
2969
|
const maxContentBytes = envelope.encrypted ? options.maxSealedContentBytes ?? MAX_SEALED_SHARE_CONTENT_BYTES : options.maxContentBytes ?? MAX_SHARE_CONTENT_BYTES;
|
|
2922
2970
|
if (!Number.isInteger(envelope.content.size) || envelope.content.size < 0 || envelope.content.size > maxContentBytes) throw new ShareEnvelopeError("content-too-large", "share content exceeds the configured limit");
|
|
@@ -3055,7 +3103,7 @@ function parsePolicyMetadata(policyBytes, target, expectedExpiry) {
|
|
|
3055
3103
|
assertKeys(policy, ["type", "version", "issuerDid", "recipientMatcher", "target", "delegation", "authority", "actions", "resource", "content-source", "expiresAt"], "published canonical policy material");
|
|
3056
3104
|
if (typeof policy.issuerDid !== "string" || typeof policy.expiresAt !== "string" || policy.expiresAt !== expectedExpiry) throw new ShareEnvelopeError("invalid-envelope", "policy expiry is not bound to the envelope");
|
|
3057
3105
|
const matcherValue = policy.recipientMatcher;
|
|
3058
|
-
if (!isPlainObject(matcherValue) || matcherValue.kind !== "exactEmail" && matcherValue.kind !== "emailDomain" || typeof matcherValue.value !== "string") throw new ShareEnvelopeError("invalid-envelope", "policy matcher is invalid");
|
|
3106
|
+
if (!isPlainObject(matcherValue) || matcherValue.kind !== "exactEmail" && matcherValue.kind !== "emailDomain" && matcherValue.kind !== "recipientDid" || typeof matcherValue.value !== "string") throw new ShareEnvelopeError("invalid-envelope", "policy matcher is invalid");
|
|
3059
3107
|
const matcher2 = normalizeRecipient(matcherValue);
|
|
3060
3108
|
if (matcher2 === void 0 || matcher2.kind === "bearer") throw new ShareEnvelopeError("invalid-envelope", "policy matcher is invalid");
|
|
3061
3109
|
if (!isPlainObject(policy.target)) throw new ShareEnvelopeError("invalid-envelope", "policy target is invalid");
|
|
@@ -3142,7 +3190,7 @@ function parseCanonicalPublishedV2(value, options) {
|
|
|
3142
3190
|
if (!Number.isFinite(expiry) || expiry <= (options.now ?? /* @__PURE__ */ new Date()).getTime() || new Date(expiry).toISOString() !== value.expiry) throw new ShareEnvelopeError("expired", "published share envelope has expired");
|
|
3143
3191
|
if (typeof delegation.cid !== "string" || typeof delegation.issuerDid !== "string" || typeof delegation.audience !== "string" || typeof delegation.expiresAt !== "string" || Date.parse(delegation.expiresAt) > expiry) throw new ShareEnvelopeError("invalid-envelope", "published v2 delegation is invalid");
|
|
3144
3192
|
const matcher = value.recipientMatcher;
|
|
3145
|
-
if (!isPlainObject(matcher) || matcher.kind !== "exactEmail" && matcher.kind !== "emailDomain" || typeof matcher.value !== "string") throw new ShareEnvelopeError("invalid-envelope", "published v2 recipient matcher is invalid");
|
|
3193
|
+
if (!isPlainObject(matcher) || matcher.kind !== "exactEmail" && matcher.kind !== "emailDomain" && matcher.kind !== "recipientDid" || typeof matcher.value !== "string") throw new ShareEnvelopeError("invalid-envelope", "published v2 recipient matcher is invalid");
|
|
3146
3194
|
const normalizedMatcher = normalizeRecipient(matcher);
|
|
3147
3195
|
if (normalizedMatcher === void 0 || normalizedMatcher.kind === "bearer") throw new ShareEnvelopeError("invalid-envelope", "published v2 recipient matcher is invalid");
|
|
3148
3196
|
if (!Array.isArray(value.actions)) throw new ShareEnvelopeError("invalid-envelope", "published v2 actions are invalid");
|
|
@@ -3583,10 +3631,11 @@ var ShareConflict = class extends Error {
|
|
|
3583
3631
|
}
|
|
3584
3632
|
};
|
|
3585
3633
|
var ShareAccessError = class extends Error {
|
|
3586
|
-
constructor(code3, message) {
|
|
3634
|
+
constructor(code3, message, details) {
|
|
3587
3635
|
super(message ?? "shared access could not be completed");
|
|
3588
3636
|
this.name = "ShareAccessError";
|
|
3589
3637
|
this.code = code3;
|
|
3638
|
+
this.details = details;
|
|
3590
3639
|
}
|
|
3591
3640
|
};
|
|
3592
3641
|
|
|
@@ -3595,6 +3644,7 @@ var import_zod3 = require("zod");
|
|
|
3595
3644
|
var ShareRecipientTargetSchema = import_zod3.z.discriminatedUnion("kind", [
|
|
3596
3645
|
import_zod3.z.object({ kind: import_zod3.z.literal("exactEmail"), value: import_zod3.z.string().min(1) }).strict(),
|
|
3597
3646
|
import_zod3.z.object({ kind: import_zod3.z.literal("emailDomain"), value: import_zod3.z.string().min(1) }).strict(),
|
|
3647
|
+
import_zod3.z.object({ kind: import_zod3.z.literal("recipientDid"), value: import_zod3.z.string().regex(/^did:[a-z0-9]+:.+$/) }).strict(),
|
|
3598
3648
|
import_zod3.z.object({ kind: import_zod3.z.literal("bearer") }).strict()
|
|
3599
3649
|
]);
|
|
3600
3650
|
var ShareResourceSchema = import_zod3.z.discriminatedUnion("kind", [
|
|
@@ -3638,7 +3688,8 @@ var ShareContentSourceSchema = import_zod3.z.discriminatedUnion("kind", [
|
|
|
3638
3688
|
]);
|
|
3639
3689
|
var ShareAddressedRecipientSchema = import_zod3.z.discriminatedUnion("kind", [
|
|
3640
3690
|
import_zod3.z.object({ kind: import_zod3.z.literal("exactEmail"), value: import_zod3.z.string().min(1) }).strict(),
|
|
3641
|
-
import_zod3.z.object({ kind: import_zod3.z.literal("emailDomain"), value: import_zod3.z.string().min(1) }).strict()
|
|
3691
|
+
import_zod3.z.object({ kind: import_zod3.z.literal("emailDomain"), value: import_zod3.z.string().min(1) }).strict(),
|
|
3692
|
+
import_zod3.z.object({ kind: import_zod3.z.literal("recipientDid"), value: import_zod3.z.string().regex(/^did:[a-z0-9]+:.+$/) }).strict()
|
|
3642
3693
|
]);
|
|
3643
3694
|
var ShareAddressedDelegationRequestV2Schema = import_zod3.z.object({
|
|
3644
3695
|
version: import_zod3.z.literal(2),
|
|
@@ -3893,12 +3944,21 @@ var ShareRecipientClient = class {
|
|
|
3893
3944
|
const { envelope } = resolved.artifact;
|
|
3894
3945
|
const { location } = resolved;
|
|
3895
3946
|
const bearer = isBearerEnvelope(envelope);
|
|
3896
|
-
const policy = envelope.recipientKind === "exactEmail" || envelope.recipientKind === "emailDomain";
|
|
3947
|
+
const policy = envelope.recipientKind === "exactEmail" || envelope.recipientKind === "emailDomain" || envelope.authorizationTargetKind === "recipientDid";
|
|
3897
3948
|
const legacyBearer = !policy && envelope.recipientKind === void 0;
|
|
3898
|
-
|
|
3949
|
+
let recipientDidSession;
|
|
3950
|
+
if (envelope.authorizationTargetKind === "recipientDid") {
|
|
3951
|
+
if (this.options.establishRecipientDidSession === void 0) throw new ShareAccessError("SHARE_DEVICE_AUTH_REQUIRED", "an OpenKey device authorization is required");
|
|
3952
|
+
const authorization = await this.options.establishRecipientDidSession({ envelope, recipientDid: envelope.recipient?.kind === "recipientDid" ? envelope.recipient.value : "" });
|
|
3953
|
+
if ("state" in authorization) {
|
|
3954
|
+
if (authorization.state === "authorization-required") throw new ShareAccessError("SHARE_DEVICE_AUTH_REQUIRED", "an OpenKey device authorization is required", authorization);
|
|
3955
|
+
throw new ShareAccessError("SHARE_DENIED", "recipient DID authorization was denied", authorization);
|
|
3956
|
+
}
|
|
3957
|
+
recipientDidSession = authorization;
|
|
3958
|
+
}
|
|
3899
3959
|
if (policy && this.options.bearerSession !== void 0) throw new ShareAccessError("SHARE_POLICY_BEARER_MISMATCH");
|
|
3900
3960
|
if (bearer && this.options.presentation !== void 0) throw new ShareAccessError("SHARE_BEARER_PRESENTATION_MISMATCH");
|
|
3901
|
-
const session = bearer || legacyBearer ? this.options.bearerSession : policy && this.options.establishPolicySession !== void 0 ? await this.options.establishPolicySession({ envelope, presentation: this.options.presentation }) : policy ? await this.establishPolicySession(envelope) : void 0;
|
|
3961
|
+
const session = bearer || legacyBearer ? this.options.bearerSession : recipientDidSession ? recipientDidSession : policy && this.options.establishPolicySession !== void 0 ? await this.options.establishPolicySession({ envelope, presentation: this.options.presentation }) : policy ? await this.establishPolicySession(envelope) : void 0;
|
|
3902
3962
|
const kv = bearer || legacyBearer ? session === void 0 ? void 0 : this.createKV(envelope.origin, session) : void 0;
|
|
3903
3963
|
const policySession = policy ? session : void 0;
|
|
3904
3964
|
if (policySession !== void 0) this.assertProvidedPolicySession(policySession, envelope);
|
|
@@ -5801,10 +5861,6 @@ var import_sha2564 = require("@noble/hashes/sha256");
|
|
|
5801
5861
|
|
|
5802
5862
|
// src/policy/signed-object.ts
|
|
5803
5863
|
var import_ed255194 = require("@noble/curves/ed25519");
|
|
5804
|
-
var import_viem3 = require("viem");
|
|
5805
|
-
|
|
5806
|
-
// src/policy/capability.ts
|
|
5807
|
-
var import_bootstrap = require("@tinycloud/bootstrap");
|
|
5808
5864
|
var import_viem2 = require("viem");
|
|
5809
5865
|
|
|
5810
5866
|
// src/policy/errors.ts
|
|
@@ -6003,33 +6059,11 @@ function assertUnicodeScalarString(value, path) {
|
|
|
6003
6059
|
}
|
|
6004
6060
|
}
|
|
6005
6061
|
|
|
6006
|
-
// src/policy/
|
|
6062
|
+
// src/policy/signed-object.ts
|
|
6007
6063
|
var textEncoder2 = new TextEncoder();
|
|
6008
6064
|
var objectHasOwn2 = Object.hasOwn ?? Object.prototype.hasOwnProperty.call.bind(
|
|
6009
6065
|
Object.prototype.hasOwnProperty
|
|
6010
6066
|
);
|
|
6011
|
-
var CEILING_SERVICES = /* @__PURE__ */ new Set(["tinycloud.kv", "tinycloud.sql", "tinycloud.vfs"]);
|
|
6012
|
-
var GRANTABLE_ACTIONS = /* @__PURE__ */ new Map();
|
|
6013
|
-
for (const entry of import_bootstrap.CAPABILITY_REGISTRY) {
|
|
6014
|
-
if (!CEILING_SERVICES.has(entry.service)) {
|
|
6015
|
-
continue;
|
|
6016
|
-
}
|
|
6017
|
-
if (entry.aliasOf !== void 0 || entry.implies !== void 0 || entry.urn.endsWith("/*")) {
|
|
6018
|
-
continue;
|
|
6019
|
-
}
|
|
6020
|
-
const existing = GRANTABLE_ACTIONS.get(entry.service);
|
|
6021
|
-
if (existing === void 0) {
|
|
6022
|
-
GRANTABLE_ACTIONS.set(entry.service, /* @__PURE__ */ new Set([entry.urn]));
|
|
6023
|
-
continue;
|
|
6024
|
-
}
|
|
6025
|
-
existing.add(entry.urn);
|
|
6026
|
-
}
|
|
6027
|
-
|
|
6028
|
-
// src/policy/signed-object.ts
|
|
6029
|
-
var textEncoder3 = new TextEncoder();
|
|
6030
|
-
var objectHasOwn3 = Object.hasOwn ?? Object.prototype.hasOwnProperty.call.bind(
|
|
6031
|
-
Object.prototype.hasOwnProperty
|
|
6032
|
-
);
|
|
6033
6067
|
function canonicalizeSignedObjectUnsigned(input) {
|
|
6034
6068
|
return jcsCanonicalize(input);
|
|
6035
6069
|
}
|
|
@@ -6191,6 +6225,10 @@ async function createPolicyEnforcementDelegation(input) {
|
|
|
6191
6225
|
spaceId: input.spaceId,
|
|
6192
6226
|
path: input.path,
|
|
6193
6227
|
actions: [...input.actions],
|
|
6228
|
+
...input.decryption === void 0 ? {} : {
|
|
6229
|
+
decryptionNetworkId: input.decryption.networkId,
|
|
6230
|
+
decryptionAction: input.decryption.action
|
|
6231
|
+
},
|
|
6194
6232
|
contentSourceDigest: input.contentSourceDigest,
|
|
6195
6233
|
expiresAt: input.expiresAt
|
|
6196
6234
|
};
|
|
@@ -6210,7 +6248,9 @@ function computeOwnerShareRegistrationCid(registration) {
|
|
|
6210
6248
|
function validateOwnerSharePolicyRegistration(value, expected) {
|
|
6211
6249
|
if (cid(expected.policy.bytes) !== expected.policy.cid) throw new Error("submitted owner-share policy bytes do not match its CID");
|
|
6212
6250
|
const root = assertObject(value, ["registration", "proof"], "owner-share registration response");
|
|
6213
|
-
const
|
|
6251
|
+
const rawRegistration = root.registration;
|
|
6252
|
+
const hasDecryption = typeof rawRegistration === "object" && rawRegistration !== null && Object.prototype.hasOwnProperty.call(rawRegistration, "decryption");
|
|
6253
|
+
const registration = assertObject(root.registration, ["registrationCid", "policyCid", "ownerDelegationCid", "enforcementDelegationCid", "ownerDid", "shareKeyDid", "enforcerDid", "shareId", "recipientMatcher", "target", "resource", "actions", ...hasDecryption ? ["decryption"] : [], "contentSource", "contentSourceDigest", "registeredAt", "expiresAt"], "owner-share registration");
|
|
6214
6254
|
const proof = assertObject(root.proof, ["alg", "kid", "signature"], "owner-share registration proof");
|
|
6215
6255
|
if (registration.policyCid !== expected.policy.cid || registration.ownerDelegationCid !== expected.ownerDelegation.delegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegation.cid || registration.contentSourceDigest !== expected.contentSourceDigest) throw new Error("owner-share registration is not bound to the submitted chain");
|
|
6216
6256
|
let policyValue;
|
|
@@ -6226,7 +6266,9 @@ function validateOwnerSharePolicyRegistration(value, expected) {
|
|
|
6226
6266
|
const registrationTarget = registration.target;
|
|
6227
6267
|
const registrationResource = registration.resource;
|
|
6228
6268
|
const enforcementFacts = expected.enforcementDelegation.facts;
|
|
6229
|
-
|
|
6269
|
+
const decryption = policy.decryption;
|
|
6270
|
+
const decryptionMatches = decryption === void 0 ? registration.decryption === void 0 : registration.decryption !== void 0 && canonicalizeSignedObjectUnsigned(decryption) === canonicalizeSignedObjectUnsigned(registration.decryption);
|
|
6271
|
+
if (typeof target?.origin !== "string" || typeof target.nodeAudience !== "string" || typeof target.enforcerDid !== "string" || typeof target.spaceId !== "string" || typeof resource?.kind !== "string" || !["exact", "prefix"].includes(resource.kind) || typeof resource?.path !== "string" || !Array.isArray(policy.actions) || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId || canonicalizeSignedObjectUnsigned(policy.recipientMatcher) !== canonicalizeSignedObjectUnsigned(registration.recipientMatcher) || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path || canonicalizeSignedObjectUnsigned(policy.actions) !== canonicalizeSignedObjectUnsigned(registration.actions) || !decryptionMatches || canonicalizeSignedObjectUnsigned(policy.contentSource) !== canonicalizeSignedObjectUnsigned(registration.contentSource) || policy.expiresAt !== registration.expiresAt || policy.contentSourceDigest !== registration.contentSourceDigest || enforcementFacts.ownerDelegationCid !== registration.ownerDelegationCid || enforcementFacts.policyCid !== registration.policyCid || enforcementFacts.shareKeyDid !== registration.shareKeyDid || enforcementFacts.enforcerDid !== registration.enforcerDid || enforcementFacts.nodeAudience !== registrationTarget.nodeAudience || enforcementFacts.spaceId !== registrationTarget.spaceId || enforcementFacts.path !== registrationResource.path || canonicalizeSignedObjectUnsigned(enforcementFacts.actions) !== canonicalizeSignedObjectUnsigned(registration.actions) || enforcementFacts.decryptionNetworkId !== decryption?.networkId || enforcementFacts.decryptionAction !== decryption?.action || enforcementFacts.expiresAt !== registration.expiresAt) throw new Error("owner-share registration is not bound to the canonical policy");
|
|
6230
6272
|
if (typeof registration.registrationCid !== "string" || typeof registration.expiresAt !== "string" || typeof registration.registeredAt !== "string") throw new Error("owner-share registration timestamps are invalid");
|
|
6231
6273
|
if (new Date(registration.expiresAt).toISOString() !== registration.expiresAt || Date.parse(registration.expiresAt) <= Date.now()) throw new Error("owner-share registration is expired or non-canonical");
|
|
6232
6274
|
const { registrationCid: _registrationCid, ...registrationCore } = registration;
|
|
@@ -6328,7 +6370,7 @@ function validateShareDeliveryAuthorizationBytes(bytesValue, expected) {
|
|
|
6328
6370
|
const authorization = assertObject2(root.authorization, AUTHORIZATION_KEYS, "share delivery authorization");
|
|
6329
6371
|
const proof = assertObject2(root.proof, ["alg", "kid", "signature"], "share delivery authorization proof");
|
|
6330
6372
|
const request = expected.request;
|
|
6331
|
-
if (authorization.type !== "TinyCloudShareDeliveryAuthorization" || authorization.version !== 2 || authorization.dataAuthority !== false || authorization.jti !== request.jti || authorization.shareCid !== request.shareCid || authorization.shareId !== request.shareId || authorization.registrationCid !== request.registrationCid || authorization.delegationCid !== request.delegationCid || authorization.enforcementDelegationCid !== request.enforcementDelegationCid || authorization.envelopeCid !== request.envelopeCid || authorization.policyCid !== request.policyCid || authorization.deliveryEmail !== request.recipientEmail || authorization.shareUrl !== request.shareUrl || authorization.documentName !== request.documentName || authorization.requestBodyDigest !== request.requestBodyDigest || authorization.expiresAt !== request.expiresAt || authorization.idempotencyKey !== request.
|
|
6373
|
+
if (authorization.type !== "TinyCloudShareDeliveryAuthorization" || authorization.version !== 2 || authorization.dataAuthority !== false || authorization.jti !== request.jti || authorization.shareCid !== request.shareCid || authorization.shareId !== request.shareId || authorization.registrationCid !== request.registrationCid || authorization.delegationCid !== request.delegationCid || authorization.enforcementDelegationCid !== request.enforcementDelegationCid || authorization.envelopeCid !== request.envelopeCid || authorization.policyCid !== request.policyCid || authorization.deliveryEmail !== request.recipientEmail || authorization.shareUrl !== request.shareUrl || authorization.documentName !== request.documentName || authorization.requestBodyDigest !== request.requestBodyDigest || authorization.expiresAt !== request.expiresAt || authorization.idempotencyKey !== request.idempotencyKey || authorization.reportAbuseToken !== request.jti || authorization.authorityMaterialHandle !== request.registrationCid) {
|
|
6332
6374
|
throw new Error("share delivery authorization is not bound to the submitted request");
|
|
6333
6375
|
}
|
|
6334
6376
|
if (typeof authorization.issuedAt !== "string" || Date.parse(authorization.issuedAt) > Date.now() + 6e4) throw new Error("share delivery authorization issuedAt is invalid");
|
|
@@ -6462,69 +6504,8 @@ var SenderShareStore = class {
|
|
|
6462
6504
|
await this.keys.delete(shareId);
|
|
6463
6505
|
}
|
|
6464
6506
|
};
|
|
6465
|
-
|
|
6466
|
-
|
|
6467
|
-
|
|
6468
|
-
|
|
6469
|
-
EncodedShareDataSchema,
|
|
6470
|
-
MAX_CONTENT_BYTES,
|
|
6471
|
-
MAX_SEALED_SHARE_CONTENT_BYTES,
|
|
6472
|
-
MAX_SHARE_ARTIFACT_BYTES,
|
|
6473
|
-
MAX_SHARE_CONTENT_BYTES,
|
|
6474
|
-
MemorySenderShareKeyStorage,
|
|
6475
|
-
MemorySenderShareRecordStorage,
|
|
6476
|
-
MemoryShareCache,
|
|
6477
|
-
ReceiveOptionsSchema,
|
|
6478
|
-
SHARE_DELIVERY_AUTHORIZATION_DOMAIN,
|
|
6479
|
-
SenderShareStore,
|
|
6480
|
-
ShareAccessError,
|
|
6481
|
-
ShareActionSchema,
|
|
6482
|
-
ShareAddressedDelegationEnvelopeV2Schema,
|
|
6483
|
-
ShareAddressedDelegationRequestV2Schema,
|
|
6484
|
-
ShareAddressedDelegationResponseV2Schema,
|
|
6485
|
-
ShareConflict,
|
|
6486
|
-
ShareEnvelopeError,
|
|
6487
|
-
ShareNativeResponseSchema,
|
|
6488
|
-
ShareRecipientClient,
|
|
6489
|
-
ShareRecipientClientOptionsSchema,
|
|
6490
|
-
ShareRecipientPolicySchema,
|
|
6491
|
-
ShareRecipientTargetSchema,
|
|
6492
|
-
ShareResourceSchema,
|
|
6493
|
-
SharingService,
|
|
6494
|
-
SharingServiceConfigSchema,
|
|
6495
|
-
canonicalOwnerSharePolicy,
|
|
6496
|
-
computeOwnerShareRegistrationCid,
|
|
6497
|
-
computeShareCid,
|
|
6498
|
-
createDelegatedShareKey,
|
|
6499
|
-
createPolicyEnforcementDelegation,
|
|
6500
|
-
createShareArtifact,
|
|
6501
|
-
createShareArtifactAsync,
|
|
6502
|
-
createSharePolicy,
|
|
6503
|
-
createSharingService,
|
|
6504
|
-
decryptShareBytesAsync,
|
|
6505
|
-
encodeInlineShareUrl,
|
|
6506
|
-
encodeShareArtifact,
|
|
6507
|
-
encodeShareUrl,
|
|
6508
|
-
encryptShareBytes,
|
|
6509
|
-
encryptShareBytesAsync,
|
|
6510
|
-
intersectShareCapabilities,
|
|
6511
|
-
isV2ShareLink,
|
|
6512
|
-
normalizeShareActions,
|
|
6513
|
-
normalizeShareRecipientTarget,
|
|
6514
|
-
normalizeShareResource,
|
|
6515
|
-
parseShareArtifact,
|
|
6516
|
-
parseShareUrl,
|
|
6517
|
-
restoreDelegatedShareKey,
|
|
6518
|
-
shareCapabilityAllows,
|
|
6519
|
-
shareDeliveryTrustedKid,
|
|
6520
|
-
signShareEnvelope,
|
|
6521
|
-
validateEncodedShareData,
|
|
6522
|
-
validateOwnerSharePolicyRegistration,
|
|
6523
|
-
validateOwnerSharePolicyRegistrationBytes,
|
|
6524
|
-
validateReceiveOptions,
|
|
6525
|
-
validateShareDeliveryAuthorizationBytes,
|
|
6526
|
-
validateSharingServiceConfig,
|
|
6527
|
-
verifyShareCid,
|
|
6528
|
-
verifyShareEnvelope
|
|
6529
|
-
});
|
|
6507
|
+
|
|
6508
|
+
// src/delegations/index.ts
|
|
6509
|
+
var import_share_sdk = require("@tinycloud/share-sdk");
|
|
6510
|
+
var import_share_sdk2 = require("@tinycloud/share-sdk");
|
|
6530
6511
|
//# sourceMappingURL=index.cjs.map
|