@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.
Files changed (201) hide show
  1. package/dist/{constants → cjs/constants}/index.d.ts +0 -6
  2. package/dist/{constants → cjs/constants}/index.js +1 -9
  3. package/dist/{meta → cjs/meta}/template/app.d.ts +0 -8
  4. package/dist/cjs/meta/template/index.d.ts +2 -0
  5. package/dist/cjs/meta/template/index.js +18 -0
  6. package/dist/{model → cjs/model}/app-space-apply.d.ts +1 -1
  7. package/dist/cjs/model/audit-log.d.ts +527 -0
  8. package/dist/cjs/model/audit-log.js +72 -0
  9. package/dist/{model → cjs/model}/did-object-mapping.d.ts +1 -1
  10. package/dist/{model → cjs/model}/index.d.ts +1 -0
  11. package/dist/{model → cjs/model}/index.js +1 -0
  12. package/dist/{model → cjs/model}/object-collection.d.ts +1 -1
  13. package/dist/{model → cjs/model}/object.d.ts +1 -1
  14. package/dist/{model → cjs/model}/space.d.ts +1 -1
  15. package/dist/{model → cjs/model}/tree.d.ts +2 -2
  16. package/dist/cjs/model/tree.js +9 -0
  17. package/dist/cjs/protocols/driver.js +2 -0
  18. package/dist/cjs/protocols/space-config.js +2 -0
  19. package/dist/cjs/protocols/space-operator.js +2 -0
  20. package/dist/cjs/protocols/space-owner-operator.js +2 -0
  21. package/dist/cjs/protocols/space.js +2 -0
  22. package/dist/es/configuration/index.d.ts +1 -0
  23. package/dist/es/configuration/index.js +1 -0
  24. package/dist/es/configuration/space-config.d.ts +23 -0
  25. package/dist/es/configuration/space-config.js +5 -0
  26. package/dist/es/constants/index.d.ts +30 -0
  27. package/dist/es/constants/index.js +35 -0
  28. package/dist/es/drivers/base.d.ts +40 -0
  29. package/dist/es/drivers/base.js +113 -0
  30. package/dist/es/drivers/index.d.ts +1 -0
  31. package/dist/es/drivers/index.js +1 -0
  32. package/dist/es/index.d.ts +9 -0
  33. package/dist/es/index.js +9 -0
  34. package/dist/es/meta/data.d.ts +4 -0
  35. package/dist/es/meta/data.js +1 -0
  36. package/dist/es/meta/index.d.ts +3 -0
  37. package/dist/es/meta/index.js +3 -0
  38. package/dist/es/meta/object.d.ts +70 -0
  39. package/dist/es/meta/object.js +1 -0
  40. package/dist/es/meta/template/app.d.ts +27 -0
  41. package/dist/es/meta/template/app.js +1 -0
  42. package/dist/es/meta/template/index.d.ts +2 -0
  43. package/dist/es/meta/template/index.js +2 -0
  44. package/dist/es/meta/template/preview/base.d.ts +13 -0
  45. package/dist/es/meta/template/preview/base.js +12 -0
  46. package/dist/es/meta/template/preview/default.d.ts +75 -0
  47. package/dist/es/meta/template/preview/default.js +9 -0
  48. package/dist/es/meta/template/preview/index.d.ts +5 -0
  49. package/dist/es/meta/template/preview/index.js +5 -0
  50. package/dist/es/meta/template/preview/nft.d.ts +23 -0
  51. package/dist/es/meta/template/preview/nft.js +8 -0
  52. package/dist/es/meta/template/preview/passport.d.ts +35 -0
  53. package/dist/es/meta/template/preview/passport.js +19 -0
  54. package/dist/es/meta/template/preview/profile.d.ts +23 -0
  55. package/dist/es/meta/template/preview/profile.js +8 -0
  56. package/dist/es/model/app-space-apply.d.ts +75 -0
  57. package/dist/es/model/app-space-apply.js +1 -0
  58. package/dist/es/model/audit-log.d.ts +527 -0
  59. package/dist/es/model/audit-log.js +69 -0
  60. package/dist/es/model/did-object-mapping.d.ts +8 -0
  61. package/dist/es/model/did-object-mapping.js +1 -0
  62. package/dist/es/model/index.d.ts +5 -0
  63. package/dist/es/model/index.js +5 -0
  64. package/dist/es/model/object-collection.d.ts +42 -0
  65. package/dist/es/model/object-collection.js +1 -0
  66. package/dist/es/model/object.d.ts +59 -0
  67. package/dist/es/model/object.js +1 -0
  68. package/dist/es/model/space.d.ts +21 -0
  69. package/dist/es/model/space.js +1 -0
  70. package/dist/es/model/tree.d.ts +96 -0
  71. package/dist/es/model/tree.js +6 -0
  72. package/dist/es/protocols/base-space.d.ts +4 -0
  73. package/dist/es/protocols/base-space.js +1 -0
  74. package/dist/es/protocols/driver.d.ts +7 -0
  75. package/dist/es/protocols/driver.js +1 -0
  76. package/dist/es/protocols/index.d.ts +5 -0
  77. package/dist/es/protocols/index.js +5 -0
  78. package/dist/es/protocols/space-config.d.ts +17 -0
  79. package/dist/es/protocols/space-config.js +1 -0
  80. package/dist/es/protocols/space-operator.d.ts +63 -0
  81. package/dist/es/protocols/space-operator.js +1 -0
  82. package/dist/es/protocols/space-owner-operator.d.ts +43 -0
  83. package/dist/es/protocols/space-owner-operator.js +1 -0
  84. package/dist/es/protocols/space.d.ts +7 -0
  85. package/dist/es/protocols/space.js +1 -0
  86. package/dist/es/schemas/global-space.d.ts +2 -0
  87. package/dist/es/schemas/global-space.js +19 -0
  88. package/dist/es/schemas/index.d.ts +3 -0
  89. package/dist/es/schemas/index.js +3 -0
  90. package/dist/es/schemas/object-space.d.ts +6 -0
  91. package/dist/es/schemas/object-space.js +44 -0
  92. package/dist/es/schemas/space-configuration.d.ts +4 -0
  93. package/dist/es/schemas/space-configuration.js +22 -0
  94. package/dist/es/schemas/space-options.d.ts +1 -0
  95. package/dist/es/schemas/space-options.js +4 -0
  96. package/dist/es/space/global-space.d.ts +43 -0
  97. package/dist/es/space/global-space.js +169 -0
  98. package/dist/es/space/index.d.ts +3 -0
  99. package/dist/es/space/index.js +3 -0
  100. package/dist/es/space/object-space.d.ts +123 -0
  101. package/dist/es/space/object-space.js +684 -0
  102. package/dist/es/space/space.d.ts +47 -0
  103. package/dist/es/space/space.js +172 -0
  104. package/dist/es/utils/common.d.ts +5 -0
  105. package/dist/es/utils/common.js +38 -0
  106. package/dist/es/utils/hash.d.ts +31 -0
  107. package/dist/es/utils/hash.js +64 -0
  108. package/dist/es/utils/index.d.ts +4 -0
  109. package/dist/es/utils/index.js +4 -0
  110. package/dist/es/utils/logger.d.ts +2 -0
  111. package/dist/es/utils/logger.js +2 -0
  112. package/dist/es/utils/stream.d.ts +11 -0
  113. package/dist/es/utils/stream.js +18 -0
  114. package/package.json +98 -9
  115. package/dist/meta/template/app-backup.d.ts +0 -55
  116. package/dist/meta/template/app-backup.js +0 -4
  117. package/dist/meta/template/app-connected.d.ts +0 -49
  118. package/dist/meta/template/app-connected.js +0 -4
  119. package/dist/meta/template/app-disconnected.d.ts +0 -20
  120. package/dist/meta/template/app-disconnected.js +0 -4
  121. package/dist/meta/template/app-restore.d.ts +0 -40
  122. package/dist/meta/template/app-restore.js +0 -4
  123. package/dist/meta/template/index.d.ts +0 -6
  124. package/dist/meta/template/index.js +0 -22
  125. package/dist/model/app-space-apply.js +0 -7
  126. package/dist/model/did-object-mapping.js +0 -8
  127. package/dist/model/object-collection.js +0 -7
  128. package/dist/model/object.js +0 -7
  129. package/dist/model/space.js +0 -7
  130. package/dist/model/tree.js +0 -18
  131. /package/dist/{configuration → cjs/configuration}/index.d.ts +0 -0
  132. /package/dist/{configuration → cjs/configuration}/index.js +0 -0
  133. /package/dist/{configuration → cjs/configuration}/space-config.d.ts +0 -0
  134. /package/dist/{configuration → cjs/configuration}/space-config.js +0 -0
  135. /package/dist/{drivers → cjs/drivers}/base.d.ts +0 -0
  136. /package/dist/{drivers → cjs/drivers}/base.js +0 -0
  137. /package/dist/{drivers → cjs/drivers}/index.d.ts +0 -0
  138. /package/dist/{drivers → cjs/drivers}/index.js +0 -0
  139. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  140. /package/dist/{index.js → cjs/index.js} +0 -0
  141. /package/dist/{meta → cjs/meta}/data.d.ts +0 -0
  142. /package/dist/{meta → cjs/meta}/data.js +0 -0
  143. /package/dist/{meta → cjs/meta}/index.d.ts +0 -0
  144. /package/dist/{meta → cjs/meta}/index.js +0 -0
  145. /package/dist/{meta → cjs/meta}/object.d.ts +0 -0
  146. /package/dist/{meta → cjs/meta}/object.js +0 -0
  147. /package/dist/{meta → cjs/meta}/template/app.js +0 -0
  148. /package/dist/{meta → cjs/meta}/template/preview/base.d.ts +0 -0
  149. /package/dist/{meta → cjs/meta}/template/preview/base.js +0 -0
  150. /package/dist/{meta → cjs/meta}/template/preview/default.d.ts +0 -0
  151. /package/dist/{meta → cjs/meta}/template/preview/default.js +0 -0
  152. /package/dist/{meta → cjs/meta}/template/preview/index.d.ts +0 -0
  153. /package/dist/{meta → cjs/meta}/template/preview/index.js +0 -0
  154. /package/dist/{meta → cjs/meta}/template/preview/nft.d.ts +0 -0
  155. /package/dist/{meta → cjs/meta}/template/preview/nft.js +0 -0
  156. /package/dist/{meta → cjs/meta}/template/preview/passport.d.ts +0 -0
  157. /package/dist/{meta → cjs/meta}/template/preview/passport.js +0 -0
  158. /package/dist/{meta → cjs/meta}/template/preview/profile.d.ts +0 -0
  159. /package/dist/{meta → cjs/meta}/template/preview/profile.js +0 -0
  160. /package/dist/{protocols/base-space.js → cjs/model/app-space-apply.js} +0 -0
  161. /package/dist/{protocols/driver.js → cjs/model/did-object-mapping.js} +0 -0
  162. /package/dist/{protocols/space-config.js → cjs/model/object-collection.js} +0 -0
  163. /package/dist/{protocols/space-operator.js → cjs/model/object.js} +0 -0
  164. /package/dist/{protocols → cjs/model}/space.js +0 -0
  165. /package/dist/{protocols → cjs/protocols}/base-space.d.ts +0 -0
  166. /package/dist/{protocols/space-owner-operator.js → cjs/protocols/base-space.js} +0 -0
  167. /package/dist/{protocols → cjs/protocols}/driver.d.ts +0 -0
  168. /package/dist/{protocols → cjs/protocols}/index.d.ts +0 -0
  169. /package/dist/{protocols → cjs/protocols}/index.js +0 -0
  170. /package/dist/{protocols → cjs/protocols}/space-config.d.ts +0 -0
  171. /package/dist/{protocols → cjs/protocols}/space-operator.d.ts +0 -0
  172. /package/dist/{protocols → cjs/protocols}/space-owner-operator.d.ts +0 -0
  173. /package/dist/{protocols → cjs/protocols}/space.d.ts +0 -0
  174. /package/dist/{schemas → cjs/schemas}/global-space.d.ts +0 -0
  175. /package/dist/{schemas → cjs/schemas}/global-space.js +0 -0
  176. /package/dist/{schemas → cjs/schemas}/index.d.ts +0 -0
  177. /package/dist/{schemas → cjs/schemas}/index.js +0 -0
  178. /package/dist/{schemas → cjs/schemas}/object-space.d.ts +0 -0
  179. /package/dist/{schemas → cjs/schemas}/object-space.js +0 -0
  180. /package/dist/{schemas → cjs/schemas}/space-configuration.d.ts +0 -0
  181. /package/dist/{schemas → cjs/schemas}/space-configuration.js +0 -0
  182. /package/dist/{schemas → cjs/schemas}/space-options.d.ts +0 -0
  183. /package/dist/{schemas → cjs/schemas}/space-options.js +0 -0
  184. /package/dist/{space → cjs/space}/global-space.d.ts +0 -0
  185. /package/dist/{space → cjs/space}/global-space.js +0 -0
  186. /package/dist/{space → cjs/space}/index.d.ts +0 -0
  187. /package/dist/{space → cjs/space}/index.js +0 -0
  188. /package/dist/{space → cjs/space}/object-space.d.ts +0 -0
  189. /package/dist/{space → cjs/space}/object-space.js +0 -0
  190. /package/dist/{space → cjs/space}/space.d.ts +0 -0
  191. /package/dist/{space → cjs/space}/space.js +0 -0
  192. /package/dist/{utils → cjs/utils}/common.d.ts +0 -0
  193. /package/dist/{utils → cjs/utils}/common.js +0 -0
  194. /package/dist/{utils → cjs/utils}/hash.d.ts +0 -0
  195. /package/dist/{utils → cjs/utils}/hash.js +0 -0
  196. /package/dist/{utils → cjs/utils}/index.d.ts +0 -0
  197. /package/dist/{utils → cjs/utils}/index.js +0 -0
  198. /package/dist/{utils → cjs/utils}/logger.d.ts +0 -0
  199. /package/dist/{utils → cjs/utils}/logger.js +0 -0
  200. /package/dist/{utils → cjs/utils}/stream.d.ts +0 -0
  201. /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,3 @@
1
+ export * from './space';
2
+ export * from './object-space';
3
+ export * from './global-space';
@@ -0,0 +1,3 @@
1
+ export * from './space';
2
+ export * from './object-space';
3
+ export * from './global-space';
@@ -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
+ }