@shaxpir/duiduidui-models 1.0.1 → 1.2.0

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 (226) hide show
  1. package/dist/models/{content/ArrayView.d.ts → ArrayView.d.ts} +1 -1
  2. package/dist/models/{content/ArrayView.js → ArrayView.js} +14 -14
  3. package/dist/models/BayesianScore.d.ts +9 -0
  4. package/dist/models/BayesianScore.js +27 -0
  5. package/dist/models/{markup/ChangeModel.d.ts → ChangeModel.d.ts} +2 -3
  6. package/dist/models/{markup/ChangeModel.js → ChangeModel.js} +20 -10
  7. package/dist/models/{content/Content.d.ts → Content.d.ts} +9 -10
  8. package/dist/models/{content/Content.js → Content.js} +2 -6
  9. package/dist/models/{content/ContentKind.d.ts → ContentKind.d.ts} +3 -0
  10. package/dist/models/{content/ContentKind.js → ContentKind.js} +5 -1
  11. package/dist/models/{content/Device.d.ts → Device.d.ts} +15 -7
  12. package/dist/models/{content/Device.js → Device.js} +14 -18
  13. package/dist/models/Hanzi.d.ts +15 -0
  14. package/dist/models/{content/Manifest.d.ts → Manifest.d.ts} +7 -3
  15. package/dist/models/{content/Manifest.js → Manifest.js} +12 -8
  16. package/dist/models/{content/Media.d.ts → Media.d.ts} +2 -3
  17. package/dist/models/{content/Media.js → Media.js} +4 -5
  18. package/dist/models/{content/Metric.d.ts → Metric.d.ts} +2 -3
  19. package/dist/models/{content/Metric.js → Metric.js} +18 -20
  20. package/dist/models/{content/Model.d.ts → Model.d.ts} +3 -5
  21. package/dist/models/{content/Model.js → Model.js} +5 -6
  22. package/dist/models/{markup/Operation.d.ts → Operation.d.ts} +2 -5
  23. package/dist/models/{markup/Operation.js → Operation.js} +30 -25
  24. package/dist/models/Phrase.d.ts +39 -0
  25. package/dist/models/{content/Profile.d.ts → Profile.d.ts} +1 -2
  26. package/dist/models/{content/Profile.js → Profile.js} +7 -9
  27. package/dist/models/Progress.d.ts +26 -0
  28. package/dist/models/Progress.js +39 -0
  29. package/dist/models/Review.d.ts +14 -0
  30. package/dist/models/{content/Session.d.ts → Session.d.ts} +7 -15
  31. package/dist/models/Session.js +103 -0
  32. package/dist/models/Term.d.ts +36 -0
  33. package/dist/models/Term.js +82 -0
  34. package/dist/models/User.d.ts +32 -0
  35. package/dist/models/User.js +65 -0
  36. package/dist/models/Workspace.d.ts +37 -0
  37. package/dist/models/Workspace.js +94 -0
  38. package/dist/models/index.d.ts +22 -2
  39. package/dist/models/index.js +22 -2
  40. package/dist/repo/PermissiveJson1.d.ts +16 -16
  41. package/dist/repo/PermissiveJson1.js +17 -7
  42. package/dist/repo/ShareSync.d.ts +6 -6
  43. package/dist/repo/ShareSync.js +26 -19
  44. package/dist/repo/index.d.ts +1 -0
  45. package/dist/repo/index.js +1 -0
  46. package/dist/util/Encryption.d.ts +1 -1
  47. package/dist/util/index.d.ts +0 -6
  48. package/dist/util/index.js +0 -6
  49. package/lib/models/{content/ArrayView.ts → ArrayView.ts} +2 -2
  50. package/lib/models/BayesianScore.ts +32 -0
  51. package/lib/models/{markup/ChangeModel.ts → ChangeModel.ts} +3 -4
  52. package/lib/models/{content/Content.ts → Content.ts} +15 -18
  53. package/lib/models/{content/ContentKind.ts → ContentKind.ts} +6 -1
  54. package/lib/models/{content/Device.ts → Device.ts} +26 -22
  55. package/lib/models/Hanzi.ts +16 -0
  56. package/lib/models/{content/Manifest.ts → Manifest.ts} +15 -6
  57. package/lib/models/{content/Media.ts → Media.ts} +3 -4
  58. package/lib/models/Metric.ts +233 -0
  59. package/lib/models/{content/Model.ts → Model.ts} +4 -6
  60. package/lib/models/{markup/Operation.ts → Operation.ts} +6 -16
  61. package/lib/models/{content/Permissions.ts → Permissions.ts} +0 -2
  62. package/lib/models/Phrase.ts +53 -0
  63. package/lib/models/{content/Profile.ts → Profile.ts} +4 -6
  64. package/lib/models/Progress.ts +66 -0
  65. package/lib/models/Review.ts +18 -0
  66. package/lib/models/Session.ts +140 -0
  67. package/lib/models/Term.ts +139 -0
  68. package/lib/models/User.ts +97 -0
  69. package/lib/models/Workspace.ts +129 -0
  70. package/lib/models/index.ts +22 -2
  71. package/lib/repo/ShareSync.ts +9 -13
  72. package/lib/repo/index.ts +1 -0
  73. package/lib/util/Encryption.ts +1 -1
  74. package/lib/util/index.ts +0 -6
  75. package/package.json +4 -15
  76. package/dist/models/OutboundMessage.d.ts +0 -18
  77. package/dist/models/OutboundMessage.js +0 -25
  78. package/dist/models/content/Activity.d.ts +0 -10
  79. package/dist/models/content/Billing.d.ts +0 -144
  80. package/dist/models/content/Billing.js +0 -418
  81. package/dist/models/content/Book.d.ts +0 -77
  82. package/dist/models/content/Book.js +0 -407
  83. package/dist/models/content/Category.d.ts +0 -16
  84. package/dist/models/content/Category.js +0 -20
  85. package/dist/models/content/Checkpointable.d.ts +0 -21
  86. package/dist/models/content/Checkpointable.js +0 -156
  87. package/dist/models/content/Comment.d.ts +0 -19
  88. package/dist/models/content/Comment.js +0 -53
  89. package/dist/models/content/ConceptArt.d.ts +0 -31
  90. package/dist/models/content/ConceptArt.js +0 -84
  91. package/dist/models/content/Context.d.ts +0 -28
  92. package/dist/models/content/Context.js +0 -162
  93. package/dist/models/content/DevEnv.d.ts +0 -5
  94. package/dist/models/content/DevEnv.js +0 -9
  95. package/dist/models/content/Dictionary.d.ts +0 -31
  96. package/dist/models/content/Dictionary.js +0 -5
  97. package/dist/models/content/DictionaryEntry.d.ts +0 -20
  98. package/dist/models/content/DictionaryEntry.js +0 -2
  99. package/dist/models/content/ElasticModel.d.ts +0 -149
  100. package/dist/models/content/ElasticModel.js +0 -179
  101. package/dist/models/content/Environment.d.ts +0 -61
  102. package/dist/models/content/Environment.js +0 -124
  103. package/dist/models/content/ExportOptions.d.ts +0 -64
  104. package/dist/models/content/ExportOptions.js +0 -213
  105. package/dist/models/content/Folder.d.ts +0 -16
  106. package/dist/models/content/Folder.js +0 -33
  107. package/dist/models/content/Fragment.d.ts +0 -54
  108. package/dist/models/content/Fragment.js +0 -181
  109. package/dist/models/content/Hanzi.d.ts +0 -21
  110. package/dist/models/content/HighlightRule.d.ts +0 -9
  111. package/dist/models/content/HighlightRule.js +0 -2
  112. package/dist/models/content/Migration.d.ts +0 -68
  113. package/dist/models/content/Migration.js +0 -155
  114. package/dist/models/content/Phrase.d.ts +0 -8
  115. package/dist/models/content/Placeholder.d.ts +0 -8
  116. package/dist/models/content/Placeholder.js +0 -36
  117. package/dist/models/content/RichText.d.ts +0 -58
  118. package/dist/models/content/RichText.js +0 -79
  119. package/dist/models/content/Session.js +0 -173
  120. package/dist/models/content/Speech.d.ts +0 -67
  121. package/dist/models/content/Speech.js +0 -97
  122. package/dist/models/content/Stub.d.ts +0 -24
  123. package/dist/models/content/Stub.js +0 -179
  124. package/dist/models/content/Time.d.ts +0 -56
  125. package/dist/models/content/Time.js +0 -295
  126. package/dist/models/content/User.d.ts +0 -36
  127. package/dist/models/content/User.js +0 -95
  128. package/dist/models/content/Workspace.d.ts +0 -71
  129. package/dist/models/content/Workspace.js +0 -237
  130. package/dist/models/content/index.d.ts +0 -17
  131. package/dist/models/content/index.js +0 -34
  132. package/dist/models/legacy/LegacyBodyFormat.d.ts +0 -9
  133. package/dist/models/legacy/LegacyBodyFormat.js +0 -2
  134. package/dist/models/legacy/LegacyComment.d.ts +0 -12
  135. package/dist/models/legacy/LegacyComment.js +0 -2
  136. package/dist/models/legacy/LegacyContent.d.ts +0 -53
  137. package/dist/models/legacy/LegacyContent.js +0 -55
  138. package/dist/models/legacy/LegacyConversion.d.ts +0 -55
  139. package/dist/models/legacy/LegacyConversion.js +0 -401
  140. package/dist/models/legacy/LegacyFragment.d.ts +0 -21
  141. package/dist/models/legacy/LegacyFragment.js +0 -2
  142. package/dist/models/legacy/LegacyLocator.d.ts +0 -8
  143. package/dist/models/legacy/LegacyLocator.js +0 -31
  144. package/dist/models/legacy/LegacyOutboundMessage.d.ts +0 -16
  145. package/dist/models/legacy/LegacyOutboundMessage.js +0 -13
  146. package/dist/models/legacy/LegacyPicture.d.ts +0 -14
  147. package/dist/models/legacy/LegacyPicture.js +0 -2
  148. package/dist/models/legacy/LegacyProfile.d.ts +0 -9
  149. package/dist/models/legacy/LegacyProfile.js +0 -2
  150. package/dist/models/legacy/LegacySession.d.ts +0 -41
  151. package/dist/models/legacy/LegacySession.js +0 -35
  152. package/dist/models/legacy/LegacyStory.d.ts +0 -23
  153. package/dist/models/legacy/LegacyStory.js +0 -2
  154. package/dist/models/legacy/LegacyStub.d.ts +0 -15
  155. package/dist/models/legacy/LegacyStub.js +0 -2
  156. package/dist/models/legacy/LegacyTransaction.d.ts +0 -14
  157. package/dist/models/legacy/LegacyTransaction.js +0 -49
  158. package/dist/models/legacy/LegacyUser.d.ts +0 -28
  159. package/dist/models/legacy/LegacyUser.js +0 -32
  160. package/dist/models/legacy/LegacyWorkspace.d.ts +0 -23
  161. package/dist/models/legacy/LegacyWorkspace.js +0 -6
  162. package/dist/models/legacy/index.d.ts +0 -15
  163. package/dist/models/legacy/index.js +0 -32
  164. package/dist/models/markup/BodyFormat.d.ts +0 -14
  165. package/dist/models/markup/BodyFormat.js +0 -190
  166. package/dist/models/markup/DeltaOps.d.ts +0 -5
  167. package/dist/models/markup/DeltaOps.js +0 -74
  168. package/dist/models/markup/HtmlMarkup.d.ts +0 -4
  169. package/dist/models/markup/HtmlMarkup.js +0 -21
  170. package/dist/models/markup/index.d.ts +0 -4
  171. package/dist/models/markup/index.js +0 -21
  172. package/dist/util/Async.d.ts +0 -8
  173. package/dist/util/Async.js +0 -18
  174. package/dist/util/Base62.d.ts +0 -6
  175. package/dist/util/Base62.js +0 -47
  176. package/dist/util/BinarySearch.d.ts +0 -7
  177. package/dist/util/BinarySearch.js +0 -46
  178. package/dist/util/CachingHasher.d.ts +0 -8
  179. package/dist/util/CachingHasher.js +0 -41
  180. package/dist/util/Color.d.ts +0 -32
  181. package/dist/util/Color.js +0 -204
  182. package/dist/util/Dispatch.d.ts +0 -15
  183. package/dist/util/Dispatch.js +0 -79
  184. package/dist/util/EditDistance.d.ts +0 -13
  185. package/dist/util/EditDistance.js +0 -184
  186. package/dist/util/NumberFormat.d.ts +0 -14
  187. package/dist/util/NumberFormat.js +0 -224
  188. package/dist/util/Struct.d.ts +0 -4
  189. package/dist/util/Struct.js +0 -15
  190. package/dist/util/Template.d.ts +0 -16
  191. package/dist/util/Template.js +0 -128
  192. package/dist/util/Text.d.ts +0 -45
  193. package/dist/util/Text.js +0 -243
  194. package/dist/util/Tuples.d.ts +0 -9
  195. package/dist/util/Tuples.js +0 -135
  196. package/dist/util/Validate.d.ts +0 -4
  197. package/dist/util/Validate.js +0 -11
  198. package/dist/util/Vocabulary.d.ts +0 -3
  199. package/dist/util/Vocabulary.js +0 -35
  200. package/lib/models/content/Billing.ts +0 -558
  201. package/lib/models/content/DevEnv.ts +0 -5
  202. package/lib/models/content/DictionaryEntry.ts +0 -22
  203. package/lib/models/content/Hanzi.ts +0 -25
  204. package/lib/models/content/Phrase.ts +0 -10
  205. package/lib/models/content/Time.ts +0 -328
  206. package/lib/models/content/User.ts +0 -130
  207. package/lib/models/content/index.ts +0 -19
  208. package/lib/models/markup/DeltaOps.ts +0 -71
  209. package/lib/models/markup/index.ts +0 -6
  210. package/lib/util/Base62.ts +0 -47
  211. package/lib/util/CachingHasher.ts +0 -38
  212. package/lib/util/Dispatch.ts +0 -92
  213. package/lib/util/NumberFormat.ts +0 -194
  214. package/lib/util/Struct.ts +0 -14
  215. package/lib/util/Tuples.ts +0 -131
  216. /package/dist/models/{content/GeoLocation.d.ts → GeoLocation.d.ts} +0 -0
  217. /package/dist/models/{content/GeoLocation.js → GeoLocation.js} +0 -0
  218. /package/dist/models/{content/Hanzi.js → Hanzi.js} +0 -0
  219. /package/dist/models/{content/Permissions.d.ts → Permissions.d.ts} +0 -0
  220. /package/dist/models/{content/Permissions.js → Permissions.js} +0 -0
  221. /package/dist/models/{content/Phrase.js → Phrase.js} +0 -0
  222. /package/dist/models/{content/Activity.js → Review.js} +0 -0
  223. /package/dist/{models/markup → repo}/TextEditOps.d.ts +0 -0
  224. /package/dist/{models/markup → repo}/TextEditOps.js +0 -0
  225. /package/lib/models/{content/GeoLocation.ts → GeoLocation.ts} +0 -0
  226. /package/lib/{models/markup → repo}/TextEditOps.ts +0 -0
