@antelopejs/interface-dms 0.14.0 → 0.14.1
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/CHANGELOG.md +35 -0
- package/dist/db/internal/inviteResolutions.model.d.ts +13 -0
- package/dist/db/internal/inviteResolutions.model.js +38 -0
- package/dist/db/internal/inviteResolutions.model.js.map +1 -1
- package/dist/internal/invite-resolution.js +5 -2
- package/dist/internal/invite-resolution.js.map +1 -1
- package/dist/invites.js +35 -4
- package/dist/invites.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.14.1
|
|
4
|
+
|
|
5
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.14.0...v0.14.1)
|
|
6
|
+
|
|
7
|
+
### 🩹 Fixes
|
|
8
|
+
|
|
9
|
+
- **dms:** Restrict credential files to their owner on Windows ([#1008](https://github.com/AntelopeJS/dms/pull/1008))
|
|
10
|
+
- **dms:** Keep a logo file the app config builds with +, concat or join ([#1024](https://github.com/AntelopeJS/dms/pull/1024))
|
|
11
|
+
- **interface-dms:** Keep one pending invite when a cancel, accept or expiry lands during a fresh invite's withdrawal ([#1021](https://github.com/AntelopeJS/dms/pull/1021))
|
|
12
|
+
- **dms:** Install a scaffolded module outside the project's pnpm workspace ([#1022](https://github.com/AntelopeJS/dms/pull/1022))
|
|
13
|
+
- **dms:** Check preview_blocks sketches with the mockup compiler's sanitizer and publish it as @antelopejs/dms/sketch ([#1009](https://github.com/AntelopeJS/dms/pull/1009))
|
|
14
|
+
|
|
15
|
+
### 📖 Documentation
|
|
16
|
+
|
|
17
|
+
- **interface-dms-builder:** Say when a second catalog provider needs exportPriority or a pin ([#1026](https://github.com/AntelopeJS/dms/pull/1026))
|
|
18
|
+
|
|
19
|
+
### 🏡 Chore
|
|
20
|
+
|
|
21
|
+
- **release:** @antelopejs/interface-dms-builder v0.5.1 ([77d48d67](https://github.com/AntelopeJS/dms/commit/77d48d67))
|
|
22
|
+
- **release:** @antelopejs/dms v0.20.0 ([b540c6be](https://github.com/AntelopeJS/dms/commit/b540c6be))
|
|
23
|
+
|
|
24
|
+
### ✅ Tests
|
|
25
|
+
|
|
26
|
+
- **dms:** Let the invite host take any zod 3.x and spawn npm through its Windows shim ([#1023](https://github.com/AntelopeJS/dms/pull/1023))
|
|
27
|
+
- **dms:** Load TableView in the table runtime setup, not the first test ([#1025](https://github.com/AntelopeJS/dms/pull/1025))
|
|
28
|
+
- **dms:** Acknowledge test MongoDB writes on apply so Windows integration runs stop stalling ([#1027](https://github.com/AntelopeJS/dms/pull/1027))
|
|
29
|
+
|
|
30
|
+
### 🤖 CI
|
|
31
|
+
|
|
32
|
+
- Run the CI on Windows in parallel with Linux ([#906](https://github.com/AntelopeJS/dms/pull/906))
|
|
33
|
+
|
|
34
|
+
### ❤️ Contributors
|
|
35
|
+
|
|
36
|
+
- Antony Rizzitelli ([@Upd4ting](http://github.com/Upd4ting))
|
|
37
|
+
|
|
3
38
|
## v0.14.0
|
|
4
39
|
|
|
5
40
|
[compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.13.3...v0.14.0)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type InviteMembershipPhase, InviteResolution } from "../tables/inviteResolutions.table";
|
|
2
|
+
import type { UserInvite } from "../tables/user_invites.table";
|
|
2
3
|
import type { InviteDecision } from "../models/inviteResolutions.model";
|
|
3
4
|
declare const InviteResolutionsModel_base: {
|
|
4
5
|
new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
|
|
@@ -36,6 +37,18 @@ export declare class InviteResolutionsModel extends InviteResolutionsModel_base
|
|
|
36
37
|
getForToken(token: string): Promise<InviteResolution | undefined>;
|
|
37
38
|
/** Reads the canonical decision even after a lost insert acknowledgement. */
|
|
38
39
|
decide(input: InviteDecision): Promise<InviteResolution>;
|
|
40
|
+
/**
|
|
41
|
+
* Claims the decision of a fresh invite that lost its email to a rival, so
|
|
42
|
+
* no replacement can be decided on it once it is withdrawn. The claim is
|
|
43
|
+
* stored completed: a withdrawn invite was never announced, so no hook
|
|
44
|
+
* reports its removal.
|
|
45
|
+
*
|
|
46
|
+
* @returns The invite's decision, and whether this call recorded it
|
|
47
|
+
*/
|
|
48
|
+
withdraw(tenantId: string, invite: UserInvite): Promise<{
|
|
49
|
+
resolution: InviteResolution;
|
|
50
|
+
claimed: boolean;
|
|
51
|
+
}>;
|
|
39
52
|
/** Advances a membership stage only against the exact observed revision. */
|
|
40
53
|
advanceMembership(resolution: InviteResolution, membershipPhase: InviteMembershipPhase, field?: "membershipPhase" | "replacementPhase"): Promise<boolean>;
|
|
41
54
|
}
|
|
@@ -67,6 +67,44 @@ class InviteResolutionsModel extends (0, interface_database_decorators_1.BasicDa
|
|
|
67
67
|
}
|
|
68
68
|
return resolution;
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Claims the decision of a fresh invite that lost its email to a rival, so
|
|
72
|
+
* no replacement can be decided on it once it is withdrawn. The claim is
|
|
73
|
+
* stored completed: a withdrawn invite was never announced, so no hook
|
|
74
|
+
* reports its removal.
|
|
75
|
+
*
|
|
76
|
+
* @returns The invite's decision, and whether this call recorded it
|
|
77
|
+
*/
|
|
78
|
+
async withdraw(tenantId, invite) {
|
|
79
|
+
const id = decisionId(tenantId, invite._id);
|
|
80
|
+
const revision = (0, node_crypto_1.randomUUID)();
|
|
81
|
+
let insertError;
|
|
82
|
+
try {
|
|
83
|
+
await this.insert({
|
|
84
|
+
tenantId,
|
|
85
|
+
invite,
|
|
86
|
+
inviteToken: invite.token,
|
|
87
|
+
reason: "cancelled",
|
|
88
|
+
extensionKeys: [],
|
|
89
|
+
_id: id,
|
|
90
|
+
userId: null,
|
|
91
|
+
replacement: null,
|
|
92
|
+
revision,
|
|
93
|
+
membershipPhase: "pending",
|
|
94
|
+
replacementPhase: "pending",
|
|
95
|
+
completed: true,
|
|
96
|
+
decidedAt: new Date(),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
insertError = error;
|
|
101
|
+
}
|
|
102
|
+
const resolution = await this.get(id);
|
|
103
|
+
if (!resolution) {
|
|
104
|
+
throw insertError ?? new Error("Invite withdrawal was not persisted");
|
|
105
|
+
}
|
|
106
|
+
return { resolution, claimed: resolution.revision === revision };
|
|
107
|
+
}
|
|
70
108
|
/** Advances a membership stage only against the exact observed revision. */
|
|
71
109
|
async advanceMembership(resolution, membershipPhase, field = "membershipPhase") {
|
|
72
110
|
const nextRevision = (0, node_crypto_1.randomUUID)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inviteResolutions.model.js","sourceRoot":"","sources":["../../../src/db/internal/inviteResolutions.model.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6FAA2E;AAC3E,+EAG2C;
|
|
1
|
+
{"version":3,"file":"inviteResolutions.model.js","sourceRoot":"","sources":["../../../src/db/internal/inviteResolutions.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,11 @@ async function completeAdmittedInviteResolution(resolution) {
|
|
|
30
30
|
const current = await model.get(resolution._id);
|
|
31
31
|
if (!current)
|
|
32
32
|
throw new Error("Invite decision disappeared");
|
|
33
|
-
|
|
33
|
+
const invites = (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, current.tenantId);
|
|
34
|
+
if (current.completed) {
|
|
35
|
+
await invites.delete(current.invite._id);
|
|
34
36
|
return;
|
|
37
|
+
}
|
|
35
38
|
requireExtensions(current);
|
|
36
39
|
if (current.reason === "accepted")
|
|
37
40
|
await deliverAcceptance(current);
|
|
@@ -44,7 +47,7 @@ async function completeAdmittedInviteResolution(resolution) {
|
|
|
44
47
|
deliveryId: current._id,
|
|
45
48
|
});
|
|
46
49
|
await (0, invite_replacement_1.ensureInviteReplacement)(current);
|
|
47
|
-
await
|
|
50
|
+
await invites.delete(current.invite._id);
|
|
48
51
|
await model.update(current._id, { completed: true });
|
|
49
52
|
}
|
|
50
53
|
//# sourceMappingURL=invite-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../../src/internal/invite-resolution.ts"],"names":[],"mappings":";;AAmCA,
|
|
1
|
+
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../../src/internal/invite-resolution.ts"],"names":[],"mappings":";;AAmCA,4EAwBC;AA3DD,6FAAqE;AACrE,oFAAgF;AAEhF,wEAAkE;AAClE,oCAA8C;AAC9C,qEAA8E;AAC9E,qEAAiF;AACjF,2DAA6D;AAC7D,6DAA+D;AAE/D,SAAS,iBAAiB,CAAC,UAA4B;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,IAAA,+BAAoB,GAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACzD,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAA4B;IAC3D,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAsB,EAAC,UAAU,CAAC,CAAC;IACxD,MAAM,IAAA,kCAAuB,EAC3B,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,MAAM,EACN;QACE,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;QAC9B,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG;QAC/B,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;AACJ,CAAC;AAED,2FAA2F;AACpF,KAAK,UAAU,gCAAgC,CACpD,UAA4B;IAE5B,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,oCAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IACD,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,cAAc,EAAE;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAC5B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;QACrC,UAAU,EAAE,OAAO,CAAC,GAAG;KACxB,CAAC,CAAC;IACH,MAAM,IAAA,4CAAuB,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/invites.js
CHANGED
|
@@ -12,6 +12,7 @@ const logging_1 = require("@antelopejs/interface-core/logging");
|
|
|
12
12
|
const interface_database_1 = require("@antelopejs/interface-database");
|
|
13
13
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
14
14
|
const db_1 = require("./db");
|
|
15
|
+
const inviteResolutions_model_1 = require("./db/internal/inviteResolutions.model");
|
|
15
16
|
const db_2 = require("./auth/db");
|
|
16
17
|
const randomstring_1 = __importDefault(require("randomstring"));
|
|
17
18
|
const fire_and_forget_1 = require("./utils/fire-and-forget");
|
|
@@ -141,7 +142,14 @@ async function createAdmittedInviteToken(options) {
|
|
|
141
142
|
invite: existingInvite,
|
|
142
143
|
reason: options.replacementReason ?? "replaced",
|
|
143
144
|
replacement,
|
|
145
|
+
}).catch(async (error) => {
|
|
146
|
+
if (options.replacesInvite ||
|
|
147
|
+
!(await completeCancellationOfRead(tenantId, existingInvite)))
|
|
148
|
+
throw error;
|
|
149
|
+
return undefined;
|
|
144
150
|
});
|
|
151
|
+
if (!resolution)
|
|
152
|
+
return createAdmittedInviteToken(options);
|
|
145
153
|
await (0, invite_resolution_1.completeAdmittedInviteResolution)(resolution);
|
|
146
154
|
if (!resolution.replacement)
|
|
147
155
|
throw new Error("Replacement snapshot missing");
|
|
@@ -165,10 +173,8 @@ async function createAdmittedInviteToken(options) {
|
|
|
165
173
|
return yieldToWinner(await userInviteModel.getByEmail(email), replacement);
|
|
166
174
|
}
|
|
167
175
|
const rival = await userInviteModel.getOtherByEmail(email, replacement._id);
|
|
168
|
-
if (rival)
|
|
169
|
-
|
|
170
|
-
return yieldToWinner(rival, replacement);
|
|
171
|
-
}
|
|
176
|
+
if (rival)
|
|
177
|
+
return withdrawFreshInvite(tenantId, replacement, rival);
|
|
172
178
|
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.INVITE_CREATED, {
|
|
173
179
|
tenantId,
|
|
174
180
|
inviteId: replacement._id,
|
|
@@ -179,6 +185,31 @@ async function createAdmittedInviteToken(options) {
|
|
|
179
185
|
});
|
|
180
186
|
return { inviteId: replacement._id, token: replacement.token };
|
|
181
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Removes the invite a creation read when a completed cancellation already
|
|
190
|
+
* retired it, so the creation can read the email again.
|
|
191
|
+
*
|
|
192
|
+
* @returns Whether the invite's decision was such a cancellation
|
|
193
|
+
*/
|
|
194
|
+
async function completeCancellationOfRead(tenantId, invite) {
|
|
195
|
+
const held = await (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId).getForInvite(tenantId, invite._id);
|
|
196
|
+
if (held?.reason !== "cancelled" || held.replacement || !held.completed)
|
|
197
|
+
return false;
|
|
198
|
+
await (0, invite_resolution_1.completeAdmittedInviteResolution)(held);
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Withdraws a fresh invite that found a rival, through its decision: a
|
|
203
|
+
* replacement decided on it first is kept instead, and its decider completes it.
|
|
204
|
+
*/
|
|
205
|
+
async function withdrawFreshInvite(tenantId, fresh, rival) {
|
|
206
|
+
const decisions = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId);
|
|
207
|
+
const { resolution, claimed } = await decisions.withdraw(tenantId, fresh);
|
|
208
|
+
if (!claimed)
|
|
209
|
+
return yieldToWinner(resolution.replacement ?? rival, fresh);
|
|
210
|
+
await (0, interface_database_decorators_1.GetModel)(db_1.UserInviteModel, tenantId).delete(fresh._id);
|
|
211
|
+
return yieldToWinner(rival, fresh);
|
|
212
|
+
}
|
|
182
213
|
function yieldToWinner(winner, lost) {
|
|
183
214
|
(0, interface_api_util_1.assert)(winner && (0, invite_content_1.isSameInviteContent)(winner, lost), HTTP_CONFLICT, "Invitation for this email was created concurrently with other content");
|
|
184
215
|
return { inviteId: winner._id, token: winner.token };
|
package/dist/invites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED