@agentunion/fastaun 0.5.0 → 0.5.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/CHANGELOG.md +561 -472
- package/_packed_docs/CHANGELOG-validators.md +147 -0
- package/_packed_docs/CHANGELOG.md +561 -472
- package/_packed_docs/INDEX.md +201 -177
- package/_packed_docs/KITE_DOCS_GUIDE.md +38 -32
- package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +169 -116
- package/_packed_docs/aun-perf-audit-critical-bugs.md +315 -0
- package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +263 -260
- package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +331 -0
- package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -2
- package/_packed_docs/protocol/00A-/350/256/276/350/256/241/345/216/237/345/210/231-/344/270/272Agent/350/200/214/347/224/237.md +1 -1
- package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +39 -16
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +8 -5
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +18 -19
- package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +1 -1
- package/_packed_docs/protocol/08-AUN-E2EE-Group.md +139 -746
- package/_packed_docs/protocol/08-AUN-E2EE.md +12 -10
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +117 -171
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +6 -0
- package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +1 -1
- package/_packed_docs/protocol/16-/347/263/273/347/273/237/347/233/256/345/275/225/344/277/235/346/212/244/346/226/271/346/241/210.md +177 -0
- package/_packed_docs/protocol/README.md +5 -4
- package/_packed_docs/protocol/aun-docs-guide.md +2 -2
- package/_packed_docs/protocol/index.md +12 -7
- package/_packed_docs/protocol//350/215/211/346/241/210-/346/213/222/347/273/235/344/277/241/345/217/267/345/215/217/350/256/256.md +1 -1
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +13 -13
- package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +9 -9
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +15 -13
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +26 -18
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +35 -284
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +473 -442
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +11 -7
- package/_packed_docs/sdk/09-collab-rpc-manual.md +581 -550
- package/_packed_docs/sdk/09-group-rpc-manual.md +367 -433
- package/_packed_docs/sdk/09-message-rpc-manual.md +50 -28
- package/_packed_docs/sdk/09-payload-reference.md +3 -3
- package/_packed_docs/sdk/09-storage-rpc-manual.md +57 -20
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +18 -17
- package/_packed_docs/sdk/E2EE_V2/346/266/210/346/201/257/351/200/232/344/277/241/346/227/266/345/272/217/345/233/276.md +3 -2
- package/_packed_docs/sdk/INDEX.md +25 -24
- package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +6 -2
- package/dist/agent-md.js +18 -9
- package/dist/agent-md.js.map +1 -1
- package/dist/client/delivery.d.ts +9 -0
- package/dist/client/delivery.js +157 -24
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/group-state.js +33 -11
- package/dist/client/group-state.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +1 -0
- package/dist/client/rpc-pipeline.js +127 -40
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +6 -1
- package/dist/client/v2-e2ee.js +284 -140
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +8 -1
- package/dist/client.js +227 -31
- package/dist/client.js.map +1 -1
- package/dist/collab/client.d.ts +8 -0
- package/dist/collab/client.js +12 -0
- package/dist/collab/client.js.map +1 -1
- package/dist/errors.d.ts +0 -20
- package/dist/errors.js +8 -53
- package/dist/errors.js.map +1 -1
- package/dist/facades.d.ts +9 -4
- package/dist/facades.js +137 -15
- package/dist/facades.js.map +1 -1
- package/dist/group-fs.d.ts +26 -9
- package/dist/group-fs.js +84 -84
- package/dist/group-fs.js.map +1 -1
- package/dist/group-id.d.ts +9 -12
- package/dist/group-id.js +41 -63
- package/dist/group-id.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/aid-db.d.ts +1 -0
- package/dist/keystore/aid-db.js +37 -37
- package/dist/keystore/aid-db.js.map +1 -1
- package/dist/keystore/local-identity-store.d.ts +16 -0
- package/dist/keystore/local-identity-store.js +190 -18
- package/dist/keystore/local-identity-store.js.map +1 -1
- package/dist/keystore/local-token-store.d.ts +0 -13
- package/dist/keystore/local-token-store.js +0 -105
- package/dist/keystore/local-token-store.js.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +4 -0
- package/dist/logger.js.map +1 -1
- package/dist/storage/lowlevel.d.ts +9 -1
- package/dist/storage/lowlevel.js +12 -1
- package/dist/storage/lowlevel.js.map +1 -1
- package/dist/storage/types.d.ts +0 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/storage/vfs.d.ts +22 -3
- package/dist/storage/vfs.js +89 -54
- package/dist/storage/vfs.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +336 -49
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +2 -0
- package/dist/transport.js +52 -3
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/v2/session/session.d.ts +2 -0
- package/dist/v2/session/session.js +53 -23
- package/dist/v2/session/session.js.map +1 -1
- package/dist/v2/state/commitment.d.ts +1 -1
- package/dist/v2/state/commitment.js +4 -2
- package/dist/v2/state/commitment.js.map +1 -1
- package/dist/validators.d.ts +32 -0
- package/dist/validators.js +128 -0
- package/dist/validators.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +46 -46
- package/_packed_docs/collab-gateway-boundary-test-report.md +0 -164
|
@@ -54,6 +54,12 @@ function textOf(value) {
|
|
|
54
54
|
function jsonObjectOf(value) {
|
|
55
55
|
return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
|
|
56
56
|
}
|
|
57
|
+
function withoutKeys(source, keys) {
|
|
58
|
+
const next = { ...source };
|
|
59
|
+
for (const key of keys)
|
|
60
|
+
delete next[key];
|
|
61
|
+
return next;
|
|
62
|
+
}
|
|
57
63
|
function accessTokenFromClient(client) {
|
|
58
64
|
const internals = client;
|
|
59
65
|
const direct = textOf(internals.accessToken ?? internals.access_token).trim();
|
|
@@ -579,10 +585,13 @@ class CrossSdkTsAgent {
|
|
|
579
585
|
const traceId = textOf(body.trace_id || crypto.randomUUID().replace(/-/g, ''));
|
|
580
586
|
const action = textOf(body.action).trim();
|
|
581
587
|
const params = jsonObjectOf(body.params) ?? {};
|
|
588
|
+
const asGroupAid = textOf(body.as_group_aid || body.asGroupAid || params.as_group_aid || params.asGroupAid).trim();
|
|
589
|
+
delete params.as_group_aid;
|
|
590
|
+
delete params.asGroupAid;
|
|
582
591
|
try {
|
|
583
|
-
const result = await this.callGroupFsAction(action, params);
|
|
592
|
+
const result = await this.callGroupFsAction(action, params, asGroupAid);
|
|
584
593
|
const response = { ok: true, trace_id: traceId, action, result: jsonSafe(result) };
|
|
585
|
-
this.recordTrace(traceId, { stage: 'group_fs_call', action, result: response });
|
|
594
|
+
this.recordTrace(traceId, { stage: 'group_fs_call', action, as_group_aid: asGroupAid, result: response });
|
|
586
595
|
sendJson(res, 200, response);
|
|
587
596
|
}
|
|
588
597
|
catch (err) {
|
|
@@ -593,7 +602,7 @@ class CrossSdkTsAgent {
|
|
|
593
602
|
error_code: err instanceof Error ? err.name : 'Error',
|
|
594
603
|
error_message: err instanceof Error ? err.message : String(err),
|
|
595
604
|
};
|
|
596
|
-
this.recordTrace(traceId, { stage: 'group_fs_call_error', action, error });
|
|
605
|
+
this.recordTrace(traceId, { stage: 'group_fs_call_error', action, as_group_aid: asGroupAid, error });
|
|
597
606
|
sendJson(res, 500, error);
|
|
598
607
|
}
|
|
599
608
|
}
|
|
@@ -691,6 +700,14 @@ class CrossSdkTsAgent {
|
|
|
691
700
|
return await this.client.collab.lsRemote(textOf(params.group_aid ?? params.groupAid));
|
|
692
701
|
case 'unregister':
|
|
693
702
|
return await this.client.collab.unregister(textOf(params.group_aid ?? params.groupAid), collabRoot);
|
|
703
|
+
case 'set_acl':
|
|
704
|
+
return await this.client.collab.setAcl(collabRoot, textOf(params.grantee_aid ?? params.granteeAID), {
|
|
705
|
+
perms: textOf(params.perms || 'w'),
|
|
706
|
+
expires_at: params.expires_at == null && params.expiresAt == null ? undefined : Number(params.expires_at ?? params.expiresAt),
|
|
707
|
+
max_uses: params.max_uses == null && params.maxUses == null ? undefined : Number(params.max_uses ?? params.maxUses),
|
|
708
|
+
});
|
|
709
|
+
case 'remove_acl':
|
|
710
|
+
return await this.client.collab.removeAcl(collabRoot, textOf(params.grantee_aid ?? params.granteeAID));
|
|
694
711
|
case 'snapshot.create':
|
|
695
712
|
case 'tag.create':
|
|
696
713
|
return await this.client.collab.tag.create(collabRoot, {
|
|
@@ -722,56 +739,110 @@ class CrossSdkTsAgent {
|
|
|
722
739
|
throw new Error(`unsupported collab action: ${action}`);
|
|
723
740
|
}
|
|
724
741
|
}
|
|
725
|
-
async callGroupFsAction(action, params) {
|
|
742
|
+
async callGroupFsAction(action, params, asGroupAid = '') {
|
|
726
743
|
const groupFs = this.client.group.fs;
|
|
744
|
+
let signingStore = null;
|
|
745
|
+
const withSigning = (source) => {
|
|
746
|
+
const next = { ...source };
|
|
747
|
+
if (asGroupAid) {
|
|
748
|
+
signingStore ??= this.aidStore();
|
|
749
|
+
next.signAs = asGroupAid;
|
|
750
|
+
next.aidStore = signingStore;
|
|
751
|
+
}
|
|
752
|
+
return next;
|
|
753
|
+
};
|
|
754
|
+
const rawCall = async (method, source) => {
|
|
755
|
+
const payload = { ...source };
|
|
756
|
+
if (asGroupAid) {
|
|
757
|
+
signingStore ??= this.aidStore();
|
|
758
|
+
const loaded = await signingStore.load(asGroupAid);
|
|
759
|
+
if (!loaded.ok || !loaded.data?.aid) {
|
|
760
|
+
throw new Error(loaded.error?.message || `signer identity not found: ${asGroupAid}`);
|
|
761
|
+
}
|
|
762
|
+
payload._client_signature_identity = loaded.data.aid;
|
|
763
|
+
}
|
|
764
|
+
return await this.client.call(method, payload);
|
|
765
|
+
};
|
|
727
766
|
const path = textOf(params.path).trim();
|
|
728
|
-
const options =
|
|
767
|
+
const options = withSigning(params);
|
|
729
768
|
delete options.path;
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
769
|
+
try {
|
|
770
|
+
switch (action) {
|
|
771
|
+
case 'ls':
|
|
772
|
+
return await groupFs.ls(path, options);
|
|
773
|
+
case 'find':
|
|
774
|
+
return await groupFs.find(path, options);
|
|
775
|
+
case 'stat':
|
|
776
|
+
return await groupFs.stat(path, options);
|
|
777
|
+
case 'lstat':
|
|
778
|
+
return await groupFs.lstat(path, options);
|
|
779
|
+
case 'mkdir':
|
|
780
|
+
return await groupFs.mkdir(path, { ...options, parents: Boolean(params.parents) });
|
|
781
|
+
case 'set_acl':
|
|
782
|
+
return await groupFs.setAcl(path, {
|
|
783
|
+
...options,
|
|
784
|
+
grantee_aid: textOf(params.grantee_aid ?? params.granteeAid).trim() || 'role:admin',
|
|
785
|
+
perms: textOf(params.perms).trim() || 'rwx',
|
|
786
|
+
});
|
|
787
|
+
case 'remove_acl':
|
|
788
|
+
return await groupFs.removeAcl(path, {
|
|
789
|
+
...options,
|
|
790
|
+
grantee_aid: textOf(params.grantee_aid ?? params.granteeAid).trim() || 'role:admin',
|
|
791
|
+
});
|
|
792
|
+
case 'get_acl':
|
|
793
|
+
return await groupFs.getAcl(path, options);
|
|
794
|
+
case 'list_acl':
|
|
795
|
+
return await groupFs.listAcl(path, options);
|
|
796
|
+
case 'rm':
|
|
797
|
+
return await groupFs.rm(path, {
|
|
798
|
+
...options,
|
|
799
|
+
recursive: Boolean(params.recursive),
|
|
800
|
+
force: Boolean(params.force),
|
|
801
|
+
});
|
|
802
|
+
case 'cp': {
|
|
803
|
+
let src = textOf(params.src);
|
|
804
|
+
const dst = textOf(params.dst);
|
|
805
|
+
const cpOptions = withSigning(params);
|
|
806
|
+
delete cpOptions.src;
|
|
807
|
+
delete cpOptions.dst;
|
|
808
|
+
delete cpOptions.src_text;
|
|
809
|
+
if (params.src_text != null) {
|
|
810
|
+
src = this.writeTempText(textOf(params.src_text), '.txt');
|
|
811
|
+
}
|
|
812
|
+
const result = await groupFs.cp(src, dst, cpOptions);
|
|
813
|
+
return this.groupFsCpResponse(result, dst);
|
|
756
814
|
}
|
|
757
|
-
|
|
758
|
-
|
|
815
|
+
case 'mv':
|
|
816
|
+
{
|
|
817
|
+
const mvOptions = withSigning(params);
|
|
818
|
+
delete mvOptions.src;
|
|
819
|
+
delete mvOptions.dst;
|
|
820
|
+
return await groupFs.mv(textOf(params.src), textOf(params.dst), mvOptions);
|
|
821
|
+
}
|
|
822
|
+
case 'df':
|
|
823
|
+
return await groupFs.df(path || textOf(params.group_id), options);
|
|
824
|
+
case 'mount':
|
|
825
|
+
return await groupFs.mount(path, options);
|
|
826
|
+
case 'umount':
|
|
827
|
+
return await groupFs.umount(path, options);
|
|
828
|
+
case 'raw':
|
|
829
|
+
return await rawCall(textOf(params.method), withoutKeys(params, ['method']));
|
|
830
|
+
case 'check_upload':
|
|
831
|
+
return await rawCall('group.fs.check_upload', params);
|
|
832
|
+
case 'create_upload_session':
|
|
833
|
+
return await rawCall('group.fs.create_upload_session', params);
|
|
834
|
+
case 'complete_upload':
|
|
835
|
+
return await rawCall('group.fs.complete_upload', params);
|
|
836
|
+
case 'create_download_ticket':
|
|
837
|
+
return await rawCall('group.fs.create_download_ticket', params);
|
|
838
|
+
default:
|
|
839
|
+
throw new Error(`unsupported group fs action: ${action}`);
|
|
759
840
|
}
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
return await groupFs.mv(textOf(params.src), textOf(params.dst), mvOptions);
|
|
766
|
-
}
|
|
767
|
-
case 'df':
|
|
768
|
-
return await groupFs.df(path || textOf(params.group_id), options);
|
|
769
|
-
case 'mount':
|
|
770
|
-
return await groupFs.mount(path, options);
|
|
771
|
-
case 'umount':
|
|
772
|
-
return await groupFs.umount(path, options);
|
|
773
|
-
default:
|
|
774
|
-
throw new Error(`unsupported group fs action: ${action}`);
|
|
841
|
+
}
|
|
842
|
+
finally {
|
|
843
|
+
const storeToClose = signingStore;
|
|
844
|
+
if (storeToClose)
|
|
845
|
+
storeToClose.close();
|
|
775
846
|
}
|
|
776
847
|
}
|
|
777
848
|
writeTempText(content, suffix = '') {
|
|
@@ -814,6 +885,9 @@ class CrossSdkTsAgent {
|
|
|
814
885
|
const owner = textOf(params.owner_aid ?? params.ownerAID).trim() || undefined;
|
|
815
886
|
const bucket = textOf(params.bucket).trim() || 'default';
|
|
816
887
|
const token = textOf(params.token).trim() || undefined;
|
|
888
|
+
const src = textOf(params.src).trim();
|
|
889
|
+
const dst = textOf(params.dst).trim();
|
|
890
|
+
const objectKey = textOf(params.object_key ?? params.objectKey ?? path).replace(/^\/+/, '');
|
|
817
891
|
switch (action) {
|
|
818
892
|
case 'write_bytes':
|
|
819
893
|
return await storage.writeBytes(path, params.content_base64 || params.contentBase64
|
|
@@ -834,7 +908,6 @@ class CrossSdkTsAgent {
|
|
|
834
908
|
};
|
|
835
909
|
}
|
|
836
910
|
case 'create_download_ticket': {
|
|
837
|
-
const objectKey = textOf(params.object_key ?? params.objectKey ?? path).replace(/^\/+/, '');
|
|
838
911
|
return await storage.lowlevel.createDownloadTicket({ owner, bucket, objectKey, token });
|
|
839
912
|
}
|
|
840
913
|
case 'download_text': {
|
|
@@ -858,6 +931,220 @@ class CrossSdkTsAgent {
|
|
|
858
931
|
bucket,
|
|
859
932
|
granteeAid: textOf(params.grantee_aid ?? params.granteeAID).trim(),
|
|
860
933
|
});
|
|
934
|
+
case 'list':
|
|
935
|
+
return await storage.list(path, {
|
|
936
|
+
owner,
|
|
937
|
+
bucket,
|
|
938
|
+
page: Number(params.page ?? 1) || 1,
|
|
939
|
+
size: Number(params.size ?? 100) || 100,
|
|
940
|
+
marker: textOf(params.marker).trim() || undefined,
|
|
941
|
+
long: Boolean(params.long),
|
|
942
|
+
recursive: Boolean(params.recursive),
|
|
943
|
+
token,
|
|
944
|
+
});
|
|
945
|
+
case 'find':
|
|
946
|
+
return await storage.find(path, {
|
|
947
|
+
owner,
|
|
948
|
+
bucket,
|
|
949
|
+
name: textOf(params.name).trim() || undefined,
|
|
950
|
+
nodeType: textOf(params.node_type ?? params.nodeType).trim() || undefined,
|
|
951
|
+
size: textOf(params.size_expr ?? params.sizeExpr).trim() || undefined,
|
|
952
|
+
mtime: textOf(params.mtime).trim() || undefined,
|
|
953
|
+
page: Number(params.page ?? 1) || 1,
|
|
954
|
+
pageSize: Number(params.page_size ?? params.pageSize ?? 1000) || 1000,
|
|
955
|
+
token,
|
|
956
|
+
});
|
|
957
|
+
case 'stat':
|
|
958
|
+
return await storage.stat(path, { owner, bucket, token });
|
|
959
|
+
case 'lstat':
|
|
960
|
+
return await storage.lstat(path, { owner, bucket, token });
|
|
961
|
+
case 'mkdir':
|
|
962
|
+
return await storage.mkdir(path, { owner, bucket, parents: Boolean(params.parents) });
|
|
963
|
+
case 'touch':
|
|
964
|
+
return await storage.touch(path, {
|
|
965
|
+
owner,
|
|
966
|
+
bucket,
|
|
967
|
+
parents: Boolean(params.parents),
|
|
968
|
+
noCreate: Boolean(params.no_create ?? params.noCreate),
|
|
969
|
+
mtime: params.mtime == null ? undefined : Number(params.mtime),
|
|
970
|
+
followSymlinks: Boolean(params.follow_symlinks ?? params.followSymlinks),
|
|
971
|
+
});
|
|
972
|
+
case 'remove':
|
|
973
|
+
return await storage.remove(path, { owner, bucket, recursive: Boolean(params.recursive) });
|
|
974
|
+
case 'rename':
|
|
975
|
+
return await storage.rename(src, dst, {
|
|
976
|
+
owner,
|
|
977
|
+
bucket,
|
|
978
|
+
overwrite: Boolean(params.overwrite),
|
|
979
|
+
expectedVersion: params.expected_version == null && params.expectedVersion == null ? undefined : Number(params.expected_version ?? params.expectedVersion),
|
|
980
|
+
});
|
|
981
|
+
case 'copy':
|
|
982
|
+
return await storage.copy(src, dst, {
|
|
983
|
+
owner,
|
|
984
|
+
bucket,
|
|
985
|
+
dstOwner: textOf(params.dst_owner_aid ?? params.dstOwnerAID ?? params.dstOwner).trim() || undefined,
|
|
986
|
+
dstBucket: textOf(params.dst_bucket ?? params.dstBucket).trim() || undefined,
|
|
987
|
+
overwrite: Boolean(params.overwrite),
|
|
988
|
+
followSymlinks: Boolean(params.follow_symlinks ?? params.followSymlinks),
|
|
989
|
+
recursive: Boolean(params.recursive),
|
|
990
|
+
});
|
|
991
|
+
case 'df':
|
|
992
|
+
return await storage.df({ owner, bucket });
|
|
993
|
+
case 'du':
|
|
994
|
+
return await storage.du(path, {
|
|
995
|
+
owner,
|
|
996
|
+
bucket,
|
|
997
|
+
maxDepth: params.max_depth == null && params.maxDepth == null ? undefined : Number(params.max_depth ?? params.maxDepth),
|
|
998
|
+
pageSize: Number(params.page_size ?? params.pageSize ?? 1000) || 1000,
|
|
999
|
+
token,
|
|
1000
|
+
});
|
|
1001
|
+
case 'symlink':
|
|
1002
|
+
return await storage.symlink(textOf(params.target), path, { owner, bucket, overwrite: Boolean(params.overwrite) });
|
|
1003
|
+
case 'readlink':
|
|
1004
|
+
return await storage.readlink(path, { owner, bucket });
|
|
1005
|
+
case 'repoint':
|
|
1006
|
+
return await storage.repoint(path, textOf(params.new_target ?? params.newTarget), {
|
|
1007
|
+
owner,
|
|
1008
|
+
bucket,
|
|
1009
|
+
expectedVersion: params.expected_version == null && params.expectedVersion == null ? undefined : Number(params.expected_version ?? params.expectedVersion),
|
|
1010
|
+
});
|
|
1011
|
+
case 'rename_symlink':
|
|
1012
|
+
return await storage.renameSymlink(src, dst, {
|
|
1013
|
+
owner,
|
|
1014
|
+
bucket,
|
|
1015
|
+
overwrite: Boolean(params.overwrite),
|
|
1016
|
+
expectedVersion: params.expected_version == null && params.expectedVersion == null ? undefined : Number(params.expected_version ?? params.expectedVersion),
|
|
1017
|
+
});
|
|
1018
|
+
case 'delete_symlink':
|
|
1019
|
+
return await storage.lowlevel.deleteSymlink({ owner, bucket, path: objectKey });
|
|
1020
|
+
case 'list_acl':
|
|
1021
|
+
return await storage.listAcl(path, { owner, bucket });
|
|
1022
|
+
case 'check_access':
|
|
1023
|
+
return await storage.checkAccess(path, {
|
|
1024
|
+
owner,
|
|
1025
|
+
bucket,
|
|
1026
|
+
operation: textOf(params.operation).trim() || 'read',
|
|
1027
|
+
token,
|
|
1028
|
+
followSymlinks: params.follow_symlinks == null && params.followSymlinks == null ? true : Boolean(params.follow_symlinks ?? params.followSymlinks),
|
|
1029
|
+
});
|
|
1030
|
+
case 'issue_token':
|
|
1031
|
+
return await storage.issueToken(path, {
|
|
1032
|
+
owner,
|
|
1033
|
+
bucket,
|
|
1034
|
+
expiresAt: params.expires_at == null && params.expiresAt == null ? undefined : Number(params.expires_at ?? params.expiresAt),
|
|
1035
|
+
maxReads: params.max_reads == null && params.maxReads == null ? undefined : Number(params.max_reads ?? params.maxReads),
|
|
1036
|
+
});
|
|
1037
|
+
case 'revoke_token':
|
|
1038
|
+
return await storage.revokeToken(path, { owner, bucket, token: textOf(params.token) });
|
|
1039
|
+
case 'list_tokens':
|
|
1040
|
+
return await storage.listTokens(path, { owner, bucket });
|
|
1041
|
+
case 'set_visibility': {
|
|
1042
|
+
const allowRoles = Array.isArray(params.allow_roles) ? params.allow_roles.map((item) => textOf(item)) : (Array.isArray(params.allowRoles) ? params.allowRoles.map((item) => textOf(item)) : undefined);
|
|
1043
|
+
return await storage.setVisibility(path, { owner, bucket, visibility: textOf(params.visibility).trim() || 'private', allowRoles });
|
|
1044
|
+
}
|
|
1045
|
+
case 'create_share_link': {
|
|
1046
|
+
const allowedAids = Array.isArray(params.allowed_aids) ? params.allowed_aids.map((item) => textOf(item)) : (Array.isArray(params.allowedAids) ? params.allowedAids.map((item) => textOf(item)) : undefined);
|
|
1047
|
+
return await storage.lowlevel.createShareLink({
|
|
1048
|
+
owner,
|
|
1049
|
+
bucket,
|
|
1050
|
+
objectKey,
|
|
1051
|
+
allowedAids,
|
|
1052
|
+
expireInSeconds: params.expire_in_seconds == null && params.expireInSeconds == null ? undefined : Number(params.expire_in_seconds ?? params.expireInSeconds),
|
|
1053
|
+
maxUses: params.max_uses == null && params.maxUses == null ? undefined : Number(params.max_uses ?? params.maxUses),
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
case 'list_share_links':
|
|
1057
|
+
return await storage.lowlevel.listShareLinks({ owner, bucket, objectKey: objectKey || undefined });
|
|
1058
|
+
case 'revoke_share_link':
|
|
1059
|
+
return await storage.lowlevel.revokeShareLink({ shareId: textOf(params.share_id ?? params.shareId).trim() });
|
|
1060
|
+
case 'get_by_share': {
|
|
1061
|
+
const result = await storage.lowlevel.getByShare({ shareId: textOf(params.share_id ?? params.shareId).trim() });
|
|
1062
|
+
const resultObj = jsonObjectOf(result);
|
|
1063
|
+
const content = textOf(resultObj?.content);
|
|
1064
|
+
if (content) {
|
|
1065
|
+
try {
|
|
1066
|
+
const buffer = Buffer.from(content, 'base64');
|
|
1067
|
+
return { ...(resultObj ?? {}), content_text: buffer.toString('utf-8'), content_base64: buffer.toString('base64') };
|
|
1068
|
+
}
|
|
1069
|
+
catch {
|
|
1070
|
+
return result;
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
return result;
|
|
1074
|
+
}
|
|
1075
|
+
case 'head_object':
|
|
1076
|
+
return await storage.lowlevel.headObject({ owner, bucket, objectKey, token });
|
|
1077
|
+
case 'list_objects':
|
|
1078
|
+
return await storage.lowlevel.listObjects({
|
|
1079
|
+
owner,
|
|
1080
|
+
bucket,
|
|
1081
|
+
prefix: textOf(params.prefix),
|
|
1082
|
+
page: Number(params.page ?? 1) || 1,
|
|
1083
|
+
size: Number(params.size ?? 100) || 100,
|
|
1084
|
+
marker: textOf(params.marker).trim() || undefined,
|
|
1085
|
+
});
|
|
1086
|
+
case 'list_prefixes':
|
|
1087
|
+
return await storage.lowlevel.listPrefixes({ owner, bucket, prefix: textOf(params.prefix), size: Number(params.size ?? 100) || 100 });
|
|
1088
|
+
case 'delete_object':
|
|
1089
|
+
return await storage.lowlevel.deleteObject({ owner, bucket, objectKey });
|
|
1090
|
+
case 'set_object_meta':
|
|
1091
|
+
return await storage.lowlevel.setObjectMeta({
|
|
1092
|
+
owner,
|
|
1093
|
+
bucket,
|
|
1094
|
+
objectKey,
|
|
1095
|
+
metadata: jsonObjectOf(params.metadata) ?? {},
|
|
1096
|
+
contentType: textOf(params.content_type ?? params.contentType).trim() || undefined,
|
|
1097
|
+
merge: params.merge == null ? true : Boolean(params.merge),
|
|
1098
|
+
expectedVersion: params.expected_version == null && params.expectedVersion == null ? undefined : Number(params.expected_version ?? params.expectedVersion),
|
|
1099
|
+
});
|
|
1100
|
+
case 'append_object':
|
|
1101
|
+
return await storage.lowlevel.appendObject({
|
|
1102
|
+
owner,
|
|
1103
|
+
bucket,
|
|
1104
|
+
objectKey,
|
|
1105
|
+
content: params.content_base64 || params.contentBase64 ? Buffer.from(textOf(params.content), 'base64') : Buffer.from(textOf(params.content), 'utf-8'),
|
|
1106
|
+
contentType: textOf(params.content_type ?? params.contentType).trim() || undefined,
|
|
1107
|
+
metadata: jsonObjectOf(params.metadata) ?? undefined,
|
|
1108
|
+
expectedVersion: params.expected_version == null && params.expectedVersion == null ? undefined : Number(params.expected_version ?? params.expectedVersion),
|
|
1109
|
+
isPublic: Boolean(params.public ?? params.isPublic),
|
|
1110
|
+
});
|
|
1111
|
+
case 'create_folder':
|
|
1112
|
+
return await storage.lowlevel.createFolder({ owner, bucket, path: objectKey, parents: Boolean(params.parents ?? params.mkdirs) });
|
|
1113
|
+
case 'list_children':
|
|
1114
|
+
return await storage.lowlevel.listChildren({
|
|
1115
|
+
owner,
|
|
1116
|
+
bucket,
|
|
1117
|
+
path: objectKey,
|
|
1118
|
+
nodeType: textOf(params.node_type ?? params.nodeType ?? params.type).trim() || 'all',
|
|
1119
|
+
page: Number(params.page ?? 1) || 1,
|
|
1120
|
+
size: Number(params.size ?? 50) || 50,
|
|
1121
|
+
orderBy: textOf(params.order_by ?? params.orderBy).trim() || undefined,
|
|
1122
|
+
order: textOf(params.order).trim() || undefined,
|
|
1123
|
+
includeMetadata: params.include_metadata == null && params.includeMetadata == null ? undefined : Boolean(params.include_metadata ?? params.includeMetadata),
|
|
1124
|
+
includeUrls: params.include_urls == null && params.includeUrls == null ? undefined : Boolean(params.include_urls ?? params.includeUrls),
|
|
1125
|
+
});
|
|
1126
|
+
case 'copy_object':
|
|
1127
|
+
return await storage.lowlevel.copyObject({
|
|
1128
|
+
owner,
|
|
1129
|
+
bucket,
|
|
1130
|
+
srcPath: textOf(params.src_path ?? params.srcPath ?? src).replace(/^\/+/, ''),
|
|
1131
|
+
dstPath: textOf(params.dst_path ?? params.dstPath ?? dst).replace(/^\/+/, ''),
|
|
1132
|
+
overwrite: Boolean(params.overwrite),
|
|
1133
|
+
});
|
|
1134
|
+
case 'move_object':
|
|
1135
|
+
return await storage.lowlevel.moveObject({
|
|
1136
|
+
owner,
|
|
1137
|
+
bucket,
|
|
1138
|
+
path: textOf(params.src_path ?? params.srcPath ?? src ?? objectKey).replace(/^\/+/, ''),
|
|
1139
|
+
dstParentPath: textOf(params.dst_parent_path ?? params.dstParentPath).replace(/^\/+/, '').replace(/\/+$/g, ''),
|
|
1140
|
+
newName: textOf(params.new_name ?? params.newName),
|
|
1141
|
+
overwrite: Boolean(params.overwrite),
|
|
1142
|
+
expectedVersion: params.expected_version == null && params.expectedVersion == null ? undefined : Number(params.expected_version ?? params.expectedVersion),
|
|
1143
|
+
});
|
|
1144
|
+
case 'batch_delete': {
|
|
1145
|
+
const items = Array.isArray(params.items) ? params.items.filter((item) => item && typeof item === 'object' && !Array.isArray(item)) : [];
|
|
1146
|
+
return await storage.lowlevel.batchDelete({ owner, bucket, items, recursive: Boolean(params.recursive) });
|
|
1147
|
+
}
|
|
861
1148
|
default:
|
|
862
1149
|
throw new Error(`unsupported storage action: ${action}`);
|
|
863
1150
|
}
|