crewly 1.20.454 → 1.20.456
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/backend/backend/src/constants.d.ts +8 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +8 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.controller.js +3 -0
- package/dist/backend/backend/src/controllers/canva/canva.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.js +9 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/remote-mcp-proxy.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/remote-mcp-proxy.controller.js +12 -1
- package/dist/backend/backend/src/controllers/connector/remote-mcp-proxy.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/remote-mcp-tool-policy.d.ts +7 -0
- package/dist/backend/backend/src/controllers/connector/remote-mcp-tool-policy.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/remote-mcp-tool-policy.js +9 -0
- package/dist/backend/backend/src/controllers/connector/remote-mcp-tool-policy.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/zoho-draft.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/zoho-draft.controller.js +4 -0
- package/dist/backend/backend/src/controllers/connector/zoho-draft.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +9 -0
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +3 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -1
- package/dist/backend/backend/src/services/connector/connector-use-audit.service.d.ts +100 -0
- package/dist/backend/backend/src/services/connector/connector-use-audit.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/connector/connector-use-audit.service.js +142 -0
- package/dist/backend/backend/src/services/connector/connector-use-audit.service.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +8 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +8 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microsoft-todo.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"microsoft-todo.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAE,qBAAqB,EAAkB,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAI1F,0DAA0D;AAC1D,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAYD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAE7F;AAgBD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAmDtF;AAoBD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAI5D;AAED,qCAAqC;AACrC,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E;AAED,8EAA8E;AAC9E,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9E;AAED,4CAA4C;AAC5C,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E;AAED,oCAAoC;AACpC,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,kDAAkD;AAClD,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3E;AAED,sDAAsD;AACtD,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,4FAA4F;AAC5F,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB3E;AAED,qDAAqD;AACrD,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,gDAAwH,CAAC"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { PEOPLE_CONSTANTS } from '../../constants.js';
|
|
11
11
|
import { connectingPerson, createSharingHandler } from '../connector/grant-sharing.handler.js';
|
|
12
12
|
import { actorFromRequest, recordActivity } from '../../services/activity/activity-log.service.js';
|
|
13
|
+
import { getConnectorUseAudit } from '../../services/connector/connector-use-audit.service.js';
|
|
13
14
|
import { MICROSOFT_TODO_CONSTANTS } from '../../constants.js';
|
|
14
15
|
import { LoggerService } from '../../services/core/logger.service.js';
|
|
15
16
|
import { MicrosoftTokenService, MicrosoftError } from '../../services/microsoft/microsoft-token.service.js';
|
|
@@ -72,6 +73,8 @@ export function sendMicrosoftTodoError(req, res, err) {
|
|
|
72
73
|
break;
|
|
73
74
|
case PEOPLE_CONSTANTS.NOT_PERMITTED_CODE:
|
|
74
75
|
hint = PEOPLE_CONSTANTS.NOT_PERMITTED_HINT;
|
|
76
|
+
// Issue #969: Cloud refused the grant for the person this call acts for.
|
|
77
|
+
getConnectorUseAudit().refused({ connectorId: MICROSOFT_TODO_CONSTANTS.CONNECTOR_ID, actor: actorFromRequest(req), reason: 'grant_not_shared', what: req.path });
|
|
75
78
|
break;
|
|
76
79
|
case CODES.NOT_FOUND:
|
|
77
80
|
hint = 'Check the list name (todo-lists shows them) or the task id (todo-tasks shows them).';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microsoft-todo.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"microsoft-todo.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/microsoft/microsoft-todo.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAE/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;AAQ5F,IAAI,IAAI,GAAuC,IAAI,CAAC;AAEpD,SAAS,OAAO;IACd,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAwC;IACrF,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACpD,OAAO,GAAG,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,wBAAwB,CAAC,oBAAoB,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC;QACH,OAAO,OAAO,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY,EAAE,GAAa,EAAE,GAAY;IAC9E,MAAM,KAAK,GAAG,wBAAwB,CAAC,WAAW,CAAC;IACnD,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,IAAI,IAAY,CAAC;QACjB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC,aAAa;gBACtB,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,uGAAuG,CAAC;gBACxI,MAAM;YACR,KAAK,KAAK,CAAC,aAAa;gBACtB,IAAI,GAAG,6DAA6D,CAAC;gBACrE,MAAM;YACR,KAAK,KAAK,CAAC,cAAc;gBACvB,IAAI,GAAG,mFAAmF,CAAC;gBAC3F,MAAM;YACR,KAAK,KAAK,CAAC,UAAU;gBACnB,IAAI,GAAG,4BAA4B,CAAC;gBACpC,MAAM;YACR,KAAK,gBAAgB,CAAC,kBAAkB;gBACtC,IAAI,GAAG,gBAAgB,CAAC,kBAAkB,CAAC;gBAC3C,yEAAyE;gBACzE,oBAAoB,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,wBAAwB,CAAC,YAAY,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjK,MAAM;YACR,KAAK,KAAK,CAAC,SAAS;gBAClB,IAAI,GAAG,qFAAqF,CAAC;gBAC7F,MAAM;YACR,KAAK,KAAK,CAAC,SAAS;gBAClB,IAAI;oBACF,kMAAkM,CAAC;gBACrM,MAAM;YACR,KAAK,KAAK,CAAC,YAAY;gBACrB,IAAI,GAAG,iCAAiC,GAAG,CAAC,iBAAiB,IAAI,OAAO,qBAAqB,CAAC;gBAC9F,MAAM;YACR,KAAK,KAAK,CAAC,YAAY;gBACrB,IAAI,GAAG,mGAAmG,CAAC;gBAC3G,MAAM;YACR;gBACE,IAAI,GAAG,sDAAsD,CAAC;QAClE,CAAC;QACD,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS;YAAE,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,CAAC,IAAI;YACf,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI;YACJ,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,CAAC,CAAC,GAAY,EAAE,IAAY;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,IAAI,CAAC,GAAY,EAAE,IAAY;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,KAAK,CAAC,GAAY,EAAE,IAAY;IACvC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACzF,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,GAAa;IACzD,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAY,EAAE,GAAa;IAC7D,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7H,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACjD,cAAc,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACxI,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,GAAa;IACzD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA8C,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5F,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,GAAa;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAClJ,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9I,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY,EAAE,GAAa;IACvD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YACvC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YAChC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YAC1C,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACvC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7C,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YAChC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;YACxC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;SACvC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrG,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1G,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit log of connector use (issue #969): who used which connection,
|
|
3
|
+
* acting for whom, when, and whether the call was allowed or refused.
|
|
4
|
+
*
|
|
5
|
+
* The owner reads it on Settings › Activity (`connector.use.allowed`,
|
|
6
|
+
* `connector.use.refused`) next to the configuration changes #881 already
|
|
7
|
+
* logs (`connector.access.updated`, `connector.sharing.updated`, …).
|
|
8
|
+
*
|
|
9
|
+
* Refusals are written every time: a role off the allowlist, or Crewly
|
|
10
|
+
* Cloud refusing a grant that is not shared with the person the agent acts
|
|
11
|
+
* for. Allowed uses would flood the log (one Drive search = one call), so an
|
|
12
|
+
* allowed use is written once per actor, connection and person per hour;
|
|
13
|
+
* the entry says so.
|
|
14
|
+
*
|
|
15
|
+
* @module services/connector/connector-use-audit.service
|
|
16
|
+
*/
|
|
17
|
+
import { type ActivityActor, type ActivityEntryInput } from '../activity/activity-log.service.js';
|
|
18
|
+
import { type Actor } from '../people/acting-for.service.js';
|
|
19
|
+
/** Why a call was refused. */
|
|
20
|
+
export type ConnectorUseRefusal = 'role_not_allowed' | 'grant_not_shared';
|
|
21
|
+
/** One use of a connection. */
|
|
22
|
+
export interface ConnectorUseInput {
|
|
23
|
+
/** `google-workspace`, `canva`, `microsoft-todo`, `mcp:<id>`, … */
|
|
24
|
+
connectorId: string;
|
|
25
|
+
/** Who called (the agent, the owner, or Crewly itself) */
|
|
26
|
+
actor: ActivityActor;
|
|
27
|
+
/** The person the call acts for; default the current request's, else none */
|
|
28
|
+
actingFor?: Actor | null;
|
|
29
|
+
/** The route or product used, for the note (`/drive/search`, `gmail`) */
|
|
30
|
+
what?: string;
|
|
31
|
+
}
|
|
32
|
+
/** A refused use. */
|
|
33
|
+
export interface ConnectorUseRefusedInput extends ConnectorUseInput {
|
|
34
|
+
reason: ConnectorUseRefusal;
|
|
35
|
+
/** Roles the owner allowed (`role_not_allowed`) */
|
|
36
|
+
allowedRoles?: string[];
|
|
37
|
+
/** Who authorized the grant (`grant_not_shared`), when Cloud said */
|
|
38
|
+
authorizedBy?: string | null;
|
|
39
|
+
}
|
|
40
|
+
/** Injectable pieces. */
|
|
41
|
+
export interface ConnectorUseAuditDeps {
|
|
42
|
+
record?: (input: ActivityEntryInput) => void;
|
|
43
|
+
now?: () => number;
|
|
44
|
+
/** How long one allowed use stands for later ones (same actor, connection, person) */
|
|
45
|
+
windowMs?: number;
|
|
46
|
+
/** Most actor/connection/person keys remembered before the oldest are dropped */
|
|
47
|
+
maxKeys?: number;
|
|
48
|
+
}
|
|
49
|
+
/** Action names written. */
|
|
50
|
+
export declare const CONNECTOR_USE_ACTIONS: {
|
|
51
|
+
readonly ALLOWED: "connector.use.allowed";
|
|
52
|
+
readonly REFUSED: "connector.use.refused";
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Writes connector uses to the activity log, collapsing allowed uses to one
|
|
56
|
+
* entry per actor, connection and person per window.
|
|
57
|
+
*/
|
|
58
|
+
export declare class ConnectorUseAuditService {
|
|
59
|
+
private readonly record;
|
|
60
|
+
private readonly now;
|
|
61
|
+
private readonly windowMs;
|
|
62
|
+
private readonly maxKeys;
|
|
63
|
+
/** Last time an allowed use was written, by `actor|connector|person` */
|
|
64
|
+
private readonly lastAllowed;
|
|
65
|
+
/**
|
|
66
|
+
* @param deps - Writer, clock and limits (defaults: the activity log, `Date.now`, the constants)
|
|
67
|
+
*/
|
|
68
|
+
constructor(deps?: ConnectorUseAuditDeps);
|
|
69
|
+
/**
|
|
70
|
+
* Note an allowed use. Written once per actor, connection and person per
|
|
71
|
+
* window; later uses inside the window are dropped.
|
|
72
|
+
*
|
|
73
|
+
* @param input - The use
|
|
74
|
+
* @returns True when an entry was written
|
|
75
|
+
*/
|
|
76
|
+
allowed(input: ConnectorUseInput): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Note a refused use. Always written.
|
|
79
|
+
*
|
|
80
|
+
* @param input - The use and why it was refused
|
|
81
|
+
*/
|
|
82
|
+
refused(input: ConnectorUseRefusedInput): void;
|
|
83
|
+
/** Forget every allowed-use window (tests, owner changed sharing). */
|
|
84
|
+
reset(): void;
|
|
85
|
+
/** Remember an allowed use, dropping the oldest keys past the cap. */
|
|
86
|
+
private remember;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The process-wide audit writer.
|
|
90
|
+
*
|
|
91
|
+
* @returns The service
|
|
92
|
+
*/
|
|
93
|
+
export declare function getConnectorUseAudit(): ConnectorUseAuditService;
|
|
94
|
+
/**
|
|
95
|
+
* Replace the writer in tests (null restores the default).
|
|
96
|
+
*
|
|
97
|
+
* @param service - Replacement
|
|
98
|
+
*/
|
|
99
|
+
export declare function setConnectorUseAuditForTesting(service: ConnectorUseAuditService | null): void;
|
|
100
|
+
//# sourceMappingURL=connector-use-audit.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-use-audit.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/connector/connector-use-audit.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAClH,OAAO,EAAgB,KAAK,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAE3E,8BAA8B;AAC9B,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAE1E,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,KAAK,EAAE,aAAa,CAAC;IACrB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAqB;AACrB,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,yBAAyB;AACzB,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,4BAA4B;AAC5B,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX;;;GAGG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD;;OAEG;gBACS,IAAI,GAAE,qBAA0B;IAO5C;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO;IAmB1C;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAoB9C,sEAAsE;IACtE,KAAK,IAAI,IAAI;IAIb,sEAAsE;IACtE,OAAO,CAAC,QAAQ;CASjB;AAgBD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,wBAAwB,CAG/D;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,IAAI,CAE7F"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit log of connector use (issue #969): who used which connection,
|
|
3
|
+
* acting for whom, when, and whether the call was allowed or refused.
|
|
4
|
+
*
|
|
5
|
+
* The owner reads it on Settings › Activity (`connector.use.allowed`,
|
|
6
|
+
* `connector.use.refused`) next to the configuration changes #881 already
|
|
7
|
+
* logs (`connector.access.updated`, `connector.sharing.updated`, …).
|
|
8
|
+
*
|
|
9
|
+
* Refusals are written every time: a role off the allowlist, or Crewly
|
|
10
|
+
* Cloud refusing a grant that is not shared with the person the agent acts
|
|
11
|
+
* for. Allowed uses would flood the log (one Drive search = one call), so an
|
|
12
|
+
* allowed use is written once per actor, connection and person per hour;
|
|
13
|
+
* the entry says so.
|
|
14
|
+
*
|
|
15
|
+
* @module services/connector/connector-use-audit.service
|
|
16
|
+
*/
|
|
17
|
+
import { ACTIVITY_LOG_CONSTANTS } from '../../constants.js';
|
|
18
|
+
import { recordActivity } from '../activity/activity-log.service.js';
|
|
19
|
+
import { currentActor } from '../people/acting-for.service.js';
|
|
20
|
+
/** Action names written. */
|
|
21
|
+
export const CONNECTOR_USE_ACTIONS = {
|
|
22
|
+
ALLOWED: 'connector.use.allowed',
|
|
23
|
+
REFUSED: 'connector.use.refused',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Writes connector uses to the activity log, collapsing allowed uses to one
|
|
27
|
+
* entry per actor, connection and person per window.
|
|
28
|
+
*/
|
|
29
|
+
export class ConnectorUseAuditService {
|
|
30
|
+
record;
|
|
31
|
+
now;
|
|
32
|
+
windowMs;
|
|
33
|
+
maxKeys;
|
|
34
|
+
/** Last time an allowed use was written, by `actor|connector|person` */
|
|
35
|
+
lastAllowed = new Map();
|
|
36
|
+
/**
|
|
37
|
+
* @param deps - Writer, clock and limits (defaults: the activity log, `Date.now`, the constants)
|
|
38
|
+
*/
|
|
39
|
+
constructor(deps = {}) {
|
|
40
|
+
this.record = deps.record ?? recordActivity;
|
|
41
|
+
this.now = deps.now ?? Date.now;
|
|
42
|
+
this.windowMs = deps.windowMs ?? ACTIVITY_LOG_CONSTANTS.USE_ALLOWED_WINDOW_MS;
|
|
43
|
+
this.maxKeys = deps.maxKeys ?? ACTIVITY_LOG_CONSTANTS.USE_KEYS_MAX;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Note an allowed use. Written once per actor, connection and person per
|
|
47
|
+
* window; later uses inside the window are dropped.
|
|
48
|
+
*
|
|
49
|
+
* @param input - The use
|
|
50
|
+
* @returns True when an entry was written
|
|
51
|
+
*/
|
|
52
|
+
allowed(input) {
|
|
53
|
+
const person = input.actingFor === undefined ? currentActor() : input.actingFor;
|
|
54
|
+
const key = `${input.actor.type}:${input.actor.id ?? ''}|${input.connectorId}|${person?.id ?? ''}`;
|
|
55
|
+
const now = this.now();
|
|
56
|
+
const last = this.lastAllowed.get(key);
|
|
57
|
+
if (last !== undefined && now - last < this.windowMs)
|
|
58
|
+
return false;
|
|
59
|
+
this.remember(key, now);
|
|
60
|
+
const hours = Math.round((this.windowMs / 3_600_000) * 10) / 10;
|
|
61
|
+
const span = hours === 1 ? 'the next hour' : `the next ${hours} hours`;
|
|
62
|
+
this.record({
|
|
63
|
+
actor: input.actor,
|
|
64
|
+
action: CONNECTOR_USE_ACTIONS.ALLOWED,
|
|
65
|
+
target: { type: 'connector', id: input.connectorId },
|
|
66
|
+
after: { ...personFields(person), ...(input.what ? { what: input.what } : {}) },
|
|
67
|
+
note: `${describe(input.actor)} used ${input.connectorId}${person ? ` acting for ${person.name || person.id}` : ''}${input.what ? ` (${input.what})` : ''}; further uses in ${span} are not logged`,
|
|
68
|
+
});
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Note a refused use. Always written.
|
|
73
|
+
*
|
|
74
|
+
* @param input - The use and why it was refused
|
|
75
|
+
*/
|
|
76
|
+
refused(input) {
|
|
77
|
+
const person = input.actingFor === undefined ? currentActor() : input.actingFor;
|
|
78
|
+
const why = input.reason === 'role_not_allowed'
|
|
79
|
+
? `role ${input.actor.id ? `of ${input.actor.id} ` : ''}is not on the allowlist${input.allowedRoles?.length ? ` (allowed: ${input.allowedRoles.join(', ')})` : ''}`
|
|
80
|
+
: `the grant is not shared with ${person ? person.name || person.id : 'the person this call acts for'}${input.authorizedBy ? ` (authorized by ${input.authorizedBy})` : ''}`;
|
|
81
|
+
this.record({
|
|
82
|
+
actor: input.actor,
|
|
83
|
+
action: CONNECTOR_USE_ACTIONS.REFUSED,
|
|
84
|
+
target: { type: 'connector', id: input.connectorId },
|
|
85
|
+
after: {
|
|
86
|
+
reason: input.reason,
|
|
87
|
+
...personFields(person),
|
|
88
|
+
...(input.allowedRoles ? { allowedRoles: input.allowedRoles } : {}),
|
|
89
|
+
...(input.authorizedBy ? { authorizedBy: input.authorizedBy } : {}),
|
|
90
|
+
...(input.what ? { what: input.what } : {}),
|
|
91
|
+
},
|
|
92
|
+
note: `${describe(input.actor)} was refused ${input.connectorId}${input.what ? ` (${input.what})` : ''}: ${why}`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Forget every allowed-use window (tests, owner changed sharing). */
|
|
96
|
+
reset() {
|
|
97
|
+
this.lastAllowed.clear();
|
|
98
|
+
}
|
|
99
|
+
/** Remember an allowed use, dropping the oldest keys past the cap. */
|
|
100
|
+
remember(key, at) {
|
|
101
|
+
this.lastAllowed.delete(key);
|
|
102
|
+
this.lastAllowed.set(key, at);
|
|
103
|
+
while (this.lastAllowed.size > this.maxKeys) {
|
|
104
|
+
const oldest = this.lastAllowed.keys().next().value;
|
|
105
|
+
if (oldest === undefined)
|
|
106
|
+
break;
|
|
107
|
+
this.lastAllowed.delete(oldest);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** The person fields an entry carries. */
|
|
112
|
+
function personFields(person) {
|
|
113
|
+
return person ? { actingFor: person.id, actingForRole: person.role } : {};
|
|
114
|
+
}
|
|
115
|
+
/** "agent a-dev", "the owner", "Crewly (deadline)". */
|
|
116
|
+
function describe(actor) {
|
|
117
|
+
if (actor.type === 'owner')
|
|
118
|
+
return 'the owner';
|
|
119
|
+
if (actor.type === 'agent')
|
|
120
|
+
return `agent ${actor.id ?? '(unknown)'}`;
|
|
121
|
+
return `Crewly${actor.id ? ` (${actor.id})` : ''}`;
|
|
122
|
+
}
|
|
123
|
+
let instance = null;
|
|
124
|
+
/**
|
|
125
|
+
* The process-wide audit writer.
|
|
126
|
+
*
|
|
127
|
+
* @returns The service
|
|
128
|
+
*/
|
|
129
|
+
export function getConnectorUseAudit() {
|
|
130
|
+
if (!instance)
|
|
131
|
+
instance = new ConnectorUseAuditService();
|
|
132
|
+
return instance;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Replace the writer in tests (null restores the default).
|
|
136
|
+
*
|
|
137
|
+
* @param service - Replacement
|
|
138
|
+
*/
|
|
139
|
+
export function setConnectorUseAuditForTesting(service) {
|
|
140
|
+
instance = service;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=connector-use-audit.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-use-audit.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/connector/connector-use-audit.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5439,6 +5439,8 @@ export declare const GOOGLE_PRODUCTS: readonly ["gmail", "calendar", "drive"];
|
|
|
5439
5439
|
/** One of {@link GOOGLE_PRODUCTS}. */
|
|
5440
5440
|
export type GoogleProduct = (typeof GOOGLE_PRODUCTS)[number];
|
|
5441
5441
|
export declare const GOOGLE_WORKSPACE_CONSTANTS: {
|
|
5442
|
+
/** Connector id on Connections and in the activity log */
|
|
5443
|
+
readonly CONNECTOR_ID: "google-workspace";
|
|
5442
5444
|
/** Cloud API prefix for the Workspace grant (appended to the cloud URL) */
|
|
5443
5445
|
readonly CLOUD_PATH: "/api/cloud/google/workspace";
|
|
5444
5446
|
/** Cloud sub-paths under CLOUD_PATH */
|
|
@@ -5588,6 +5590,8 @@ export declare const GOOGLE_WORKSPACE_CONSTANTS: {
|
|
|
5588
5590
|
* Backs the canva-* skills.
|
|
5589
5591
|
*/
|
|
5590
5592
|
export declare const CANVA_CONSTANTS: {
|
|
5593
|
+
/** Connector id on Connections and in the activity log */
|
|
5594
|
+
readonly CONNECTOR_ID: "canva";
|
|
5591
5595
|
/** Cloud API prefix for the Canva grant (appended to the cloud URL) */
|
|
5592
5596
|
readonly CLOUD_PATH: "/api/cloud/canva";
|
|
5593
5597
|
readonly CLOUD_ENDPOINTS: {
|
|
@@ -9873,6 +9877,10 @@ export declare const ACTIVITY_LOG_CONSTANTS: {
|
|
|
9873
9877
|
readonly SECRET_KEY_PATTERN: RegExp;
|
|
9874
9878
|
/** What a masked value is written as */
|
|
9875
9879
|
readonly MASK: "***";
|
|
9880
|
+
/** An allowed connector use stands for later ones by the same actor, connection and person this long (issue #969) */
|
|
9881
|
+
readonly USE_ALLOWED_WINDOW_MS: number;
|
|
9882
|
+
/** Most actor/connection/person keys the connector use audit remembers */
|
|
9883
|
+
readonly USE_KEYS_MAX: 2000;
|
|
9876
9884
|
/** Query parameter names of GET /api/activity */
|
|
9877
9885
|
readonly QUERY: {
|
|
9878
9886
|
readonly ACTOR_TYPE: "actorType";
|