@@ -1,55 +0,0 @@
1
- import { BillingPayload, TransactionPayload } from '../content/Billing';
2
- import { BookBody } from '../content/Book';
3
- import { CommentBody } from '../content/Comment';
4
- import { ConceptArtBody } from "../content/ConceptArt";
5
- import { ContentBody, ContentId } from '../content/Content';
6
- import { ContentKind } from '../content/ContentKind';
7
- import { FragmentBody } from '../content/Fragment';
8
- import { MediaBody } from "../content/Media";
9
- import { ProfileBody } from '../content/Profile';
10
- import { SessionBody } from '../content/Session';
11
- import { Stub } from '../content/Stub';
12
- import { CompactDateTime, MultiTime } from "../content/Time";
13
- import { ModernUserPayload } from "../content/User";
14
- import { WorkspaceBody } from '../content/Workspace';
15
- import { OutboundMessage } from "../OutboundMessage";
16
- import { LegacyComment } from './LegacyComment';
17
- import { LegacyContent, LegacyContentKind, LegacyDateTime, LegacyMultiTime } from './LegacyContent';
18
- import { LegacyFragment } from './LegacyFragment';
19
- import { LegacyLocator } from "./LegacyLocator";
20
- import { LegacyOutboundMessage } from "./LegacyOutboundMessage";
21
- import { LegacyPicture } from './LegacyPicture';
22
- import { LegacyProfile } from './LegacyProfile';
23
- import { LegacySession } from './LegacySession';
24
- import { LegacyStory } from './LegacyStory';
25
- import { LegacyTransaction } from './LegacyTransaction';
26
- import { LegacyUser } from './LegacyUser';
27
- import { LegacyWorkspace } from './LegacyWorkspace';
28
- export declare class LegacyConversion {
29
- private userId;
30
- constructor(userId: ContentId);
31
- static convertDateTime(timestamp: LegacyDateTime): CompactDateTime;
32
- static convertOutboundMessage(message: LegacyOutboundMessage): OutboundMessage;
33
- convertKind(legacyKind: LegacyContentKind): ContentKind;
34
- convertId(record: LegacyContent): ContentId;
35
- private convertMeta;
36
- convertMetaAt(legacyRecord: LegacyContent): MultiTime;
37
- convertMultiTime(at: LegacyMultiTime, extraMillis: number): MultiTime;
38
- private convertLegacyPayload;
39
- private convertRichTextPayload;
40
- convertUser(legacyUser: LegacyUser): ModernUserPayload;
41
- convertBilling(legacyUser: LegacyUser, convertedTransactions: TransactionPayload[]): BillingPayload;
42
- convertProfile(legacyProfile: LegacyProfile, createdAt: MultiTime, legacyAvatar: LegacyPicture): ProfileBody;
43
- convertWorkspace(legacyWorkspace: LegacyWorkspace, createdAt: MultiTime, newSessionTimetsamps: MultiTime[], contentHeadStubsById?: Map<ContentId, Stub>): WorkspaceBody;
44
- convertSession(legacySession: LegacySession, checkpointTable: Map<LegacyLocator, CompactDateTime>): SessionBody;
45
- convertTransactionPayload(legacyTransaction: LegacyTransaction): TransactionPayload;
46
- convertBook(legacyStory: LegacyStory, createdAt: MultiTime, contentHeadStubsById?: Map<ContentId, Stub>): BookBody;
47
- convertCheckpoints(legacyCheckpoints: LegacyContent[]): ContentBody[];
48
- convertFragment(legacyFragment: LegacyFragment, createdAt: MultiTime, isHead: boolean): FragmentBody;
49
- convertPictureToMedia(legacyPicture: LegacyPicture, createdAt: MultiTime): MediaBody;
50
- convertPictureToConceptArt(legacyPicture: LegacyPicture, createdAt: MultiTime, isHead: boolean): ConceptArtBody;
51
- convertComment(legacyComment: LegacyComment, createdAt: MultiTime, isHead: boolean): CommentBody;
52
- private convertArrayOfLocators;
53
- private convertActivityArray;
54
- private convertStubArray;
55
- }
@@ -1,401 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LegacyConversion = void 0;
7
- const dayjs_1 = __importDefault(require("dayjs"));
8
- const utc_1 = __importDefault(require("dayjs/plugin/utc"));
9
- dayjs_1.default.extend(utc_1.default);
10
- const Struct_1 = require("../../util/Struct");
11
- const content_1 = require("../content");
12
- const ConceptArt_1 = require("../content/ConceptArt");
13
- const Content_1 = require("../content/Content");
14
- const ContentKind_1 = require("../content/ContentKind");
15
- const Environment_1 = require("../content/Environment");
16
- const Profile_1 = require("../content/Profile");
17
- const RichText_1 = require("../content/RichText");
18
- const Session_1 = require("../content/Session");
19
- const Time_1 = require("../content/Time");
20
- const Workspace_1 = require("../content/Workspace");
21
- const BodyFormat_1 = require("../markup/BodyFormat");
22
- const LegacyContent_1 = require("./LegacyContent");
23
- const LegacyLocator_1 = require("./LegacyLocator");
24
- class LegacyConversion {
25
- constructor(userId) {
26
- this.userId = userId;
27
- }
28
- static convertDateTime(timestamp) {
29
- return dayjs_1.default.utc(timestamp, Time_1.Time.DATETIME_FORMAT_LEGACY).format(Time_1.Time.DATETIME_FORMAT_COMPACT);
30
- }
31
- static convertOutboundMessage(message) {
32
- let converted = Struct_1.Struct.clone(message);
33
- converted.at_utc_time = LegacyConversion.convertDateTime(converted.at_utc_time);
34
- return converted;
35
- }
36
- convertKind(legacyKind) {
37
- if (legacyKind === LegacyContent_1.LegacyContentKind.STORY) {
38
- return ContentKind_1.ContentKind.BOOK;
39
- }
40
- else if (legacyKind === LegacyContent_1.LegacyContentKind.PICTURE) {
41
- return ContentKind_1.ContentKind.CONCEPT_ART;
42
- }
43
- else {
44
- return legacyKind;
45
- }
46
- }
47
- convertId(record) {
48
- let id = record.id;
49
- if (record.kind === LegacyContent_1.LegacyContentKind.SESSION) {
50
- id = Session_1.Session.makeSessionId(this.userId);
51
- }
52
- else if (record.kind === LegacyContent_1.LegacyContentKind.WORKSPACE) {
53
- id = Workspace_1.Workspace.makeWorkspaceId(this.userId);
54
- }
55
- else if (record.kind === LegacyContent_1.LegacyContentKind.PROFILE) {
56
- id = Profile_1.Profile.makeProfileId(this.userId);
57
- }
58
- return id;
59
- }
60
- convertMeta(legacyRecord, createdAt, isHead) {
61
- let convertedId = this.convertId(legacyRecord);
62
- let kind = this.convertKind(legacyRecord.kind);
63
- let updatedAt = this.convertMetaAt(legacyRecord);
64
- let ref = isHead ? convertedId : Content_1.Content.makeContentRef(convertedId, createdAt.utc_time);
65
- let meta = {
66
- ref: ref,
67
- is_head: isHead,
68
- kind: kind,
69
- id: convertedId,
70
- created_at: createdAt,
71
- updated_at: updatedAt,
72
- owner: this.userId
73
- };
74
- if (isHead) {
75
- meta.checkpoints = [];
76
- }
77
- return meta;
78
- }
79
- convertMetaAt(legacyRecord) {
80
- let extraMillis = 0;
81
- if (legacyRecord.kind == LegacyContent_1.LegacyContentKind.SESSION) {
82
- // Handle some corrupt legacy data where there are multiple sessions with identical
83
- // start timestamps by adding the sequence-number of the session to the start time
84
- // in milliseconds. This should give us unique session IDs.
85
- extraMillis = legacyRecord.seq;
86
- }
87
- return this.convertMultiTime(legacyRecord.at, extraMillis);
88
- }
89
- convertMultiTime(at, extraMillis) {
90
- let atUtcTime = LegacyConversion.convertDateTime(at.utc_time);
91
- let atLocalTime = LegacyConversion.convertDateTime(at.local_time);
92
- if (extraMillis != 0) {
93
- // Handle some corrupt legacy data where there are multiple sessions with identical
94
- // start timestamps by adding the sequence-number of the session to the start time
95
- // in milliseconds. This should give us unique session IDs.
96
- atUtcTime = Time_1.Time.plus(atUtcTime, extraMillis, 'milliseconds');
97
- atLocalTime = Time_1.Time.plus(atLocalTime, extraMillis, 'milliseconds');
98
- }
99
- return {
100
- utc_time: atUtcTime,
101
- local_time: atLocalTime
102
- };
103
- }
104
- convertLegacyPayload(legacyRecord) {
105
- return Struct_1.Struct.clone(legacyRecord.payload);
106
- }
107
- convertRichTextPayload(legacyBodyFormat) {
108
- let converted = this.convertLegacyPayload(legacyBodyFormat);
109
- converted.richtext_flavor = RichText_1.RichTextFlavor.quill;
110
- converted.richtext_body = { ops: BodyFormat_1.BodyFormatModel.toDeltaOps(legacyBodyFormat.payload) };
111
- delete converted.body;
112
- delete converted.format;
113
- return converted;
114
- }
115
- convertUser(legacyUser) {
116
- let userId = legacyUser.id;
117
- return {
118
- email: legacyUser.payload.email,
119
- force_password_reset: legacyUser.payload.force_password_reset,
120
- pass_md5_salt_md5: legacyUser.payload.pass_md5_salt_md5,
121
- salt: legacyUser.payload.salt,
122
- profile_id: Profile_1.Profile.makeProfileId(userId),
123
- session_id: Session_1.Session.makeSessionId(userId),
124
- workspace_id: Workspace_1.Workspace.makeWorkspaceId(userId)
125
- };
126
- }
127
- convertBilling(legacyUser, convertedTransactions) {
128
- return {
129
- plan: legacyUser.payload.plan,
130
- paid_until: LegacyConversion.convertDateTime(legacyUser.payload.paid_until),
131
- payment_status: legacyUser.payload.payment_status,
132
- stripe_customer_id: legacyUser.payload.stripe_customer_id,
133
- credit_card: legacyUser.payload.credit_card,
134
- transactions: convertedTransactions
135
- };
136
- }
137
- convertProfile(legacyProfile, createdAt, legacyAvatar) {
138
- let payload = this.convertLegacyPayload(legacyProfile);
139
- payload.username = null;
140
- payload.avatar_media_ref = legacyProfile.payload.avatar;
141
- payload.avatar_cropping = null;
142
- if (legacyAvatar && legacyAvatar.payload.cropping) {
143
- payload.avatar_cropping = Struct_1.Struct.clone(legacyAvatar.payload.cropping);
144
- }
145
- delete payload.avatar;
146
- return {
147
- meta: this.convertMeta(legacyProfile, createdAt, true),
148
- payload: payload
149
- };
150
- }
151
- convertWorkspace(legacyWorkspace, createdAt, newSessionTimetsamps, contentHeadStubsById) {
152
- if (legacyWorkspace.payload.hasOwnProperty("stories")) {
153
- legacyWorkspace.payload.books = Struct_1.Struct.clone(legacyWorkspace.payload.stories);
154
- delete legacyWorkspace.stories;
155
- }
156
- let payload = this.convertLegacyPayload(legacyWorkspace);
157
- payload.books = this.convertStubArray(contentHeadStubsById, legacyWorkspace.payload.books);
158
- payload.shorts = this.convertStubArray(contentHeadStubsById, legacyWorkspace.payload.shorts);
159
- payload.articles = this.convertStubArray(contentHeadStubsById, legacyWorkspace.payload.articles);
160
- payload.poems = this.convertStubArray(contentHeadStubsById, legacyWorkspace.payload.poems);
161
- payload.ideas = this.convertStubArray(contentHeadStubsById, legacyWorkspace.payload.ideas);
162
- payload.trash = this.convertStubArray(contentHeadStubsById, legacyWorkspace.payload.trash);
163
- payload.devices = [];
164
- payload.sessions = Time_1.Time.sortByUtcTime(Struct_1.Struct.clone(newSessionTimetsamps));
165
- // UX and HighlightRules have been moved to Device models.
166
- delete payload.ux;
167
- delete payload.highlight;
168
- // Primary device settings will be updated directly, during migration.
169
- delete payload.primary_device;
170
- delete payload.primary_device_last_update;
171
- return {
172
- meta: this.convertMeta(legacyWorkspace, createdAt, true),
173
- payload: payload
174
- };
175
- }
176
- convertSession(legacySession, checkpointTable) {
177
- let payload = this.convertLegacyPayload(legacySession);
178
- payload.activity = this.convertActivityArray(legacySession.payload.activity, checkpointTable);
179
- payload.start = this.convertMultiTime(legacySession.payload.start, legacySession.seq);
180
- payload.end = this.convertMultiTime(legacySession.at, legacySession.seq);
181
- let meta = this.convertMeta(legacySession, payload.start, false);
182
- // Move session duration from 'minutes_of.total' to 'duration_minutes', and rewrite null values as zeros.
183
- payload.duration_minutes = legacySession.payload.minutes_of.total;
184
- if (payload.duration_minutes == null) {
185
- payload.duration_minutes = 0;
186
- }
187
- delete payload.minutes_of;
188
- // Move device ID from 'environment.device_id' to 'device_id'
189
- payload.device_id = legacySession.payload.environment.device_id;
190
- delete payload.environment.device_id;
191
- // Fixup missing operating-system version names for Mac OS
192
- payload.environment.versions.os_version = Environment_1.EnvironmentModel.getOsVersion(payload.environment.versions.os_type, payload.environment.versions.os_release);
193
- // Fixup missing 'shaxpir_bundle' version property
194
- payload.environment.versions.shaxpir_bundle = payload.environment.versions.shaxpir;
195
- payload.environment.versions.is_bundle_update = false;
196
- return {
197
- meta: meta,
198
- payload: payload
199
- };
200
- }
201
- convertTransactionPayload(legacyTransaction) {
202
- let converted = Struct_1.Struct.clone(legacyTransaction.payload);
203
- converted.at_utc_time = LegacyConversion.convertDateTime(legacyTransaction.at.utc_time);
204
- if (converted.hasOwnProperty("details") && Object.keys(converted.details).length === 0) {
205
- delete converted.details;
206
- }
207
- if (converted.details && converted.details.period) {
208
- converted.details.period.start = LegacyConversion.convertDateTime(converted.details.period.start);
209
- converted.details.period.end = LegacyConversion.convertDateTime(converted.details.period.end);
210
- }
211
- return converted;
212
- }
213
- convertBook(legacyStory, createdAt, contentHeadStubsById) {
214
- let payload = this.convertLegacyPayload(legacyStory);
215
- // Some very old book objects might be missing these properties
216
- if (legacyStory.payload.hasOwnProperty("cover_art_id")) {
217
- payload.cover_media_ref = legacyStory.payload.cover_art_id;
218
- delete payload.cover_art_id;
219
- }
220
- else {
221
- payload.cover_media_ref = null;
222
- }
223
- if (payload.hasOwnProperty("synopsis_id")) {
224
- payload.synopsis_ref = payload.synopsis_id;
225
- delete payload.synopsis_id;
226
- }
227
- else {
228
- payload.synopsis_ref = null; // TODO: we need to create a fragment!
229
- }
230
- payload.manuscript = this.convertStubArray(contentHeadStubsById, legacyStory.payload.manuscript);
231
- payload.notebook = this.convertStubArray(contentHeadStubsById, legacyStory.payload.notebook);
232
- payload.trash = this.convertStubArray(contentHeadStubsById, legacyStory.payload.trash);
233
- if (!payload.hasOwnProperty("export_options")) {
234
- payload.export_options = content_1.ExportOptionsModel.build(payload);
235
- }
236
- return {
237
- meta: this.convertMeta(legacyStory, createdAt, true),
238
- payload: payload
239
- };
240
- }
241
- convertCheckpoints(legacyCheckpoints) {
242
- // Create the checkpoint bodies
243
- let checkpoints = [];
244
- for (let i = 0; i < legacyCheckpoints.length; i++) {
245
- let legacyCheckpoint = legacyCheckpoints[i];
246
- // Checkpoints have the same timestamp for createdAt and updatedAt
247
- let createdAt = this.convertMetaAt(legacyCheckpoint);
248
- let kind = this.convertKind(legacyCheckpoint.kind);
249
- let converted;
250
- if (kind === ContentKind_1.ContentKind.FRAGMENT) {
251
- converted = this.convertFragment(legacyCheckpoint, createdAt, false);
252
- }
253
- else if (kind === ContentKind_1.ContentKind.COMMENT) {
254
- converted = this.convertComment(legacyCheckpoint, createdAt, false);
255
- }
256
- else if (kind === ContentKind_1.ContentKind.CONCEPT_ART) {
257
- converted = this.convertPictureToConceptArt(legacyCheckpoint, createdAt, false);
258
- }
259
- checkpoints.push(converted);
260
- }
261
- return checkpoints;
262
- }
263
- convertFragment(legacyFragment, createdAt, isHead) {
264
- let payload = this.convertRichTextPayload(legacyFragment);
265
- payload.book_ids = this.convertArrayOfLocators(legacyFragment.payload.stories);
266
- payload.gallery = this.convertArrayOfLocators(legacyFragment.payload.pictures);
267
- delete payload.stories;
268
- delete payload.pictures;
269
- delete payload.comments;
270
- // The IDs in the LegacyFragment were "picture" IDs, and "Picture" objects contained the data now split between
271
- // Media and ConceptArt objects. So now we need to generate "ConceptArt" IDs to go into this list. Media IDs are
272
- // the same as the Picture IDs from whence they sprung, but ConceptArt IDs are derived from Media IDs.
273
- for (let i = 0; i < payload.gallery.length; i++) {
274
- const mediaId = payload.gallery[i];
275
- payload.gallery[i] = ConceptArt_1.ConceptArt.makeConceptArtIdForMedia(mediaId);
276
- }
277
- // Connections have been updated to use refs instead of locators
278
- let connections = [];
279
- for (let i = 0; i < legacyFragment.payload.connections.length; i++) {
280
- let section = legacyFragment.payload.connections[i];
281
- connections.push({
282
- label: section.label,
283
- refs: this.convertArrayOfLocators(section.locators)
284
- });
285
- }
286
- payload.connections = connections;
287
- payload.robot_lock = null;
288
- return {
289
- meta: this.convertMeta(legacyFragment, createdAt, isHead),
290
- payload: payload
291
- };
292
- }
293
- convertPictureToMedia(legacyPicture, createdAt) {
294
- // Convert the payload
295
- let mediaPayload = Struct_1.Struct.clone(legacyPicture.payload);
296
- delete mediaPayload.name;
297
- delete mediaPayload.body;
298
- delete mediaPayload.format;
299
- delete mediaPayload.word_count;
300
- delete mediaPayload.cropping;
301
- delete mediaPayload.references;
302
- // Convert the meta
303
- let meta = this.convertMeta(legacyPicture, createdAt, true);
304
- meta.kind = ContentKind_1.ContentKind.MEDIA;
305
- return {
306
- meta: meta,
307
- payload: mediaPayload
308
- };
309
- }
310
- convertPictureToConceptArt(legacyPicture, createdAt, isHead) {
311
- let payload = this.convertRichTextPayload(legacyPicture);
312
- payload.media_ref = legacyPicture.id;
313
- delete payload.extension;
314
- delete payload.bytes;
315
- delete payload.width;
316
- delete payload.height;
317
- // All LegacyPicture objects have a one-to-one relationship with a pair of modern ConceptArt and Media objects.
318
- // But that won't necessarily always be the case in the future. Let's use a hash to create a new unique ID, but
319
- // one that doesn't necessarily invoke its prevenance at a glance. So in the future, we'll be able to generate
320
- // arbitrary ConceptArt objects without necessarily a one-to-one relationship with a corresponding Media object.
321
- let meta = this.convertMeta(legacyPicture, createdAt, isHead);
322
- meta.kind = ContentKind_1.ContentKind.CONCEPT_ART;
323
- meta.id = ConceptArt_1.ConceptArt.makeConceptArtIdForMedia(meta.id);
324
- meta.ref = isHead ? meta.id : Content_1.Content.makeContentRef(meta.id, meta.updated_at.utc_time);
325
- return {
326
- meta: meta,
327
- payload: payload
328
- };
329
- }
330
- convertComment(legacyComment, createdAt, isHead) {
331
- let meta = this.convertMeta(legacyComment, createdAt, isHead);
332
- let payload = this.convertRichTextPayload(legacyComment);
333
- payload.anchor = legacyComment.payload.anchor;
334
- return {
335
- meta: meta,
336
- payload: payload
337
- };
338
- }
339
- convertArrayOfLocators(locators) {
340
- let contentIds = new Array();
341
- for (let i = 0; i < locators.length; i++) {
342
- contentIds[i] = LegacyLocator_1.LegacyLocatorModel.headOf(locators[i]);
343
- }
344
- return contentIds;
345
- }
346
- convertActivityArray(activity, checkpointTable) {
347
- let newActivity = [];
348
- // The new Activity array only cares about fragments, comments, and pictures.
349
- for (let i = 0, len = activity.length; i < len; i++) {
350
- let activityEntry = activity[i];
351
- if (activityEntry.kind === LegacyContent_1.LegacyContentKind.FRAGMENT ||
352
- activityEntry.kind === LegacyContent_1.LegacyContentKind.COMMENT ||
353
- activityEntry.kind === LegacyContent_1.LegacyContentKind.PICTURE) {
354
- let convertedBefore = null;
355
- if (activityEntry.versions.before != null) {
356
- convertedBefore = checkpointTable.get(activityEntry.versions.before);
357
- }
358
- let convertedAfter = checkpointTable.get(activityEntry.versions.after);
359
- newActivity.push({
360
- kind: this.convertKind(activityEntry.kind),
361
- id: activityEntry.id,
362
- before: convertedBefore,
363
- after: convertedAfter,
364
- word_count: activityEntry.word_count
365
- });
366
- }
367
- }
368
- return newActivity;
369
- }
370
- convertStubArray(contentHeadStubsById, stubs) {
371
- let newStubArray = [];
372
- for (let i = 0, len = stubs.length; i < len; i++) {
373
- let stub = stubs[i];
374
- if (typeof (stub) === "string") {
375
- // If this stub is just a raw string (a rare legacy possibility), replace it with a real stub object.
376
- let contentId = LegacyLocator_1.LegacyLocatorModel.headOf(stub);
377
- if (contentHeadStubsById.has(contentId)) {
378
- newStubArray.push(Struct_1.Struct.clone(contentHeadStubsById.get(contentId)));
379
- }
380
- }
381
- else if (stub.kind === LegacyContent_1.LegacyContentKind.FOLDER) {
382
- // If this is a folder stub, just keep it. It doesn't need any changes.
383
- newStubArray.push(stub);
384
- }
385
- else if (stub) {
386
- // If this is a normal stub, replace it with the canonical version (with name & category included) from the lookup table.
387
- let contentStub = stub;
388
- let contentId = LegacyLocator_1.LegacyLocatorModel.headOf(contentStub.locator);
389
- if (contentHeadStubsById.has(contentId)) {
390
- let s = Struct_1.Struct.clone(contentHeadStubsById.get(contentId));
391
- newStubArray.push(s);
392
- if (contentStub.hasOwnProperty("parent") && contentStub.parent != null) {
393
- s.parent = LegacyLocator_1.LegacyLocatorModel.headOf(contentStub.parent);
394
- }
395
- }
396
- }
397
- }
398
- return newStubArray;
399
- }
400
- }
401
- exports.LegacyConversion = LegacyConversion;
@@ -1,21 +0,0 @@
1
- import { Category } from "../content/Category";
2
- import { LegacyBodyFormat, LegacyBodyFormatPayload } from "./LegacyBodyFormat";
3
- import { LegacyHeadLocator, LegacyLocator } from "./LegacyLocator";
4
- export interface LegacyConnection {
5
- label: string;
6
- locators: LegacyHeadLocator[];
7
- }
8
- export interface LegacyFragmentPayload extends LegacyBodyFormatPayload {
9
- name: string;
10
- category: Category;
11
- stories?: LegacyLocator[];
12
- books?: LegacyLocator[];
13
- comments: LegacyLocator[];
14
- pictures?: LegacyLocator[];
15
- gallery?: LegacyLocator[];
16
- connections: LegacyConnection[];
17
- word_count: number;
18
- }
19
- export interface LegacyFragment extends LegacyBodyFormat {
20
- payload: LegacyFragmentPayload;
21
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,8 +0,0 @@
1
- export type LegacyHeadLocator = string;
2
- export type LegacyLocator = string;
3
- export declare class LegacyLocatorModel {
4
- static isHead(locator: LegacyLocator): boolean;
5
- static headOf(locator: LegacyLocator): LegacyHeadLocator;
6
- static seqOf(locator: LegacyLocator): number;
7
- static create(id: LegacyHeadLocator, seq?: number): LegacyLocator;
8
- }
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LegacyLocatorModel = void 0;
4
- class LegacyLocatorModel {
5
- static isHead(locator) {
6
- let parts = locator.split('-');
7
- return parts.length === 1;
8
- }
9
- static headOf(locator) {
10
- let parts = locator.split('-');
11
- return parts[0];
12
- }
13
- static seqOf(locator) {
14
- let parts = locator.split('-');
15
- if (parts.length > 1) {
16
- return Number(parts[1]);
17
- }
18
- else {
19
- return null;
20
- }
21
- }
22
- static create(id, seq) {
23
- if (typeof (seq) === "number") {
24
- return id + "-" + seq;
25
- }
26
- else {
27
- return id;
28
- }
29
- }
30
- }
31
- exports.LegacyLocatorModel = LegacyLocatorModel;
@@ -1,16 +0,0 @@
1
- import { OutboundChannel, OutboundMessage } from "../OutboundMessage";
2
- import { LegacyDateTime } from "./LegacyContent";
3
- export interface LegacyOutboundMessage {
4
- id: string;
5
- at_utc_time: LegacyDateTime;
6
- user_id: string;
7
- campaign: string;
8
- channel: OutboundChannel;
9
- template: string;
10
- recipient: string;
11
- dryrun: boolean;
12
- params: any;
13
- }
14
- export declare class LegacyOutboundMessageModel {
15
- static toLegacy(message: OutboundMessage): LegacyOutboundMessage;
16
- }
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LegacyOutboundMessageModel = void 0;
4
- const Struct_1 = require("../../util/Struct");
5
- const LegacyContent_1 = require("./LegacyContent");
6
- class LegacyOutboundMessageModel {
7
- static toLegacy(message) {
8
- let legacy = Struct_1.Struct.clone(message);
9
- legacy.at_utc_time = LegacyContent_1.LegacyClock.fromCompact(message.at_utc_time);
10
- return legacy;
11
- }
12
- }
13
- exports.LegacyOutboundMessageModel = LegacyOutboundMessageModel;
@@ -1,14 +0,0 @@
1
- import { MediaCropping, MediaDimensions } from "../content/Media";
2
- import { LegacyBodyFormat, LegacyBodyFormatPayload } from "./LegacyBodyFormat";
3
- import { LegacyLocator } from "./LegacyLocator";
4
- export interface LegacyPicturePayload extends LegacyBodyFormatPayload, MediaDimensions {
5
- name: string;
6
- extension: string;
7
- references: LegacyLocator[];
8
- bytes: number;
9
- cropping: MediaCropping;
10
- word_count: number;
11
- }
12
- export interface LegacyPicture extends LegacyBodyFormat {
13
- payload: LegacyPicturePayload;
14
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,9 +0,0 @@
1
- import { LegacyContent } from "./LegacyContent";
2
- import { LegacyHeadLocator } from "./LegacyLocator";
3
- export interface LegacyProfilePayload {
4
- full_name: string;
5
- avatar: LegacyHeadLocator;
6
- }
7
- export interface LegacyProfile extends LegacyContent {
8
- payload: LegacyProfilePayload;
9
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,41 +0,0 @@
1
- import { ContentId, GeoLocation, Screens, StorageDevice, Versions } from "../content";
2
- import { LegacyContent, LegacyContentKind, LegacyMultiTime } from "./LegacyContent";
3
- import { LegacyHeadLocator, LegacyLocator } from "./LegacyLocator";
4
- export interface LegacyActivityVersions {
5
- before: LegacyLocator | null;
6
- after: LegacyLocator;
7
- }
8
- export interface LegacyActivity {
9
- kind: LegacyContentKind;
10
- id: LegacyHeadLocator;
11
- versions: LegacyActivityVersions;
12
- word_count?: number;
13
- total_word_count?: number;
14
- }
15
- export interface MinutesOf {
16
- total: number;
17
- }
18
- export interface LegacySessionPayload {
19
- start: LegacyMultiTime;
20
- tz_offset: number;
21
- minutes_of: MinutesOf;
22
- environment: LegacyEnvironment;
23
- word_count: number;
24
- activity: LegacyActivity[];
25
- }
26
- export interface LegacyEnvironment {
27
- device_id: ContentId;
28
- versions: Versions;
29
- memory: number;
30
- storage: StorageDevice[];
31
- screens: Screens;
32
- language: string;
33
- location: GeoLocation;
34
- }
35
- export interface LegacySession extends LegacyContent {
36
- payload: LegacySessionPayload;
37
- }
38
- export declare class LegacyActivityModel {
39
- static summarize(content: LegacyContent, prev: LegacyContent): LegacyActivity;
40
- static addMetricsChangeToSummary(summary: LegacyActivity, content: LegacyContent, prev: LegacyContent, metricsName: "word_count" | "total_word_count"): void;
41
- }
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LegacyActivityModel = void 0;
4
- class LegacyActivityModel {
5
- static summarize(content, prev) {
6
- // TODO: the activity stream will eventually contain all sorts of interesting
7
- // stuff about renaming content items, changing map positions, adding and removing
8
- // pictures, etc. But for now, let's just keep it limited to word-counting.
9
- // It only makes sense to summarize the change-activity if these two content items have the same ID
10
- if (prev != null && prev.id !== content.id) {
11
- throw new Error("can\x27t summarize activity for content with disjunct ids: " + prev.id + ", " + content.id);
12
- }
13
- let summary = {
14
- "kind": content.kind,
15
- "id": content.id,
16
- "versions": {
17
- "before": prev == null ? null : prev.locator,
18
- "after": content.locator
19
- }
20
- };
21
- LegacyActivityModel.addMetricsChangeToSummary(summary, content, prev, "word_count");
22
- LegacyActivityModel.addMetricsChangeToSummary(summary, content, prev, "total_word_count");
23
- return summary;
24
- }
25
- static addMetricsChangeToSummary(summary, content, prev, metricsName) {
26
- if (content.payload.hasOwnProperty(metricsName)) {
27
- let wordCountChange = content.payload[metricsName];
28
- if (prev !== null && prev.payload.hasOwnProperty(metricsName)) {
29
- wordCountChange -= prev.payload[metricsName];
30
- }
31
- summary[metricsName] = wordCountChange;
32
- }
33
- }
34
- }
35
- exports.LegacyActivityModel = LegacyActivityModel;