@amalgm/live 0.2.43 → 0.2.45
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/contracts/content.d.ts +1 -1
- package/dist/contracts/content.js +1 -1
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +1 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/protection.d.ts +28 -0
- package/dist/contracts/protection.d.ts.map +1 -0
- package/dist/contracts/protection.js +54 -0
- package/dist/contracts/protection.js.map +1 -0
- package/dist/entities/cloud.d.ts +12 -2
- package/dist/entities/cloud.d.ts.map +1 -1
- package/dist/entities/cloud.js +40 -3
- package/dist/entities/cloud.js.map +1 -1
- package/dist/files/commands.d.ts +2 -1
- package/dist/files/commands.d.ts.map +1 -1
- package/dist/files/commands.js +1 -1
- package/dist/files/commands.js.map +1 -1
- package/dist/registration/user-ground.d.ts.map +1 -1
- package/dist/registration/user-ground.js +8 -8
- package/dist/registration/user-ground.js.map +1 -1
- package/dist/transfer/download.d.ts +4 -5
- package/dist/transfer/download.d.ts.map +1 -1
- package/dist/transfer/download.js +16 -49
- package/dist/transfer/download.js.map +1 -1
- package/dist/transfer/index.d.ts +1 -0
- package/dist/transfer/index.d.ts.map +1 -1
- package/dist/transfer/index.js +1 -0
- package/dist/transfer/index.js.map +1 -1
- package/dist/transfer/presign.d.ts +26 -0
- package/dist/transfer/presign.d.ts.map +1 -0
- package/dist/transfer/presign.js +44 -0
- package/dist/transfer/presign.js.map +1 -0
- package/dist-cjs/contracts/content.js +1 -1
- package/dist-cjs/contracts/index.js +1 -0
- package/dist-cjs/contracts/index.js.map +1 -1
- package/dist-cjs/contracts/protection.js +59 -0
- package/dist-cjs/contracts/protection.js.map +1 -0
- package/dist-cjs/entities/cloud.js +40 -3
- package/dist-cjs/entities/cloud.js.map +1 -1
- package/dist-cjs/files/commands.js +1 -1
- package/dist-cjs/files/commands.js.map +1 -1
- package/dist-cjs/registration/user-ground.js +8 -8
- package/dist-cjs/registration/user-ground.js.map +1 -1
- package/dist-cjs/transfer/download.js +16 -49
- package/dist-cjs/transfer/download.js.map +1 -1
- package/dist-cjs/transfer/index.js +1 -0
- package/dist-cjs/transfer/index.js.map +1 -1
- package/dist-cjs/transfer/presign.js +48 -0
- package/dist-cjs/transfer/presign.js.map +1 -0
- package/package.json +4 -1
package/dist/transfer/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|
package/dist/transfer/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Presigned-URL brokering for direct content-storage fetches.
|
|
3
|
+
*
|
|
4
|
+
* Downloads fetch every storage object straight from content storage using
|
|
5
|
+
* short-lived URLs the gateway signs. Callers ask for one object's URL at a
|
|
6
|
+
* time; the broker coalesces every request made in the same event-loop turn
|
|
7
|
+
* into one batched signing call, so thousands of tiny fetches cost a handful
|
|
8
|
+
* of control-plane round trips. URLs are used immediately and never cached —
|
|
9
|
+
* their expiry is the gateway's revocation lever.
|
|
10
|
+
*/
|
|
11
|
+
/** One law shared with the gateway: the most objects one signing call may name. */
|
|
12
|
+
export declare const PRESIGN_BATCH_OBJECTS = 2048;
|
|
13
|
+
export interface PresignObject {
|
|
14
|
+
/** 'manifest' names a whole artifact by content hash; 'block' one chunk by its sha256. */
|
|
15
|
+
readonly kind: 'manifest' | 'block';
|
|
16
|
+
readonly sha256: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PresignBrokerPorts {
|
|
19
|
+
/** Sign every named object, returning URLs aligned by index. */
|
|
20
|
+
requestUrls(objects: readonly PresignObject[]): Promise<readonly string[]>;
|
|
21
|
+
}
|
|
22
|
+
export interface PresignBroker {
|
|
23
|
+
url(object: PresignObject): Promise<string>;
|
|
24
|
+
}
|
|
25
|
+
export declare function createPresignBroker(ports: PresignBrokerPorts): PresignBroker;
|
|
26
|
+
//# sourceMappingURL=presign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presign.d.ts","sourceRoot":"","sources":["../../src/transfer/presign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,WAAW,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AAQD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CA+B5E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Presigned-URL brokering for direct content-storage fetches.
|
|
3
|
+
*
|
|
4
|
+
* Downloads fetch every storage object straight from content storage using
|
|
5
|
+
* short-lived URLs the gateway signs. Callers ask for one object's URL at a
|
|
6
|
+
* time; the broker coalesces every request made in the same event-loop turn
|
|
7
|
+
* into one batched signing call, so thousands of tiny fetches cost a handful
|
|
8
|
+
* of control-plane round trips. URLs are used immediately and never cached —
|
|
9
|
+
* their expiry is the gateway's revocation lever.
|
|
10
|
+
*/
|
|
11
|
+
/** One law shared with the gateway: the most objects one signing call may name. */
|
|
12
|
+
export const PRESIGN_BATCH_OBJECTS = 2048;
|
|
13
|
+
export function createPresignBroker(ports) {
|
|
14
|
+
let pending = [];
|
|
15
|
+
let scheduled = false;
|
|
16
|
+
const flush = async () => {
|
|
17
|
+
scheduled = false;
|
|
18
|
+
while (pending.length > 0) {
|
|
19
|
+
const batch = pending.splice(0, PRESIGN_BATCH_OBJECTS);
|
|
20
|
+
try {
|
|
21
|
+
const urls = await ports.requestUrls(batch.map((waiter) => waiter.object));
|
|
22
|
+
if (urls.length !== batch.length) {
|
|
23
|
+
throw new Error('presign returned the wrong number of urls');
|
|
24
|
+
}
|
|
25
|
+
batch.forEach((waiter, index) => waiter.resolve(urls[index]));
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
batch.forEach((waiter) => waiter.reject(error));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
url(object) {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
pending.push({ object, resolve, reject });
|
|
36
|
+
if (!scheduled) {
|
|
37
|
+
scheduled = true;
|
|
38
|
+
setTimeout(() => { void flush(); }, 0);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=presign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presign.js","sourceRoot":"","sources":["../../src/transfer/presign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAuB1C,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,SAAS,GAAG,KAAK,CAAC;QAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBACD,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,CAAC,MAAqB;YACvB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,GAAG,IAAI,CAAC;oBACjB,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -17,7 +17,7 @@ exports.manifestFromChunks = manifestFromChunks;
|
|
|
17
17
|
exports.contentBlockSize = contentBlockSize;
|
|
18
18
|
exports.chunkSizes = chunkSizes;
|
|
19
19
|
const validate_js_1 = require("./validate.js");
|
|
20
|
-
exports.CONTENT_CONTRACT = 'amalgm-entity-content@
|
|
20
|
+
exports.CONTENT_CONTRACT = 'amalgm-entity-content@4';
|
|
21
21
|
exports.MIN_CONTENT_BLOCK_BYTES = 4 * 1024 * 1024;
|
|
22
22
|
exports.MAX_CONTENT_BLOCK_BYTES = 16 * 1024 * 1024;
|
|
23
23
|
/** Maximum accepted block size. Kept as the public manifest-bound name. */
|
|
@@ -28,6 +28,7 @@ __exportStar(require("./binding.js"), exports);
|
|
|
28
28
|
__exportStar(require("./presence.js"), exports);
|
|
29
29
|
__exportStar(require("./docs.js"), exports);
|
|
30
30
|
__exportStar(require("./content.js"), exports);
|
|
31
|
+
__exportStar(require("./protection.js"), exports);
|
|
31
32
|
__exportStar(require("./frames/stream.js"), exports);
|
|
32
33
|
__exportStar(require("./frames/gateway.js"), exports);
|
|
33
34
|
__exportStar(require("./frames/tunnel.js"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,iDAA+B;AAC/B,8CAA4B;AAC5B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,4CAA0B;AAC1B,+CAA6B;AAC7B,qDAAmC;AACnC,sDAAoC;AACpC,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,iDAA+B;AAC/B,8CAA4B;AAC5B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,4CAA0B;AAC1B,+CAA6B;AAC7B,kDAAgC;AAChC,qDAAmC;AACnC,sDAAoC;AACpC,qDAAmC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Opening sealed private-resource envelopes.
|
|
4
|
+
*
|
|
5
|
+
* The gateway is the format's producer: it derives a per-resource key from
|
|
6
|
+
* its root secret and seals every object it puts in content storage as an
|
|
7
|
+
* AES-256-GCM envelope whose AAD binds resource, contract, and purpose.
|
|
8
|
+
* A runtime holding its resource key — handed once over the authenticated
|
|
9
|
+
* tunnel — opens those objects after fetching them directly from storage.
|
|
10
|
+
* This module is that opener: portable (WebCrypto, no platform imports) so
|
|
11
|
+
* any host the SDK supports can consume protected content.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ProtectionError = exports.PROTECTED_ENVELOPE_MAGIC = exports.PROTECTED_ENVELOPE_FORMAT = void 0;
|
|
15
|
+
exports.openProtectedEnvelopeBytes = openProtectedEnvelopeBytes;
|
|
16
|
+
exports.PROTECTED_ENVELOPE_FORMAT = 'amalgm.private.entity-content.aes-256-gcm@2';
|
|
17
|
+
exports.PROTECTED_ENVELOPE_MAGIC = 'AMGEC002';
|
|
18
|
+
class ProtectionError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'ProtectionError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.ProtectionError = ProtectionError;
|
|
25
|
+
const MAGIC_BYTES = new TextEncoder().encode(exports.PROTECTED_ENVELOPE_MAGIC);
|
|
26
|
+
const IV_BYTES = 12;
|
|
27
|
+
const TAG_BYTES = 16;
|
|
28
|
+
const HEADER_BYTES = MAGIC_BYTES.byteLength + IV_BYTES + TAG_BYTES;
|
|
29
|
+
/** Open one binary storage envelope to verified plaintext. The fixed layout is
|
|
30
|
+
* `magic | iv | tag | ciphertext`; content never pays JSON/base64 expansion.
|
|
31
|
+
* Refuses anything malformed, tampered with, or sealed under a different key
|
|
32
|
+
* or binding. */
|
|
33
|
+
async function openProtectedEnvelopeBytes(key, bytes, binding) {
|
|
34
|
+
if (key.byteLength !== 32)
|
|
35
|
+
throw new ProtectionError('protection key must be exactly 32 bytes');
|
|
36
|
+
if (bytes.byteLength < HEADER_BYTES
|
|
37
|
+
|| MAGIC_BYTES.some((value, index) => bytes[index] !== value)) {
|
|
38
|
+
throw new ProtectionError('payload is not a protected envelope');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const ivStart = MAGIC_BYTES.byteLength;
|
|
42
|
+
const tagStart = ivStart + IV_BYTES;
|
|
43
|
+
const dataStart = tagStart + TAG_BYTES;
|
|
44
|
+
const iv = bytes.slice(ivStart, tagStart);
|
|
45
|
+
const tag = bytes.slice(tagStart, dataStart);
|
|
46
|
+
const data = bytes.slice(dataStart);
|
|
47
|
+
const sealed = new Uint8Array(data.length + tag.length);
|
|
48
|
+
sealed.set(data, 0);
|
|
49
|
+
sealed.set(tag, data.length);
|
|
50
|
+
const additionalData = new TextEncoder().encode(`${exports.PROTECTED_ENVELOPE_FORMAT}:${binding.resourceId}:${binding.contract}:${binding.purpose}`);
|
|
51
|
+
const secret = await crypto.subtle.importKey('raw', key.slice(), 'AES-GCM', false, ['decrypt']);
|
|
52
|
+
const plain = await crypto.subtle.decrypt({ name: 'AES-GCM', iv, additionalData }, secret, sealed);
|
|
53
|
+
return new Uint8Array(plain);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
throw new ProtectionError('protected envelope failed authentication');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=protection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protection.js","sourceRoot":"","sources":["../../src/contracts/protection.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AA4BH,gEA6BC;AAvDY,QAAA,yBAAyB,GAAG,6CAA6C,CAAC;AAC1E,QAAA,wBAAwB,GAAG,UAAU,CAAC;AASnD,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gCAAwB,CAAC,CAAC;AACvE,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE;;;iBAGiB;AACV,KAAK,UAAU,0BAA0B,CAC9C,GAAe,EACf,KAAiB,EACjB,OAA0B;IAE1B,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE;QAAE,MAAM,IAAI,eAAe,CAAC,yCAAyC,CAAC,CAAC;IAChG,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY;WAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,eAAe,CAAC,qCAAqC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QACpC,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;QACvC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAC7C,GAAG,iCAAyB,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAC5F,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnG,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
|
|
@@ -21,6 +21,7 @@ exports.rootReplacementFromRecords = rootReplacementFromRecords;
|
|
|
21
21
|
exports.parseSnapshot = parseSnapshot;
|
|
22
22
|
const types_js_1 = require("./types.js");
|
|
23
23
|
const bytes_js_1 = require("./bytes.js");
|
|
24
|
+
const rules_js_1 = require("./rules.js");
|
|
24
25
|
/** `@1` could project arbitrary pre-cloud registrations. `@2` omitted the
|
|
25
26
|
* declared built-in tool entities, so its toolbox root could not prove the
|
|
26
27
|
* snapshot membership it named. A resource contract names immutable
|
|
@@ -124,8 +125,18 @@ function enclosedByRepositoryAncestor(record, lookup) {
|
|
|
124
125
|
* repository children keep their local SQLite identities inside the nearest
|
|
125
126
|
* repository parcel. Every nested repository and the folder spine required to
|
|
126
127
|
* reach it remain graph records, so each `.git` owns and exposes exactly one
|
|
127
|
-
* independent transport without publishing per-file postcards.
|
|
128
|
-
|
|
128
|
+
* independent transport without publishing per-file postcards.
|
|
129
|
+
*
|
|
130
|
+
* A derived-membership container's version must describe the membership that
|
|
131
|
+
* actually travels: a spine folder loses ordinary children to an enclosing
|
|
132
|
+
* repository's parcel, so exactly the containers the projection took ACTIVE
|
|
133
|
+
* children from re-derive their version from the projected graph. Membership
|
|
134
|
+
* hashes count only active children, so losing a trashed or deleted child
|
|
135
|
+
* changes nothing — and every untouched record passes through byte-identical,
|
|
136
|
+
* keeping graph comparison sensitive to real derivation faults. Publication
|
|
137
|
+
* and comparison both run through this one projection, so the two sides can
|
|
138
|
+
* never disagree about a spine container. */
|
|
139
|
+
function travelingRecords(records, sha256Hex) {
|
|
129
140
|
const snapshot = snapshotFromRecords(records);
|
|
130
141
|
const byUuid = new Map(snapshot.records.map((record) => [record.uuid, record]));
|
|
131
142
|
const traveling = new Set(snapshot.records
|
|
@@ -140,7 +151,33 @@ function travelingRecords(records) {
|
|
|
140
151
|
cursor = byUuid.get(cursor.parentUUID);
|
|
141
152
|
}
|
|
142
153
|
}
|
|
143
|
-
|
|
154
|
+
const narrowed = new Set(snapshot.records
|
|
155
|
+
.filter((record) => !traveling.has(record.uuid) && record.status === 'active'
|
|
156
|
+
&& record.parentUUID !== null && traveling.has(record.parentUUID))
|
|
157
|
+
.map((record) => record.parentUUID));
|
|
158
|
+
const projected = snapshot.records.filter((record) => traveling.has(record.uuid));
|
|
159
|
+
const activeChildren = new Map();
|
|
160
|
+
for (const record of projected) {
|
|
161
|
+
if (record.status !== 'active' || record.parentUUID === null)
|
|
162
|
+
continue;
|
|
163
|
+
const siblings = activeChildren.get(record.parentUUID);
|
|
164
|
+
if (siblings)
|
|
165
|
+
siblings.push(record);
|
|
166
|
+
else
|
|
167
|
+
activeChildren.set(record.parentUUID, [record]);
|
|
168
|
+
}
|
|
169
|
+
return projected.map((record) => (narrowed.has(record.uuid) && types_js_1.DERIVED_PAYLOAD.has(record.type)
|
|
170
|
+
? {
|
|
171
|
+
...record,
|
|
172
|
+
version: (0, rules_js_1.canonicalVersion)({
|
|
173
|
+
type: record.type,
|
|
174
|
+
parentUUID: record.parentUUID,
|
|
175
|
+
name: record.name,
|
|
176
|
+
status: record.status,
|
|
177
|
+
payloadVersion: (0, rules_js_1.membershipHash)(activeChildren.get(record.uuid) ?? [], sha256Hex),
|
|
178
|
+
}, sha256Hex),
|
|
179
|
+
}
|
|
180
|
+
: record));
|
|
144
181
|
}
|
|
145
182
|
/** Normalize records into the one canonical snapshot: asserted, sorted by
|
|
146
183
|
* uuid, duplicates refused. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/entities/cloud.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/entities/cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,7 +94,7 @@ async function addFilesWorkspace(workspaceId, destinationParent, ports) {
|
|
|
94
94
|
const installedRecords = (0, index_js_1.snapshotFromRecords)(installed.records || []).records;
|
|
95
95
|
if (!Number.isSafeInteger(installed.rows)
|
|
96
96
|
|| installed.rows !== installedRecords.length
|
|
97
|
-
|| !(0, index_js_1.sameRecords)((0, index_js_1.travelingRecords)(installedRecords), selected.records)
|
|
97
|
+
|| !(0, index_js_1.sameRecords)((0, index_js_1.travelingRecords)(installedRecords, ports.sha256Hex), selected.records)
|
|
98
98
|
|| !(0, index_js_1.sameRecords)([installed.reference], [selected.reference])
|
|
99
99
|
|| !(0, index_js_1.sameRecords)(installed.references, references)) {
|
|
100
100
|
throw new Error('workspace materialization did not persist exactly the selected graph');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/files/commands.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/files/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,8 +97,8 @@ function userGroundRecords(records, userEmail) {
|
|
|
97
97
|
}
|
|
98
98
|
return snapshot.records.filter((record) => included.has(record.uuid));
|
|
99
99
|
}
|
|
100
|
-
function assertSameGraph(local, cloudCore) {
|
|
101
|
-
if (!(0, index_js_1.sameRecords)((0, index_js_1.travelingRecords)(userGroundRecords(local.records, local.userEmail)), cloudCore)) {
|
|
100
|
+
function assertSameGraph(local, cloudCore, sha256Hex) {
|
|
101
|
+
if (!(0, index_js_1.sameRecords)((0, index_js_1.travelingRecords)(userGroundRecords(local.records, local.userEmail), sha256Hex), cloudCore)) {
|
|
102
102
|
throw new Error('local user-ground graph does not match the active cloud core graph');
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -124,19 +124,19 @@ async function convergeUserGround(input, ports) {
|
|
|
124
124
|
let mode;
|
|
125
125
|
if (found === null || found === undefined) {
|
|
126
126
|
const initialized = assertLocal(await ports.local.initialize(identity), identity);
|
|
127
|
-
const snapshot = (0, index_js_1.snapshotFromRecords)((0, index_js_1.travelingRecords)(initialized.records));
|
|
127
|
+
const snapshot = (0, index_js_1.snapshotFromRecords)((0, index_js_1.travelingRecords)(initialized.records, ports.sha256Hex));
|
|
128
128
|
const checksum = ports.sha256Hex((0, index_js_1.stableJson)(snapshot));
|
|
129
129
|
const published = await ports.cloud.publishInitial({ resourceId, checksum, snapshot });
|
|
130
130
|
cloud = assertCloud(published.current, resourceId, ports.sha256Hex);
|
|
131
131
|
cloudCore = userGroundRecords(cloud.snapshot.records, identity.userEmail);
|
|
132
132
|
if (published.created) {
|
|
133
|
-
assertSameGraph(initialized, cloudCore);
|
|
133
|
+
assertSameGraph(initialized, cloudCore, ports.sha256Hex);
|
|
134
134
|
local = initialized;
|
|
135
135
|
mode = 'initialized';
|
|
136
136
|
}
|
|
137
137
|
else {
|
|
138
138
|
local = assertLocal(await ports.local.install(identity, cloud), identity);
|
|
139
|
-
assertSameGraph(local, cloudCore);
|
|
139
|
+
assertSameGraph(local, cloudCore, ports.sha256Hex);
|
|
140
140
|
mode = 'materialized';
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -146,7 +146,7 @@ async function convergeUserGround(input, ports) {
|
|
|
146
146
|
const currentValue = await ports.local.inspect(identity);
|
|
147
147
|
if (currentValue !== null && currentValue !== undefined) {
|
|
148
148
|
const current = assertLocal(currentValue, identity);
|
|
149
|
-
if ((0, index_js_1.sameRecords)((0, index_js_1.travelingRecords)(userGroundRecords(current.records, identity.userEmail)), cloudCore)) {
|
|
149
|
+
if ((0, index_js_1.sameRecords)((0, index_js_1.travelingRecords)(userGroundRecords(current.records, identity.userEmail), ports.sha256Hex), cloudCore)) {
|
|
150
150
|
local = current;
|
|
151
151
|
mode = current.recordsBeyondSnapshot === true ? 'syncing' : 'current';
|
|
152
152
|
}
|
|
@@ -156,13 +156,13 @@ async function convergeUserGround(input, ports) {
|
|
|
156
156
|
}
|
|
157
157
|
else {
|
|
158
158
|
local = assertLocal(await ports.local.install(identity, cloud), identity);
|
|
159
|
-
assertSameGraph(local, cloudCore);
|
|
159
|
+
assertSameGraph(local, cloudCore, ports.sha256Hex);
|
|
160
160
|
mode = 'materialized';
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
else {
|
|
164
164
|
local = assertLocal(await ports.local.install(identity, cloud), identity);
|
|
165
|
-
assertSameGraph(local, cloudCore);
|
|
165
|
+
assertSameGraph(local, cloudCore, ports.sha256Hex);
|
|
166
166
|
mode = 'materialized';
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-ground.js","sourceRoot":"","sources":["../../src/registration/user-ground.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA6JH,8CA0BC;
|
|
1
|
+
{"version":3,"file":"user-ground.js","sourceRoot":"","sources":["../../src/registration/user-ground.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,31 +6,16 @@
|
|
|
6
6
|
* only the gaps, verifies every fetched chunk, and then asks the cache to seal
|
|
7
7
|
* the complete artifact. Sealing must verify the whole byte count and content
|
|
8
8
|
* hash before returning a local handle.
|
|
9
|
+
*
|
|
10
|
+
* Every chunk is one content-addressed storage object, so the host's ports
|
|
11
|
+
* fetch chunks independently — parallelism, transport, and decryption are the
|
|
12
|
+
* host's concern; the verification laws here are not.
|
|
9
13
|
*/
|
|
10
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
15
|
exports.download = download;
|
|
12
16
|
const content_js_1 = require("../contracts/content.js");
|
|
13
17
|
const artifacts_js_1 = require("./artifacts.js");
|
|
14
|
-
const batches_js_1 = require("./batches.js");
|
|
15
18
|
const parallel_js_1 = require("./parallel.js");
|
|
16
|
-
const checkedBatchChunks = (bytes, indexes, manifest, sha256Hex) => {
|
|
17
|
-
const chunks = [];
|
|
18
|
-
let offset = 0;
|
|
19
|
-
for (const index of indexes) {
|
|
20
|
-
const expected = manifest.chunks[index];
|
|
21
|
-
if (!expected)
|
|
22
|
-
throw new Error(`download manifest named an unknown chunk index`);
|
|
23
|
-
const chunk = bytes.subarray(offset, offset + expected.bytes);
|
|
24
|
-
if (chunk.byteLength !== expected.bytes || sha256Hex(chunk) !== expected.sha256) {
|
|
25
|
-
throw new Error(`downloaded content chunk ${index} failed verification`);
|
|
26
|
-
}
|
|
27
|
-
chunks.push(chunk);
|
|
28
|
-
offset += expected.bytes;
|
|
29
|
-
}
|
|
30
|
-
if (offset !== bytes.byteLength)
|
|
31
|
-
throw new Error('downloaded file batch has the wrong byte count');
|
|
32
|
-
return chunks;
|
|
33
|
-
};
|
|
34
19
|
/** Download one immutable artifact, fetching only machine-cache gaps. */
|
|
35
20
|
async function download(artifact, ports, options = {}) {
|
|
36
21
|
(0, artifacts_js_1.assertTransferArtifact)(artifact);
|
|
@@ -43,36 +28,18 @@ async function download(artifact, ports, options = {}) {
|
|
|
43
28
|
if (!await ports.hasChunk(artifact, manifest, index))
|
|
44
29
|
missing.push(index);
|
|
45
30
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
await (0, parallel_js_1.parallelForEach)(missing, options.concurrency ?? parallel_js_1.DEFAULT_TRANSFER_CONCURRENCY, async (index) => {
|
|
64
|
-
const expected = manifest.chunks[index];
|
|
65
|
-
if (expected === undefined)
|
|
66
|
-
throw new Error('download manifest named an unknown chunk index');
|
|
67
|
-
const bytes = await ports.getChunk(artifact, manifest, index);
|
|
68
|
-
if (!(bytes instanceof Uint8Array)
|
|
69
|
-
|| bytes.byteLength !== expected.bytes
|
|
70
|
-
|| ports.sha256Hex(bytes) !== expected.sha256) {
|
|
71
|
-
throw new Error(`downloaded content chunk ${index} failed verification`);
|
|
72
|
-
}
|
|
73
|
-
await ports.putChunk(artifact, manifest, index, bytes);
|
|
74
|
-
});
|
|
75
|
-
}
|
|
31
|
+
await (0, parallel_js_1.parallelForEach)(missing, options.concurrency ?? parallel_js_1.DEFAULT_TRANSFER_CONCURRENCY, async (index) => {
|
|
32
|
+
const expected = manifest.chunks[index];
|
|
33
|
+
if (expected === undefined)
|
|
34
|
+
throw new Error('download manifest named an unknown chunk index');
|
|
35
|
+
const bytes = await ports.getChunk(artifact, manifest, index);
|
|
36
|
+
if (!(bytes instanceof Uint8Array)
|
|
37
|
+
|| bytes.byteLength !== expected.bytes
|
|
38
|
+
|| ports.sha256Hex(bytes) !== expected.sha256) {
|
|
39
|
+
throw new Error(`downloaded content chunk ${index} failed verification`);
|
|
40
|
+
}
|
|
41
|
+
await ports.putChunk(artifact, manifest, index, bytes);
|
|
42
|
+
});
|
|
76
43
|
const sealed = await ports.sealArtifact(artifact, manifest);
|
|
77
44
|
if (sealed.bytes !== manifest.bytes || sealed.contentHash !== manifest.contentHash) {
|
|
78
45
|
throw new Error(`downloaded artifact ${artifact.contentHash} failed verification`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/transfer/download.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/transfer/download.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAqDH,4BAyCC;AA5FD,wDAAqF;AAErF,iDAA+E;AAC/E,+CAA8E;AA+C9E,yEAAyE;AAClE,KAAK,UAAU,QAAQ,CAC5B,QAA0B,EAC1B,KAAmC,EACnC,UAA2B,EAAE;IAE7B,IAAA,qCAAsB,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,iCAAoB,EAClC,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EACjC,QAAQ,CAAC,WAAW,CACrB,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAE/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAA,6BAAe,EAAC,OAAO,EAAE,OAAO,CAAC,WAAW,IAAI,0CAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAClG,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;eAC7B,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,KAAK;eACnC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,sBAAsB,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,WAAW,sBAAsB,CAAC,CAAC;IACrF,CAAC;IACD,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,gBAAgB,EAAE,OAAO,CAAC,MAAM;QAChC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -18,4 +18,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
__exportStar(require("./artifacts.js"), exports);
|
|
19
19
|
__exportStar(require("./upload.js"), exports);
|
|
20
20
|
__exportStar(require("./download.js"), exports);
|
|
21
|
+
__exportStar(require("./presign.js"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":";AAAA,wDAAwD;;;;;;;;;;;;;;;;AAExD,iDAA+B;AAC/B,8CAA4B;AAC5B,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":";AAAA,wDAAwD;;;;;;;;;;;;;;;;AAExD,iDAA+B;AAC/B,8CAA4B;AAC5B,gDAA8B;AAC9B,+CAA6B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Presigned-URL brokering for direct content-storage fetches.
|
|
4
|
+
*
|
|
5
|
+
* Downloads fetch every storage object straight from content storage using
|
|
6
|
+
* short-lived URLs the gateway signs. Callers ask for one object's URL at a
|
|
7
|
+
* time; the broker coalesces every request made in the same event-loop turn
|
|
8
|
+
* into one batched signing call, so thousands of tiny fetches cost a handful
|
|
9
|
+
* of control-plane round trips. URLs are used immediately and never cached —
|
|
10
|
+
* their expiry is the gateway's revocation lever.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.PRESIGN_BATCH_OBJECTS = void 0;
|
|
14
|
+
exports.createPresignBroker = createPresignBroker;
|
|
15
|
+
/** One law shared with the gateway: the most objects one signing call may name. */
|
|
16
|
+
exports.PRESIGN_BATCH_OBJECTS = 2048;
|
|
17
|
+
function createPresignBroker(ports) {
|
|
18
|
+
let pending = [];
|
|
19
|
+
let scheduled = false;
|
|
20
|
+
const flush = async () => {
|
|
21
|
+
scheduled = false;
|
|
22
|
+
while (pending.length > 0) {
|
|
23
|
+
const batch = pending.splice(0, exports.PRESIGN_BATCH_OBJECTS);
|
|
24
|
+
try {
|
|
25
|
+
const urls = await ports.requestUrls(batch.map((waiter) => waiter.object));
|
|
26
|
+
if (urls.length !== batch.length) {
|
|
27
|
+
throw new Error('presign returned the wrong number of urls');
|
|
28
|
+
}
|
|
29
|
+
batch.forEach((waiter, index) => waiter.resolve(urls[index]));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
batch.forEach((waiter) => waiter.reject(error));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
url(object) {
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
pending.push({ object, resolve, reject });
|
|
40
|
+
if (!scheduled) {
|
|
41
|
+
scheduled = true;
|
|
42
|
+
setTimeout(() => { void flush(); }, 0);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=presign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presign.js","sourceRoot":"","sources":["../../src/transfer/presign.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AA0BH,kDA+BC;AAvDD,mFAAmF;AACtE,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAuB1C,SAAgB,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,SAAS,GAAG,KAAK,CAAC;QAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,6BAAqB,CAAC,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBACD,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,CAAC,MAAqB;YACvB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,GAAG,IAAI,CAAC;oBACjB,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|