@did-space/core 0.5.78 → 0.5.80
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/{constants → cjs/constants}/index.d.ts +0 -6
- package/dist/{constants → cjs/constants}/index.js +1 -9
- package/dist/{meta → cjs/meta}/template/app.d.ts +0 -8
- package/dist/cjs/meta/template/index.d.ts +2 -0
- package/dist/cjs/meta/template/index.js +18 -0
- package/dist/{model → cjs/model}/app-space-apply.d.ts +1 -1
- package/dist/cjs/model/audit-log.d.ts +527 -0
- package/dist/cjs/model/audit-log.js +72 -0
- package/dist/{model → cjs/model}/did-object-mapping.d.ts +1 -1
- package/dist/{model → cjs/model}/index.d.ts +1 -0
- package/dist/{model → cjs/model}/index.js +1 -0
- package/dist/{model → cjs/model}/object-collection.d.ts +1 -1
- package/dist/{model → cjs/model}/object.d.ts +1 -1
- package/dist/{model → cjs/model}/space.d.ts +1 -1
- package/dist/{model → cjs/model}/tree.d.ts +2 -2
- package/dist/cjs/model/tree.js +9 -0
- package/dist/cjs/protocols/driver.js +2 -0
- package/dist/cjs/protocols/space-config.js +2 -0
- package/dist/cjs/protocols/space-operator.js +2 -0
- package/dist/cjs/protocols/space-owner-operator.js +2 -0
- package/dist/cjs/protocols/space.js +2 -0
- package/dist/es/configuration/index.d.ts +1 -0
- package/dist/es/configuration/index.js +1 -0
- package/dist/es/configuration/space-config.d.ts +23 -0
- package/dist/es/configuration/space-config.js +5 -0
- package/dist/es/constants/index.d.ts +30 -0
- package/dist/es/constants/index.js +35 -0
- package/dist/es/drivers/base.d.ts +40 -0
- package/dist/es/drivers/base.js +113 -0
- package/dist/es/drivers/index.d.ts +1 -0
- package/dist/es/drivers/index.js +1 -0
- package/dist/es/index.d.ts +9 -0
- package/dist/es/index.js +9 -0
- package/dist/es/meta/data.d.ts +4 -0
- package/dist/es/meta/data.js +1 -0
- package/dist/es/meta/index.d.ts +3 -0
- package/dist/es/meta/index.js +3 -0
- package/dist/es/meta/object.d.ts +70 -0
- package/dist/es/meta/object.js +1 -0
- package/dist/es/meta/template/app.d.ts +27 -0
- package/dist/es/meta/template/app.js +1 -0
- package/dist/es/meta/template/index.d.ts +2 -0
- package/dist/es/meta/template/index.js +2 -0
- package/dist/es/meta/template/preview/base.d.ts +13 -0
- package/dist/es/meta/template/preview/base.js +12 -0
- package/dist/es/meta/template/preview/default.d.ts +75 -0
- package/dist/es/meta/template/preview/default.js +9 -0
- package/dist/es/meta/template/preview/index.d.ts +5 -0
- package/dist/es/meta/template/preview/index.js +5 -0
- package/dist/es/meta/template/preview/nft.d.ts +23 -0
- package/dist/es/meta/template/preview/nft.js +8 -0
- package/dist/es/meta/template/preview/passport.d.ts +35 -0
- package/dist/es/meta/template/preview/passport.js +19 -0
- package/dist/es/meta/template/preview/profile.d.ts +23 -0
- package/dist/es/meta/template/preview/profile.js +8 -0
- package/dist/es/model/app-space-apply.d.ts +75 -0
- package/dist/es/model/app-space-apply.js +1 -0
- package/dist/es/model/audit-log.d.ts +527 -0
- package/dist/es/model/audit-log.js +69 -0
- package/dist/es/model/did-object-mapping.d.ts +8 -0
- package/dist/es/model/did-object-mapping.js +1 -0
- package/dist/es/model/index.d.ts +5 -0
- package/dist/es/model/index.js +5 -0
- package/dist/es/model/object-collection.d.ts +42 -0
- package/dist/es/model/object-collection.js +1 -0
- package/dist/es/model/object.d.ts +59 -0
- package/dist/es/model/object.js +1 -0
- package/dist/es/model/space.d.ts +21 -0
- package/dist/es/model/space.js +1 -0
- package/dist/es/model/tree.d.ts +96 -0
- package/dist/es/model/tree.js +6 -0
- package/dist/es/protocols/base-space.d.ts +4 -0
- package/dist/es/protocols/base-space.js +1 -0
- package/dist/es/protocols/driver.d.ts +7 -0
- package/dist/es/protocols/driver.js +1 -0
- package/dist/es/protocols/index.d.ts +5 -0
- package/dist/es/protocols/index.js +5 -0
- package/dist/es/protocols/space-config.d.ts +17 -0
- package/dist/es/protocols/space-config.js +1 -0
- package/dist/es/protocols/space-operator.d.ts +63 -0
- package/dist/es/protocols/space-operator.js +1 -0
- package/dist/es/protocols/space-owner-operator.d.ts +43 -0
- package/dist/es/protocols/space-owner-operator.js +1 -0
- package/dist/es/protocols/space.d.ts +7 -0
- package/dist/es/protocols/space.js +1 -0
- package/dist/es/schemas/global-space.d.ts +2 -0
- package/dist/es/schemas/global-space.js +19 -0
- package/dist/es/schemas/index.d.ts +3 -0
- package/dist/es/schemas/index.js +3 -0
- package/dist/es/schemas/object-space.d.ts +6 -0
- package/dist/es/schemas/object-space.js +44 -0
- package/dist/es/schemas/space-configuration.d.ts +4 -0
- package/dist/es/schemas/space-configuration.js +22 -0
- package/dist/es/schemas/space-options.d.ts +1 -0
- package/dist/es/schemas/space-options.js +4 -0
- package/dist/es/space/global-space.d.ts +43 -0
- package/dist/es/space/global-space.js +169 -0
- package/dist/es/space/index.d.ts +3 -0
- package/dist/es/space/index.js +3 -0
- package/dist/es/space/object-space.d.ts +123 -0
- package/dist/es/space/object-space.js +684 -0
- package/dist/es/space/space.d.ts +47 -0
- package/dist/es/space/space.js +172 -0
- package/dist/es/utils/common.d.ts +5 -0
- package/dist/es/utils/common.js +38 -0
- package/dist/es/utils/hash.d.ts +31 -0
- package/dist/es/utils/hash.js +64 -0
- package/dist/es/utils/index.d.ts +4 -0
- package/dist/es/utils/index.js +4 -0
- package/dist/es/utils/logger.d.ts +2 -0
- package/dist/es/utils/logger.js +2 -0
- package/dist/es/utils/stream.d.ts +11 -0
- package/dist/es/utils/stream.js +18 -0
- package/package.json +98 -9
- package/dist/meta/template/app-backup.d.ts +0 -55
- package/dist/meta/template/app-backup.js +0 -4
- package/dist/meta/template/app-connected.d.ts +0 -49
- package/dist/meta/template/app-connected.js +0 -4
- package/dist/meta/template/app-disconnected.d.ts +0 -20
- package/dist/meta/template/app-disconnected.js +0 -4
- package/dist/meta/template/app-restore.d.ts +0 -40
- package/dist/meta/template/app-restore.js +0 -4
- package/dist/meta/template/index.d.ts +0 -6
- package/dist/meta/template/index.js +0 -22
- package/dist/model/app-space-apply.js +0 -7
- package/dist/model/did-object-mapping.js +0 -8
- package/dist/model/object-collection.js +0 -7
- package/dist/model/object.js +0 -7
- package/dist/model/space.js +0 -7
- package/dist/model/tree.js +0 -18
- /package/dist/{configuration → cjs/configuration}/index.d.ts +0 -0
- /package/dist/{configuration → cjs/configuration}/index.js +0 -0
- /package/dist/{configuration → cjs/configuration}/space-config.d.ts +0 -0
- /package/dist/{configuration → cjs/configuration}/space-config.js +0 -0
- /package/dist/{drivers → cjs/drivers}/base.d.ts +0 -0
- /package/dist/{drivers → cjs/drivers}/base.js +0 -0
- /package/dist/{drivers → cjs/drivers}/index.d.ts +0 -0
- /package/dist/{drivers → cjs/drivers}/index.js +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{index.js → cjs/index.js} +0 -0
- /package/dist/{meta → cjs/meta}/data.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/data.js +0 -0
- /package/dist/{meta → cjs/meta}/index.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/index.js +0 -0
- /package/dist/{meta → cjs/meta}/object.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/object.js +0 -0
- /package/dist/{meta → cjs/meta}/template/app.js +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/base.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/base.js +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/default.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/default.js +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/index.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/index.js +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/nft.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/nft.js +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/passport.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/passport.js +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/profile.d.ts +0 -0
- /package/dist/{meta → cjs/meta}/template/preview/profile.js +0 -0
- /package/dist/{protocols/base-space.js → cjs/model/app-space-apply.js} +0 -0
- /package/dist/{protocols/driver.js → cjs/model/did-object-mapping.js} +0 -0
- /package/dist/{protocols/space-config.js → cjs/model/object-collection.js} +0 -0
- /package/dist/{protocols/space-operator.js → cjs/model/object.js} +0 -0
- /package/dist/{protocols → cjs/model}/space.js +0 -0
- /package/dist/{protocols → cjs/protocols}/base-space.d.ts +0 -0
- /package/dist/{protocols/space-owner-operator.js → cjs/protocols/base-space.js} +0 -0
- /package/dist/{protocols → cjs/protocols}/driver.d.ts +0 -0
- /package/dist/{protocols → cjs/protocols}/index.d.ts +0 -0
- /package/dist/{protocols → cjs/protocols}/index.js +0 -0
- /package/dist/{protocols → cjs/protocols}/space-config.d.ts +0 -0
- /package/dist/{protocols → cjs/protocols}/space-operator.d.ts +0 -0
- /package/dist/{protocols → cjs/protocols}/space-owner-operator.d.ts +0 -0
- /package/dist/{protocols → cjs/protocols}/space.d.ts +0 -0
- /package/dist/{schemas → cjs/schemas}/global-space.d.ts +0 -0
- /package/dist/{schemas → cjs/schemas}/global-space.js +0 -0
- /package/dist/{schemas → cjs/schemas}/index.d.ts +0 -0
- /package/dist/{schemas → cjs/schemas}/index.js +0 -0
- /package/dist/{schemas → cjs/schemas}/object-space.d.ts +0 -0
- /package/dist/{schemas → cjs/schemas}/object-space.js +0 -0
- /package/dist/{schemas → cjs/schemas}/space-configuration.d.ts +0 -0
- /package/dist/{schemas → cjs/schemas}/space-configuration.js +0 -0
- /package/dist/{schemas → cjs/schemas}/space-options.d.ts +0 -0
- /package/dist/{schemas → cjs/schemas}/space-options.js +0 -0
- /package/dist/{space → cjs/space}/global-space.d.ts +0 -0
- /package/dist/{space → cjs/space}/global-space.js +0 -0
- /package/dist/{space → cjs/space}/index.d.ts +0 -0
- /package/dist/{space → cjs/space}/index.js +0 -0
- /package/dist/{space → cjs/space}/object-space.d.ts +0 -0
- /package/dist/{space → cjs/space}/object-space.js +0 -0
- /package/dist/{space → cjs/space}/space.d.ts +0 -0
- /package/dist/{space → cjs/space}/space.js +0 -0
- /package/dist/{utils → cjs/utils}/common.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/common.js +0 -0
- /package/dist/{utils → cjs/utils}/hash.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/hash.js +0 -0
- /package/dist/{utils → cjs/utils}/index.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/index.js +0 -0
- /package/dist/{utils → cjs/utils}/logger.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/logger.js +0 -0
- /package/dist/{utils → cjs/utils}/stream.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/stream.js +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Data } from '../meta';
|
|
2
|
+
import { DriverProtocol, WriteAsOwnerOptions } from '../protocols';
|
|
3
|
+
import { ObjectCollectionRepository, ObjectRepository, TreeRepository } from '../model';
|
|
4
|
+
export type GlobalSpaceOptions = {
|
|
5
|
+
driver: DriverProtocol;
|
|
6
|
+
treeRepository: TreeRepository;
|
|
7
|
+
objectRepository: ObjectRepository;
|
|
8
|
+
objectCollectionRepository: ObjectCollectionRepository;
|
|
9
|
+
gcMaxCount?: 100 | number;
|
|
10
|
+
gcMaxConcurrency?: 8 | number;
|
|
11
|
+
};
|
|
12
|
+
export declare class GlobalSpace {
|
|
13
|
+
readonly driver: DriverProtocol;
|
|
14
|
+
readonly treeRepository: TreeRepository;
|
|
15
|
+
readonly objectRepository: ObjectRepository;
|
|
16
|
+
readonly objectCollectionRepository: ObjectCollectionRepository;
|
|
17
|
+
readonly gcMaxCount: number;
|
|
18
|
+
readonly gcMaxConcurrency: number;
|
|
19
|
+
constructor(options: GlobalSpaceOptions);
|
|
20
|
+
/**
|
|
21
|
+
* @description 存储新对象到全局存储区
|
|
22
|
+
* @param {string} key
|
|
23
|
+
* @param {Data} data
|
|
24
|
+
* @param {WriteAsOwnerOptions} options
|
|
25
|
+
* @return {*} {Promise<void>}
|
|
26
|
+
* @memberof GlobalSpace
|
|
27
|
+
*/
|
|
28
|
+
add(key: string, data: Data, options: WriteAsOwnerOptions): Promise<void>;
|
|
29
|
+
delete(hash: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* @description 清理未被使用的对象
|
|
32
|
+
* @return {Promise<void>} {Promise<void>}
|
|
33
|
+
* @memberof GlobalSpace
|
|
34
|
+
*/
|
|
35
|
+
gc(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* @description 标记一个对象,以备之后回收
|
|
38
|
+
* @param {...string[]} hashList
|
|
39
|
+
* @return {Promise<void>} {Promise<void>}
|
|
40
|
+
* @memberof GlobalSpace
|
|
41
|
+
*/
|
|
42
|
+
mark(...hashList: string[]): Promise<void>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { merge, omit, pick } from 'lodash';
|
|
2
|
+
import { Op } from 'sequelize';
|
|
3
|
+
import mimeTypes from 'mime-types';
|
|
4
|
+
import Debug from 'debug';
|
|
5
|
+
import pAll from 'p-all';
|
|
6
|
+
import dayjs from 'dayjs';
|
|
7
|
+
import { getHashPath } from '../utils';
|
|
8
|
+
import { GlobalSpaceOptionsSchema, HashSchema } from '../schemas/global-space';
|
|
9
|
+
import { WriteAsOwnerOptionsSchema } from '../schemas';
|
|
10
|
+
const debug = Debug('@did-space/core:GlobalSpace');
|
|
11
|
+
export class GlobalSpace {
|
|
12
|
+
driver;
|
|
13
|
+
treeRepository;
|
|
14
|
+
objectRepository;
|
|
15
|
+
objectCollectionRepository;
|
|
16
|
+
gcMaxCount;
|
|
17
|
+
gcMaxConcurrency;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
debug('GlobalSpace.constructor', JSON.stringify({ options: pick(options, 'gcMaxCount', 'gcMaxConcurrency') }));
|
|
20
|
+
const { error, value } = GlobalSpaceOptionsSchema.validate(options);
|
|
21
|
+
if (error) {
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
this.driver = value.driver;
|
|
25
|
+
this.treeRepository = value.treeRepository;
|
|
26
|
+
this.objectRepository = value.objectRepository;
|
|
27
|
+
this.objectCollectionRepository = value.objectCollectionRepository;
|
|
28
|
+
this.gcMaxCount = value.gcMaxCount ?? 100;
|
|
29
|
+
this.gcMaxConcurrency = value.gcMaxConcurrency ?? 8;
|
|
30
|
+
debug('GlobalSpace.constructor', JSON.stringify({ gcMaxCount: value.gcMaxCount, gcMaxConcurrency: value.gcMaxConcurrency }));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @description 存储新对象到全局存储区
|
|
34
|
+
* @param {string} key
|
|
35
|
+
* @param {Data} data
|
|
36
|
+
* @param {WriteAsOwnerOptions} options
|
|
37
|
+
* @return {*} {Promise<void>}
|
|
38
|
+
* @memberof GlobalSpace
|
|
39
|
+
*/
|
|
40
|
+
async add(key, data, options) {
|
|
41
|
+
// @note: 注意此处必须存储到全局存储区
|
|
42
|
+
// eslint-disable-next-line no-param-reassign
|
|
43
|
+
options = merge(options, { useGlobal: true });
|
|
44
|
+
debug('add.before', JSON.stringify({ key, options: omit(options, 'data') }));
|
|
45
|
+
const { error } = WriteAsOwnerOptionsSchema.validate({
|
|
46
|
+
...options,
|
|
47
|
+
key,
|
|
48
|
+
data,
|
|
49
|
+
}, { allowUnknown: true, stripUnknown: true });
|
|
50
|
+
if (error) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
const where = {
|
|
54
|
+
id: options.hash,
|
|
55
|
+
};
|
|
56
|
+
debug('add.$where', JSON.stringify(where));
|
|
57
|
+
const objectRecord = await this.objectRepository.findOne({
|
|
58
|
+
where,
|
|
59
|
+
raw: true,
|
|
60
|
+
});
|
|
61
|
+
debug('add.$objectRecord', JSON.stringify(objectRecord));
|
|
62
|
+
const listObject = await this.driver.list({
|
|
63
|
+
key: getHashPath(options.hash),
|
|
64
|
+
useGlobal: true,
|
|
65
|
+
});
|
|
66
|
+
// @note: 运行时的纠错机制,我们发现 size 有时候保存出错(修复后将不可能出现),必须 hash 和 size 都相同,才不需要修改底层存储
|
|
67
|
+
if (objectRecord && objectRecord.size === options.size && listObject?.size === options.size) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// 存储新对象到全局存储区
|
|
71
|
+
const newKey = getHashPath(options.hash);
|
|
72
|
+
await this.driver.writeAsOwner(newKey, data, options);
|
|
73
|
+
// 添加 object 记录
|
|
74
|
+
if (objectRecord) {
|
|
75
|
+
// @note: 运行时的纠错机制, 我们发现 size 有时候保存出错(修复后将不可能出现),这个是一个兜底方案,但是这是一个稳健的做法
|
|
76
|
+
await this.objectRepository.update({
|
|
77
|
+
size: options.size,
|
|
78
|
+
meta: {
|
|
79
|
+
mimeType: mimeTypes.lookup(key) || null,
|
|
80
|
+
key,
|
|
81
|
+
},
|
|
82
|
+
}, {
|
|
83
|
+
where: {
|
|
84
|
+
id: options.hash,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
await this.objectRepository.create({
|
|
90
|
+
id: options.hash,
|
|
91
|
+
size: options.size,
|
|
92
|
+
meta: {
|
|
93
|
+
mimeType: mimeTypes.lookup(key) || null,
|
|
94
|
+
key,
|
|
95
|
+
},
|
|
96
|
+
}, {
|
|
97
|
+
ignoreDuplicates: true,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
debug('add.after', JSON.stringify({ objectRecord }));
|
|
101
|
+
}
|
|
102
|
+
async delete(hash) {
|
|
103
|
+
const { error } = HashSchema.validate(hash);
|
|
104
|
+
if (error) {
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
debug('delete.before', JSON.stringify({ hash }));
|
|
108
|
+
const where = {
|
|
109
|
+
objectId: hash,
|
|
110
|
+
};
|
|
111
|
+
debug('delete.$where', JSON.stringify(where));
|
|
112
|
+
const treeRefCount = await this.treeRepository.count({
|
|
113
|
+
where,
|
|
114
|
+
});
|
|
115
|
+
debug('delete.$treeRefCount', treeRefCount);
|
|
116
|
+
if (treeRefCount) {
|
|
117
|
+
await this.objectCollectionRepository.destroy({ where: { id: hash } });
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
await this.driver.deleteAsOwner(getHashPath(hash), { useGlobal: true });
|
|
121
|
+
await this.objectRepository.destroy({ where: { id: hash } });
|
|
122
|
+
await this.objectCollectionRepository.destroy({ where: { id: hash } });
|
|
123
|
+
debug('delete.after', { hash });
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* @description 清理未被使用的对象
|
|
127
|
+
* @return {Promise<void>} {Promise<void>}
|
|
128
|
+
* @memberof GlobalSpace
|
|
129
|
+
*/
|
|
130
|
+
async gc() {
|
|
131
|
+
debug('gc.before', 'start gc...');
|
|
132
|
+
const objects = await this.objectCollectionRepository.findAll({
|
|
133
|
+
where: {
|
|
134
|
+
createdAt: {
|
|
135
|
+
[Op.lt]: dayjs().subtract(10, 'm').toDate(),
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
attributes: ['id'],
|
|
139
|
+
order: [['createdAt', 'ASC']],
|
|
140
|
+
limit: this.gcMaxCount,
|
|
141
|
+
});
|
|
142
|
+
debug('gc.$objects.length', objects.length);
|
|
143
|
+
const actions = objects.map((x) => {
|
|
144
|
+
return () => this.delete(x.id);
|
|
145
|
+
});
|
|
146
|
+
// 限制并发数量
|
|
147
|
+
await pAll(actions, { concurrency: this.gcMaxConcurrency });
|
|
148
|
+
debug('gc.after', true);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* @description 标记一个对象,以备之后回收
|
|
152
|
+
* @param {...string[]} hashList
|
|
153
|
+
* @return {Promise<void>} {Promise<void>}
|
|
154
|
+
* @memberof GlobalSpace
|
|
155
|
+
*/
|
|
156
|
+
async mark(...hashList) {
|
|
157
|
+
debug('mark.before', true);
|
|
158
|
+
debug('mark.$hashList.length', hashList.length);
|
|
159
|
+
await this.objectCollectionRepository.bulkCreate(hashList.map((hash) => {
|
|
160
|
+
return {
|
|
161
|
+
id: hash,
|
|
162
|
+
};
|
|
163
|
+
}), {
|
|
164
|
+
ignoreDuplicates: true,
|
|
165
|
+
updateOnDuplicate: ['createdAt'],
|
|
166
|
+
});
|
|
167
|
+
debug('mark.after', true);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Stream } from 'stream';
|
|
4
|
+
import EventEmitter from 'events';
|
|
5
|
+
import { SpaceConfig } from '../configuration';
|
|
6
|
+
import type { Object, Data } from '../meta';
|
|
7
|
+
import { AppSpaceOptions, DeleteOptions, DriverProtocol, GetHashOptions, KeyStatus, ListOptions, ListsOptions, PermissionOptions, ReadAsOwnerOptions, ReadOptions, SpaceProtocol, WriteAsOwnerOptions, WriteOptions } from '../protocols';
|
|
8
|
+
import { ObjectCollectionRepository, ObjectRepository, TreeRepository, type AppSpaceApplyRepository } from '../model';
|
|
9
|
+
import { GlobalSpace } from './global-space';
|
|
10
|
+
import type { SpaceRepository } from '../model/space';
|
|
11
|
+
import type { DidObjectMappingRepository } from '../model/did-object-mapping';
|
|
12
|
+
export type ObjectSpaceOptions = {
|
|
13
|
+
driver: DriverProtocol;
|
|
14
|
+
spaceDid: string;
|
|
15
|
+
treeRepository: TreeRepository;
|
|
16
|
+
objectRepository: ObjectRepository;
|
|
17
|
+
objectCollectionRepository: ObjectCollectionRepository;
|
|
18
|
+
spaceRepository: SpaceRepository;
|
|
19
|
+
appSpaceApplyRepository: typeof AppSpaceApplyRepository;
|
|
20
|
+
didObjectMappingRepository: typeof DidObjectMappingRepository;
|
|
21
|
+
/**
|
|
22
|
+
* @description 忽略存储容量限制吗?
|
|
23
|
+
* @type {(false | true)}
|
|
24
|
+
*/
|
|
25
|
+
ignoreStorageLimit?: false | true;
|
|
26
|
+
};
|
|
27
|
+
export declare class ObjectSpace extends EventEmitter implements SpaceProtocol {
|
|
28
|
+
readonly options: ObjectSpaceOptions;
|
|
29
|
+
readonly globalSpace: GlobalSpace;
|
|
30
|
+
readonly driver: DriverProtocol;
|
|
31
|
+
static readonly READONLY_OBJECT_KEYS: string[];
|
|
32
|
+
constructor(options: ObjectSpaceOptions);
|
|
33
|
+
createSpace(spaceConfig: SpaceConfig): Promise<void>;
|
|
34
|
+
isSpaceCreated(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
*
|
|
37
|
+
* @description
|
|
38
|
+
* @return {*} {Promise<void>}
|
|
39
|
+
* @memberof ObjectSpace
|
|
40
|
+
*/
|
|
41
|
+
destroySpace(): Promise<void>;
|
|
42
|
+
getSpaceSize(): Promise<number>;
|
|
43
|
+
createAppSpace(options: AppSpaceOptions): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* @description
|
|
46
|
+
* @param {AppSpaceOptions} options
|
|
47
|
+
* @return {Promise<void>} {Promise<void>}
|
|
48
|
+
* @memberof ObjectSpace
|
|
49
|
+
*/
|
|
50
|
+
destroyAppSpace(options: AppSpaceOptions): Promise<void>;
|
|
51
|
+
getAppSpacePath(options: AppSpaceOptions): Promise<string>;
|
|
52
|
+
write(options: WriteOptions): Promise<void>;
|
|
53
|
+
delete(options: DeleteOptions): Promise<void>;
|
|
54
|
+
read(options: ReadOptions): Promise<Stream>;
|
|
55
|
+
getHash(options: GetHashOptions): Promise<string>;
|
|
56
|
+
exists(options: ReadOptions): Promise<boolean>;
|
|
57
|
+
private listsOneLevelAsOwner;
|
|
58
|
+
private listsRecursiveAsOwner;
|
|
59
|
+
/**
|
|
60
|
+
* @description 后续改名为 listsAsOwner 更合适
|
|
61
|
+
* @param {ListsOptions} options
|
|
62
|
+
* @return {*} {Promise<Object[]>}
|
|
63
|
+
* @memberof ObjectSpace
|
|
64
|
+
*/
|
|
65
|
+
lists(options: ListsOptions): Promise<Object[]>;
|
|
66
|
+
/**
|
|
67
|
+
* @FIXME: 接口的功能实际应该是 listAsOwner 实现的,属于技术债 @jianchao
|
|
68
|
+
* @description
|
|
69
|
+
* @param {ListOptions} options
|
|
70
|
+
* @return {*} {Promise<Object>}
|
|
71
|
+
* @memberof ObjectSpace
|
|
72
|
+
*/
|
|
73
|
+
list(options: ListOptions): Promise<Object | null>;
|
|
74
|
+
/**
|
|
75
|
+
* @refactor: @jianchao 后续让 write 的接口参数保持一致,即 key, data 都在 options 里面,目前改动收益比较小
|
|
76
|
+
* @description
|
|
77
|
+
* @param {string} key
|
|
78
|
+
* @param {Data} data
|
|
79
|
+
* @param {WriteAsOwnerOptions} options
|
|
80
|
+
* @return {*} {Promise<void>}
|
|
81
|
+
* @memberof ObjectSpace
|
|
82
|
+
*/
|
|
83
|
+
writeAsOwner(key: string, data: Data, options?: WriteAsOwnerOptions): Promise<void>;
|
|
84
|
+
private _updateAsOwner;
|
|
85
|
+
private _createAsOwner;
|
|
86
|
+
private updateMetadata;
|
|
87
|
+
deleteAsOwner(key: string): Promise<void>;
|
|
88
|
+
readAsOwner(key: string, options?: ReadAsOwnerOptions): Promise<Stream>;
|
|
89
|
+
existsAsOwner(key: string): Promise<boolean>;
|
|
90
|
+
getStatusAsOwner(key: string): Promise<KeyStatus>;
|
|
91
|
+
createConfig(spaceConfig: SpaceConfig): Promise<void>;
|
|
92
|
+
destroyConfig(): Promise<void>;
|
|
93
|
+
set<T = any>(key: string, value: T): Promise<void>;
|
|
94
|
+
get<T = any>(key: string, defaultValue?: T): Promise<T>;
|
|
95
|
+
private getPermission;
|
|
96
|
+
/**
|
|
97
|
+
*
|
|
98
|
+
* @see https://blog.csdn.net/a1173537204/article/details/89765932
|
|
99
|
+
* @private
|
|
100
|
+
* @param {PermissionOptions} { fromAppDid, toAppDid }
|
|
101
|
+
* @param {number} permission
|
|
102
|
+
* @param {boolean} status
|
|
103
|
+
* @return {*} {Promise<void>}
|
|
104
|
+
* @memberof S3SpaceConfig
|
|
105
|
+
*/
|
|
106
|
+
private setPermission;
|
|
107
|
+
/**
|
|
108
|
+
*
|
|
109
|
+
* @refactor 这部分的实现大同小异,之后可以抽象到上层实现,这样可以减少代码量 @jianchao
|
|
110
|
+
* @description
|
|
111
|
+
* @param {PermissionOptions} options
|
|
112
|
+
* @param {boolean} value
|
|
113
|
+
* @return {*} {Promise<void>}
|
|
114
|
+
* @memberof ObjectSpace
|
|
115
|
+
*/
|
|
116
|
+
setListable(options: PermissionOptions, value: boolean): Promise<void>;
|
|
117
|
+
setReadable(options: PermissionOptions, value: boolean): Promise<void>;
|
|
118
|
+
setWritable(options: PermissionOptions, value: boolean): Promise<void>;
|
|
119
|
+
isListable(options: PermissionOptions): Promise<boolean>;
|
|
120
|
+
isReadable(options: PermissionOptions): Promise<boolean>;
|
|
121
|
+
isWritable(options: PermissionOptions): Promise<boolean>;
|
|
122
|
+
static editable(key: string): boolean;
|
|
123
|
+
}
|