agl 1.0.17 → 21.0.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/.smartconfig.json +55 -0
- package/changelog.md +1026 -0
- package/cli.js +14 -0
- package/dist_serve/bundle.js +44778 -0
- package/dist_serve/index.html +13 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.authmodels.d.ts +126 -0
- package/dist_ts/classes.authmodels.js +1422 -0
- package/dist_ts/classes.authstore.d.ts +160 -0
- package/dist_ts/classes.authstore.js +2483 -0
- package/dist_ts/classes.browserresourcehost.d.ts +85 -0
- package/dist_ts/classes.browserresourcehost.js +912 -0
- package/dist_ts/classes.cli.d.ts +21 -0
- package/dist_ts/classes.cli.js +1082 -0
- package/dist_ts/classes.config.d.ts +23 -0
- package/dist_ts/classes.config.js +267 -0
- package/dist_ts/classes.controller.d.ts +523 -0
- package/dist_ts/classes.controller.js +10611 -0
- package/dist_ts/classes.controllermanagement.d.ts +32 -0
- package/dist_ts/classes.controllermanagement.js +222 -0
- package/dist_ts/classes.draftmanager.d.ts +30 -0
- package/dist_ts/classes.draftmanager.js +179 -0
- package/dist_ts/classes.embeddeddb.d.ts +30 -0
- package/dist_ts/classes.embeddeddb.js +159 -0
- package/dist_ts/classes.flexframedtransport.d.ts +56 -0
- package/dist_ts/classes.flexframedtransport.js +275 -0
- package/dist_ts/classes.flexmodels.private.d.ts +231 -0
- package/dist_ts/classes.flexmodels.private.js +985 -0
- package/dist_ts/classes.flexmodels.public.d.ts +207 -0
- package/dist_ts/classes.flexmodels.public.js +885 -0
- package/dist_ts/classes.flexprojectionreader.d.ts +89 -0
- package/dist_ts/classes.flexprojectionreader.js +580 -0
- package/dist_ts/classes.flexservice.d.ts +196 -0
- package/dist_ts/classes.flexservice.js +3704 -0
- package/dist_ts/classes.flexstore.d.ts +174 -0
- package/dist_ts/classes.flexstore.js +3400 -0
- package/dist_ts/classes.flexsupervisor.d.ts +105 -0
- package/dist_ts/classes.flexsupervisor.js +1191 -0
- package/dist_ts/classes.gitreversion.d.ts +431 -0
- package/dist_ts/classes.gitreversion.js +10592 -0
- package/dist_ts/classes.harnessoperationmanager.d.ts +113 -0
- package/dist_ts/classes.harnessoperationmanager.js +602 -0
- package/dist_ts/classes.opencodeclient.d.ts +146 -0
- package/dist_ts/classes.opencodeclient.js +3003 -0
- package/dist_ts/classes.opencodesupervisor.d.ts +60 -0
- package/dist_ts/classes.opencodesupervisor.js +1003 -0
- package/dist_ts/classes.passkeymanager.d.ts +34 -0
- package/dist_ts/classes.passkeymanager.js +456 -0
- package/dist_ts/classes.processinspection.d.ts +50 -0
- package/dist_ts/classes.processinspection.js +484 -0
- package/dist_ts/classes.resourcecoordinator.d.ts +64 -0
- package/dist_ts/classes.resourcecoordinator.js +294 -0
- package/dist_ts/classes.sessionintelligencereader.d.ts +13 -0
- package/dist_ts/classes.sessionintelligencereader.js +40 -0
- package/dist_ts/classes.systemmetricssampler.d.ts +53 -0
- package/dist_ts/classes.systemmetricssampler.js +168 -0
- package/dist_ts/classes.terminalmanager.d.ts +95 -0
- package/dist_ts/classes.terminalmanager.js +981 -0
- package/dist_ts/classes.terminalresourcehost.d.ts +20 -0
- package/dist_ts/classes.terminalresourcehost.js +84 -0
- package/dist_ts/classes.upgradecoordinator.d.ts +244 -0
- package/dist_ts/classes.upgradecoordinator.js +2155 -0
- package/dist_ts/classes.upgradetransaction.d.ts +92 -0
- package/dist_ts/classes.upgradetransaction.js +2125 -0
- package/dist_ts/classes.uploadmanager.d.ts +24 -0
- package/dist_ts/classes.uploadmanager.js +210 -0
- package/dist_ts/classes.validation.d.ts +91 -0
- package/dist_ts/classes.validation.js +1087 -0
- package/dist_ts/flexharness.child.d.ts +1 -0
- package/dist_ts/flexharness.child.js +28 -0
- package/dist_ts/functions.canonicaldirectory.d.ts +21 -0
- package/dist_ts/functions.canonicaldirectory.js +144 -0
- package/dist_ts/functions.controllerdataroot.d.ts +15 -0
- package/dist_ts/functions.controllerdataroot.js +76 -0
- package/dist_ts/functions.embeddeddb.d.ts +2 -0
- package/dist_ts/functions.embeddeddb.js +21 -0
- package/dist_ts/functions.flexcredentialstore.d.ts +16 -0
- package/dist_ts/functions.flexcredentialstore.js +93 -0
- package/dist_ts/functions.opencodeauth.d.ts +3 -0
- package/dist_ts/functions.opencodeauth.js +31 -0
- package/dist_ts/functions.runtimeenvironment.d.ts +2 -0
- package/dist_ts/functions.runtimeenvironment.js +79 -0
- package/dist_ts/functions.upgradefollower.d.ts +3 -0
- package/dist_ts/functions.upgradefollower.js +95 -0
- package/dist_ts/index.d.ts +24 -0
- package/dist_ts/index.js +25 -0
- package/dist_ts/interfaces.auth.d.ts +181 -0
- package/dist_ts/interfaces.auth.js +82 -0
- package/dist_ts/interfaces.config.d.ts +34 -0
- package/dist_ts/interfaces.config.js +2 -0
- package/dist_ts/interfaces.flexipc.d.ts +939 -0
- package/dist_ts/interfaces.flexipc.js +1492 -0
- package/dist_ts/interfaces.gitreversion.d.ts +246 -0
- package/dist_ts/interfaces.gitreversion.js +2 -0
- package/dist_ts/interfaces.lifecycle.d.ts +37 -0
- package/dist_ts/interfaces.lifecycle.js +2 -0
- package/dist_ts/interfaces.opencode.d.ts +101 -0
- package/dist_ts/interfaces.opencode.js +3 -0
- package/dist_ts/interfaces.projects.d.ts +156 -0
- package/dist_ts/interfaces.projects.js +5 -0
- package/dist_ts/plugins.d.ts +36 -0
- package/dist_ts/plugins.js +40 -0
- package/dist_ts_interfaces/index.d.ts +2 -0
- package/dist_ts_interfaces/index.js +3 -0
- package/dist_ts_interfaces/interfaces.d.ts +747 -0
- package/dist_ts_interfaces/interfaces.js +47 -0
- package/dist_ts_interfaces/plugins.d.ts +4 -0
- package/dist_ts_interfaces/plugins.js +3 -0
- package/dist_ts_interfaces/requests.d.ts +806 -0
- package/dist_ts_interfaces/requests.js +2 -0
- package/dist_ts_migration/classes.documentmigrationrunner.d.ts +8 -0
- package/dist_ts_migration/classes.documentmigrationrunner.js +24 -0
- package/dist_ts_migration/classes.flexmigrationrunner.d.ts +11 -0
- package/dist_ts_migration/classes.flexmigrationrunner.js +25 -0
- package/dist_ts_migration/classes.flexpostharnessmigrationrunner.d.ts +10 -0
- package/dist_ts_migration/classes.flexpostharnessmigrationrunner.js +15 -0
- package/dist_ts_migration/classes.migrationrunner.d.ts +8 -0
- package/dist_ts_migration/classes.migrationrunner.js +34 -0
- package/dist_ts_migration/index.d.ts +12 -0
- package/dist_ts_migration/index.js +13 -0
- package/dist_ts_migration/v10_flexharnessv3migration.d.ts +11 -0
- package/dist_ts_migration/v10_flexharnessv3migration.js +23 -0
- package/dist_ts_migration/v13_flexprojectionorder.d.ts +11 -0
- package/dist_ts_migration/v13_flexprojectionorder.js +23 -0
- package/dist_ts_migration/v16_flexprovidercredentials.d.ts +22 -0
- package/dist_ts_migration/v16_flexprovidercredentials.js +149 -0
- package/dist_ts_migration/v18_resourcelayout.d.ts +22 -0
- package/dist_ts_migration/v18_resourcelayout.js +23 -0
- package/dist_ts_migration/v18_resourcelayoutmigration.d.ts +6 -0
- package/dist_ts_migration/v18_resourcelayoutmigration.js +61 -0
- package/dist_ts_migration/v19_flexprojectmanagement.d.ts +11 -0
- package/dist_ts_migration/v19_flexprojectmanagement.js +21 -0
- package/dist_ts_migration/v1_embeddeddatabaselocation.d.ts +28 -0
- package/dist_ts_migration/v1_embeddeddatabaselocation.js +415 -0
- package/dist_ts_migration/v22_projectfilesystemidentitymigration.d.ts +7 -0
- package/dist_ts_migration/v22_projectfilesystemidentitymigration.js +105 -0
- package/dist_ts_migration/v2_controllerdataroot.d.ts +130 -0
- package/dist_ts_migration/v2_controllerdataroot.js +1887 -0
- package/dist_ts_migration/v6_protocoldocumentmigration.d.ts +7 -0
- package/dist_ts_migration/v6_protocoldocumentmigration.js +100 -0
- package/dist_ts_migration/v6_protocoldocuments.d.ts +7 -0
- package/dist_ts_migration/v6_protocoldocuments.js +138 -0
- package/html/index.html +13 -0
- package/{LICENSE → license.md} +2 -2
- package/package.json +86 -48
- package/readme.md +480 -0
- package/readme.plan.md +188 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.authmodels.ts +1245 -0
- package/ts/classes.authstore.ts +3274 -0
- package/ts/classes.browserresourcehost.ts +1205 -0
- package/ts/classes.cli.ts +1254 -0
- package/ts/classes.config.ts +351 -0
- package/ts/classes.controller.ts +14426 -0
- package/ts/classes.controllermanagement.ts +330 -0
- package/ts/classes.draftmanager.ts +232 -0
- package/ts/classes.embeddeddb.ts +166 -0
- package/ts/classes.flexframedtransport.ts +283 -0
- package/ts/classes.flexmodels.private.ts +823 -0
- package/ts/classes.flexmodels.public.ts +732 -0
- package/ts/classes.flexprojectionreader.ts +816 -0
- package/ts/classes.flexservice.ts +4302 -0
- package/ts/classes.flexstore.ts +4565 -0
- package/ts/classes.flexsupervisor.ts +1453 -0
- package/ts/classes.gitreversion.ts +13353 -0
- package/ts/classes.harnessoperationmanager.ts +870 -0
- package/ts/classes.opencodeclient.ts +4110 -0
- package/ts/classes.opencodesupervisor.ts +1280 -0
- package/ts/classes.passkeymanager.ts +570 -0
- package/ts/classes.processinspection.ts +623 -0
- package/ts/classes.resourcecoordinator.ts +436 -0
- package/ts/classes.sessionintelligencereader.ts +52 -0
- package/ts/classes.systemmetricssampler.ts +215 -0
- package/ts/classes.terminalmanager.ts +1207 -0
- package/ts/classes.terminalresourcehost.ts +122 -0
- package/ts/classes.upgradecoordinator.ts +2675 -0
- package/ts/classes.upgradetransaction.ts +2900 -0
- package/ts/classes.uploadmanager.ts +240 -0
- package/ts/classes.validation.ts +1409 -0
- package/ts/flexharness.child.ts +35 -0
- package/ts/functions.canonicaldirectory.ts +213 -0
- package/ts/functions.controllerdataroot.ts +107 -0
- package/ts/functions.embeddeddb.ts +22 -0
- package/ts/functions.flexcredentialstore.ts +128 -0
- package/ts/functions.opencodeauth.ts +34 -0
- package/ts/functions.runtimeenvironment.ts +90 -0
- package/ts/functions.upgradefollower.ts +115 -0
- package/ts/index.ts +36 -6
- package/ts/interfaces.auth.ts +316 -0
- package/ts/interfaces.config.ts +37 -0
- package/ts/interfaces.flexipc.ts +2586 -0
- package/ts/interfaces.gitreversion.ts +336 -0
- package/ts/interfaces.lifecycle.ts +46 -0
- package/ts/interfaces.opencode.ts +153 -0
- package/ts/interfaces.projects.ts +182 -0
- package/ts/plugins.ts +64 -0
- package/ts_interfaces/index.ts +2 -0
- package/ts_interfaces/interfaces.ts +827 -0
- package/ts_interfaces/plugins.ts +15 -0
- package/ts_interfaces/requests.ts +1186 -0
- package/ts_migration/classes.documentmigrationrunner.ts +32 -0
- package/ts_migration/classes.flexmigrationrunner.ts +33 -0
- package/ts_migration/classes.flexpostharnessmigrationrunner.ts +22 -0
- package/ts_migration/classes.migrationrunner.ts +40 -0
- package/ts_migration/index.ts +12 -0
- package/ts_migration/v10_flexharnessv3migration.ts +35 -0
- package/ts_migration/v13_flexprojectionorder.ts +33 -0
- package/ts_migration/v16_flexprovidercredentials.ts +196 -0
- package/ts_migration/v18_resourcelayout.ts +55 -0
- package/ts_migration/v18_resourcelayoutmigration.ts +68 -0
- package/ts_migration/v19_flexprojectmanagement.ts +28 -0
- package/ts_migration/v1_embeddeddatabaselocation.ts +560 -0
- package/ts_migration/v22_projectfilesystemidentitymigration.ts +121 -0
- package/ts_migration/v2_controllerdataroot.ts +2349 -0
- package/ts_migration/v6_protocoldocumentmigration.ts +144 -0
- package/ts_migration/v6_protocoldocuments.ts +198 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/classes.controllersocketclient.ts +517 -0
- package/ts_web/classes.sessiondraftsync.ts +390 -0
- package/ts_web/elements.harnesscontrollerapp.ts +11494 -0
- package/ts_web/index.ts +2 -0
- package/ts_web/plugins.ts +31 -0
- package/.gitlab-ci.yml +0 -71
- package/.npmignore +0 -5
- package/README.md +0 -40
- package/dist/cli.js +0 -2
- package/dist/index.d.ts +0 -0
- package/dist/index.js +0 -9
- package/dist/mod_bundle/index.d.ts +0 -1
- package/dist/mod_bundle/index.js +0 -18
- package/dist/mod_bundle/mod.plugins.d.ts +0 -4
- package/dist/mod_bundle/mod.plugins.js +0 -11
- package/dist/mod_install/index.d.ts +0 -4
- package/dist/mod_install/index.js +0 -21
- package/dist/mod_install/mod.plugins.d.ts +0 -1
- package/dist/mod_install/mod.plugins.js +0 -7
- package/dist/mod_standard/index.d.ts +0 -4
- package/dist/mod_standard/index.js +0 -21
- package/dist/mod_standard/mod.browser.d.ts +0 -6
- package/dist/mod_standard/mod.browser.js +0 -14
- package/dist/mod_standard/mod.clean.d.ts +0 -4
- package/dist/mod_standard/mod.clean.js +0 -12
- package/dist/mod_standard/mod.compile.d.ts +0 -4
- package/dist/mod_standard/mod.compile.js +0 -21
- package/dist/mod_standard/mod.plugins.d.ts +0 -8
- package/dist/mod_standard/mod.plugins.js +0 -19
- package/dist/mod_standard/mod.test.d.ts +0 -4
- package/dist/mod_standard/mod.test.js +0 -12
- package/dist/plr.cli.d.ts +0 -3
- package/dist/plr.cli.js +0 -57
- package/dist/plr.config.d.ts +0 -11
- package/dist/plr.config.js +0 -26
- package/dist/plr.mods.d.ts +0 -17
- package/dist/plr.mods.js +0 -17
- package/dist/plr.paths.d.ts +0 -19
- package/dist/plr.paths.js +0 -26
- package/dist/plr.plugins.d.ts +0 -8
- package/dist/plr.plugins.js +0 -16
- package/npmextra.json +0 -10
- package/ts/mod_bundle/index.ts +0 -20
- package/ts/mod_bundle/mod.plugins.ts +0 -9
- package/ts/mod_install/index.ts +0 -20
- package/ts/mod_install/mod.plugins.ts +0 -1
- package/ts/mod_standard/index.ts +0 -23
- package/ts/mod_standard/mod.browser.ts +0 -17
- package/ts/mod_standard/mod.clean.ts +0 -13
- package/ts/mod_standard/mod.compile.ts +0 -23
- package/ts/mod_standard/mod.plugins.ts +0 -17
- package/ts/mod_standard/mod.test.ts +0 -13
- package/ts/plr.cli.ts +0 -60
- package/ts/plr.config.ts +0 -36
- package/ts/plr.mods.ts +0 -25
- package/ts/plr.paths.ts +0 -29
- package/ts/plr.plugins.ts +0 -17
- package/tslint.json +0 -3
- package/yarn.lock +0 -3464
|
@@ -0,0 +1,732 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import {
|
|
3
|
+
hasFlexExactKeys,
|
|
4
|
+
isFlexPlainObject,
|
|
5
|
+
isFlexPublicMessage,
|
|
6
|
+
isFlexPublicSession,
|
|
7
|
+
} from './interfaces.flexipc.js';
|
|
8
|
+
|
|
9
|
+
type TFlexMessage = plugins.flexharness.IFlexMessage;
|
|
10
|
+
type TFlexSession = plugins.flexharness.IFlexSession;
|
|
11
|
+
|
|
12
|
+
export const flexPublicSessionLimit = 2048;
|
|
13
|
+
export const flexPublicMessageLimit = 2048;
|
|
14
|
+
export const flexPublicMessageBytesLimit = 64 * 1024 * 1024;
|
|
15
|
+
export const flexPublicSingleMessageBytesLimit = 480 * 1024;
|
|
16
|
+
export const flexPublicPageBytesLimit = 512 * 1024;
|
|
17
|
+
export const flexPublicPageLimit = 50;
|
|
18
|
+
|
|
19
|
+
export interface IFlexRecordManifest {
|
|
20
|
+
id: string;
|
|
21
|
+
sha256: string;
|
|
22
|
+
bytes: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface IFlexPublicSourceRevision {
|
|
26
|
+
incarnationId: string;
|
|
27
|
+
revision: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface IFlexPublicProjectionSource extends IFlexPublicSourceRevision {
|
|
31
|
+
sessionId: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface IFlexPublicCandidateManifest {
|
|
35
|
+
candidateId: string;
|
|
36
|
+
revision: number;
|
|
37
|
+
sha256: string;
|
|
38
|
+
bytes: number;
|
|
39
|
+
sessionRecords: IFlexRecordManifest[];
|
|
40
|
+
messageRecords: IFlexRecordManifest[];
|
|
41
|
+
sessionsTruncated: boolean;
|
|
42
|
+
messagesTruncated: boolean;
|
|
43
|
+
messageBytesTruncated: boolean;
|
|
44
|
+
visibleDigest: string;
|
|
45
|
+
scopeSource: IFlexPublicSourceRevision;
|
|
46
|
+
projectionSources: IFlexPublicProjectionSource[];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface IFlexPublicCandidateDocument extends IFlexPublicCandidateManifest {
|
|
50
|
+
id: string;
|
|
51
|
+
controllerId: string;
|
|
52
|
+
scopeId: string;
|
|
53
|
+
createdAt: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface IFlexPublicHeadDocument {
|
|
57
|
+
id: string;
|
|
58
|
+
controllerId: string;
|
|
59
|
+
storageKey: string;
|
|
60
|
+
revision: number;
|
|
61
|
+
currentPublicCandidateId: string;
|
|
62
|
+
publicCandidates: IFlexPublicCandidateManifest[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface IFlexPublicSessionRecordDocument {
|
|
66
|
+
id: string;
|
|
67
|
+
controllerId: string;
|
|
68
|
+
scopeId: string;
|
|
69
|
+
candidateId: string;
|
|
70
|
+
revision: number;
|
|
71
|
+
session: TFlexSession;
|
|
72
|
+
createdAt: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface IFlexPublicMessageRecordDocument {
|
|
76
|
+
id: string;
|
|
77
|
+
controllerId: string;
|
|
78
|
+
scopeId: string;
|
|
79
|
+
candidateId: string;
|
|
80
|
+
revision: number;
|
|
81
|
+
messageIndex: number;
|
|
82
|
+
message: TFlexMessage;
|
|
83
|
+
createdAt: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface IFlexProjectionMessageDescriptor {
|
|
87
|
+
id: string;
|
|
88
|
+
index: number;
|
|
89
|
+
/** Absent only on projection sources created before source-order repair. */
|
|
90
|
+
messageIndex?: number;
|
|
91
|
+
sha256: string;
|
|
92
|
+
bytes: number;
|
|
93
|
+
messageCreatedAt: string;
|
|
94
|
+
sessionId: string;
|
|
95
|
+
messageId: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface IFlexProjectionSourceManifest {
|
|
99
|
+
candidateId: string;
|
|
100
|
+
/** Absent only on persisted source chains created before source-order repair. */
|
|
101
|
+
orderVersion?: 1;
|
|
102
|
+
sha256: string;
|
|
103
|
+
bytes: number;
|
|
104
|
+
messageCount: number;
|
|
105
|
+
messagesTruncated: boolean;
|
|
106
|
+
visibleDigest: string;
|
|
107
|
+
latestMessage?: IFlexProjectionMessageDescriptor;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface IFlexProjectionSourceDocument extends IFlexProjectionSourceManifest {
|
|
111
|
+
id: string;
|
|
112
|
+
controllerId: string;
|
|
113
|
+
scopeId: string;
|
|
114
|
+
sessionId: string;
|
|
115
|
+
incarnationId: string;
|
|
116
|
+
revision: number;
|
|
117
|
+
createdAt: string;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface IFlexProjectionMessageRecordDocument extends IFlexProjectionMessageDescriptor {
|
|
121
|
+
controllerId: string;
|
|
122
|
+
scopeId: string;
|
|
123
|
+
candidateId: string;
|
|
124
|
+
incarnationId: string;
|
|
125
|
+
revision: number;
|
|
126
|
+
message: TFlexMessage;
|
|
127
|
+
previous?: IFlexProjectionMessageDescriptor;
|
|
128
|
+
createdAt: string;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const digestPattern = /^[a-f0-9]{64}$/u;
|
|
132
|
+
const candidateIdPattern = /^[A-Za-z0-9_-]{22}$/u;
|
|
133
|
+
|
|
134
|
+
const isBoundedString = (valueArg: unknown, maximumBytesArg: number): valueArg is string =>
|
|
135
|
+
typeof valueArg === 'string'
|
|
136
|
+
&& valueArg.length > 0
|
|
137
|
+
&& Buffer.byteLength(valueArg, 'utf8') <= maximumBytesArg;
|
|
138
|
+
|
|
139
|
+
const isNonNegativeInteger = (valueArg: unknown): valueArg is number =>
|
|
140
|
+
Number.isSafeInteger(valueArg) && (valueArg as number) >= 0;
|
|
141
|
+
|
|
142
|
+
const isIsoDate = (valueArg: unknown): valueArg is string =>
|
|
143
|
+
typeof valueArg === 'string'
|
|
144
|
+
&& Number.isFinite(Date.parse(valueArg))
|
|
145
|
+
&& new Date(valueArg).toISOString() === valueArg;
|
|
146
|
+
|
|
147
|
+
export const isFlexProjectionMessageDescriptor = (
|
|
148
|
+
valueArg: unknown,
|
|
149
|
+
): valueArg is IFlexProjectionMessageDescriptor => isFlexPlainObject(valueArg)
|
|
150
|
+
&& hasFlexExactKeys(valueArg, [
|
|
151
|
+
'id', 'index', 'sha256', 'bytes', 'messageCreatedAt', 'sessionId', 'messageId',
|
|
152
|
+
], ['messageIndex'])
|
|
153
|
+
&& isBoundedString(valueArg.id, 1024)
|
|
154
|
+
&& isNonNegativeInteger(valueArg.index)
|
|
155
|
+
&& (valueArg.messageIndex === undefined || isNonNegativeInteger(valueArg.messageIndex))
|
|
156
|
+
&& typeof valueArg.sha256 === 'string'
|
|
157
|
+
&& digestPattern.test(valueArg.sha256)
|
|
158
|
+
&& isNonNegativeInteger(valueArg.bytes)
|
|
159
|
+
&& valueArg.bytes <= flexPublicSingleMessageBytesLimit + 4096
|
|
160
|
+
&& isIsoDate(valueArg.messageCreatedAt)
|
|
161
|
+
&& isBoundedString(valueArg.sessionId, 512)
|
|
162
|
+
&& isBoundedString(valueArg.messageId, 512);
|
|
163
|
+
|
|
164
|
+
export const isFlexProjectionSourceManifest = (
|
|
165
|
+
valueArg: unknown,
|
|
166
|
+
): valueArg is IFlexProjectionSourceManifest => isFlexPlainObject(valueArg)
|
|
167
|
+
&& hasFlexExactKeys(valueArg, [
|
|
168
|
+
'candidateId', 'sha256', 'bytes', 'messageCount', 'messagesTruncated', 'visibleDigest',
|
|
169
|
+
], ['latestMessage', 'orderVersion'])
|
|
170
|
+
&& typeof valueArg.candidateId === 'string'
|
|
171
|
+
&& candidateIdPattern.test(valueArg.candidateId)
|
|
172
|
+
&& (valueArg.orderVersion === undefined || valueArg.orderVersion === 1)
|
|
173
|
+
&& typeof valueArg.sha256 === 'string'
|
|
174
|
+
&& digestPattern.test(valueArg.sha256)
|
|
175
|
+
&& isNonNegativeInteger(valueArg.bytes)
|
|
176
|
+
&& valueArg.bytes <= 4096
|
|
177
|
+
&& isNonNegativeInteger(valueArg.messageCount)
|
|
178
|
+
&& typeof valueArg.messagesTruncated === 'boolean'
|
|
179
|
+
&& typeof valueArg.visibleDigest === 'string'
|
|
180
|
+
&& digestPattern.test(valueArg.visibleDigest)
|
|
181
|
+
&& (valueArg.latestMessage === undefined
|
|
182
|
+
? valueArg.messageCount === 0
|
|
183
|
+
: isFlexProjectionMessageDescriptor(valueArg.latestMessage)
|
|
184
|
+
&& valueArg.messageCount === valueArg.latestMessage.index + 1)
|
|
185
|
+
&& (
|
|
186
|
+
valueArg.orderVersion !== 1
|
|
187
|
+
|| valueArg.latestMessage === undefined
|
|
188
|
+
|| (
|
|
189
|
+
isFlexProjectionMessageDescriptor(valueArg.latestMessage)
|
|
190
|
+
&& valueArg.latestMessage.messageIndex !== undefined
|
|
191
|
+
)
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
export const isFlexRecordManifest = (valueArg: unknown): valueArg is IFlexRecordManifest =>
|
|
195
|
+
isFlexPlainObject(valueArg)
|
|
196
|
+
&& hasFlexExactKeys(valueArg, ['id', 'sha256', 'bytes'])
|
|
197
|
+
&& isBoundedString(valueArg.id, 1024)
|
|
198
|
+
&& typeof valueArg.sha256 === 'string'
|
|
199
|
+
&& digestPattern.test(valueArg.sha256)
|
|
200
|
+
&& isNonNegativeInteger(valueArg.bytes);
|
|
201
|
+
|
|
202
|
+
const isFlexPublicSourceRevision = (valueArg: unknown): valueArg is IFlexPublicSourceRevision =>
|
|
203
|
+
isFlexPlainObject(valueArg)
|
|
204
|
+
&& hasFlexExactKeys(valueArg, ['incarnationId', 'revision'])
|
|
205
|
+
&& typeof valueArg.incarnationId === 'string'
|
|
206
|
+
&& candidateIdPattern.test(valueArg.incarnationId)
|
|
207
|
+
&& isNonNegativeInteger(valueArg.revision)
|
|
208
|
+
&& valueArg.revision >= 1;
|
|
209
|
+
|
|
210
|
+
const isFlexPublicProjectionSource = (
|
|
211
|
+
valueArg: unknown,
|
|
212
|
+
): valueArg is IFlexPublicProjectionSource => isFlexPlainObject(valueArg)
|
|
213
|
+
&& hasFlexExactKeys(valueArg, ['sessionId', 'incarnationId', 'revision'])
|
|
214
|
+
&& isBoundedString(valueArg.sessionId, 512)
|
|
215
|
+
&& typeof valueArg.incarnationId === 'string'
|
|
216
|
+
&& candidateIdPattern.test(valueArg.incarnationId)
|
|
217
|
+
&& isNonNegativeInteger(valueArg.revision)
|
|
218
|
+
&& valueArg.revision >= 1;
|
|
219
|
+
|
|
220
|
+
export const isFlexPublicCandidateManifest = (
|
|
221
|
+
valueArg: unknown,
|
|
222
|
+
): valueArg is IFlexPublicCandidateManifest => isFlexPlainObject(valueArg)
|
|
223
|
+
&& hasFlexExactKeys(valueArg, [
|
|
224
|
+
'candidateId',
|
|
225
|
+
'revision',
|
|
226
|
+
'sha256',
|
|
227
|
+
'bytes',
|
|
228
|
+
'sessionRecords',
|
|
229
|
+
'messageRecords',
|
|
230
|
+
'sessionsTruncated',
|
|
231
|
+
'messagesTruncated',
|
|
232
|
+
'messageBytesTruncated',
|
|
233
|
+
'visibleDigest',
|
|
234
|
+
'scopeSource',
|
|
235
|
+
'projectionSources',
|
|
236
|
+
])
|
|
237
|
+
&& typeof valueArg.candidateId === 'string'
|
|
238
|
+
&& candidateIdPattern.test(valueArg.candidateId)
|
|
239
|
+
&& isNonNegativeInteger(valueArg.revision)
|
|
240
|
+
&& typeof valueArg.sha256 === 'string'
|
|
241
|
+
&& digestPattern.test(valueArg.sha256)
|
|
242
|
+
&& isNonNegativeInteger(valueArg.bytes)
|
|
243
|
+
&& Array.isArray(valueArg.sessionRecords)
|
|
244
|
+
&& valueArg.sessionRecords.length <= flexPublicSessionLimit
|
|
245
|
+
&& valueArg.sessionRecords.every(isFlexRecordManifest)
|
|
246
|
+
&& Array.isArray(valueArg.messageRecords)
|
|
247
|
+
&& valueArg.messageRecords.length <= flexPublicMessageLimit
|
|
248
|
+
&& valueArg.messageRecords.every(isFlexRecordManifest)
|
|
249
|
+
&& typeof valueArg.sessionsTruncated === 'boolean'
|
|
250
|
+
&& typeof valueArg.messagesTruncated === 'boolean'
|
|
251
|
+
&& typeof valueArg.messageBytesTruncated === 'boolean'
|
|
252
|
+
&& typeof valueArg.visibleDigest === 'string'
|
|
253
|
+
&& digestPattern.test(valueArg.visibleDigest)
|
|
254
|
+
&& isFlexPublicSourceRevision(valueArg.scopeSource)
|
|
255
|
+
&& Array.isArray(valueArg.projectionSources)
|
|
256
|
+
&& valueArg.projectionSources.length <= flexPublicSessionLimit
|
|
257
|
+
&& valueArg.projectionSources.every(isFlexPublicProjectionSource)
|
|
258
|
+
&& new Set(valueArg.projectionSources.map((source) => source.sessionId)).size
|
|
259
|
+
=== valueArg.projectionSources.length;
|
|
260
|
+
|
|
261
|
+
export function assertFlexPublicCandidateDocument(
|
|
262
|
+
valueArg: unknown,
|
|
263
|
+
): asserts valueArg is IFlexPublicCandidateDocument {
|
|
264
|
+
if (
|
|
265
|
+
!isFlexPlainObject(valueArg)
|
|
266
|
+
|| !hasFlexExactKeys(valueArg, [
|
|
267
|
+
'id',
|
|
268
|
+
'controllerId',
|
|
269
|
+
'scopeId',
|
|
270
|
+
'candidateId',
|
|
271
|
+
'revision',
|
|
272
|
+
'sha256',
|
|
273
|
+
'bytes',
|
|
274
|
+
'sessionRecords',
|
|
275
|
+
'messageRecords',
|
|
276
|
+
'sessionsTruncated',
|
|
277
|
+
'messagesTruncated',
|
|
278
|
+
'messageBytesTruncated',
|
|
279
|
+
'visibleDigest',
|
|
280
|
+
'scopeSource',
|
|
281
|
+
'projectionSources',
|
|
282
|
+
'createdAt',
|
|
283
|
+
])
|
|
284
|
+
|| !isBoundedString(valueArg.id, 1024)
|
|
285
|
+
|| !isBoundedString(valueArg.controllerId, 512)
|
|
286
|
+
|| !isBoundedString(valueArg.scopeId, 512)
|
|
287
|
+
|| !isIsoDate(valueArg.createdAt)
|
|
288
|
+
|| !isFlexPublicCandidateManifest({
|
|
289
|
+
candidateId: valueArg.candidateId,
|
|
290
|
+
revision: valueArg.revision,
|
|
291
|
+
sha256: valueArg.sha256,
|
|
292
|
+
bytes: valueArg.bytes,
|
|
293
|
+
sessionRecords: valueArg.sessionRecords,
|
|
294
|
+
messageRecords: valueArg.messageRecords,
|
|
295
|
+
sessionsTruncated: valueArg.sessionsTruncated,
|
|
296
|
+
messagesTruncated: valueArg.messagesTruncated,
|
|
297
|
+
messageBytesTruncated: valueArg.messageBytesTruncated,
|
|
298
|
+
visibleDigest: valueArg.visibleDigest,
|
|
299
|
+
scopeSource: valueArg.scopeSource,
|
|
300
|
+
projectionSources: valueArg.projectionSources,
|
|
301
|
+
})
|
|
302
|
+
) throw new Error('Invalid Flex public candidate document.');
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export function assertFlexPublicHeadDocument(
|
|
306
|
+
valueArg: unknown,
|
|
307
|
+
): asserts valueArg is IFlexPublicHeadDocument {
|
|
308
|
+
if (
|
|
309
|
+
!isFlexPlainObject(valueArg)
|
|
310
|
+
|| !hasFlexExactKeys(valueArg, [
|
|
311
|
+
'id', 'controllerId', 'storageKey', 'revision',
|
|
312
|
+
'currentPublicCandidateId', 'publicCandidates',
|
|
313
|
+
])
|
|
314
|
+
|| !isBoundedString(valueArg.id, 1024)
|
|
315
|
+
|| !isBoundedString(valueArg.controllerId, 512)
|
|
316
|
+
|| !isBoundedString(valueArg.storageKey, 512)
|
|
317
|
+
|| !isNonNegativeInteger(valueArg.revision)
|
|
318
|
+
|| valueArg.revision < 1
|
|
319
|
+
|| typeof valueArg.currentPublicCandidateId !== 'string'
|
|
320
|
+
|| !candidateIdPattern.test(valueArg.currentPublicCandidateId)
|
|
321
|
+
|| !Array.isArray(valueArg.publicCandidates)
|
|
322
|
+
|| valueArg.publicCandidates.length < 1
|
|
323
|
+
|| valueArg.publicCandidates.length > 4
|
|
324
|
+
|| !valueArg.publicCandidates.every(isFlexPublicCandidateManifest)
|
|
325
|
+
|| valueArg.publicCandidates[0]?.candidateId !== valueArg.currentPublicCandidateId
|
|
326
|
+
|| valueArg.publicCandidates[0]?.revision !== valueArg.revision
|
|
327
|
+
|| valueArg.publicCandidates.some((candidate, index, candidates) => (
|
|
328
|
+
index > 0 && candidate.revision >= candidates[index - 1]!.revision
|
|
329
|
+
))
|
|
330
|
+
) throw new Error('Invalid Flex public head document.');
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export function assertFlexPublicSessionRecordDocument(
|
|
334
|
+
valueArg: unknown,
|
|
335
|
+
): asserts valueArg is IFlexPublicSessionRecordDocument {
|
|
336
|
+
if (
|
|
337
|
+
!isFlexPlainObject(valueArg)
|
|
338
|
+
|| !hasFlexExactKeys(valueArg, [
|
|
339
|
+
'id', 'controllerId', 'scopeId', 'candidateId', 'revision', 'session', 'createdAt',
|
|
340
|
+
])
|
|
341
|
+
|| !isBoundedString(valueArg.id, 1024)
|
|
342
|
+
|| !isBoundedString(valueArg.controllerId, 512)
|
|
343
|
+
|| !isBoundedString(valueArg.scopeId, 512)
|
|
344
|
+
|| typeof valueArg.candidateId !== 'string'
|
|
345
|
+
|| !candidateIdPattern.test(valueArg.candidateId)
|
|
346
|
+
|| !isNonNegativeInteger(valueArg.revision)
|
|
347
|
+
|| !isIsoDate(valueArg.createdAt)
|
|
348
|
+
|| !isFlexPublicSession(valueArg.session)
|
|
349
|
+
|| valueArg.session.scopeId !== valueArg.scopeId
|
|
350
|
+
) throw new Error('Invalid Flex public session record.');
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export function assertFlexPublicMessageRecordDocument(
|
|
354
|
+
valueArg: unknown,
|
|
355
|
+
): asserts valueArg is IFlexPublicMessageRecordDocument {
|
|
356
|
+
if (
|
|
357
|
+
!isFlexPlainObject(valueArg)
|
|
358
|
+
|| !hasFlexExactKeys(valueArg, [
|
|
359
|
+
'id', 'controllerId', 'scopeId', 'candidateId', 'revision', 'messageIndex',
|
|
360
|
+
'message', 'createdAt',
|
|
361
|
+
])
|
|
362
|
+
|| !isBoundedString(valueArg.id, 1024)
|
|
363
|
+
|| !isBoundedString(valueArg.controllerId, 512)
|
|
364
|
+
|| !isBoundedString(valueArg.scopeId, 512)
|
|
365
|
+
|| typeof valueArg.candidateId !== 'string'
|
|
366
|
+
|| !candidateIdPattern.test(valueArg.candidateId)
|
|
367
|
+
|| !isNonNegativeInteger(valueArg.revision)
|
|
368
|
+
|| !isNonNegativeInteger(valueArg.messageIndex)
|
|
369
|
+
|| !isIsoDate(valueArg.createdAt)
|
|
370
|
+
|| !isFlexPublicMessage(valueArg.message)
|
|
371
|
+
) throw new Error('Invalid Flex public message record.');
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
export function assertFlexProjectionSourceDocument(
|
|
375
|
+
valueArg: unknown,
|
|
376
|
+
): asserts valueArg is IFlexProjectionSourceDocument {
|
|
377
|
+
if (
|
|
378
|
+
!isFlexPlainObject(valueArg)
|
|
379
|
+
|| !hasFlexExactKeys(valueArg, [
|
|
380
|
+
'id', 'controllerId', 'scopeId', 'sessionId', 'incarnationId', 'revision',
|
|
381
|
+
'candidateId', 'sha256', 'bytes', 'messageCount', 'messagesTruncated',
|
|
382
|
+
'visibleDigest', 'createdAt',
|
|
383
|
+
], ['latestMessage', 'orderVersion'])
|
|
384
|
+
|| !isBoundedString(valueArg.id, 1024)
|
|
385
|
+
|| !isBoundedString(valueArg.controllerId, 512)
|
|
386
|
+
|| !isBoundedString(valueArg.scopeId, 512)
|
|
387
|
+
|| !isBoundedString(valueArg.sessionId, 512)
|
|
388
|
+
|| typeof valueArg.incarnationId !== 'string'
|
|
389
|
+
|| !candidateIdPattern.test(valueArg.incarnationId)
|
|
390
|
+
|| !isNonNegativeInteger(valueArg.revision)
|
|
391
|
+
|| valueArg.revision < 1
|
|
392
|
+
|| !isIsoDate(valueArg.createdAt)
|
|
393
|
+
|| !isFlexProjectionSourceManifest({
|
|
394
|
+
candidateId: valueArg.candidateId,
|
|
395
|
+
...(valueArg.orderVersion === undefined ? {} : { orderVersion: valueArg.orderVersion }),
|
|
396
|
+
sha256: valueArg.sha256,
|
|
397
|
+
bytes: valueArg.bytes,
|
|
398
|
+
messageCount: valueArg.messageCount,
|
|
399
|
+
messagesTruncated: valueArg.messagesTruncated,
|
|
400
|
+
visibleDigest: valueArg.visibleDigest,
|
|
401
|
+
...(valueArg.latestMessage === undefined ? {} : { latestMessage: valueArg.latestMessage }),
|
|
402
|
+
})
|
|
403
|
+
) throw new Error('Invalid Flex projection source document.');
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export function assertFlexProjectionMessageRecordDocument(
|
|
407
|
+
valueArg: unknown,
|
|
408
|
+
): asserts valueArg is IFlexProjectionMessageRecordDocument {
|
|
409
|
+
if (
|
|
410
|
+
!isFlexPlainObject(valueArg)
|
|
411
|
+
|| !hasFlexExactKeys(valueArg, [
|
|
412
|
+
'id', 'controllerId', 'scopeId', 'candidateId', 'sessionId', 'incarnationId',
|
|
413
|
+
'revision', 'index', 'sha256', 'bytes', 'messageCreatedAt', 'messageId',
|
|
414
|
+
'message', 'createdAt',
|
|
415
|
+
], ['messageIndex', 'previous'])
|
|
416
|
+
|| !isBoundedString(valueArg.controllerId, 512)
|
|
417
|
+
|| !isBoundedString(valueArg.scopeId, 512)
|
|
418
|
+
|| typeof valueArg.candidateId !== 'string'
|
|
419
|
+
|| !candidateIdPattern.test(valueArg.candidateId)
|
|
420
|
+
|| !isBoundedString(valueArg.sessionId, 512)
|
|
421
|
+
|| typeof valueArg.incarnationId !== 'string'
|
|
422
|
+
|| !candidateIdPattern.test(valueArg.incarnationId)
|
|
423
|
+
|| !isNonNegativeInteger(valueArg.revision)
|
|
424
|
+
|| valueArg.revision < 1
|
|
425
|
+
|| !isIsoDate(valueArg.createdAt)
|
|
426
|
+
|| !isFlexProjectionMessageDescriptor({
|
|
427
|
+
id: valueArg.id,
|
|
428
|
+
index: valueArg.index,
|
|
429
|
+
...(valueArg.messageIndex === undefined ? {} : { messageIndex: valueArg.messageIndex }),
|
|
430
|
+
sha256: valueArg.sha256,
|
|
431
|
+
bytes: valueArg.bytes,
|
|
432
|
+
messageCreatedAt: valueArg.messageCreatedAt,
|
|
433
|
+
sessionId: valueArg.sessionId,
|
|
434
|
+
messageId: valueArg.messageId,
|
|
435
|
+
})
|
|
436
|
+
|| !isFlexPublicMessage(valueArg.message)
|
|
437
|
+
|| valueArg.message.sessionId !== valueArg.sessionId
|
|
438
|
+
|| valueArg.message.messageId !== valueArg.messageId
|
|
439
|
+
|| valueArg.message.createdAt !== valueArg.messageCreatedAt
|
|
440
|
+
|| (valueArg.previous !== undefined
|
|
441
|
+
&& !isFlexProjectionMessageDescriptor(valueArg.previous))
|
|
442
|
+
) throw new Error('Invalid Flex projection message record.');
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
@plugins.smartdata.compoundIndex({
|
|
446
|
+
name: 'flex_public_candidate_orphans',
|
|
447
|
+
key: { controllerId: 1, createdAt: 1, _id: 1 },
|
|
448
|
+
})
|
|
449
|
+
@plugins.smartdata.managed({ collectionName: 'flex_public_candidates' })
|
|
450
|
+
export class FlexPublicCandidateModel extends plugins.smartdata.SmartDataDbDoc<
|
|
451
|
+
FlexPublicCandidateModel,
|
|
452
|
+
IFlexPublicCandidateDocument
|
|
453
|
+
> {
|
|
454
|
+
@plugins.smartdata.unI()
|
|
455
|
+
public id!: string;
|
|
456
|
+
|
|
457
|
+
@plugins.smartdata.svDb()
|
|
458
|
+
public controllerId!: string;
|
|
459
|
+
|
|
460
|
+
@plugins.smartdata.index()
|
|
461
|
+
public scopeId!: string;
|
|
462
|
+
|
|
463
|
+
@plugins.smartdata.index()
|
|
464
|
+
public candidateId!: string;
|
|
465
|
+
|
|
466
|
+
@plugins.smartdata.svDb()
|
|
467
|
+
public revision!: number;
|
|
468
|
+
|
|
469
|
+
@plugins.smartdata.svDb()
|
|
470
|
+
public sha256!: string;
|
|
471
|
+
|
|
472
|
+
@plugins.smartdata.svDb()
|
|
473
|
+
public bytes!: number;
|
|
474
|
+
|
|
475
|
+
@plugins.smartdata.svDb()
|
|
476
|
+
public sessionRecords!: IFlexRecordManifest[];
|
|
477
|
+
|
|
478
|
+
@plugins.smartdata.svDb()
|
|
479
|
+
public messageRecords!: IFlexRecordManifest[];
|
|
480
|
+
|
|
481
|
+
@plugins.smartdata.svDb()
|
|
482
|
+
public sessionsTruncated!: boolean;
|
|
483
|
+
|
|
484
|
+
@plugins.smartdata.svDb()
|
|
485
|
+
public messagesTruncated!: boolean;
|
|
486
|
+
|
|
487
|
+
@plugins.smartdata.svDb()
|
|
488
|
+
public messageBytesTruncated!: boolean;
|
|
489
|
+
|
|
490
|
+
@plugins.smartdata.svDb()
|
|
491
|
+
public visibleDigest!: string;
|
|
492
|
+
|
|
493
|
+
@plugins.smartdata.svDb()
|
|
494
|
+
public scopeSource!: IFlexPublicSourceRevision;
|
|
495
|
+
|
|
496
|
+
@plugins.smartdata.svDb()
|
|
497
|
+
public projectionSources!: IFlexPublicProjectionSource[];
|
|
498
|
+
|
|
499
|
+
@plugins.smartdata.index()
|
|
500
|
+
public createdAt!: string;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
@plugins.smartdata.compoundIndex({
|
|
504
|
+
name: 'flex_public_head_candidate_owner',
|
|
505
|
+
key: { controllerId: 1, 'publicCandidates.candidateId': 1 },
|
|
506
|
+
})
|
|
507
|
+
@plugins.smartdata.managed({ collectionName: 'flex_public_heads' })
|
|
508
|
+
@plugins.smartdata.exactPersistence({ assertDocument: assertFlexPublicHeadDocument })
|
|
509
|
+
export class FlexPublicHeadModel extends plugins.smartdata.SmartDataDbDoc<
|
|
510
|
+
FlexPublicHeadModel,
|
|
511
|
+
IFlexPublicHeadDocument
|
|
512
|
+
> {
|
|
513
|
+
declare static exact: plugins.smartdata.TExact<FlexPublicHeadModel>;
|
|
514
|
+
|
|
515
|
+
@plugins.smartdata.unI()
|
|
516
|
+
public id!: string;
|
|
517
|
+
|
|
518
|
+
@plugins.smartdata.index()
|
|
519
|
+
public controllerId!: string;
|
|
520
|
+
|
|
521
|
+
@plugins.smartdata.index()
|
|
522
|
+
public storageKey!: string;
|
|
523
|
+
|
|
524
|
+
@plugins.smartdata.svDb()
|
|
525
|
+
public revision!: number;
|
|
526
|
+
|
|
527
|
+
@plugins.smartdata.svDb()
|
|
528
|
+
public currentPublicCandidateId!: string;
|
|
529
|
+
|
|
530
|
+
@plugins.smartdata.svDb()
|
|
531
|
+
public publicCandidates!: IFlexPublicCandidateManifest[];
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
@plugins.smartdata.managed({ collectionName: 'flex_public_sessions' })
|
|
535
|
+
export class FlexPublicSessionRecordModel extends plugins.smartdata.SmartDataDbDoc<
|
|
536
|
+
FlexPublicSessionRecordModel,
|
|
537
|
+
IFlexPublicSessionRecordDocument
|
|
538
|
+
> {
|
|
539
|
+
@plugins.smartdata.unI()
|
|
540
|
+
public id!: string;
|
|
541
|
+
|
|
542
|
+
@plugins.smartdata.svDb()
|
|
543
|
+
public controllerId!: string;
|
|
544
|
+
|
|
545
|
+
@plugins.smartdata.index()
|
|
546
|
+
public scopeId!: string;
|
|
547
|
+
|
|
548
|
+
@plugins.smartdata.index()
|
|
549
|
+
public candidateId!: string;
|
|
550
|
+
|
|
551
|
+
@plugins.smartdata.svDb()
|
|
552
|
+
public revision!: number;
|
|
553
|
+
|
|
554
|
+
@plugins.smartdata.svDb()
|
|
555
|
+
public session!: TFlexSession;
|
|
556
|
+
|
|
557
|
+
@plugins.smartdata.index()
|
|
558
|
+
public createdAt!: string;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
@plugins.smartdata.managed({ collectionName: 'flex_public_messages' })
|
|
562
|
+
export class FlexPublicMessageRecordModel extends plugins.smartdata.SmartDataDbDoc<
|
|
563
|
+
FlexPublicMessageRecordModel,
|
|
564
|
+
IFlexPublicMessageRecordDocument
|
|
565
|
+
> {
|
|
566
|
+
@plugins.smartdata.unI()
|
|
567
|
+
public id!: string;
|
|
568
|
+
|
|
569
|
+
@plugins.smartdata.svDb()
|
|
570
|
+
public controllerId!: string;
|
|
571
|
+
|
|
572
|
+
@plugins.smartdata.index()
|
|
573
|
+
public scopeId!: string;
|
|
574
|
+
|
|
575
|
+
@plugins.smartdata.index()
|
|
576
|
+
public candidateId!: string;
|
|
577
|
+
|
|
578
|
+
@plugins.smartdata.svDb()
|
|
579
|
+
public revision!: number;
|
|
580
|
+
|
|
581
|
+
@plugins.smartdata.svDb()
|
|
582
|
+
public messageIndex!: number;
|
|
583
|
+
|
|
584
|
+
@plugins.smartdata.svDb()
|
|
585
|
+
public message!: TFlexMessage;
|
|
586
|
+
|
|
587
|
+
@plugins.smartdata.index()
|
|
588
|
+
public createdAt!: string;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
@plugins.smartdata.compoundIndex({
|
|
592
|
+
name: 'flex_projection_source_orphans',
|
|
593
|
+
key: { controllerId: 1, createdAt: 1, _id: 1 },
|
|
594
|
+
})
|
|
595
|
+
@plugins.smartdata.managed({ collectionName: 'flex_projection_sources' })
|
|
596
|
+
export class FlexProjectionSourceModel extends plugins.smartdata.SmartDataDbDoc<
|
|
597
|
+
FlexProjectionSourceModel,
|
|
598
|
+
IFlexProjectionSourceDocument
|
|
599
|
+
> {
|
|
600
|
+
@plugins.smartdata.unI()
|
|
601
|
+
public id!: string;
|
|
602
|
+
|
|
603
|
+
@plugins.smartdata.svDb()
|
|
604
|
+
public controllerId!: string;
|
|
605
|
+
|
|
606
|
+
@plugins.smartdata.index()
|
|
607
|
+
public scopeId!: string;
|
|
608
|
+
|
|
609
|
+
@plugins.smartdata.index()
|
|
610
|
+
public sessionId!: string;
|
|
611
|
+
|
|
612
|
+
@plugins.smartdata.index()
|
|
613
|
+
public candidateId!: string;
|
|
614
|
+
|
|
615
|
+
@plugins.smartdata.svDb()
|
|
616
|
+
public incarnationId!: string;
|
|
617
|
+
|
|
618
|
+
@plugins.smartdata.svDb()
|
|
619
|
+
public revision!: number;
|
|
620
|
+
|
|
621
|
+
@plugins.smartdata.svDb()
|
|
622
|
+
public orderVersion?: 1;
|
|
623
|
+
|
|
624
|
+
@plugins.smartdata.svDb()
|
|
625
|
+
public sha256!: string;
|
|
626
|
+
|
|
627
|
+
@plugins.smartdata.svDb()
|
|
628
|
+
public bytes!: number;
|
|
629
|
+
|
|
630
|
+
@plugins.smartdata.svDb()
|
|
631
|
+
public messageCount!: number;
|
|
632
|
+
|
|
633
|
+
@plugins.smartdata.svDb()
|
|
634
|
+
public messagesTruncated!: boolean;
|
|
635
|
+
|
|
636
|
+
@plugins.smartdata.svDb()
|
|
637
|
+
public visibleDigest!: string;
|
|
638
|
+
|
|
639
|
+
@plugins.smartdata.svDb()
|
|
640
|
+
public latestMessage?: IFlexProjectionMessageDescriptor;
|
|
641
|
+
|
|
642
|
+
@plugins.smartdata.index()
|
|
643
|
+
public createdAt!: string;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
@plugins.smartdata.managed({ collectionName: 'flex_projection_messages' })
|
|
647
|
+
export class FlexProjectionMessageRecordModel extends plugins.smartdata.SmartDataDbDoc<
|
|
648
|
+
FlexProjectionMessageRecordModel,
|
|
649
|
+
IFlexProjectionMessageRecordDocument
|
|
650
|
+
> {
|
|
651
|
+
@plugins.smartdata.unI()
|
|
652
|
+
public id!: string;
|
|
653
|
+
|
|
654
|
+
@plugins.smartdata.svDb()
|
|
655
|
+
public controllerId!: string;
|
|
656
|
+
|
|
657
|
+
@plugins.smartdata.index()
|
|
658
|
+
public scopeId!: string;
|
|
659
|
+
|
|
660
|
+
@plugins.smartdata.index()
|
|
661
|
+
public candidateId!: string;
|
|
662
|
+
|
|
663
|
+
@plugins.smartdata.index()
|
|
664
|
+
public sessionId!: string;
|
|
665
|
+
|
|
666
|
+
@plugins.smartdata.svDb()
|
|
667
|
+
public incarnationId!: string;
|
|
668
|
+
|
|
669
|
+
@plugins.smartdata.svDb()
|
|
670
|
+
public revision!: number;
|
|
671
|
+
|
|
672
|
+
@plugins.smartdata.svDb()
|
|
673
|
+
public index!: number;
|
|
674
|
+
|
|
675
|
+
@plugins.smartdata.svDb()
|
|
676
|
+
public messageIndex?: number;
|
|
677
|
+
|
|
678
|
+
@plugins.smartdata.svDb()
|
|
679
|
+
public sha256!: string;
|
|
680
|
+
|
|
681
|
+
@plugins.smartdata.svDb()
|
|
682
|
+
public bytes!: number;
|
|
683
|
+
|
|
684
|
+
@plugins.smartdata.svDb()
|
|
685
|
+
public messageCreatedAt!: string;
|
|
686
|
+
|
|
687
|
+
@plugins.smartdata.svDb()
|
|
688
|
+
public messageId!: string;
|
|
689
|
+
|
|
690
|
+
@plugins.smartdata.svDb()
|
|
691
|
+
public message!: TFlexMessage;
|
|
692
|
+
|
|
693
|
+
@plugins.smartdata.svDb()
|
|
694
|
+
public previous?: IFlexProjectionMessageDescriptor;
|
|
695
|
+
|
|
696
|
+
@plugins.smartdata.index()
|
|
697
|
+
public createdAt!: string;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
export const flexHeadId = (controllerIdArg: string, scopeIdArg: string): string =>
|
|
701
|
+
`flex-head:${plugins.crypto.createHash('sha256')
|
|
702
|
+
.update(controllerIdArg, 'utf8')
|
|
703
|
+
.update('\0', 'utf8')
|
|
704
|
+
.update(scopeIdArg, 'utf8')
|
|
705
|
+
.digest('hex')}`;
|
|
706
|
+
|
|
707
|
+
export const flexPublicHeadId = (controllerIdArg: string, scopeIdArg: string): string =>
|
|
708
|
+
`flex-public-head:${plugins.crypto.createHash('sha256')
|
|
709
|
+
.update(controllerIdArg, 'utf8')
|
|
710
|
+
.update('\0', 'utf8')
|
|
711
|
+
.update(scopeIdArg, 'utf8')
|
|
712
|
+
.digest('hex')}`;
|
|
713
|
+
|
|
714
|
+
export const registerFlexPublicModels = (
|
|
715
|
+
managerArg: { db: plugins.smartdata.SmartdataDb },
|
|
716
|
+
): void => {
|
|
717
|
+
plugins.smartdata.setDefaultManagerForDoc(managerArg, FlexPublicCandidateModel);
|
|
718
|
+
plugins.smartdata.setDefaultManagerForDoc(managerArg, FlexPublicHeadModel);
|
|
719
|
+
plugins.smartdata.setDefaultManagerForDoc(managerArg, FlexPublicSessionRecordModel);
|
|
720
|
+
plugins.smartdata.setDefaultManagerForDoc(managerArg, FlexPublicMessageRecordModel);
|
|
721
|
+
plugins.smartdata.setDefaultManagerForDoc(managerArg, FlexProjectionSourceModel);
|
|
722
|
+
plugins.smartdata.setDefaultManagerForDoc(managerArg, FlexProjectionMessageRecordModel);
|
|
723
|
+
};
|
|
724
|
+
|
|
725
|
+
export const initFlexPublicModels = async (): Promise<void> => {
|
|
726
|
+
await FlexPublicCandidateModel.init();
|
|
727
|
+
await FlexPublicHeadModel.init();
|
|
728
|
+
await FlexPublicSessionRecordModel.init();
|
|
729
|
+
await FlexPublicMessageRecordModel.init();
|
|
730
|
+
await FlexProjectionSourceModel.init();
|
|
731
|
+
await FlexProjectionMessageRecordModel.init();
|
|
732
|
+
};
|