core-3nweb-client-lib 0.50.5 → 0.51.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.
- package/build/api-defs/asmail.d.ts +2 -0
- package/build/core/asmail/asmail-cap-ipc.js +4 -2
- package/build/core/asmail/inbox/msg-indexing/dataset/v1/sql-db.js +7 -4
- package/build/core/asmail/index.d.ts +1 -0
- package/build/core/asmail/index.js +4 -1
- package/build/core/storage/common/obj-info-file.js +4 -1
- package/build/lib-client/service-locator.d.ts +1 -1
- package/build/lib-client/service-locator.js +8 -2
- package/build/tests/caps-api/asmail.js +11 -0
- package/package.json +2 -2
|
@@ -58,7 +58,8 @@ function exposeASMailCAP(cap, expServices) {
|
|
|
58
58
|
removeMsg: removeMsg.wrapService(box.removeMsg),
|
|
59
59
|
subscribe: inboxSubscribe.wrapService(box.subscribe, expServices)
|
|
60
60
|
},
|
|
61
|
-
config: exposeConfigCAP(cap.config)
|
|
61
|
+
config: exposeConfigCAP(cap.config),
|
|
62
|
+
getReportAddressForDomain: (0, service_side_wrap_1.wrapReqReplyFunc)(cap, cap.getReportAddressForDomain)
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
}
|
|
@@ -83,7 +84,8 @@ function makeASMailBasedOnListing(caller, objPath, capLists) {
|
|
|
83
84
|
removeMsg: removeMsg.makeCaller(caller, inboxPath),
|
|
84
85
|
subscribe: inboxSubscribe.makeCaller(caller, inboxPath)
|
|
85
86
|
},
|
|
86
|
-
config: makeConfigCaller(caller, objPath.concat('config'))
|
|
87
|
+
config: makeConfigCaller(caller, objPath.concat('config')),
|
|
88
|
+
getReportAddressForDomain: (0, caller_side_wrap_1.makeReqRepFuncCaller)(caller, objPath.concat('getReportAddressForDomain'))
|
|
87
89
|
};
|
|
88
90
|
}
|
|
89
91
|
else if (capLists === 'preflight') {
|
|
@@ -169,16 +169,19 @@ async function fileTSsOfDBShards(dbsFS) {
|
|
|
169
169
|
if (!isFile || !name.endsWith(DB_EXT)) {
|
|
170
170
|
continue;
|
|
171
171
|
}
|
|
172
|
-
const numStr = name.substring(0, DB_EXT.length);
|
|
172
|
+
const numStr = name.substring(0, name.length - DB_EXT.length);
|
|
173
173
|
const fileTS = parseInt(numStr);
|
|
174
174
|
if (isNaN(fileTS)) {
|
|
175
175
|
continue;
|
|
176
176
|
}
|
|
177
177
|
fileTSs.push(fileTS);
|
|
178
178
|
}
|
|
179
|
-
fileTSs.sort();
|
|
179
|
+
fileTSs.sort(compareNumbers);
|
|
180
180
|
return fileTSs;
|
|
181
181
|
}
|
|
182
|
+
function compareNumbers(a, b) {
|
|
183
|
+
return a - b;
|
|
184
|
+
}
|
|
182
185
|
const DB_EXT = '.sqlite';
|
|
183
186
|
const LATEST_DB = `latest${DB_EXT}`;
|
|
184
187
|
const MSG_INDEX_DB_ATTR = `msg-index-db`;
|
|
@@ -267,7 +270,7 @@ async function makeSqliteDBs(dbsFS) {
|
|
|
267
270
|
}
|
|
268
271
|
async function* iterateDBsFromLatestToOldest() {
|
|
269
272
|
yield { db: latest };
|
|
270
|
-
for (let i = (fileTSs.length - 1); i >= 0; i
|
|
273
|
+
for (let i = (fileTSs.length - 1); i >= 0; i -= 1) {
|
|
271
274
|
const fileTS = fileTSs[i];
|
|
272
275
|
if (!fileTS) {
|
|
273
276
|
continue;
|
|
@@ -365,7 +368,7 @@ async function makeSqliteDBs(dbsFS) {
|
|
|
365
368
|
if (!shardTS) {
|
|
366
369
|
return;
|
|
367
370
|
}
|
|
368
|
-
for (let i = fileTSs.length; i >= 0; i
|
|
371
|
+
for (let i = fileTSs.length; i >= 0; i -= 1) {
|
|
369
372
|
const ts = fileTSs[i];
|
|
370
373
|
if (ts < shardTS) {
|
|
371
374
|
fileTSs.slice(i + 1, shardTS);
|
|
@@ -23,6 +23,7 @@ export declare class ASMail {
|
|
|
23
23
|
private delivery;
|
|
24
24
|
private config;
|
|
25
25
|
private sendingParams;
|
|
26
|
+
private getReportAddressForDomain;
|
|
26
27
|
constructor(cryptor: AsyncSBoxCryptor, random: AsyncRNG, makeNet: MakeNet, inboxPathForUser: InboxPathForUser, logger: Logger);
|
|
27
28
|
init(address: string, getSigner: GetSigner, syncedFS: WritableFS, localFS: WritableFS, getStorages: StorageGetter, makeResolver: ServiceLocatorMaker, config: ConfigOfASMailServer, keyring: KeyringForASMail): Promise<void>;
|
|
28
29
|
private setupSendingParams;
|
|
@@ -38,11 +38,13 @@ class ASMail {
|
|
|
38
38
|
this.delivery = undefined;
|
|
39
39
|
this.config = undefined;
|
|
40
40
|
this.sendingParams = undefined;
|
|
41
|
+
this.getReportAddressForDomain = undefined;
|
|
41
42
|
Object.seal(this);
|
|
42
43
|
}
|
|
43
44
|
async init(address, getSigner, syncedFS, localFS, getStorages, makeResolver, config, keyring) {
|
|
44
45
|
try {
|
|
45
46
|
this.address = address;
|
|
47
|
+
this.getReportAddressForDomain = makeResolver('report', this.logger.logError);
|
|
46
48
|
// XXX this should be part of proper syncing logic
|
|
47
49
|
// await getRemoteFolderChanges(syncedFS);
|
|
48
50
|
this.config = config;
|
|
@@ -112,7 +114,8 @@ class ASMail {
|
|
|
112
114
|
getUserId: async () => this.address,
|
|
113
115
|
delivery: this.delivery.makeCAP(),
|
|
114
116
|
inbox: this.inbox.makeCAP(),
|
|
115
|
-
config: this.config.makeCAP()
|
|
117
|
+
config: this.config.makeCAP(),
|
|
118
|
+
getReportAddressForDomain: this.getReportAddressForDomain
|
|
116
119
|
};
|
|
117
120
|
return Object.freeze(w);
|
|
118
121
|
}
|
|
@@ -160,9 +160,12 @@ function addArchived(versions, version) {
|
|
|
160
160
|
return false;
|
|
161
161
|
}
|
|
162
162
|
versions.archived.push(version);
|
|
163
|
-
versions.archived.sort();
|
|
163
|
+
versions.archived.sort(compareNumbers);
|
|
164
164
|
return true;
|
|
165
165
|
}
|
|
166
|
+
function compareNumbers(a, b) {
|
|
167
|
+
return a - b;
|
|
168
|
+
}
|
|
166
169
|
function isEmptyVersions(versions) {
|
|
167
170
|
if (versions.current) {
|
|
168
171
|
return false;
|
|
@@ -28,7 +28,7 @@ export declare function mailerIdInfoAt(client: NetClient, url: string): Promise<
|
|
|
28
28
|
*/
|
|
29
29
|
export declare function storageInfoAt(client: NetClient, url: string): Promise<StorageRootRoute>;
|
|
30
30
|
export type ServiceTypeDNSLabel = 'mailerid' | 'asmail' | '3nstorage';
|
|
31
|
-
export type ServiceLocatorMaker = (serviceLabel: ServiceTypeDNSLabel, logError: LogError) => ServiceLocator;
|
|
31
|
+
export type ServiceLocatorMaker = (serviceLabel: ServiceTypeDNSLabel | 'report', logError: LogError) => ServiceLocator;
|
|
32
32
|
export type ServiceLocator = (address: string) => Promise<string>;
|
|
33
33
|
export interface DnsResolver {
|
|
34
34
|
resolveTxt: (typeof dnsPromises)['resolveTxt'];
|
|
@@ -188,7 +188,8 @@ function extractPair(txtRecords, serviceLabel) {
|
|
|
188
188
|
const recordsStarts = {
|
|
189
189
|
"3nstorage": '3nstorage=',
|
|
190
190
|
asmail: 'asmail=',
|
|
191
|
-
mailerid: 'mailerid='
|
|
191
|
+
mailerid: 'mailerid=',
|
|
192
|
+
report: 'report='
|
|
192
193
|
};
|
|
193
194
|
function getRecordAtStartOf(txt) {
|
|
194
195
|
let service = undefined;
|
|
@@ -276,7 +277,12 @@ function makeServiceLocator(...resolvers) {
|
|
|
276
277
|
}
|
|
277
278
|
const recValue = extractPair(txtRecords, serviceLabel);
|
|
278
279
|
if (recValue) {
|
|
279
|
-
|
|
280
|
+
if (serviceLabel === 'report') {
|
|
281
|
+
return recValue;
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
return checkAndPrepareURL(recValue);
|
|
285
|
+
}
|
|
280
286
|
}
|
|
281
287
|
else {
|
|
282
288
|
exc !== null && exc !== void 0 ? exc : (exc = noServiceRecordExc(address));
|
|
@@ -21,6 +21,7 @@ const setups_1 = require("../libs-for-tests/setups");
|
|
|
21
21
|
const spec_module_1 = require("../libs-for-tests/spec-module");
|
|
22
22
|
const path_1 = require("path");
|
|
23
23
|
const assert_1 = require("../../lib-common/assert");
|
|
24
|
+
const canonical_address_1 = require("../../lib-common/canonical-address");
|
|
24
25
|
describe('ASMail', () => {
|
|
25
26
|
const s = (0, setups_1.setupWithUsers)(true, ['Bob Perkins @company.inc', 'John Morrison @bank.com']);
|
|
26
27
|
beforeAll(() => {
|
|
@@ -35,6 +36,7 @@ describe('ASMail', () => {
|
|
|
35
36
|
expect(typeof w3n.mail.inbox).toBe('object');
|
|
36
37
|
expect(typeof w3n.mail.config).toBe('object');
|
|
37
38
|
expect(typeof w3n.mail.getUserId).toBe('function');
|
|
39
|
+
expect(typeof w3n.mail.getReportAddressForDomain).toBe('function');
|
|
38
40
|
}
|
|
39
41
|
}, undefined, s);
|
|
40
42
|
(0, jasmine_utils_1.itCond)('gets current user id', async () => {
|
|
@@ -82,5 +84,14 @@ describe('ASMail', () => {
|
|
|
82
84
|
expect(msgs.length).toBe(0);
|
|
83
85
|
}
|
|
84
86
|
}, undefined, s);
|
|
87
|
+
(0, jasmine_utils_1.itCond)('hosts report address getting', async () => {
|
|
88
|
+
(0, assert_1.assert)(s.users.length > 0);
|
|
89
|
+
for (const u of s.users) {
|
|
90
|
+
const w3n = s.testAppCapsByUser(u);
|
|
91
|
+
const address = await w3n.mail.getUserId();
|
|
92
|
+
expect(typeof address).toBe('string');
|
|
93
|
+
expect((0, canonical_address_1.checkAndTransformAddress)(address)).toBeTruthy();
|
|
94
|
+
}
|
|
95
|
+
}, undefined, s);
|
|
85
96
|
(0, spec_module_1.loadSpecs)(s, (0, path_1.join)(__dirname, 'asmail', 'specs'));
|
|
86
97
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "core-3nweb-client-lib",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.51.0",
|
|
4
4
|
"description": "3NWeb client core library, embeddable into different environments",
|
|
5
5
|
"main": "build/lib-index.js",
|
|
6
6
|
"types": "build/lib-index.d.ts",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"lodash": "^4.18.1",
|
|
52
52
|
"napi-nacl": "^1.2.1",
|
|
53
53
|
"protobufjs-cli": "^1.0.2",
|
|
54
|
-
"spec-3nweb-server": "^1.8.
|
|
54
|
+
"spec-3nweb-server": "^1.8.11",
|
|
55
55
|
"tsuml2": "^0.17.1",
|
|
56
56
|
"typescript": "^5.5.3"
|
|
57
57
|
}
|