@mj-biz-apps/common-activity-sync 5.41.0 → 5.43.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/dist/ActivitySyncEngine.d.ts +59 -1
- package/dist/ActivitySyncEngine.d.ts.map +1 -1
- package/dist/ActivitySyncEngine.js +159 -6
- package/dist/ActivitySyncEngine.js.map +1 -1
- package/dist/attachments.d.ts +106 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +147 -0
- package/dist/attachments.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/participants.d.ts +30 -0
- package/dist/participants.d.ts.map +1 -1
- package/dist/participants.js +48 -0
- package/dist/participants.js.map +1 -1
- package/dist/providers/GraphCalendarTransport.d.ts +115 -0
- package/dist/providers/GraphCalendarTransport.d.ts.map +1 -0
- package/dist/providers/GraphCalendarTransport.js +139 -0
- package/dist/providers/GraphCalendarTransport.js.map +1 -0
- package/dist/providers/GraphCommunicationTransport.d.ts.map +1 -1
- package/dist/providers/GraphCommunicationTransport.js +18 -4
- package/dist/providers/GraphCommunicationTransport.js.map +1 -1
- package/dist/providers/GraphMessageMapper.d.ts +2 -0
- package/dist/providers/GraphMessageMapper.d.ts.map +1 -1
- package/dist/providers/GraphMessageMapper.js +3 -0
- package/dist/providers/GraphMessageMapper.js.map +1 -1
- package/dist/providers/MSGraphActivitySyncProvider.d.ts +39 -4
- package/dist/providers/MSGraphActivitySyncProvider.d.ts.map +1 -1
- package/dist/providers/MSGraphActivitySyncProvider.js +45 -10
- package/dist/providers/MSGraphActivitySyncProvider.js.map +1 -1
- package/dist/providers/MSGraphCalendarSyncProvider.d.ts +55 -14
- package/dist/providers/MSGraphCalendarSyncProvider.d.ts.map +1 -1
- package/dist/providers/MSGraphCalendarSyncProvider.js +112 -38
- package/dist/providers/MSGraphCalendarSyncProvider.js.map +1 -1
- package/dist/providers/MessageTransport.d.ts +90 -0
- package/dist/providers/MessageTransport.d.ts.map +1 -1
- package/dist/providers/MessageTransport.js +72 -0
- package/dist/providers/MessageTransport.js.map +1 -1
- package/dist/providers/RecordedMessageTransport.d.ts.map +1 -1
- package/dist/providers/RecordedMessageTransport.js +25 -11
- package/dist/providers/RecordedMessageTransport.js.map +1 -1
- package/dist/stages.d.ts +11 -0
- package/dist/stages.d.ts.map +1 -1
- package/dist/stages.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -6
|
@@ -78,4 +78,94 @@ export type ActivityTransportFactory = (context: ActivityTransportContext) => Ac
|
|
|
78
78
|
export declare function RegisterActivityTransportFactory(factory: ActivityTransportFactory | null): void;
|
|
79
79
|
/** The registered factory, or null when this host serves none. */
|
|
80
80
|
export declare function HostActivityTransportFactory(): ActivityTransportFactory | null;
|
|
81
|
+
/**
|
|
82
|
+
* WHAT A HOST MUST WRITE DOWN BEFORE IT MAY READ A REAL MAILBOX.
|
|
83
|
+
*
|
|
84
|
+
* `MSGraphProvider` authenticates app-only, so the `Mail.Read` APPLICATION permission is granted
|
|
85
|
+
* against the tenant and not against a mailbox: it reads EVERY mailbox in the organisation. The
|
|
86
|
+
* `Mailbox` on a connection narrows what we ASK for, not what we are ALLOWED to read. The only thing
|
|
87
|
+
* that narrows the grant is an Exchange Application Access Policy binding the app registration to a
|
|
88
|
+
* mail-enabled security group.
|
|
89
|
+
*
|
|
90
|
+
* So the opt-in is not a boolean. A boolean records that somebody wanted live fetch; this records
|
|
91
|
+
* that somebody CHECKED, which group they found, and who is answerable for it — the things an audit
|
|
92
|
+
* actually asks for, and the things a person is forced to look up rather than guess. `Confirmed` is
|
|
93
|
+
* the literal `true` rather than `boolean` deliberately: a variable that happens to be false will
|
|
94
|
+
* not type-check, so the attestation cannot be satisfied by passing a flag through.
|
|
95
|
+
*/
|
|
96
|
+
interface AttestationBase {
|
|
97
|
+
/** Literal `true`. See above — a `boolean` variable is rejected by the compiler. */
|
|
98
|
+
Confirmed: true;
|
|
99
|
+
/** Who decided. A person, so the decision has an owner. */
|
|
100
|
+
ConfirmedBy: string;
|
|
101
|
+
/** When they decided. Policies get deleted; a stale attestation should be visible as stale. */
|
|
102
|
+
ConfirmedAt: Date;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The app registration is restricted, and this names the restriction.
|
|
106
|
+
*/
|
|
107
|
+
export interface ScopedMailboxAttestation extends AttestationBase {
|
|
108
|
+
Scope: 'RestrictedToGroup';
|
|
109
|
+
/** The mail-enabled security group the Exchange assignment binds the app to. */
|
|
110
|
+
ScopedToGroup: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The tenant-wide grant was looked at and ACCEPTED. A real outcome, not a failure state.
|
|
114
|
+
*
|
|
115
|
+
* WHY THIS EXISTS AT ALL. The first version of this type demanded `ScopedToGroup`, which quietly
|
|
116
|
+
* assumed every deployment would create an Exchange RBAC assignment. Most do not — adding an API
|
|
117
|
+
* permission in Entra is one team's five-minute job, and Exchange RBAC for Applications is a
|
|
118
|
+
* different system that often nobody owns. A gate that only accepts "scoped" leaves an organisation
|
|
119
|
+
* that decided otherwise with two options: invent a group name, or bypass the gate. Both are worse
|
|
120
|
+
* than what it was protecting, because both destroy the record.
|
|
121
|
+
*
|
|
122
|
+
* So the shape now matches the decisions people actually make. What stays impossible is the third
|
|
123
|
+
* state — nobody looked — because neither variant can be satisfied without a name, a date, and
|
|
124
|
+
* either a group or a written reason.
|
|
125
|
+
*/
|
|
126
|
+
export interface TenantWideMailboxAttestation extends AttestationBase {
|
|
127
|
+
Scope: 'TenantWideAccepted';
|
|
128
|
+
/**
|
|
129
|
+
* What is being accepted, in the deciding person's own words.
|
|
130
|
+
*
|
|
131
|
+
* Free text and REQUIRED, deliberately. A boolean here would be a tick-box, and a tick-box records
|
|
132
|
+
* that somebody clicked rather than that somebody understood. Writing the sentence is the point:
|
|
133
|
+
* it is what an audit reads, and what the next person finds when they ask why this app can read
|
|
134
|
+
* every mailbox in the tenant.
|
|
135
|
+
*/
|
|
136
|
+
AcceptedRisk: string;
|
|
137
|
+
}
|
|
138
|
+
export type LiveMailboxPolicyAttestation = ScopedMailboxAttestation | TenantWideMailboxAttestation;
|
|
139
|
+
/**
|
|
140
|
+
* Record that this host is scoped, and may therefore read real mailboxes. Pass null to revoke.
|
|
141
|
+
*
|
|
142
|
+
* DELIBERATELY NOT DRIVEN BY DATA. `ActivitySyncConnection` is an ordinary editable entity, and
|
|
143
|
+
* anyone who can edit a row could otherwise turn on tenant-wide mail reading by typing in a form.
|
|
144
|
+
* The same reasoning already applies to the transport itself — "a database row should not be able to
|
|
145
|
+
* reach in and swap it" — and it applies with more force here. This is a bootstrap-time decision in
|
|
146
|
+
* code, made by whoever deploys the host.
|
|
147
|
+
*
|
|
148
|
+
* The blank checks are the point rather than defensive noise: an attestation with an empty group or
|
|
149
|
+
* no name records nothing, and silently accepting one would turn this back into a boolean.
|
|
150
|
+
*
|
|
151
|
+
* ── EVERY INVARIANT IS ENFORCED HERE, NOT ONLY IN THE ENV LOADER ────────────────────────────────
|
|
152
|
+
*
|
|
153
|
+
* `LoadLiveMailboxPolicyFromEnv` validates all of this and is the path a deployment takes. It is not
|
|
154
|
+
* the only path: this function is exported, and a host bootstrap, a `.mjs` harness or any TypeScript
|
|
155
|
+
* caller with a cast reaches it directly — where `Confirmed: true` and `ConfirmedAt: Date` are
|
|
156
|
+
* compile-time shapes that enforce nothing at runtime. Checking them only in the loader made the
|
|
157
|
+
* guarantee a property of one caller rather than of the gate, so an attestation with no date, or with
|
|
158
|
+
* `Confirmed: false`, was accepted and opened tenant-wide mail AND calendar for the whole host.
|
|
159
|
+
*
|
|
160
|
+
* WHAT IS DELIBERATELY NOT CHECKED is staleness. An attestation that expired on a date boundary would
|
|
161
|
+
* turn live fetch off on a working deployment with no one having changed anything, which trades a
|
|
162
|
+
* reviewed decision for a silent outage. The date is required so the record is honest about WHEN, not
|
|
163
|
+
* so it can lapse.
|
|
164
|
+
*/
|
|
165
|
+
export declare function AllowLiveMailboxFetch(attestation: LiveMailboxPolicyAttestation | null): void;
|
|
166
|
+
/** The recorded attestation, or null when this host has not opted in. */
|
|
167
|
+
export declare function HostLiveMailboxPolicy(): LiveMailboxPolicyAttestation | null;
|
|
168
|
+
/** Whether this host has attested that its app registration is scoped. */
|
|
169
|
+
export declare function HostAllowsLiveMailboxFetch(): boolean;
|
|
170
|
+
export {};
|
|
81
171
|
//# sourceMappingURL=MessageTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageTransport.d.ts","sourceRoot":"","sources":["../../src/providers/MessageTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACrC,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACrC,oGAAoG;IACpG,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2FAA2F;IAC3F,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gGAAgG;IAChG,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,wBAAwB,KAAK,wBAAwB,GAAG,IAAI,CAAC;AAmB9G;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,IAAI,CAE/F;AAED,kEAAkE;AAClE,wBAAgB,4BAA4B,IAAI,wBAAwB,GAAG,IAAI,CAE9E"}
|
|
1
|
+
{"version":3,"file":"MessageTransport.d.ts","sourceRoot":"","sources":["../../src/providers/MessageTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACrC,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACrC,oGAAoG;IACpG,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2FAA2F;IAC3F,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gGAAgG;IAChG,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,wBAAwB,KAAK,wBAAwB,GAAG,IAAI,CAAC;AAmB9G;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,IAAI,CAE/F;AAED,kEAAkE;AAClE,wBAAgB,4BAA4B,IAAI,wBAAwB,GAAG,IAAI,CAE9E;AAED;;;;;;;;;;;;;;GAcG;AACH,UAAU,eAAe;IACrB,oFAAoF;IACpF,SAAS,EAAE,IAAI,CAAC;IAChB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,WAAW,EAAE,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC7D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,4BAA6B,SAAQ,eAAe;IACjE,KAAK,EAAE,oBAAoB,CAAC;IAC5B;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,4BAA4B,GAAG,wBAAwB,GAAG,4BAA4B,CAAC;AAInG;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,4BAA4B,GAAG,IAAI,GAAG,IAAI,CA2C5F;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,IAAI,4BAA4B,GAAG,IAAI,CAE3E;AAED,0EAA0E;AAC1E,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
|
|
@@ -27,4 +27,76 @@ export function RegisterActivityTransportFactory(factory) {
|
|
|
27
27
|
export function HostActivityTransportFactory() {
|
|
28
28
|
return hostFactory;
|
|
29
29
|
}
|
|
30
|
+
let hostLivePolicy = null;
|
|
31
|
+
/**
|
|
32
|
+
* Record that this host is scoped, and may therefore read real mailboxes. Pass null to revoke.
|
|
33
|
+
*
|
|
34
|
+
* DELIBERATELY NOT DRIVEN BY DATA. `ActivitySyncConnection` is an ordinary editable entity, and
|
|
35
|
+
* anyone who can edit a row could otherwise turn on tenant-wide mail reading by typing in a form.
|
|
36
|
+
* The same reasoning already applies to the transport itself — "a database row should not be able to
|
|
37
|
+
* reach in and swap it" — and it applies with more force here. This is a bootstrap-time decision in
|
|
38
|
+
* code, made by whoever deploys the host.
|
|
39
|
+
*
|
|
40
|
+
* The blank checks are the point rather than defensive noise: an attestation with an empty group or
|
|
41
|
+
* no name records nothing, and silently accepting one would turn this back into a boolean.
|
|
42
|
+
*
|
|
43
|
+
* ── EVERY INVARIANT IS ENFORCED HERE, NOT ONLY IN THE ENV LOADER ────────────────────────────────
|
|
44
|
+
*
|
|
45
|
+
* `LoadLiveMailboxPolicyFromEnv` validates all of this and is the path a deployment takes. It is not
|
|
46
|
+
* the only path: this function is exported, and a host bootstrap, a `.mjs` harness or any TypeScript
|
|
47
|
+
* caller with a cast reaches it directly — where `Confirmed: true` and `ConfirmedAt: Date` are
|
|
48
|
+
* compile-time shapes that enforce nothing at runtime. Checking them only in the loader made the
|
|
49
|
+
* guarantee a property of one caller rather than of the gate, so an attestation with no date, or with
|
|
50
|
+
* `Confirmed: false`, was accepted and opened tenant-wide mail AND calendar for the whole host.
|
|
51
|
+
*
|
|
52
|
+
* WHAT IS DELIBERATELY NOT CHECKED is staleness. An attestation that expired on a date boundary would
|
|
53
|
+
* turn live fetch off on a working deployment with no one having changed anything, which trades a
|
|
54
|
+
* reviewed decision for a silent outage. The date is required so the record is honest about WHEN, not
|
|
55
|
+
* so it can lapse.
|
|
56
|
+
*/
|
|
57
|
+
export function AllowLiveMailboxFetch(attestation) {
|
|
58
|
+
if (attestation === null) {
|
|
59
|
+
hostLivePolicy = null;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// `Confirmed: true` is a literal type, so TypeScript rejects `false` at a typed call site and
|
|
63
|
+
// nothing rejects it anywhere else. An unconfirmed attestation is a decision not yet made.
|
|
64
|
+
if (attestation.Confirmed !== true) {
|
|
65
|
+
throw new Error('AllowLiveMailboxFetch requires Confirmed === true. An attestation that does not confirm ' +
|
|
66
|
+
'anything is not a decision, and live fetch stays off until one is made.');
|
|
67
|
+
}
|
|
68
|
+
if (!attestation.ConfirmedBy?.trim()) {
|
|
69
|
+
throw new Error('AllowLiveMailboxFetch requires ConfirmedBy — who made this decision.');
|
|
70
|
+
}
|
|
71
|
+
// WHEN, and a real date. The whole point of the record is that someone can later ask when this was
|
|
72
|
+
// agreed; an Invalid Date answers that question with silence.
|
|
73
|
+
const confirmedAt = attestation.ConfirmedAt;
|
|
74
|
+
if (!(confirmedAt instanceof Date) || Number.isNaN(confirmedAt.getTime())) {
|
|
75
|
+
throw new Error('AllowLiveMailboxFetch requires ConfirmedAt — a valid Date saying when this was decided. ' +
|
|
76
|
+
'Reading the mail of an entire organisation on an undated say-so is not auditable.');
|
|
77
|
+
}
|
|
78
|
+
if (attestation.Scope === 'RestrictedToGroup') {
|
|
79
|
+
if (!attestation.ScopedToGroup?.trim()) {
|
|
80
|
+
throw new Error('A RestrictedToGroup attestation requires ScopedToGroup — the mail-enabled security ' +
|
|
81
|
+
'group the Exchange assignment binds the app registration to. Run ' +
|
|
82
|
+
'Get-ManagementRoleAssignment (or Get-ApplicationAccessPolicy on older tenants) to find it.');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
if (!attestation.AcceptedRisk?.trim()) {
|
|
87
|
+
throw new Error('A TenantWideAccepted attestation requires AcceptedRisk — a sentence saying what is ' +
|
|
88
|
+
'being accepted. Accepting that this app can read every mailbox in the tenant is a ' +
|
|
89
|
+
'legitimate decision; recording it as a bare flag is not.');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
hostLivePolicy = attestation;
|
|
93
|
+
}
|
|
94
|
+
/** The recorded attestation, or null when this host has not opted in. */
|
|
95
|
+
export function HostLiveMailboxPolicy() {
|
|
96
|
+
return hostLivePolicy;
|
|
97
|
+
}
|
|
98
|
+
/** Whether this host has attested that its app registration is scoped. */
|
|
99
|
+
export function HostAllowsLiveMailboxFetch() {
|
|
100
|
+
return hostLivePolicy !== null;
|
|
101
|
+
}
|
|
30
102
|
//# sourceMappingURL=MessageTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageTransport.js","sourceRoot":"","sources":["../../src/providers/MessageTransport.ts"],"names":[],"mappings":"AA8EA;;;;;;;;;;;;;;GAcG;AACH,IAAI,WAAW,GAAoC,IAAI,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,OAAwC;IACrF,WAAW,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,4BAA4B;IACxC,OAAO,WAAW,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"MessageTransport.js","sourceRoot":"","sources":["../../src/providers/MessageTransport.ts"],"names":[],"mappings":"AA8EA;;;;;;;;;;;;;;GAcG;AACH,IAAI,WAAW,GAAoC,IAAI,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,OAAwC;IACrF,WAAW,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,4BAA4B;IACxC,OAAO,WAAW,CAAC;AACvB,CAAC;AAgED,IAAI,cAAc,GAAwC,IAAI,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAgD;IAClF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,cAAc,GAAG,IAAI,CAAC;QACtB,OAAO;IACX,CAAC;IACD,8FAA8F;IAC9F,2FAA2F;IAC3F,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACX,0FAA0F;YACtF,yEAAyE,CAChF,CAAC;IACN,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC5F,CAAC;IACD,mGAAmG;IACnG,8DAA8D;IAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IAC5C,IAAI,CAAC,CAAC,WAAW,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACX,0FAA0F;YACtF,mFAAmF,CAC1F,CAAC;IACN,CAAC;IACD,IAAI,WAAW,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACX,qFAAqF;gBACjF,mEAAmE;gBACnE,4FAA4F,CACnG,CAAC;QACN,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACX,qFAAqF;gBACjF,oFAAoF;gBACpF,0DAA0D,CACjE,CAAC;QACN,CAAC;IACL,CAAC;IACD,cAAc,GAAG,WAAW,CAAC;AACjC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,qBAAqB;IACjC,OAAO,cAAc,CAAC;AAC1B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,0BAA0B;IACtC,OAAO,cAAc,KAAK,IAAI,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordedMessageTransport.d.ts","sourceRoot":"","sources":["../../src/providers/RecordedMessageTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC5B,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,8FAA8F;IAC9F,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,wBAAyB,YAAW,wBAAwB;IACrE,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC;;;OAGG;IACH,SAAgB,MAAM,SAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;gBAEtC,UAAU,EAAE,eAAe,EAAE;IAKnC,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"RecordedMessageTransport.d.ts","sourceRoot":"","sources":["../../src/providers/RecordedMessageTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC5B,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,8FAA8F;IAC9F,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,wBAAyB,YAAW,wBAAwB;IACrE,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC;;;OAGG;IACH,SAAgB,MAAM,SAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;gBAEtC,UAAU,EAAE,eAAe,EAAE;IAKnC,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;CA2DpE"}
|
|
@@ -30,20 +30,34 @@ export class RecordedMessageTransport {
|
|
|
30
30
|
`${recording.Payloads.length - query.Limit} were not returned.`);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* A CAPPED REPLAY WITHHOLDS THE WATERMARK
|
|
33
|
+
* A CAPPED REPLAY WITHHOLDS THE WATERMARK. ON EVERY RUN, INCLUDING THE FIRST.
|
|
34
34
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* be safe.
|
|
35
|
+
* This used to read `capped && !!query.Since`, on the reasoning that a first run has no
|
|
36
|
+
* watermark and so nothing to strand behind one. That reasoning is wrong, and the way it is
|
|
37
|
+
* wrong is worth writing down, because it is the same shape as the live-path defect this
|
|
38
|
+
* package was just fixed for.
|
|
40
39
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
40
|
+
* The loss on a first run is not about an EXISTING watermark. It is about the watermark the
|
|
41
|
+
* run CREATES. Nothing enforces the order of a recording, and a NEWEST-FIRST one truncated to
|
|
42
|
+
* Limit returns the newest N and withholds the oldest; a watermark computed from what it DID
|
|
43
|
+
* return is then NEWER than the payloads it did not, and those are buried behind a mark that
|
|
44
|
+
* claims to cover them. That is the live bug exactly, reached without a prior watermark.
|
|
45
|
+
*
|
|
46
|
+
* It matters past the fixture because the mark is DURABLE and the transport behind it is
|
|
47
|
+
* swappable: a host that replays a truncated recording and later points the same connection
|
|
48
|
+
* at the live transport inherits the claim, and the live run skips real mail.
|
|
49
|
+
*
|
|
50
|
+
* So the flag is set whenever the limit binds, exactly as the live path now does. Withholding
|
|
51
|
+
* costs a re-read that de-duplication absorbs. Advancing costs correctness of the watermark.
|
|
52
|
+
*
|
|
53
|
+
* WHAT THIS DOES NOT FIX, so nobody reads more into it. `slice(0, Limit)` is POSITIONAL and
|
|
54
|
+
* the window is applied downstream, so a truncated replay re-takes the same first N payloads
|
|
55
|
+
* on every run whatever `Since` says. A recording longer than Limit cannot be replayed in
|
|
56
|
+
* full, in any order, capped or not — measured, not assumed. This flag keeps that from
|
|
57
|
+
* becoming a false watermark in the database; giving the fixture transport real paging is a
|
|
58
|
+
* separate change, and the Issues above already name the shortfall on every run.
|
|
45
59
|
*/
|
|
46
|
-
return { Payloads: payloads, Issues: issues, Capped: capped
|
|
60
|
+
return { Payloads: payloads, Issues: issues, Capped: capped };
|
|
47
61
|
}
|
|
48
62
|
}
|
|
49
63
|
//# sourceMappingURL=RecordedMessageTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordedMessageTransport.js","sourceRoot":"","sources":["../../src/providers/RecordedMessageTransport.ts"],"names":[],"mappings":"AAsCA,MAAM,OAAO,wBAAwB;IAWjC,YAAmB,UAA6B;QARhD;;;WAGG;QACa,WAAM,GAAG,KAAK,CAAC;QAK3B,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,GAAG,4BAA4B,UAAU,CAAC,MAAM,eAAe,CAAC;IACjF,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAA0B;QACzC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,sFAAsF;YACtF,mFAAmF;YACnF,wDAAwD;YACxD,MAAM,IAAI,KAAK,CACX,qCAAqC,KAAK,CAAC,OAAO,KAAK;gBACnD,uBAAuB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAClF,CAAC;QACN,CAAC;QAED,6FAA6F;QAC7F,iEAAiE;QACjE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG;YACX,uBAAuB,SAAS,CAAC,UAAU,oDAAoD;SAClG,CAAC;QACF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CACP,mBAAmB,SAAS,CAAC,QAAQ,CAAC,MAAM,yBAAyB,KAAK,CAAC,KAAK,OAAO;gBACnF,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,qBAAqB,CACtE,CAAC;QACN,CAAC;QAED
|
|
1
|
+
{"version":3,"file":"RecordedMessageTransport.js","sourceRoot":"","sources":["../../src/providers/RecordedMessageTransport.ts"],"names":[],"mappings":"AAsCA,MAAM,OAAO,wBAAwB;IAWjC,YAAmB,UAA6B;QARhD;;;WAGG;QACa,WAAM,GAAG,KAAK,CAAC;QAK3B,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,GAAG,4BAA4B,UAAU,CAAC,MAAM,eAAe,CAAC;IACjF,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAA0B;QACzC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,sFAAsF;YACtF,mFAAmF;YACnF,wDAAwD;YACxD,MAAM,IAAI,KAAK,CACX,qCAAqC,KAAK,CAAC,OAAO,KAAK;gBACnD,uBAAuB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAClF,CAAC;QACN,CAAC;QAED,6FAA6F;QAC7F,iEAAiE;QACjE,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG;YACX,uBAAuB,SAAS,CAAC,UAAU,oDAAoD;SAClG,CAAC;QACF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CACP,mBAAmB,SAAS,CAAC,QAAQ,CAAC,MAAM,yBAAyB,KAAK,CAAC,KAAK,OAAO;gBACnF,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,qBAAqB,CACtE,CAAC;QACN,CAAC;QAED;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;QACH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClE,CAAC;CACJ"}
|
package/dist/stages.d.ts
CHANGED
|
@@ -44,6 +44,17 @@ export interface RuleRow {
|
|
|
44
44
|
DateTo: Date | string | null;
|
|
45
45
|
ParticipantScope: ParticipantScope | null;
|
|
46
46
|
ActivitySyncRuleSetID: string | null;
|
|
47
|
+
/**
|
|
48
|
+
* `1 = also pull attachments into ActivityFile rows` — the column's own description.
|
|
49
|
+
*
|
|
50
|
+
* On the RULE rather than the connection because it is a per-decision choice: a rule that files
|
|
51
|
+
* customer threads may well want the contract attached, while one filing internal chatter does
|
|
52
|
+
* not. It is read at WRITE time from the rule that decided, not at fetch time, because rules run
|
|
53
|
+
* after the fetch.
|
|
54
|
+
*/
|
|
55
|
+
IncludeAttachments: boolean;
|
|
56
|
+
/** Attachments larger than this are skipped and REPORTED. Null means no cap. */
|
|
57
|
+
MaxAttachmentBytes: number | null;
|
|
47
58
|
}
|
|
48
59
|
export interface KnownAddressHit {
|
|
49
60
|
Address: string;
|
package/dist/stages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAA2D,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,KAAK,EACR,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;OASG;IACH,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,eAAe,GAAG,aAAa,CAAC,EAC5E,UAAU,EAAE,IAAI,GACjB,OAAO,CAOT;AAED,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IACtD,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAA2D,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,KAAK,EACR,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;OASG;IACH,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,eAAe,GAAG,aAAa,CAAC,EAC5E,UAAU,EAAE,IAAI,GACjB,OAAO,CAOT;AAED,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IACtD,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;;;;OAOG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gFAAgF;IAChF,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACpE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAChD;AAmBD,uEAAuE;AACvE,qBAAa,cAAe,YAAW,mBAAmB;IACtD,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,iBAAiB,SAAS;IAE7B,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAyB5G;AAED,6CAA6C;AAC7C,qBAAa,UAAW,YAAW,mBAAmB;IAClD,SAAgB,IAAI,WAAW;IAC/B,SAAgB,iBAAiB,SAAS;IAE7B,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA0B5G;AAED;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,mBAAmB;IAC7D,SAAgB,IAAI,sBAAsB;IAC1C,SAAgB,iBAAiB,SAAS;IAE7B,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAmB5G;AAED,wBAAgB,0BAA0B,IAAI,mBAAmB,EAAE,CAElE"}
|
package/dist/stages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stages.js","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,uBAAuB,EAAyB,MAAM,mBAAmB,CAAC;AAgCnH;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAC9B,SAA4E,EAC5E,UAAgB;IAEhB,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,KAAK,CAAC;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,IAAI,CAAC;AAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"stages.js","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -65,6 +65,20 @@ export interface NormalizedItem {
|
|
|
65
65
|
EndedAt: Date | null;
|
|
66
66
|
/** Set for calendar items. */
|
|
67
67
|
Location: string | null;
|
|
68
|
+
/**
|
|
69
|
+
* Whether the source says this item carries attachments.
|
|
70
|
+
*
|
|
71
|
+
* A FLAG, NOT THE ATTACHMENTS. Graph does not include attachment content in a message payload,
|
|
72
|
+
* and listing them costs a call PER MESSAGE — which would be paid for every item fetched, including
|
|
73
|
+
* the ones the rules go on to exclude. Rules are evaluated after fetch, so the cheap boolean rides
|
|
74
|
+
* along here and the expensive fetch happens later, only for items that were actually included and
|
|
75
|
+
* only when the deciding rule asked for attachments.
|
|
76
|
+
*
|
|
77
|
+
* False when the source does not say. Absent information is not the same as "no attachments", but
|
|
78
|
+
* a provider that cannot tell us has given us nothing to act on, and guessing would mean a call per
|
|
79
|
+
* message on the chance there is something there.
|
|
80
|
+
*/
|
|
81
|
+
HasAttachments: boolean;
|
|
68
82
|
Direction: ActivityDirection;
|
|
69
83
|
Participants: ItemParticipant[];
|
|
70
84
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uCAAuC;AACvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpE,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACtB,WAAW,GACX,aAAa,GACb,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,WAAW,GACX,UAAU,GACV,WAAW,CAAC;AAElB,8CAA8C;AAC9C,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,OAAO,GAAG,cAAc,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAU1D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAAuC,CAAC;AAE3G;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE5D,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC5B,uGAAuG;IACvG,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,gBAAgB,CAAC;IACvB,0DAA0D;IAC1D,YAAY,EAAE,oBAAoB,CAAC;CACtC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAChC,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,sEAAsE;IACtE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB;;;;;OAKG;IACH,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAE9E"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uCAAuC;AACvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpE,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACtB,WAAW,GACX,aAAa,GACb,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,WAAW,GACX,UAAU,GACV,WAAW,CAAC;AAElB,8CAA8C;AAC9C,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,OAAO,GAAG,cAAc,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAU1D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAAuC,CAAC;AAE3G;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE5D,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC5B,uGAAuG;IACvG,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,gBAAgB,CAAC;IACvB,0DAA0D;IAC1D,YAAY,EAAE,oBAAoB,CAAC;CACtC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;;;;;;;;;OAYG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAChC,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,sEAAsE;IACtE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB;;;;;OAKG;IACH,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAE9E"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC5D,WAAW;IACX,aAAa;IACb,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,WAAW;IACX,UAAU;IACV,WAAW;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAoC,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC5D,WAAW;IACX,aAAa;IACb,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,WAAW;IACX,UAAU;IACV,WAAW;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAoC,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AAoI3G;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAwB;IAC1D,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC;AAChE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mj-biz-apps/common-activity-sync",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.43.0",
|
|
5
5
|
"description": "Activity Sync Engine contracts for BizApps Common — provider plugin base class, qualification cascade, and the in-process extension contract that lets downstream apps enrich an Activity inside its own write transaction.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
"vitest": "^3.2.4"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@mj-biz-apps/common-entities": "5.
|
|
21
|
+
"@mj-biz-apps/common-entities": "5.43.0"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@memberjunction/communication-types": "^6.1.0-edge.
|
|
25
|
-
"@memberjunction/core": "^6.1.0-edge.
|
|
26
|
-
"@memberjunction/credentials": "^6.1.0-edge.
|
|
27
|
-
"@memberjunction/global": "^6.1.0-edge.
|
|
24
|
+
"@memberjunction/communication-types": "^6.1.0-edge.6",
|
|
25
|
+
"@memberjunction/core": "^6.1.0-edge.6",
|
|
26
|
+
"@memberjunction/credentials": "^6.1.0-edge.6",
|
|
27
|
+
"@memberjunction/global": "^6.1.0-edge.6"
|
|
28
28
|
},
|
|
29
29
|
"repository": {
|
|
30
30
|
"type": "git",
|