spec-3nweb-server 1.6.0 → 1.6.3
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/3nstorage/resources/store.js +6 -4
- package/build/3nstorage/routes/owner/archive-obj-version.js +11 -4
- package/build/3nstorage/routes/owner/put-current-obj.js +2 -3
- package/build/lib-common/service-api/3nstorage/owner.d.ts +8 -9
- package/build/lib-common/service-api/3nstorage/owner.js +2 -1
- package/package.json +1 -1
|
@@ -153,10 +153,12 @@ class Store extends user_files_1.UserFiles {
|
|
|
153
153
|
await spaceTracker.change(this, byteLen);
|
|
154
154
|
}
|
|
155
155
|
const params = {
|
|
156
|
-
isNewObj: opts.create,
|
|
157
156
|
version: opts.ver,
|
|
158
157
|
baseVersion: (diff ? diff.baseVersion : undefined)
|
|
159
158
|
};
|
|
159
|
+
if (opts.ver === 1) {
|
|
160
|
+
params.isNewObj = true;
|
|
161
|
+
}
|
|
160
162
|
const trans = await this.transactions.startNew(objId, params);
|
|
161
163
|
let file;
|
|
162
164
|
try {
|
|
@@ -401,7 +403,7 @@ class Store extends user_files_1.UserFiles {
|
|
|
401
403
|
throw exports.SC.OBJ_UNKNOWN;
|
|
402
404
|
}
|
|
403
405
|
if (status.currentVersion !== version) {
|
|
404
|
-
throw
|
|
406
|
+
throw makeMismatchedObjVerException(status.currentVersion);
|
|
405
407
|
}
|
|
406
408
|
const arch = status.archivedVersions;
|
|
407
409
|
if (Array.isArray(arch)) {
|
|
@@ -653,7 +655,7 @@ class ObjTransactions {
|
|
|
653
655
|
if (status.state !== 'current') {
|
|
654
656
|
throw exports.SC.OBJ_UNKNOWN;
|
|
655
657
|
}
|
|
656
|
-
else if (trans.version
|
|
658
|
+
else if (trans.version !== (status.currentVersion + 1)) {
|
|
657
659
|
throw makeMismatchedObjVerException(status.currentVersion);
|
|
658
660
|
}
|
|
659
661
|
}
|
|
@@ -728,7 +730,7 @@ class ObjTransactions {
|
|
|
728
730
|
Object.freeze(ObjStatuses.prototype);
|
|
729
731
|
Object.freeze(ObjStatuses);
|
|
730
732
|
function toFName(version) {
|
|
731
|
-
return `${version}
|
|
733
|
+
return `${version}.v`;
|
|
732
734
|
}
|
|
733
735
|
function noop() { }
|
|
734
736
|
Object.freeze(exports);
|
|
@@ -38,10 +38,17 @@ function archiveCurrentObjVersion(root, archiveObjVerFunc) {
|
|
|
38
38
|
}
|
|
39
39
|
catch (err) {
|
|
40
40
|
if ("string" !== typeof err) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
if (err.type === 'mismatched-obj-ver') {
|
|
42
|
+
const rep = {
|
|
43
|
+
error: "Current object version doesn't match assumed one.",
|
|
44
|
+
current_version: err.current_version
|
|
45
|
+
};
|
|
46
|
+
res.set(owner_1.HTTP_HEADER.objVersion, `${err.current_version}`);
|
|
47
|
+
res.status(owner_1.archiveObj.SC.mismatchedObjVer).json(rep);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
next(err);
|
|
51
|
+
}
|
|
45
52
|
}
|
|
46
53
|
else if (err === users_1.SC.OBJ_UNKNOWN) {
|
|
47
54
|
res.status(SC.unknownObj).send(root ?
|
|
@@ -53,7 +53,7 @@ function saveCurrentObj(root, saveObjFunc, chunkLimit) {
|
|
|
53
53
|
const { fstReq, sndReq } = opts;
|
|
54
54
|
let diff;
|
|
55
55
|
if (fstReq) {
|
|
56
|
-
if (
|
|
56
|
+
if (!root && objId) {
|
|
57
57
|
if (!buffer_utils_1.base64urlSafe.allCharsFromAlphabet(objId)) {
|
|
58
58
|
return replyToMalformed(req, "Bad object id", res);
|
|
59
59
|
}
|
|
@@ -171,7 +171,6 @@ function extractQueryOptions(req) {
|
|
|
171
171
|
// this is the first request
|
|
172
172
|
// query fields are string or undefined, yet, type info helps the show
|
|
173
173
|
const query = req.query;
|
|
174
|
-
const create = (query.create === 'true');
|
|
175
174
|
const ver = parseInt(query.ver);
|
|
176
175
|
if (isNaN(ver) || (ver < 1)) {
|
|
177
176
|
return;
|
|
@@ -187,7 +186,7 @@ function extractQueryOptions(req) {
|
|
|
187
186
|
return;
|
|
188
187
|
}
|
|
189
188
|
const last = (query.last === 'true');
|
|
190
|
-
return { fstReq: { diff, header, last, ver
|
|
189
|
+
return { fstReq: { diff, header, last, ver } };
|
|
191
190
|
}
|
|
192
191
|
}
|
|
193
192
|
function getContentLenOrSendError(req, res, maxChunkSize) {
|
|
@@ -66,10 +66,6 @@ export interface GetObjQueryOpts {
|
|
|
66
66
|
ver?: number;
|
|
67
67
|
}
|
|
68
68
|
export interface PutObjFirstQueryOpts {
|
|
69
|
-
/**
|
|
70
|
-
* This is a flag to indicate that new object should be created.
|
|
71
|
-
*/
|
|
72
|
-
create?: boolean;
|
|
73
69
|
/**
|
|
74
70
|
* This parameter is object's new version.
|
|
75
71
|
*/
|
|
@@ -132,9 +128,10 @@ export declare namespace currentObj {
|
|
|
132
128
|
mismatchedObjVer: number;
|
|
133
129
|
objIncomplete: number;
|
|
134
130
|
};
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
131
|
+
type MismatchedObjVerReply = MismatchedObjVerErrReply;
|
|
132
|
+
}
|
|
133
|
+
export interface MismatchedObjVerErrReply extends ErrorReply {
|
|
134
|
+
current_version: number;
|
|
138
135
|
}
|
|
139
136
|
export declare namespace currentRootObj {
|
|
140
137
|
const EXPRESS_URL_END = "root/current";
|
|
@@ -240,23 +237,25 @@ export declare namespace rootStatus {
|
|
|
240
237
|
export declare namespace archiveObj {
|
|
241
238
|
const EXPRESS_URL_END = "obj/:objId/archive";
|
|
242
239
|
function postAndDelReqUrlEnd(objId: string, version: number): string;
|
|
243
|
-
type
|
|
240
|
+
type MismatchedObjVerReply = MismatchedObjVerErrReply;
|
|
244
241
|
const SC: {
|
|
245
242
|
okPost: number;
|
|
246
243
|
okDelete: number;
|
|
247
244
|
unknownObj: number;
|
|
248
245
|
unknownObjVer: number;
|
|
246
|
+
mismatchedObjVer: number;
|
|
249
247
|
};
|
|
250
248
|
}
|
|
251
249
|
export declare namespace archiveRoot {
|
|
252
250
|
const EXPRESS_URL_END = "root/archive";
|
|
253
251
|
function postAndDelReqUrlEnd(version: number): string;
|
|
254
|
-
type
|
|
252
|
+
type MismatchedObjVerReply = archiveObj.MismatchedObjVerReply;
|
|
255
253
|
const SC: {
|
|
256
254
|
okPost: number;
|
|
257
255
|
okDelete: number;
|
|
258
256
|
unknownObj: number;
|
|
259
257
|
unknownObjVer: number;
|
|
258
|
+
mismatchedObjVer: number;
|
|
260
259
|
};
|
|
261
260
|
}
|
|
262
261
|
export interface ErrorReply {
|
|
@@ -258,7 +258,8 @@ var archiveObj;
|
|
|
258
258
|
okPost: 200,
|
|
259
259
|
okDelete: 200,
|
|
260
260
|
unknownObj: 474,
|
|
261
|
-
unknownObjVer: 494
|
|
261
|
+
unknownObjVer: 494,
|
|
262
|
+
mismatchedObjVer: 495
|
|
262
263
|
};
|
|
263
264
|
})(archiveObj = exports.archiveObj || (exports.archiveObj = {}));
|
|
264
265
|
Object.freeze(archiveObj);
|