@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,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export var AuditLogStatus;
|
|
3
|
+
(function (AuditLogStatus) {
|
|
4
|
+
AuditLogStatus["DEFAULT"] = "default";
|
|
5
|
+
AuditLogStatus["SUCCEEDED"] = "succeeded";
|
|
6
|
+
AuditLogStatus["FAILED"] = "failed";
|
|
7
|
+
AuditLogStatus["PENDING"] = "pending";
|
|
8
|
+
})(AuditLogStatus || (AuditLogStatus = {}));
|
|
9
|
+
export var AuditLogAction;
|
|
10
|
+
(function (AuditLogAction) {
|
|
11
|
+
AuditLogAction["APP_DISCONNECTED"] = "app-disconnected";
|
|
12
|
+
AuditLogAction["APP_RESTORE"] = "app-restore";
|
|
13
|
+
AuditLogAction["APP_BACKUP"] = "app-backup";
|
|
14
|
+
AuditLogAction["APP_CONNECTED"] = "app-connected";
|
|
15
|
+
})(AuditLogAction || (AuditLogAction = {}));
|
|
16
|
+
export const AppConnectedSchema = z.object({
|
|
17
|
+
spaceDid: z.string().min(1),
|
|
18
|
+
appDid: z.string().min(1),
|
|
19
|
+
appName: z.string().min(1),
|
|
20
|
+
appDescription: z.string(),
|
|
21
|
+
scopes: z.string().min(1),
|
|
22
|
+
/** 注意,有了 appUrl,只要使用它的 __blocklet__.js?type=json api就能获取 blocklet的 logo,描述,等信息 */
|
|
23
|
+
appUrl: z.string(),
|
|
24
|
+
/** 授权的时候用户当时在哪个网址?比如在 server 的 blocklet 的备份页面进行授权的,在blocklet 的授权页面进行授权的 */
|
|
25
|
+
referrer: z.string(),
|
|
26
|
+
});
|
|
27
|
+
export const AppDisconnectedSchema = z.object({
|
|
28
|
+
spaceDid: z.string().min(1),
|
|
29
|
+
appDid: z.string().min(1),
|
|
30
|
+
appName: z.string().min(1),
|
|
31
|
+
});
|
|
32
|
+
export const AppBackupSchema = z.object({
|
|
33
|
+
/** 指向 server 的 did 地址 */
|
|
34
|
+
serverDid: z.string().min(1),
|
|
35
|
+
/** 本质上是始终指向最新的 appDid,目前主要是 rotate 的 blocklet 在还原的时候会用到这个参数 */
|
|
36
|
+
signerDid: z.string().min(1),
|
|
37
|
+
appName: z.string().min(1),
|
|
38
|
+
appDescription: z.string(),
|
|
39
|
+
/** 授权的时候用户当时在哪个网址?比如在 server 的 blocklet 的备份页面进行授权的,在blocklet 的授权页面进行授权的 */
|
|
40
|
+
referrer: z.string(),
|
|
41
|
+
});
|
|
42
|
+
export const AppRestoreSchema = z.object({
|
|
43
|
+
/** 指向 server 的 did 地址 */
|
|
44
|
+
serverDid: z.string().min(1),
|
|
45
|
+
appName: z.string().min(1),
|
|
46
|
+
appDescription: z.string(),
|
|
47
|
+
referrer: z.string(),
|
|
48
|
+
});
|
|
49
|
+
export const AuditLogSchema = z.object({
|
|
50
|
+
id: z.string(),
|
|
51
|
+
actionType: z.nativeEnum(AuditLogAction),
|
|
52
|
+
entityId: z.string().min(1),
|
|
53
|
+
entityName: z.string().optional().default(''),
|
|
54
|
+
userId: z.string().min(1),
|
|
55
|
+
username: z.string().optional().default(''),
|
|
56
|
+
data: z.union([AppConnectedSchema, AppDisconnectedSchema, AppBackupSchema, AppRestoreSchema]),
|
|
57
|
+
status: z.nativeEnum(AuditLogStatus).optional().default(AuditLogStatus.SUCCEEDED),
|
|
58
|
+
reason: z.string().optional().default(''),
|
|
59
|
+
env: z.record(z.any()).optional().default({}),
|
|
60
|
+
createdAt: z
|
|
61
|
+
.string()
|
|
62
|
+
.optional()
|
|
63
|
+
.default(() => new Date().toISOString()),
|
|
64
|
+
updatedAt: z
|
|
65
|
+
.string()
|
|
66
|
+
.optional()
|
|
67
|
+
.default(() => new Date().toISOString()),
|
|
68
|
+
});
|
|
69
|
+
export const CreationAuditLogSchema = AuditLogSchema.extend({ id: AuditLogSchema.shape.id.optional() });
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Model, InferAttributes } from 'sequelize';
|
|
2
|
+
export declare class DidObjectMappingRepository extends Model<InferAttributes<DidObjectMappingRepository>, InferAttributes<DidObjectMappingRepository>> {
|
|
3
|
+
did: string;
|
|
4
|
+
spaceDid: string;
|
|
5
|
+
appDid: string;
|
|
6
|
+
key: string;
|
|
7
|
+
metadata: Record<string, string>;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Model } from 'sequelize';
|
|
2
|
+
/**
|
|
3
|
+
* @description 存储的是对象的信息,不保存结构,创建之初就确定了,只能增加,删除
|
|
4
|
+
* @export
|
|
5
|
+
* @interface ObjectModel
|
|
6
|
+
*/
|
|
7
|
+
export interface ObjectCollectionModel {
|
|
8
|
+
/**
|
|
9
|
+
* @primaryKey
|
|
10
|
+
* @description 对象的唯一标识,格式是 ipfs cid v1
|
|
11
|
+
* @type {string}
|
|
12
|
+
* @column {DataTypes.CHAR(64)}
|
|
13
|
+
* @memberof ObjectCollectionModel
|
|
14
|
+
*/
|
|
15
|
+
id: string;
|
|
16
|
+
/**
|
|
17
|
+
* @description 对象的创建时间
|
|
18
|
+
* @type {string}
|
|
19
|
+
* @column {DataTypes.DATE}
|
|
20
|
+
* @memberof ObjectCollectionModel
|
|
21
|
+
*/
|
|
22
|
+
createdAt: string;
|
|
23
|
+
}
|
|
24
|
+
export type ObjectCollectionModelCreation = Pick<ObjectCollectionModel, 'id'>;
|
|
25
|
+
export declare class ObjectCollectionRepositoryClass extends Model<ObjectCollectionModel, ObjectCollectionModelCreation> {
|
|
26
|
+
/**
|
|
27
|
+
* @primaryKey
|
|
28
|
+
* @description 对象的唯一标识,格式是 ipfs cid v1
|
|
29
|
+
* @type {string}
|
|
30
|
+
* @column {DataTypes.CHAR(64)}
|
|
31
|
+
* @memberof ObjectCollectionModel
|
|
32
|
+
*/
|
|
33
|
+
id: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description 对象的创建时间
|
|
36
|
+
* @type {string}
|
|
37
|
+
* @column {DataTypes.DATE}
|
|
38
|
+
* @memberof ObjectCollectionModel
|
|
39
|
+
*/
|
|
40
|
+
createdAt: string;
|
|
41
|
+
}
|
|
42
|
+
export type ObjectCollectionRepository = typeof ObjectCollectionRepositoryClass;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Model, CreationOptional } from 'sequelize';
|
|
2
|
+
/**
|
|
3
|
+
* @description 存储的是对象的信息,不保存结构,创建之初就确定了,只能增加,删除
|
|
4
|
+
* @export
|
|
5
|
+
* @interface ObjectModel
|
|
6
|
+
*/
|
|
7
|
+
export interface ObjectModel {
|
|
8
|
+
/**
|
|
9
|
+
* @primaryKey
|
|
10
|
+
* @description 对象的唯一标识,格式是 ipfs cid v1
|
|
11
|
+
* @type {string}
|
|
12
|
+
* @column {DataTypes.STRING(59)}
|
|
13
|
+
* @memberof ObjectModel
|
|
14
|
+
*/
|
|
15
|
+
id: string;
|
|
16
|
+
/**
|
|
17
|
+
* @description 对象的大小
|
|
18
|
+
* @type {number}
|
|
19
|
+
* @column {DataTypes.BIGINT.UNSIGNED}
|
|
20
|
+
* @memberof ObjectModel
|
|
21
|
+
*/
|
|
22
|
+
size: number;
|
|
23
|
+
/**
|
|
24
|
+
* @description 存储对象的元数据
|
|
25
|
+
* @type {ObjectModelMeta}
|
|
26
|
+
* @column {DataTypes.JSON}
|
|
27
|
+
* @memberof ObjectModel
|
|
28
|
+
*/
|
|
29
|
+
meta: ObjectModelMeta;
|
|
30
|
+
/**
|
|
31
|
+
* @description 对象的创建时间
|
|
32
|
+
* @type {string}
|
|
33
|
+
* @column {DataTypes.DATE}
|
|
34
|
+
* @memberof ObjectModel
|
|
35
|
+
*/
|
|
36
|
+
createdAt?: CreationOptional<string>;
|
|
37
|
+
}
|
|
38
|
+
export interface ObjectModelMeta {
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @description 对象的 hash,如果对象是文件夹则为 null,否则必须有值
|
|
42
|
+
* @type {string}
|
|
43
|
+
* @memberof ObjectModelMeta
|
|
44
|
+
*/
|
|
45
|
+
mimeType: string | null;
|
|
46
|
+
/**
|
|
47
|
+
* @description 保存这个对象第一次出现的文件名
|
|
48
|
+
* @type {string}
|
|
49
|
+
* @memberof ObjectModelMeta
|
|
50
|
+
*/
|
|
51
|
+
key: string;
|
|
52
|
+
}
|
|
53
|
+
export declare class ObjectRepositoryClass extends Model<ObjectModel> implements ObjectModel {
|
|
54
|
+
id: string;
|
|
55
|
+
size: number;
|
|
56
|
+
meta: ObjectModelMeta;
|
|
57
|
+
createdAt?: CreationOptional<string>;
|
|
58
|
+
}
|
|
59
|
+
export type ObjectRepository = typeof ObjectRepositoryClass;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Model } from 'sequelize';
|
|
2
|
+
import type { LiteralUnion } from 'type-fest';
|
|
3
|
+
export declare class SpaceRepositoryClass extends Model<SpaceRepositoryClass, SpaceRepositoryClass> {
|
|
4
|
+
id: string;
|
|
5
|
+
drive: string;
|
|
6
|
+
did: string;
|
|
7
|
+
type: LiteralUnion<'default' | 'buy', string>;
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
size: number;
|
|
11
|
+
assetDid: string;
|
|
12
|
+
metadata: {
|
|
13
|
+
usageReportId?: string;
|
|
14
|
+
usedUnit?: number;
|
|
15
|
+
};
|
|
16
|
+
createAt: Date;
|
|
17
|
+
updateAt: Date | string;
|
|
18
|
+
expireAt: Date;
|
|
19
|
+
ownerDid: string;
|
|
20
|
+
}
|
|
21
|
+
export type SpaceRepository = typeof SpaceRepositoryClass;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { Model } from 'sequelize';
|
|
2
|
+
import type { ObjectModel } from './object';
|
|
3
|
+
export interface TreeModel {
|
|
4
|
+
/**
|
|
5
|
+
* @description uuidv4
|
|
6
|
+
* @type {string}
|
|
7
|
+
* @column {DataTypes.BIGINT.UNSIGNED}
|
|
8
|
+
* @memberof Tree
|
|
9
|
+
*/
|
|
10
|
+
id: string;
|
|
11
|
+
/**
|
|
12
|
+
* @description Space 的 DID
|
|
13
|
+
* @type {string}
|
|
14
|
+
* @column {DataTypes.STRING(40)}
|
|
15
|
+
* @memberof Tree
|
|
16
|
+
*/
|
|
17
|
+
spaceDid: string;
|
|
18
|
+
/**
|
|
19
|
+
* @description 当且仅当,指向文件夹的时候才为空
|
|
20
|
+
* @column {DataTypes.CHAR(64)}
|
|
21
|
+
* @memberof Tree
|
|
22
|
+
*/
|
|
23
|
+
objectId: null | string;
|
|
24
|
+
/**
|
|
25
|
+
* @description 绑定对象的上一级目录的 id
|
|
26
|
+
* @example /abc/
|
|
27
|
+
* @column {DataTypes.BIGINT.UNSIGNED}
|
|
28
|
+
* @memberof Tree
|
|
29
|
+
*/
|
|
30
|
+
parentId: null | string;
|
|
31
|
+
/**
|
|
32
|
+
* @description 等价于文件夹和文件的路径,注意不包含 SpaceDid
|
|
33
|
+
* @example /app 或 /app/objects
|
|
34
|
+
* @type {string}
|
|
35
|
+
* @column {DataTypes.STRING(1024)}
|
|
36
|
+
* @memberof Tree
|
|
37
|
+
*/
|
|
38
|
+
key: string;
|
|
39
|
+
/**
|
|
40
|
+
* @description folder or file
|
|
41
|
+
* @type {number}
|
|
42
|
+
* @column {DataTypes.TINYINT.UNSIGNED({ length: 1 })}
|
|
43
|
+
* @memberof Tree
|
|
44
|
+
*/
|
|
45
|
+
type: number;
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* @description
|
|
49
|
+
* @default {{}}
|
|
50
|
+
* @type {TreeMeta}
|
|
51
|
+
* @column {DataTypes.JSON}
|
|
52
|
+
* @memberof Tree
|
|
53
|
+
*/
|
|
54
|
+
meta: TreeModelMeta;
|
|
55
|
+
/**
|
|
56
|
+
* @description
|
|
57
|
+
* @type {string}
|
|
58
|
+
* @column {DataTypes.DATE}
|
|
59
|
+
* @memberof Tree
|
|
60
|
+
*/
|
|
61
|
+
createdAt: Date | string;
|
|
62
|
+
/**
|
|
63
|
+
* @description
|
|
64
|
+
* @type {string}
|
|
65
|
+
* @column {DataTypes.DATE}
|
|
66
|
+
* @memberof Tree
|
|
67
|
+
*/
|
|
68
|
+
updatedAt: Date | string;
|
|
69
|
+
size?: number;
|
|
70
|
+
count?: number;
|
|
71
|
+
}
|
|
72
|
+
export interface TreeModelMeta {
|
|
73
|
+
}
|
|
74
|
+
export type CreationTreeModel = Omit<TreeModel, 'id' | 'createdAt' | 'updatedAt' | 'meta'>;
|
|
75
|
+
export declare class TreeRepositoryClass extends Model<TreeModel, CreationTreeModel> implements TreeModel {
|
|
76
|
+
id: string;
|
|
77
|
+
spaceDid: string;
|
|
78
|
+
objectId: string;
|
|
79
|
+
parentId: string;
|
|
80
|
+
key: string;
|
|
81
|
+
type: number;
|
|
82
|
+
meta: TreeModelMeta;
|
|
83
|
+
createdAt: Date;
|
|
84
|
+
updatedAt: Date;
|
|
85
|
+
size: number;
|
|
86
|
+
count: number;
|
|
87
|
+
Object: ObjectModel;
|
|
88
|
+
static deepCreate(_data: CreationTreeModel): Promise<TreeModel>;
|
|
89
|
+
[key: string]: any;
|
|
90
|
+
}
|
|
91
|
+
export type TreeRepository = typeof TreeRepositoryClass;
|
|
92
|
+
export declare enum TreeModelType {
|
|
93
|
+
FOLDER = 0,
|
|
94
|
+
FILE = 1
|
|
95
|
+
}
|
|
96
|
+
export declare const TreeModelDefaultMeta: {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SpaceConfig } from '../configuration';
|
|
2
|
+
export interface PermissionOptions {
|
|
3
|
+
fromAppDid: string;
|
|
4
|
+
toAppDid: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SpaceConfigProtocol {
|
|
7
|
+
createConfig(spaceConfig: SpaceConfig): Promise<void>;
|
|
8
|
+
destroyConfig(): Promise<void>;
|
|
9
|
+
set<T = any>(key: string, value: T): Promise<void>;
|
|
10
|
+
get<T = any>(key: string): Promise<T>;
|
|
11
|
+
setListable(options: PermissionOptions, value: boolean): Promise<void>;
|
|
12
|
+
setReadable(options: PermissionOptions, value: boolean): Promise<void>;
|
|
13
|
+
setWritable(options: PermissionOptions, value: boolean): Promise<void>;
|
|
14
|
+
isListable(options: PermissionOptions): Promise<boolean>;
|
|
15
|
+
isReadable(options: PermissionOptions): Promise<boolean>;
|
|
16
|
+
isWritable(options: PermissionOptions): Promise<boolean>;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Stream } from 'stream';
|
|
3
|
+
import { SpaceConfig } from '../configuration';
|
|
4
|
+
import { Data, Object } from '../meta';
|
|
5
|
+
import { SpaceOwnerOperatorProtocol, type ObjectMetadata } from './space-owner-operator';
|
|
6
|
+
export interface AppSpaceOptions {
|
|
7
|
+
appDid: string;
|
|
8
|
+
}
|
|
9
|
+
export interface WriteOptions extends AppSpaceOptions {
|
|
10
|
+
key: string;
|
|
11
|
+
data: Data;
|
|
12
|
+
hash?: string;
|
|
13
|
+
size?: number;
|
|
14
|
+
metadata?: ObjectMetadata;
|
|
15
|
+
}
|
|
16
|
+
export interface DeleteOptions extends AppSpaceOptions {
|
|
17
|
+
key: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ReadOptions extends AppSpaceOptions {
|
|
20
|
+
key: string;
|
|
21
|
+
}
|
|
22
|
+
export interface GetHashOptions extends AppSpaceOptions {
|
|
23
|
+
key: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ListOptions {
|
|
26
|
+
key: string;
|
|
27
|
+
useGlobal?: false | true;
|
|
28
|
+
}
|
|
29
|
+
export interface ListsOptions {
|
|
30
|
+
key: string;
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @description 递归的列出文件吗?
|
|
34
|
+
* @default false
|
|
35
|
+
* @type {boolean}
|
|
36
|
+
* @memberof ListsOptions
|
|
37
|
+
*/
|
|
38
|
+
recursive?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* @description 需要显示目录吗?默认显示
|
|
41
|
+
* @default false
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
* @memberof ListOptions
|
|
44
|
+
*/
|
|
45
|
+
ignoreDirectories?: boolean;
|
|
46
|
+
useGlobal?: false | true;
|
|
47
|
+
}
|
|
48
|
+
export interface SpaceOperatorProtocol extends SpaceOwnerOperatorProtocol {
|
|
49
|
+
createSpace(spaceConfig: SpaceConfig): Promise<void>;
|
|
50
|
+
isSpaceCreated(): Promise<boolean>;
|
|
51
|
+
destroySpace(): Promise<void>;
|
|
52
|
+
getSpaceSize(): Promise<number>;
|
|
53
|
+
createAppSpace(options: AppSpaceOptions): Promise<void>;
|
|
54
|
+
destroyAppSpace(options: AppSpaceOptions): Promise<void>;
|
|
55
|
+
getAppSpacePath(options: AppSpaceOptions): Promise<string>;
|
|
56
|
+
write(options: WriteOptions): Promise<void>;
|
|
57
|
+
delete(options: DeleteOptions): Promise<void>;
|
|
58
|
+
read(options: ReadOptions): Promise<Stream>;
|
|
59
|
+
getHash(options: GetHashOptions): Promise<string>;
|
|
60
|
+
exists(options: ReadOptions): Promise<boolean>;
|
|
61
|
+
lists(options: ListsOptions): Promise<Object[]>;
|
|
62
|
+
list(options: ListOptions): Promise<Object | null>;
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Stream } from 'stream';
|
|
3
|
+
import { Data } from '../meta';
|
|
4
|
+
export type KeyStatus = {
|
|
5
|
+
/**
|
|
6
|
+
* @description 文件夹已存储的对象个数
|
|
7
|
+
* @type {number}
|
|
8
|
+
*/
|
|
9
|
+
objects: number;
|
|
10
|
+
/**
|
|
11
|
+
* @description 文件夹的最新修改时间
|
|
12
|
+
* @type {number}
|
|
13
|
+
*/
|
|
14
|
+
lastModified: number;
|
|
15
|
+
/**
|
|
16
|
+
* @description 文件夹的总大小
|
|
17
|
+
* @type {number}
|
|
18
|
+
*/
|
|
19
|
+
size: number;
|
|
20
|
+
};
|
|
21
|
+
export type ObjectMetadata = Record<string, any>;
|
|
22
|
+
export type WriteAsOwnerOptions = {
|
|
23
|
+
hash: string | null;
|
|
24
|
+
size: number;
|
|
25
|
+
useGlobal?: false | true;
|
|
26
|
+
metadata?: ObjectMetadata;
|
|
27
|
+
};
|
|
28
|
+
export type ReadAsOwnerOptions = {
|
|
29
|
+
useGlobal?: false | true;
|
|
30
|
+
};
|
|
31
|
+
export type DeleteAsOwnerOptions = {
|
|
32
|
+
useGlobal?: false | true;
|
|
33
|
+
};
|
|
34
|
+
export type ExistsAsOwnerOptions = {
|
|
35
|
+
useGlobal?: false | true;
|
|
36
|
+
};
|
|
37
|
+
export interface SpaceOwnerOperatorProtocol {
|
|
38
|
+
writeAsOwner(key: string, data: Data, options?: WriteAsOwnerOptions): Promise<void>;
|
|
39
|
+
deleteAsOwner(key: string, options?: DeleteAsOwnerOptions): Promise<void>;
|
|
40
|
+
readAsOwner(key: string, options?: ReadAsOwnerOptions): Promise<Stream>;
|
|
41
|
+
existsAsOwner(key: string, options?: ExistsAsOwnerOptions): Promise<boolean>;
|
|
42
|
+
getStatusAsOwner(key: string): Promise<KeyStatus>;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type EventEmitter from 'events';
|
|
3
|
+
import { BaseSpaceProtocol } from './base-space';
|
|
4
|
+
import { DriverProtocol } from './driver';
|
|
5
|
+
export interface SpaceProtocol extends BaseSpaceProtocol, EventEmitter {
|
|
6
|
+
readonly driver: DriverProtocol;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Joi } from '@arcblock/validator';
|
|
2
|
+
import { isCidV1 } from '../utils';
|
|
3
|
+
export const GlobalSpaceOptionsSchema = Joi.object({
|
|
4
|
+
driver: Joi.any().required(),
|
|
5
|
+
treeRepository: Joi.any().required(),
|
|
6
|
+
objectRepository: Joi.any().required(),
|
|
7
|
+
objectCollectionRepository: Joi.any().required(),
|
|
8
|
+
gcMaxCount: Joi.number().integer().optional().default(100),
|
|
9
|
+
gcMaxConcurrency: Joi.number().integer().optional().default(8),
|
|
10
|
+
});
|
|
11
|
+
export const HashSchema = Joi.string()
|
|
12
|
+
.custom((value, helper) => {
|
|
13
|
+
// @NOTE: 不是一个 ipfs cid,且不是一个 sha256 hash,才会报错
|
|
14
|
+
if (!isCidV1(value) && value.length !== 64) {
|
|
15
|
+
return helper.error(`Invalid hash(${value})`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
})
|
|
19
|
+
.required();
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const OwnerOperatorKeySchema: import("joi").StringSchema<string>;
|
|
2
|
+
export declare const WriteAsOwnerOptionsSchema: import("joi").ObjectSchema<any>;
|
|
3
|
+
export declare const ObjectSpaceOptionsSchema: import("joi").ObjectSchema<any>;
|
|
4
|
+
export declare const DeleteAsOwnerOptionsSchema: import("joi").ObjectSchema<any>;
|
|
5
|
+
export declare const WriteOptionsSchema: import("joi").ObjectSchema<any>;
|
|
6
|
+
export declare const GetHashOptionsSchema: import("joi").ObjectSchema<any>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Joi } from '@arcblock/validator';
|
|
2
|
+
import { GLOBAL_SPACE_ROOT } from '../constants';
|
|
3
|
+
export const OwnerOperatorKeySchema = Joi.string().regex(/^\//).required();
|
|
4
|
+
const WriteAsOwnerOptionsByFolderSchema = {
|
|
5
|
+
is: Joi.string().regex(/\/$/),
|
|
6
|
+
then: Joi.optional().default(''),
|
|
7
|
+
otherwise: Joi.required(),
|
|
8
|
+
};
|
|
9
|
+
const MetadataSchema = {
|
|
10
|
+
is: Joi.object(),
|
|
11
|
+
then: Joi.optional().default(''),
|
|
12
|
+
otherwise: Joi.required(),
|
|
13
|
+
};
|
|
14
|
+
export const WriteAsOwnerOptionsSchema = Joi.object({
|
|
15
|
+
key: OwnerOperatorKeySchema,
|
|
16
|
+
data: Joi.any().when('key', WriteAsOwnerOptionsByFolderSchema).when('metadata', MetadataSchema),
|
|
17
|
+
// @FIXME: 当 key 是文件夹 或者 data 不是一个 stream 的时候,hash, size 是可选的,现在的规则尝试之后没能做到这么精细化(使用 when 无法满足要求) @jianchao
|
|
18
|
+
hash: Joi.string().optional().allow(null).default(null),
|
|
19
|
+
size: Joi.number().integer().optional().allow(null).default(null),
|
|
20
|
+
useGlobal: Joi.boolean().optional().default(false),
|
|
21
|
+
metadata: Joi.object().optional().default({}),
|
|
22
|
+
});
|
|
23
|
+
export const ObjectSpaceOptionsSchema = Joi.object({
|
|
24
|
+
driver: Joi.any().required(),
|
|
25
|
+
spaceDid: Joi.alternatives().try(Joi.DID(), Joi.string().valid(GLOBAL_SPACE_ROOT)).required(),
|
|
26
|
+
treeRepository: Joi.any().required(),
|
|
27
|
+
objectRepository: Joi.any().required(),
|
|
28
|
+
objectCollectionRepository: Joi.any().required(),
|
|
29
|
+
});
|
|
30
|
+
export const DeleteAsOwnerOptionsSchema = Joi.object({
|
|
31
|
+
key: OwnerOperatorKeySchema,
|
|
32
|
+
});
|
|
33
|
+
export const WriteOptionsSchema = Joi.object({
|
|
34
|
+
appDid: Joi.DID().required(),
|
|
35
|
+
key: Joi.string().required(),
|
|
36
|
+
data: Joi.any().when('key', WriteAsOwnerOptionsByFolderSchema).when('metadata', MetadataSchema),
|
|
37
|
+
hash: Joi.string().optional().allow(null).default(null),
|
|
38
|
+
size: Joi.number().integer().optional().allow(null).default(null),
|
|
39
|
+
metadata: Joi.object().optional().default({}),
|
|
40
|
+
});
|
|
41
|
+
export const GetHashOptionsSchema = Joi.object({
|
|
42
|
+
appDid: Joi.DID().required(),
|
|
43
|
+
key: Joi.string().required(),
|
|
44
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import xbytes from 'xbytes';
|
|
2
|
+
import { Joi } from '@arcblock/validator';
|
|
3
|
+
/**
|
|
4
|
+
* @see {SpaceConfig}
|
|
5
|
+
*/
|
|
6
|
+
export const SpaceConfigSchema = Joi.object({
|
|
7
|
+
did: Joi.DID(),
|
|
8
|
+
// 标识这个驱动是什么,默认取值为 fs, 表示文件存储到了本地的文件系统
|
|
9
|
+
drive: Joi.string().valid('fs', 's3').optional().allow('').default('fs'),
|
|
10
|
+
// type: 'buy | 'default'
|
|
11
|
+
type: Joi.string().optional().allow('buy', 'default').default('buy'),
|
|
12
|
+
name: Joi.string().required(),
|
|
13
|
+
// @see: https://github.com/sideway/joi/blob/master/API.md#string
|
|
14
|
+
description: Joi.string().required().allow('').default(''),
|
|
15
|
+
// 字节数,默认给个1GiB, size 为 0 表示空间无限制
|
|
16
|
+
size: Joi.number().required().default(xbytes.parseSize('1GiB')),
|
|
17
|
+
assetDid: Joi.DID(),
|
|
18
|
+
createAt: Joi.string().required(),
|
|
19
|
+
updateAt: Joi.string().required(),
|
|
20
|
+
expireAt: Joi.string().required(),
|
|
21
|
+
ownerDid: Joi.DID(),
|
|
22
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SpaceOptionsSchema: import("joi").ObjectSchema<any>;
|