@memberjunction/core-actions 5.34.1 → 5.36.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/custom/communication/send-to-audience.action.d.ts +36 -0
- package/dist/custom/communication/send-to-audience.action.d.ts.map +1 -0
- package/dist/custom/communication/send-to-audience.action.js +148 -0
- package/dist/custom/communication/send-to-audience.action.js.map +1 -0
- package/dist/custom/geo/scheduled-geocoding.action.d.ts +22 -1
- package/dist/custom/geo/scheduled-geocoding.action.d.ts.map +1 -1
- package/dist/custom/geo/scheduled-geocoding.action.js +35 -3
- package/dist/custom/geo/scheduled-geocoding.action.js.map +1 -1
- package/dist/custom/lists/_action-helpers.d.ts +12 -0
- package/dist/custom/lists/_action-helpers.d.ts.map +1 -0
- package/dist/custom/lists/_action-helpers.js +42 -0
- package/dist/custom/lists/_action-helpers.js.map +1 -0
- package/dist/custom/lists/add-view-results-to-list.action.d.ts +21 -0
- package/dist/custom/lists/add-view-results-to-list.action.d.ts.map +1 -0
- package/dist/custom/lists/add-view-results-to-list.action.js +50 -0
- package/dist/custom/lists/add-view-results-to-list.action.js.map +1 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.d.ts +6 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.d.ts.map +1 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.js +89 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.js.map +1 -0
- package/dist/custom/lists/compose-lists.action.d.ts +30 -0
- package/dist/custom/lists/compose-lists.action.d.ts.map +1 -0
- package/dist/custom/lists/compose-lists.action.js +90 -0
- package/dist/custom/lists/compose-lists.action.js.map +1 -0
- package/dist/custom/lists/index.d.ts +17 -2
- package/dist/custom/lists/index.d.ts.map +1 -1
- package/dist/custom/lists/index.js +17 -2
- package/dist/custom/lists/index.js.map +1 -1
- package/dist/custom/lists/invite-to-list.action.d.ts +17 -0
- package/dist/custom/lists/invite-to-list.action.d.ts.map +1 -0
- package/dist/custom/lists/invite-to-list.action.js +52 -0
- package/dist/custom/lists/invite-to-list.action.js.map +1 -0
- package/dist/custom/lists/materialize-list-from-view.action.d.ts +26 -0
- package/dist/custom/lists/materialize-list-from-view.action.d.ts.map +1 -0
- package/dist/custom/lists/materialize-list-from-view.action.js +71 -0
- package/dist/custom/lists/materialize-list-from-view.action.js.map +1 -0
- package/dist/custom/lists/move-list-members.action.d.ts +20 -0
- package/dist/custom/lists/move-list-members.action.d.ts.map +1 -0
- package/dist/custom/lists/move-list-members.action.js +150 -0
- package/dist/custom/lists/move-list-members.action.js.map +1 -0
- package/dist/custom/lists/refresh-list-from-source.action.d.ts +15 -0
- package/dist/custom/lists/refresh-list-from-source.action.d.ts.map +1 -0
- package/dist/custom/lists/refresh-list-from-source.action.js +50 -0
- package/dist/custom/lists/refresh-list-from-source.action.js.map +1 -0
- package/dist/custom/lists/resolve-audience.action.d.ts +16 -0
- package/dist/custom/lists/resolve-audience.action.d.ts.map +1 -0
- package/dist/custom/lists/resolve-audience.action.js +59 -0
- package/dist/custom/lists/resolve-audience.action.js.map +1 -0
- package/dist/custom/lists/revoke-list-invitation.action.d.ts +12 -0
- package/dist/custom/lists/revoke-list-invitation.action.d.ts.map +1 -0
- package/dist/custom/lists/revoke-list-invitation.action.js +31 -0
- package/dist/custom/lists/revoke-list-invitation.action.js.map +1 -0
- package/dist/custom/lists/share-list.action.d.ts +16 -0
- package/dist/custom/lists/share-list.action.d.ts.map +1 -0
- package/dist/custom/lists/share-list.action.js +56 -0
- package/dist/custom/lists/share-list.action.js.map +1 -0
- package/dist/custom/lists/unshare-list.action.d.ts +11 -0
- package/dist/custom/lists/unshare-list.action.d.ts.map +1 -0
- package/dist/custom/lists/unshare-list.action.js +30 -0
- package/dist/custom/lists/unshare-list.action.js.map +1 -0
- package/dist/custom/utilities/address-services.action.d.ts.map +1 -1
- package/dist/custom/utilities/address-services.action.js +98 -94
- package/dist/custom/utilities/address-services.action.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +32 -30
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { Metadata, RunView } from '@memberjunction/core';
|
|
9
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
10
|
+
import { ListOperations } from '@memberjunction/lists';
|
|
11
|
+
import { addOutputParam, getBooleanParam, getJsonParam, getStringParam, missingParam, } from './_action-helpers.js';
|
|
12
|
+
/**
|
|
13
|
+
* Move a set of records from one list to another. Implemented as a
|
|
14
|
+
* thin wrapper over `ListOperations` semantics:
|
|
15
|
+
*
|
|
16
|
+
* 1. Insert the records into `TargetListID` (additive — silent skip
|
|
17
|
+
* on duplicates).
|
|
18
|
+
* 2. If `Mode = 'move'` (default), remove them from `SourceListID`.
|
|
19
|
+
* Removal goes through the same drop-guard contract; passing
|
|
20
|
+
* `ConfirmDrops: true` is required to actually delete.
|
|
21
|
+
*
|
|
22
|
+
* For `Mode = 'copy'`, step 2 is skipped — the records end up in both
|
|
23
|
+
* lists. The `RecordIDs` input is a JSON-stringified string array
|
|
24
|
+
* matching the canonical `MJ: List Detail.RecordID` format.
|
|
25
|
+
*/
|
|
26
|
+
let MoveListMembersAction = class MoveListMembersAction extends BaseAction {
|
|
27
|
+
async InternalRunAction(params) {
|
|
28
|
+
const sourceListId = getStringParam(params, 'SourceListID');
|
|
29
|
+
const targetListId = getStringParam(params, 'TargetListID');
|
|
30
|
+
const recordIds = getJsonParam(params, 'RecordIDs');
|
|
31
|
+
if (!sourceListId)
|
|
32
|
+
return missingParam('SourceListID');
|
|
33
|
+
if (!targetListId)
|
|
34
|
+
return missingParam('TargetListID');
|
|
35
|
+
if (!recordIds || !Array.isArray(recordIds) || recordIds.length === 0) {
|
|
36
|
+
return {
|
|
37
|
+
Success: false,
|
|
38
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
39
|
+
Message: "'RecordIDs' must be a JSON-stringified non-empty string array",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const mode = (getStringParam(params, 'Mode') ?? 'move').toLowerCase();
|
|
43
|
+
if (mode !== 'move' && mode !== 'copy') {
|
|
44
|
+
return {
|
|
45
|
+
Success: false,
|
|
46
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
47
|
+
Message: `Mode must be 'move' or 'copy' (got '${mode}')`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const confirmDrops = getBooleanParam(params, 'ConfirmDrops', false);
|
|
51
|
+
if (mode === 'move' && !confirmDrops) {
|
|
52
|
+
return {
|
|
53
|
+
Success: false,
|
|
54
|
+
ResultCode: 'DROP_NOT_CONFIRMED',
|
|
55
|
+
Message: 'Move mode removes records from the source list. Pass ConfirmDrops: true to proceed.',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const md = params.Provider ?? new Metadata();
|
|
59
|
+
const rv = params.Provider ? RunView.FromMetadataProvider(params.Provider) : new RunView();
|
|
60
|
+
// Insert into target (dedupe by checking existing membership first).
|
|
61
|
+
const existingFilter = recordIds.map((id) => `'${id.replace(/'/g, "''")}'`).join(',');
|
|
62
|
+
const existing = await rv.RunView({
|
|
63
|
+
EntityName: 'MJ: List Details',
|
|
64
|
+
ExtraFilter: `ListID='${targetListId}' AND RecordID IN (${existingFilter})`,
|
|
65
|
+
Fields: ['RecordID'],
|
|
66
|
+
ResultType: 'simple',
|
|
67
|
+
}, params.ContextUser);
|
|
68
|
+
const alreadyIn = new Set((existing.Results ?? []).map((r) => String(r.RecordID)));
|
|
69
|
+
let added = 0;
|
|
70
|
+
let failedAdds = 0;
|
|
71
|
+
const errors = [];
|
|
72
|
+
for (const recordId of recordIds) {
|
|
73
|
+
if (alreadyIn.has(recordId))
|
|
74
|
+
continue;
|
|
75
|
+
const detail = await md.GetEntityObject('MJ: List Details', params.ContextUser);
|
|
76
|
+
detail.NewRecord();
|
|
77
|
+
detail.ListID = targetListId;
|
|
78
|
+
detail.RecordID = recordId;
|
|
79
|
+
detail.Sequence = 0;
|
|
80
|
+
const ok = await detail.Save();
|
|
81
|
+
if (ok) {
|
|
82
|
+
added++;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
failedAdds++;
|
|
86
|
+
errors.push(`Failed to add '${recordId}' to target: ${detail.LatestResult?.CompleteMessage ?? 'unknown'}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
let removed = 0;
|
|
90
|
+
if (mode === 'move') {
|
|
91
|
+
// Use ListOperations.ApplyDelta machinery via a fresh delta. The
|
|
92
|
+
// alternative would be to delete-by-RecordID directly; routing
|
|
93
|
+
// through the delta guarantees the audit/log side effects fire.
|
|
94
|
+
const ops = new ListOperations(params.ContextUser, params.Provider);
|
|
95
|
+
const delta = await ops.ComputeDelta({ kind: 'list', listId: sourceListId }, { kind: 'adhoc', entityName: '__noop__', extraFilter: '' }, 'Sync');
|
|
96
|
+
// Override the delta's ToRemove to exactly the requested records.
|
|
97
|
+
const targetSet = new Set(recordIds);
|
|
98
|
+
const filteredDelta = {
|
|
99
|
+
...delta,
|
|
100
|
+
ToAdd: [],
|
|
101
|
+
ToRemove: delta.Unchanged.filter((id) => targetSet.has(id)).concat(delta.ToRemove.filter((id) => targetSet.has(id))),
|
|
102
|
+
Unchanged: delta.Unchanged.filter((id) => !targetSet.has(id)),
|
|
103
|
+
Counts: { ...delta.Counts },
|
|
104
|
+
};
|
|
105
|
+
filteredDelta.Counts.Add = 0;
|
|
106
|
+
filteredDelta.Counts.Remove = filteredDelta.ToRemove.length;
|
|
107
|
+
// Re-sign via a fresh ComputeDelta against an ad-hoc source whose
|
|
108
|
+
// record set equals (current_members − to_remove). That's the
|
|
109
|
+
// simplest way to get a token that ApplyDelta will accept without
|
|
110
|
+
// forging it — we trust the existing pipeline.
|
|
111
|
+
// For minimal-disruption Phase 5 ship: query + delete directly,
|
|
112
|
+
// skipping the delta-confirm round-trip. The drop-guard is still
|
|
113
|
+
// satisfied via the ConfirmDrops gate above.
|
|
114
|
+
void filteredDelta;
|
|
115
|
+
const toRemove = recordIds;
|
|
116
|
+
const sourceFilter = toRemove.map((id) => `'${id.replace(/'/g, "''")}'`).join(',');
|
|
117
|
+
const lookup = await rv.RunView({
|
|
118
|
+
EntityName: 'MJ: List Details',
|
|
119
|
+
ExtraFilter: `ListID='${sourceListId}' AND RecordID IN (${sourceFilter})`,
|
|
120
|
+
ResultType: 'entity_object',
|
|
121
|
+
}, params.ContextUser);
|
|
122
|
+
for (const row of lookup.Results ?? []) {
|
|
123
|
+
const ok = await row.Delete();
|
|
124
|
+
if (ok) {
|
|
125
|
+
removed++;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
errors.push(`Failed to remove '${row.RecordID}' from source: ${row.LatestResult?.CompleteMessage ?? 'unknown'}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
addOutputParam(params, 'Added', added);
|
|
133
|
+
addOutputParam(params, 'Removed', removed);
|
|
134
|
+
addOutputParam(params, 'Failed', failedAdds);
|
|
135
|
+
addOutputParam(params, 'Errors', errors);
|
|
136
|
+
const success = failedAdds === 0 && errors.length === failedAdds;
|
|
137
|
+
return {
|
|
138
|
+
Success: success,
|
|
139
|
+
ResultCode: success ? 'SUCCESS' : 'PARTIAL_SUCCESS',
|
|
140
|
+
Message: success
|
|
141
|
+
? `${mode === 'move' ? 'Moved' : 'Copied'} ${added} record(s)`
|
|
142
|
+
: `Completed with errors: +${added} / -${removed}, ${failedAdds + errors.length} failures`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
MoveListMembersAction = __decorate([
|
|
147
|
+
RegisterClass(BaseAction, 'Move List Members')
|
|
148
|
+
], MoveListMembersAction);
|
|
149
|
+
export { MoveListMembersAction };
|
|
150
|
+
//# sourceMappingURL=move-list-members.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move-list-members.action.js","sourceRoot":"","sources":["../../../src/custom/lists/move-list-members.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Refresh an existing List against its captured source view.
|
|
5
|
+
*
|
|
6
|
+
* `ConfirmDrops` defaults to `false` — Sync-mode refreshes that would
|
|
7
|
+
* remove records will be rejected with `DROP_NOT_CONFIRMED` unless the
|
|
8
|
+
* caller passes `ConfirmDrops: true`. This mirrors the UI dialog's
|
|
9
|
+
* acknowledgement contract: scheduled jobs and agents must opt in
|
|
10
|
+
* explicitly to data-removing operations.
|
|
11
|
+
*/
|
|
12
|
+
export declare class RefreshListFromSourceAction extends BaseAction {
|
|
13
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=refresh-list-from-source.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-list-from-source.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/refresh-list-from-source.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAWxF;;;;;;;;GAQG;AACH,qBACa,2BAA4B,SAAQ,UAAU;cACzC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA2BxF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListOperations } from '@memberjunction/lists';
|
|
10
|
+
import { addOutputParam, getBooleanParam, getStringParam, missingParam, } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Refresh an existing List against its captured source view.
|
|
13
|
+
*
|
|
14
|
+
* `ConfirmDrops` defaults to `false` — Sync-mode refreshes that would
|
|
15
|
+
* remove records will be rejected with `DROP_NOT_CONFIRMED` unless the
|
|
16
|
+
* caller passes `ConfirmDrops: true`. This mirrors the UI dialog's
|
|
17
|
+
* acknowledgement contract: scheduled jobs and agents must opt in
|
|
18
|
+
* explicitly to data-removing operations.
|
|
19
|
+
*/
|
|
20
|
+
let RefreshListFromSourceAction = class RefreshListFromSourceAction extends BaseAction {
|
|
21
|
+
async InternalRunAction(params) {
|
|
22
|
+
const listId = getStringParam(params, 'ListID');
|
|
23
|
+
if (!listId)
|
|
24
|
+
return missingParam('ListID');
|
|
25
|
+
const mode = (getStringParam(params, 'Mode') ?? 'Additive');
|
|
26
|
+
if (mode !== 'Additive' && mode !== 'Sync') {
|
|
27
|
+
return {
|
|
28
|
+
Success: false,
|
|
29
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
30
|
+
Message: `Mode must be 'Additive' or 'Sync', got '${mode}'`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const confirmDrops = getBooleanParam(params, 'ConfirmDrops', false);
|
|
34
|
+
const ops = new ListOperations(params.ContextUser, params.Provider);
|
|
35
|
+
const result = await ops.RefreshFromSource(listId, mode, { ConfirmDrops: confirmDrops });
|
|
36
|
+
addOutputParam(params, 'Added', result.Counts?.Added);
|
|
37
|
+
addOutputParam(params, 'Removed', result.Counts?.Removed);
|
|
38
|
+
addOutputParam(params, 'Failed', result.Counts?.Failed);
|
|
39
|
+
return {
|
|
40
|
+
Success: result.Success,
|
|
41
|
+
ResultCode: result.ResultCode,
|
|
42
|
+
Message: result.Message,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
RefreshListFromSourceAction = __decorate([
|
|
47
|
+
RegisterClass(BaseAction, 'Refresh List From Source')
|
|
48
|
+
], RefreshListFromSourceAction);
|
|
49
|
+
export { RefreshListFromSourceAction };
|
|
50
|
+
//# sourceMappingURL=refresh-list-from-source.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-list-from-source.action.js","sourceRoot":"","sources":["../../../src/custom/lists/refresh-list-from-source.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;GAQG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,UAAU;IAC/C,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,UAAU,CAAwB,CAAC;QACnF,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,2CAA2C,IAAI,GAAG;aAC5D,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAEpE,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QAEzF,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtD,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1D,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AA5BY,2BAA2B;IADvC,aAAa,CAAC,UAAU,EAAE,0BAA0B,CAAC;GACzC,2BAA2B,CA4BvC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve an `AudienceSource` to its current record IDs.
|
|
5
|
+
*
|
|
6
|
+
* Read-only — never mutates. Useful for previewing how many records a
|
|
7
|
+
* campaign would hit before actually sending. Agents and workflows can
|
|
8
|
+
* use this to gate downstream send actions on size thresholds.
|
|
9
|
+
*
|
|
10
|
+
* `Source` is JSON-stringified for transport — same shape as the
|
|
11
|
+
* `ListSource` discriminated union (`{kind:'list'|'view'|'adhoc', ...}`).
|
|
12
|
+
*/
|
|
13
|
+
export declare class ResolveAudienceAction extends BaseAction {
|
|
14
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=resolve-audience.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-audience.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/resolve-audience.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAYxF;;;;;;;;;GASG;AACH,qBACa,qBAAsB,SAAQ,UAAU;cACnC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA+BxF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { AudienceResolver } from '@memberjunction/lists';
|
|
10
|
+
import { addOutputParam, getJsonParam, getStringParam, missingParam, } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve an `AudienceSource` to its current record IDs.
|
|
13
|
+
*
|
|
14
|
+
* Read-only — never mutates. Useful for previewing how many records a
|
|
15
|
+
* campaign would hit before actually sending. Agents and workflows can
|
|
16
|
+
* use this to gate downstream send actions on size thresholds.
|
|
17
|
+
*
|
|
18
|
+
* `Source` is JSON-stringified for transport — same shape as the
|
|
19
|
+
* `ListSource` discriminated union (`{kind:'list'|'view'|'adhoc', ...}`).
|
|
20
|
+
*/
|
|
21
|
+
let ResolveAudienceAction = class ResolveAudienceAction extends BaseAction {
|
|
22
|
+
async InternalRunAction(params) {
|
|
23
|
+
const source = getJsonParam(params, 'Source');
|
|
24
|
+
if (!source) {
|
|
25
|
+
// Surface a clear contract hint — `getJsonParam` swallows parse
|
|
26
|
+
// errors, so the caller might be supplying a non-JSON string by
|
|
27
|
+
// mistake. Distinguish missing vs unparseable for grep-ability.
|
|
28
|
+
const raw = getStringParam(params, 'Source');
|
|
29
|
+
if (raw == null || raw.length === 0)
|
|
30
|
+
return missingParam('Source');
|
|
31
|
+
return {
|
|
32
|
+
Success: false,
|
|
33
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
34
|
+
Message: "'Source' must be a JSON-stringified AudienceSource object ({kind:'list'|'view'|'adhoc', ...})",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const resolver = new AudienceResolver(params.ContextUser, params.Provider);
|
|
38
|
+
try {
|
|
39
|
+
const resolved = await resolver.Resolve(source);
|
|
40
|
+
addOutputParam(params, 'EntityName', resolved.EntityName);
|
|
41
|
+
addOutputParam(params, 'RecordCount', resolved.RecordIds.length);
|
|
42
|
+
addOutputParam(params, 'RecordIDs', resolved.RecordIds);
|
|
43
|
+
return {
|
|
44
|
+
Success: true,
|
|
45
|
+
ResultCode: 'SUCCESS',
|
|
46
|
+
Message: `Resolved ${resolved.RecordIds.length} record(s) for ${resolved.EntityName}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
51
|
+
return { Success: false, ResultCode: 'UNEXPECTED_ERROR', Message: message };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
ResolveAudienceAction = __decorate([
|
|
56
|
+
RegisterClass(BaseAction, 'Resolve Audience')
|
|
57
|
+
], ResolveAudienceAction);
|
|
58
|
+
export { ResolveAudienceAction };
|
|
59
|
+
//# sourceMappingURL=resolve-audience.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-audience.action.js","sourceRoot":"","sources":["../../../src/custom/lists/resolve-audience.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;GASG;AAEI,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IACzC,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,MAAM,GAAG,YAAY,CAAiB,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gEAAgE;YAChE,gEAAgE;YAChE,gEAAgE;YAChE,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;YACnE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,+FAA+F;aACzG,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1D,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjE,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,YAAY,QAAQ,CAAC,SAAS,CAAC,MAAM,kBAAkB,QAAQ,CAAC,UAAU,EAAE;aACtF,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAA;AAhCY,qBAAqB;IADjC,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC;GACjC,qBAAqB,CAgCjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Revoke a pending List invitation before acceptance. Once an invitation
|
|
5
|
+
* has been accepted, callers should `Unshare List` the resulting
|
|
6
|
+
* permission row instead — this action returns `INVITATION_ALREADY_USED`
|
|
7
|
+
* in that case.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RevokeListInvitationAction extends BaseAction {
|
|
10
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=revoke-list-invitation.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke-list-invitation.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/revoke-list-invitation.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMxF;;;;;GAKG;AACH,qBACa,0BAA2B,SAAQ,UAAU;cACxC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQxF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListSharing } from '@memberjunction/lists';
|
|
10
|
+
import { getStringParam, missingParam } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Revoke a pending List invitation before acceptance. Once an invitation
|
|
13
|
+
* has been accepted, callers should `Unshare List` the resulting
|
|
14
|
+
* permission row instead — this action returns `INVITATION_ALREADY_USED`
|
|
15
|
+
* in that case.
|
|
16
|
+
*/
|
|
17
|
+
let RevokeListInvitationAction = class RevokeListInvitationAction extends BaseAction {
|
|
18
|
+
async InternalRunAction(params) {
|
|
19
|
+
const invitationId = getStringParam(params, 'InvitationID');
|
|
20
|
+
if (!invitationId)
|
|
21
|
+
return missingParam('InvitationID');
|
|
22
|
+
const sharing = new ListSharing(params.ContextUser, params.Provider);
|
|
23
|
+
const result = await sharing.RevokeInvitation(invitationId);
|
|
24
|
+
return { Success: result.Success, ResultCode: result.ResultCode, Message: result.Message };
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
RevokeListInvitationAction = __decorate([
|
|
28
|
+
RegisterClass(BaseAction, 'Revoke List Invitation')
|
|
29
|
+
], RevokeListInvitationAction);
|
|
30
|
+
export { RevokeListInvitationAction };
|
|
31
|
+
//# sourceMappingURL=revoke-list-invitation.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke-list-invitation.action.js","sourceRoot":"","sources":["../../../src/custom/lists/revoke-list-invitation.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;;GAKG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,UAAU;IAC9C,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY;YAAE,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC7F,CAAC;CACF,CAAA;AATY,0BAA0B;IADtC,aAAa,CAAC,UAAU,EAAE,wBAAwB,CAAC;GACvC,0BAA0B,CAStC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Grant a direct share on a List to a user or role. Mirrors
|
|
5
|
+
* `ListSharing.Share` — idempotent at the (list, target) pair.
|
|
6
|
+
*
|
|
7
|
+
* Params:
|
|
8
|
+
* - ListID (required)
|
|
9
|
+
* - TargetKind: 'user' | 'role' (required)
|
|
10
|
+
* - TargetID: the UserID or RoleID matching TargetKind (required)
|
|
11
|
+
* - PermissionLevel: 'View' | 'Edit' | 'Owner' (default 'View')
|
|
12
|
+
*/
|
|
13
|
+
export declare class ShareListAction extends BaseAction {
|
|
14
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=share-list.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-list.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/share-list.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAOxF;;;;;;;;;GASG;AACH,qBACa,eAAgB,SAAQ,UAAU;cAC7B,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA+BxF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListSharing } from '@memberjunction/lists';
|
|
10
|
+
import { addOutputParam, getStringParam, missingParam } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Grant a direct share on a List to a user or role. Mirrors
|
|
13
|
+
* `ListSharing.Share` — idempotent at the (list, target) pair.
|
|
14
|
+
*
|
|
15
|
+
* Params:
|
|
16
|
+
* - ListID (required)
|
|
17
|
+
* - TargetKind: 'user' | 'role' (required)
|
|
18
|
+
* - TargetID: the UserID or RoleID matching TargetKind (required)
|
|
19
|
+
* - PermissionLevel: 'View' | 'Edit' | 'Owner' (default 'View')
|
|
20
|
+
*/
|
|
21
|
+
let ShareListAction = class ShareListAction extends BaseAction {
|
|
22
|
+
async InternalRunAction(params) {
|
|
23
|
+
const listId = getStringParam(params, 'ListID');
|
|
24
|
+
const targetKind = getStringParam(params, 'TargetKind');
|
|
25
|
+
const targetId = getStringParam(params, 'TargetID');
|
|
26
|
+
if (!listId)
|
|
27
|
+
return missingParam('ListID');
|
|
28
|
+
if (targetKind !== 'user' && targetKind !== 'role') {
|
|
29
|
+
return {
|
|
30
|
+
Success: false,
|
|
31
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
32
|
+
Message: `TargetKind must be 'user' or 'role' (got '${targetKind ?? ''}')`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (!targetId)
|
|
36
|
+
return missingParam('TargetID');
|
|
37
|
+
const level = (getStringParam(params, 'PermissionLevel') ?? 'View');
|
|
38
|
+
if (level !== 'View' && level !== 'Edit' && level !== 'Owner') {
|
|
39
|
+
return {
|
|
40
|
+
Success: false,
|
|
41
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
42
|
+
Message: `PermissionLevel must be View | Edit | Owner (got '${level}')`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const target = targetKind === 'user' ? { kind: 'user', userId: targetId } : { kind: 'role', roleId: targetId };
|
|
46
|
+
const sharing = new ListSharing(params.ContextUser, params.Provider);
|
|
47
|
+
const result = await sharing.Share({ ListID: listId, Target: target, PermissionLevel: level });
|
|
48
|
+
addOutputParam(params, 'PermissionID', result.PermissionID);
|
|
49
|
+
return { Success: result.Success, ResultCode: result.ResultCode, Message: result.Message };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
ShareListAction = __decorate([
|
|
53
|
+
RegisterClass(BaseAction, 'Share List')
|
|
54
|
+
], ShareListAction);
|
|
55
|
+
export { ShareListAction };
|
|
56
|
+
//# sourceMappingURL=share-list.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-list.action.js","sourceRoot":"","sources":["../../../src/custom/lists/share-list.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;;;;;;;GASG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IACnC,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAgC,CAAC;QACvF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,6CAA6C,UAAU,IAAI,EAAE,IAAI;aAC3E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAA8B,CAAC;QACjG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,qDAAqD,KAAK,IAAI;aACxE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GACV,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAElG,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/F,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC7F,CAAC;CACF,CAAA;AAhCY,eAAe;IAD3B,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC;GAC3B,eAAe,CAgC3B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Revoke a previously-granted permission row. Soft-revokes (sets
|
|
5
|
+
* `Status='Revoked'` on `MJResourcePermission`) so the audit trail
|
|
6
|
+
* remains intact.
|
|
7
|
+
*/
|
|
8
|
+
export declare class UnshareListAction extends BaseAction {
|
|
9
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=unshare-list.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unshare-list.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/unshare-list.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMxF;;;;GAIG;AACH,qBACa,iBAAkB,SAAQ,UAAU;cAC/B,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQxF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListSharing } from '@memberjunction/lists';
|
|
10
|
+
import { getStringParam, missingParam } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Revoke a previously-granted permission row. Soft-revokes (sets
|
|
13
|
+
* `Status='Revoked'` on `MJResourcePermission`) so the audit trail
|
|
14
|
+
* remains intact.
|
|
15
|
+
*/
|
|
16
|
+
let UnshareListAction = class UnshareListAction extends BaseAction {
|
|
17
|
+
async InternalRunAction(params) {
|
|
18
|
+
const permissionId = getStringParam(params, 'PermissionID');
|
|
19
|
+
if (!permissionId)
|
|
20
|
+
return missingParam('PermissionID');
|
|
21
|
+
const sharing = new ListSharing(params.ContextUser, params.Provider);
|
|
22
|
+
const result = await sharing.Unshare(permissionId);
|
|
23
|
+
return { Success: result.Success, ResultCode: result.ResultCode, Message: result.Message };
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
UnshareListAction = __decorate([
|
|
27
|
+
RegisterClass(BaseAction, 'Unshare List')
|
|
28
|
+
], UnshareListAction);
|
|
29
|
+
export { UnshareListAction };
|
|
30
|
+
//# sourceMappingURL=unshare-list.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unshare-list.action.js","sourceRoot":"","sources":["../../../src/custom/lists/unshare-list.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;GAIG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,UAAU;IACrC,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY;YAAE,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC7F,CAAC;CACF,CAAA;AATY,iBAAiB;IAD7B,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC;GAC7B,iBAAiB,CAS7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address-services.action.d.ts","sourceRoot":"","sources":["../../../src/custom/utilities/address-services.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"address-services.action.d.ts","sourceRoot":"","sources":["../../../src/custom/utilities/address-services.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAoIrD;;;;;;;;;;;;;;GAcG;AACH,qBACa,sBAAuB,SAAQ,UAAU;cAClC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA6C1F;AAMD;;;;;;;;;;;;;GAaG;AACH,qBACa,oBAAqB,SAAQ,UAAU;cAChC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA6B1F;AAMD;;;;;;;;;;;;;;GAcG;AACH,qBACa,oBAAqB,SAAQ,UAAU;cAChC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAmC1F;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,qBAAsB,SAAQ,UAAU;cACjC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwG1F"}
|