@microsoft/omnichannel-chat-sdk 2.0.1 → 2.0.2-main.c0f210d
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/README.md +4 -0
- package/lib/OmnichannelChatSDK.d.ts +18 -0
- package/lib/OmnichannelChatSDK.js +141 -0
- package/lib/OmnichannelChatSDK.js.map +1 -1
- package/lib/config/settings.d.ts +1 -1
- package/lib/config/settings.js +1 -1
- package/lib/core/ChatSDKConfig.d.ts +4 -0
- package/lib/core/messaging/ACSClient.js +17 -8
- package/lib/core/messaging/ACSClient.js.map +1 -1
- package/lib/telemetry/TelemetryEvent.d.ts +2 -0
- package/lib/telemetry/TelemetryEvent.js +2 -0
- package/lib/telemetry/TelemetryEvent.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/chatTokenRenewal.d.ts +40 -0
- package/lib/utils/chatTokenRenewal.js +215 -0
- package/lib/utils/chatTokenRenewal.js.map +1 -0
- package/lib/utils/loggerUtils.d.ts +2 -0
- package/lib/utils/loggerUtils.js +48 -8
- package/lib/utils/loggerUtils.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-safe ACS chat token refresher backed by the Omnichannel renew chat token API.
|
|
3
|
+
*
|
|
4
|
+
* The refresher NEVER throws and NEVER returns an unusable token. On any failure (API not deployed, feature disabled,
|
|
5
|
+
* chat ended, network error, timeout, invalid response, ...) it returns the last known good token, which is exactly
|
|
6
|
+
* what the SDK did before renewal existed, so behavior falls back to the existing flow.
|
|
7
|
+
*/
|
|
8
|
+
export interface RenewedChatToken {
|
|
9
|
+
ChatId?: string;
|
|
10
|
+
Token?: string;
|
|
11
|
+
ExpiresIn?: string | number;
|
|
12
|
+
VoiceVideoCallToken?: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface ChatTokenRefresherParams {
|
|
15
|
+
initialToken: string;
|
|
16
|
+
chatId: string;
|
|
17
|
+
/** Returns false once the chat this refresher was created for has ended or was replaced. */
|
|
18
|
+
isChatActive: () => boolean;
|
|
19
|
+
/** Calls the renew chat token API. May throw. */
|
|
20
|
+
renewChatToken: () => Promise<RenewedChatToken>;
|
|
21
|
+
/** Invoked after a usable token is received for the same chat. May throw. */
|
|
22
|
+
onRenewed: (renewed: RenewedChatToken) => void;
|
|
23
|
+
onStart?: () => void;
|
|
24
|
+
onSuccess?: () => void;
|
|
25
|
+
onFailure?: (reason: string, error?: unknown) => void;
|
|
26
|
+
/** Returns true when an HTTP status means renewal cannot succeed for this chat. Checked on each failure. */
|
|
27
|
+
isNonRetriableStatus?: (statusCode: number) => boolean;
|
|
28
|
+
retryCooldownInMs?: number;
|
|
29
|
+
timeoutInMs?: number;
|
|
30
|
+
now?: () => number;
|
|
31
|
+
}
|
|
32
|
+
export declare const defaultChatTokenRenewalRetryCooldownInMs: number;
|
|
33
|
+
export declare const defaultChatTokenRenewalTimeoutInMs: number;
|
|
34
|
+
export declare const defaultNonRetriableStatusCodes: number[];
|
|
35
|
+
export declare const authenticatedNonRetriableStatusCodes: number[];
|
|
36
|
+
/**
|
|
37
|
+
* Returns true when the token is a JWT whose exp claim is far enough in the future to be accepted by ACS.
|
|
38
|
+
*/
|
|
39
|
+
export declare const isChatTokenUsable: (token: unknown, nowInMs?: number) => boolean;
|
|
40
|
+
export declare const createChatTokenRefresher: (params: ChatTokenRefresherParams) => (() => Promise<string>);
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fail-safe ACS chat token refresher backed by the Omnichannel renew chat token API.
|
|
4
|
+
*
|
|
5
|
+
* The refresher NEVER throws and NEVER returns an unusable token. On any failure (API not deployed, feature disabled,
|
|
6
|
+
* chat ended, network error, timeout, invalid response, ...) it returns the last known good token, which is exactly
|
|
7
|
+
* what the SDK did before renewal existed, so behavior falls back to the existing flow.
|
|
8
|
+
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
19
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
20
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
21
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
22
|
+
function step(op) {
|
|
23
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
24
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
25
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
26
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
27
|
+
switch (op[0]) {
|
|
28
|
+
case 0: case 1: t = op; break;
|
|
29
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
30
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
31
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
32
|
+
default:
|
|
33
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
34
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
35
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
36
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
37
|
+
if (t[2]) _.ops.pop();
|
|
38
|
+
_.trys.pop(); continue;
|
|
39
|
+
}
|
|
40
|
+
op = body.call(thisArg, _);
|
|
41
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
42
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.createChatTokenRefresher = exports.isChatTokenUsable = exports.authenticatedNonRetriableStatusCodes = exports.defaultNonRetriableStatusCodes = exports.defaultChatTokenRenewalTimeoutInMs = exports.defaultChatTokenRenewalRetryCooldownInMs = void 0;
|
|
47
|
+
exports.defaultChatTokenRenewalRetryCooldownInMs = 60 * 1000;
|
|
48
|
+
exports.defaultChatTokenRenewalTimeoutInMs = 60 * 1000;
|
|
49
|
+
var minimumTokenLifetimeInMs = 60 * 1000;
|
|
50
|
+
// The API is not deployed, renewal is disabled for the org, or the chat cannot be renewed. Retrying will not help.
|
|
51
|
+
exports.defaultNonRetriableStatusCodes = [400, 401, 403, 404, 405];
|
|
52
|
+
// On the authenticated route, 400/401/403 come from customer token validation and can succeed once the host has a fresh token.
|
|
53
|
+
exports.authenticatedNonRetriableStatusCodes = [404, 405];
|
|
54
|
+
var decodeBase64Url = function (value) {
|
|
55
|
+
var base64 = value.replace(/-/g, "+").replace(/_/g, "/");
|
|
56
|
+
var padded = base64 + "=".repeat((4 - (base64.length % 4)) % 4);
|
|
57
|
+
if (typeof atob === "function") {
|
|
58
|
+
return atob(padded);
|
|
59
|
+
}
|
|
60
|
+
if (typeof Buffer !== "undefined" && typeof Buffer.from === "function") {
|
|
61
|
+
return Buffer.from(padded, "base64").toString("utf8");
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Returns true when the token is a JWT whose exp claim is far enough in the future to be accepted by ACS.
|
|
67
|
+
*/
|
|
68
|
+
var isChatTokenUsable = function (token, nowInMs) {
|
|
69
|
+
if (nowInMs === void 0) { nowInMs = Date.now(); }
|
|
70
|
+
try {
|
|
71
|
+
if (typeof token !== "string" || token.trim().length === 0) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
var parts = token.split(".");
|
|
75
|
+
if (parts.length !== 3) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
var payload = decodeBase64Url(parts[1]);
|
|
79
|
+
if (!payload) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
var exp = JSON.parse(payload).exp;
|
|
83
|
+
return typeof exp === "number" && exp * 1000 > nowInMs + minimumTokenLifetimeInMs;
|
|
84
|
+
}
|
|
85
|
+
catch (_a) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
exports.isChatTokenUsable = isChatTokenUsable;
|
|
90
|
+
var getStatusCode = function (error) {
|
|
91
|
+
var _a;
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
|
+
var status = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status;
|
|
94
|
+
return typeof status === "number" ? status : undefined;
|
|
95
|
+
};
|
|
96
|
+
var createChatTokenRefresher = function (params) {
|
|
97
|
+
var _a, _b, _c, _d;
|
|
98
|
+
var retryCooldownInMs = (_a = params.retryCooldownInMs) !== null && _a !== void 0 ? _a : exports.defaultChatTokenRenewalRetryCooldownInMs;
|
|
99
|
+
var timeoutInMs = (_b = params.timeoutInMs) !== null && _b !== void 0 ? _b : exports.defaultChatTokenRenewalTimeoutInMs;
|
|
100
|
+
var now = (_c = params.now) !== null && _c !== void 0 ? _c : (function () { return Date.now(); });
|
|
101
|
+
var isNonRetriableStatus = (_d = params.isNonRetriableStatus) !== null && _d !== void 0 ? _d : (function (statusCode) { return exports.defaultNonRetriableStatusCodes.includes(statusCode); });
|
|
102
|
+
var latestToken = params.initialToken;
|
|
103
|
+
var isDisabled = false;
|
|
104
|
+
var lastFailureTime = null;
|
|
105
|
+
var activeRenewal = null;
|
|
106
|
+
var safeInvoke = function (callback) {
|
|
107
|
+
try {
|
|
108
|
+
callback === null || callback === void 0 ? void 0 : callback();
|
|
109
|
+
}
|
|
110
|
+
catch (_a) {
|
|
111
|
+
// Telemetry callbacks must never break the refresh.
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
var fail = function (reason, error, disable) {
|
|
115
|
+
if (disable === void 0) { disable = false; }
|
|
116
|
+
if (disable) {
|
|
117
|
+
isDisabled = true;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
lastFailureTime = now();
|
|
121
|
+
}
|
|
122
|
+
safeInvoke(function () { var _a; return (_a = params.onFailure) === null || _a === void 0 ? void 0 : _a.call(params, reason, error); });
|
|
123
|
+
return latestToken;
|
|
124
|
+
};
|
|
125
|
+
var renew = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
126
|
+
var renewed, timeoutId_1, timeout, error_1, statusCode, isNonRetriable;
|
|
127
|
+
return __generator(this, function (_a) {
|
|
128
|
+
switch (_a.label) {
|
|
129
|
+
case 0:
|
|
130
|
+
safeInvoke(params.onStart);
|
|
131
|
+
_a.label = 1;
|
|
132
|
+
case 1:
|
|
133
|
+
_a.trys.push([1, 6, , 7]);
|
|
134
|
+
timeout = new Promise(function (_, reject) {
|
|
135
|
+
timeoutId_1 = setTimeout(function () { return reject(new Error("RenewChatTokenTimeout")); }, timeoutInMs);
|
|
136
|
+
});
|
|
137
|
+
_a.label = 2;
|
|
138
|
+
case 2:
|
|
139
|
+
_a.trys.push([2, , 4, 5]);
|
|
140
|
+
return [4 /*yield*/, Promise.race([params.renewChatToken(), timeout])];
|
|
141
|
+
case 3:
|
|
142
|
+
renewed = _a.sent();
|
|
143
|
+
return [3 /*break*/, 5];
|
|
144
|
+
case 4:
|
|
145
|
+
clearTimeout(timeoutId_1);
|
|
146
|
+
return [7 /*endfinally*/];
|
|
147
|
+
case 5: return [3 /*break*/, 7];
|
|
148
|
+
case 6:
|
|
149
|
+
error_1 = _a.sent();
|
|
150
|
+
statusCode = getStatusCode(error_1);
|
|
151
|
+
isNonRetriable = statusCode !== undefined && isNonRetriableStatus(statusCode);
|
|
152
|
+
return [2 /*return*/, fail(statusCode !== undefined ? "HttpStatus".concat(statusCode) : "RequestFailed", error_1, isNonRetriable)];
|
|
153
|
+
case 7:
|
|
154
|
+
if (!params.isChatActive()) {
|
|
155
|
+
return [2 /*return*/, fail("ChatNotActive")];
|
|
156
|
+
}
|
|
157
|
+
if (!renewed || renewed.ChatId !== params.chatId) {
|
|
158
|
+
return [2 /*return*/, fail("ChatIdMismatch")];
|
|
159
|
+
}
|
|
160
|
+
if (!(0, exports.isChatTokenUsable)(renewed.Token, now())) {
|
|
161
|
+
return [2 /*return*/, fail("InvalidToken")];
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
params.onRenewed(renewed);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return [2 /*return*/, fail("UpdateFailed", error)];
|
|
168
|
+
}
|
|
169
|
+
latestToken = renewed.Token;
|
|
170
|
+
lastFailureTime = null;
|
|
171
|
+
safeInvoke(params.onSuccess);
|
|
172
|
+
return [2 /*return*/, latestToken];
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}); };
|
|
176
|
+
return function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
177
|
+
var _a;
|
|
178
|
+
return __generator(this, function (_b) {
|
|
179
|
+
switch (_b.label) {
|
|
180
|
+
case 0:
|
|
181
|
+
_b.trys.push([0, 2, , 3]);
|
|
182
|
+
if (isDisabled || !params.isChatActive()) {
|
|
183
|
+
return [2 /*return*/, latestToken];
|
|
184
|
+
}
|
|
185
|
+
if (lastFailureTime !== null && now() - lastFailureTime < retryCooldownInMs) {
|
|
186
|
+
return [2 /*return*/, latestToken];
|
|
187
|
+
}
|
|
188
|
+
if (!activeRenewal) {
|
|
189
|
+
activeRenewal = (function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
190
|
+
return __generator(this, function (_a) {
|
|
191
|
+
switch (_a.label) {
|
|
192
|
+
case 0:
|
|
193
|
+
_a.trys.push([0, , 2, 3]);
|
|
194
|
+
return [4 /*yield*/, renew()];
|
|
195
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
196
|
+
case 2:
|
|
197
|
+
activeRenewal = null;
|
|
198
|
+
return [7 /*endfinally*/];
|
|
199
|
+
case 3: return [2 /*return*/];
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}); })();
|
|
203
|
+
}
|
|
204
|
+
return [4 /*yield*/, activeRenewal];
|
|
205
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
206
|
+
case 2:
|
|
207
|
+
_a = _b.sent();
|
|
208
|
+
return [2 /*return*/, latestToken];
|
|
209
|
+
case 3: return [2 /*return*/];
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}); };
|
|
213
|
+
};
|
|
214
|
+
exports.createChatTokenRefresher = createChatTokenRefresher;
|
|
215
|
+
//# sourceMappingURL=chatTokenRenewal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatTokenRenewal.js","sourceRoot":"","sources":["../../src/utils/chatTokenRenewal.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import { ACSAdapterLogger, ACSClientLogger, AMSClientLogger, CallingSDKLogger, I
|
|
|
2
2
|
import AriaTelemetry from "../telemetry/AriaTelemetry";
|
|
3
3
|
export declare const _basePIIKeys: string[];
|
|
4
4
|
export declare const _exceptionDetailPIIKeys: string[];
|
|
5
|
+
export declare const redactedSecretPlaceholder = "[REDACTED]";
|
|
6
|
+
export declare function redactSecrets(value: string): string;
|
|
5
7
|
export declare const useTelemetry: (telemetry: typeof AriaTelemetry, ocSdkLogger: OCSDKLogger, acsClientLogger: ACSClientLogger, acsAdapterLogger: ACSAdapterLogger, callingSdkLogger: CallingSDKLogger, amsClientLogger: AMSClientLogger, ic3ClientLogger?: IC3ClientLogger | null) => void;
|
|
6
8
|
export declare const setRuntimeId: (runtimeId: string, ocSdkLogger: OCSDKLogger, acsClientLogger: ACSClientLogger, acsAdapterLogger: ACSAdapterLogger, callingSdkLogger: CallingSDKLogger, amsClientLogger: AMSClientLogger, ic3ClientLogger?: IC3ClientLogger | null) => void;
|
|
7
9
|
export declare const setRequestId: (requestId: string, ocSdkLogger?: OCSDKLogger | null, acsClientLogger?: ACSClientLogger | null, acsAdapterLogger?: ACSAdapterLogger | null, callingSdkLogger?: CallingSDKLogger | null, amsClientLogger?: AMSClientLogger | null, ic3ClientLogger?: IC3ClientLogger | null) => void;
|
package/lib/utils/loggerUtils.js
CHANGED
|
@@ -9,18 +9,36 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
9
9
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.setChatId = exports.setDebugDetailed = exports.setDebug = exports.setRequestId = exports.setRuntimeId = exports.useTelemetry = exports._exceptionDetailPIIKeys = exports._basePIIKeys = void 0;
|
|
12
|
+
exports.setChatId = exports.setDebugDetailed = exports.setDebug = exports.setRequestId = exports.setRuntimeId = exports.useTelemetry = exports.redactedSecretPlaceholder = exports._exceptionDetailPIIKeys = exports._basePIIKeys = void 0;
|
|
13
|
+
exports.redactSecrets = redactSecrets;
|
|
13
14
|
exports.redactPII = redactPII;
|
|
14
15
|
var utilities_1 = require("./utilities");
|
|
15
16
|
exports._basePIIKeys = [
|
|
16
17
|
"senderDisplayName",
|
|
17
18
|
"message",
|
|
18
19
|
"content",
|
|
19
|
-
"fileName"
|
|
20
|
+
"fileName",
|
|
21
|
+
// Untranslated message text added to message metadata by real-time translation
|
|
22
|
+
"OriginalMessageText"
|
|
20
23
|
]
|
|
21
24
|
.map(function (s) { return s.toLowerCase(); });
|
|
22
25
|
exports._exceptionDetailPIIKeys = __spreadArray(__spreadArray([], exports._basePIIKeys, true), ["authorization"], false);
|
|
23
26
|
var disallowedStrValues = [];
|
|
27
|
+
exports.redactedSecretPlaceholder = "[REDACTED]";
|
|
28
|
+
// A JWT may follow any non-base64url character or a percent-encoded delimiter (e.g. "%3D" in a URL-encoded link).
|
|
29
|
+
// Anchoring on the preceding character keeps the scan linear, since base64url runs cannot start a new match.
|
|
30
|
+
var jwtPattern = /(^|[^A-Za-z0-9_-]|%[0-9A-Fa-f]{2})eyJ[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*/g;
|
|
31
|
+
// Delimiters and "=" may be raw, percent-encoded (Safe Links style "%3F", "%26", "%23", "%3D") or HTML-escaped ("&" ends in ";")
|
|
32
|
+
var sensitiveQueryParamPattern = /((?:[?&#;]|%3F|%26|%23)(?:access_token|id_token|refresh_token|token|sig|signature|code|api[-_]?key|secret|client_secret|password|pwd|passwd|workspace)(?:=|%3D))(?:[^%&#\s"'<>]|%(?!26|23)[0-9A-Fa-f]{2})+/gi;
|
|
33
|
+
// Backstop for credentials embedded in values that are not under a known PII key (e.g. a link pasted into a message)
|
|
34
|
+
function redactSecrets(value) {
|
|
35
|
+
if (!value) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
return value
|
|
39
|
+
.replace(jwtPattern, "$1".concat(exports.redactedSecretPlaceholder))
|
|
40
|
+
.replace(sensitiveQueryParamPattern, "$1".concat(exports.redactedSecretPlaceholder));
|
|
41
|
+
}
|
|
24
42
|
var useTelemetry = function (telemetry, ocSdkLogger, acsClientLogger, acsAdapterLogger, callingSdkLogger, amsClientLogger, ic3ClientLogger) {
|
|
25
43
|
if (ic3ClientLogger === void 0) { ic3ClientLogger = null; }
|
|
26
44
|
ocSdkLogger.useTelemetry(telemetry);
|
|
@@ -88,6 +106,16 @@ function containsDisallowedValues(targetValue) {
|
|
|
88
106
|
}
|
|
89
107
|
return undefined;
|
|
90
108
|
}
|
|
109
|
+
// Only stringified objects/arrays are traversed under PII keys; JSON primitives such as "\"text\"" or "1234" are masked like any other string
|
|
110
|
+
function parseJsonContainer(value) {
|
|
111
|
+
try {
|
|
112
|
+
var parsed = JSON.parse(value);
|
|
113
|
+
return parsed !== null && typeof parsed == "object" ? parsed : undefined;
|
|
114
|
+
}
|
|
115
|
+
catch (_a) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
91
119
|
function redactPII(input, redactAllNested, shouldClone, knownPIIKeys) {
|
|
92
120
|
if (redactAllNested === void 0) { redactAllNested = false; }
|
|
93
121
|
if (shouldClone === void 0) { shouldClone = true; }
|
|
@@ -101,7 +129,12 @@ function redactPII(input, redactAllNested, shouldClone, knownPIIKeys) {
|
|
|
101
129
|
// If stringified JSON, parse it first
|
|
102
130
|
if (typeof input == "string") {
|
|
103
131
|
if ((0, utilities_1.isJsonObject)(input)) {
|
|
104
|
-
|
|
132
|
+
var parsed = JSON.parse(input);
|
|
133
|
+
if (typeof parsed == "string") {
|
|
134
|
+
// JSON-encoded string: decode again so doubly-encoded objects are still traversed. Terminates because each decode shortens the string.
|
|
135
|
+
return redactPII(parsed, redactAllNested, shouldClone, knownPIIKeys);
|
|
136
|
+
}
|
|
137
|
+
input = parsed;
|
|
105
138
|
}
|
|
106
139
|
else {
|
|
107
140
|
var disallowedValue = containsDisallowedValues(input);
|
|
@@ -110,6 +143,9 @@ function redactPII(input, redactAllNested, shouldClone, knownPIIKeys) {
|
|
|
110
143
|
input = "".concat(disallowedValue, ":").concat(input.slice(0, 1), "**").concat(input.length - 1, " hidden**");
|
|
111
144
|
}
|
|
112
145
|
}
|
|
146
|
+
else {
|
|
147
|
+
input = redactSecrets(input);
|
|
148
|
+
}
|
|
113
149
|
}
|
|
114
150
|
}
|
|
115
151
|
if (input && typeof input == "object") {
|
|
@@ -131,11 +167,12 @@ function redactPII(input, redactAllNested, shouldClone, knownPIIKeys) {
|
|
|
131
167
|
var keyLowerCase = key.toLowerCase();
|
|
132
168
|
if (redactAllNested || knownPIIKeys.includes(keyLowerCase)) {
|
|
133
169
|
// Found a PII key, redact it. Not currently considering UUID, or number types as PII
|
|
134
|
-
//
|
|
170
|
+
// Keys are matched exactly (case-insensitive); token-like values under other keys are only caught by redactSecrets
|
|
135
171
|
if (typeof value == "string") {
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
172
|
+
// A stringified object/array is traversed; any other string (including JSON primitives) is masked
|
|
173
|
+
var parsed = parseJsonContainer(value);
|
|
174
|
+
if (parsed) {
|
|
175
|
+
cloned[key] = redactPII(parsed, true, false, knownPIIKeys);
|
|
139
176
|
}
|
|
140
177
|
else {
|
|
141
178
|
if (value.length > 1) {
|
|
@@ -153,7 +190,7 @@ function redactPII(input, redactAllNested, shouldClone, knownPIIKeys) {
|
|
|
153
190
|
}
|
|
154
191
|
else if (typeof value === "string") {
|
|
155
192
|
if ((0, utilities_1.isJsonObject)(value)) {
|
|
156
|
-
// Check and redact stringified
|
|
193
|
+
// Check and redact stringified values that are not under a known PII key
|
|
157
194
|
cloned[key] = redactPII(JSON.parse(value), redactAllNested, false, knownPIIKeys);
|
|
158
195
|
}
|
|
159
196
|
else {
|
|
@@ -165,6 +202,9 @@ function redactPII(input, redactAllNested, shouldClone, knownPIIKeys) {
|
|
|
165
202
|
+ value.slice(0, 1) + "**".concat(value.length - 1, " hidden**");
|
|
166
203
|
}
|
|
167
204
|
}
|
|
205
|
+
else {
|
|
206
|
+
cloned[key] = redactSecrets(value);
|
|
207
|
+
}
|
|
168
208
|
}
|
|
169
209
|
}
|
|
170
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loggerUtils.js","sourceRoot":"","sources":["../../src/utils/loggerUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"loggerUtils.js","sourceRoot":"","sources":["../../src/utils/loggerUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/omnichannel-chat-sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2-main.c0f210d",
|
|
4
4
|
"description": "Microsoft Omnichannel Chat SDK",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib/**/*"
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@azure/communication-chat": "1.6.0-beta.7",
|
|
53
53
|
"@azure/communication-common": "2.4.2",
|
|
54
54
|
"@microsoft/botframework-webchat-adapter-azure-communication-chat": "0.0.1-beta.8",
|
|
55
|
-
"@microsoft/ocsdk": "0.6.0",
|
|
55
|
+
"@microsoft/ocsdk": "0.6.0-main.316a2fa",
|
|
56
56
|
"@microsoft/omnichannel-amsclient": "0.2.0",
|
|
57
57
|
"@microsoft/omnichannel-ic3core": "^0.1.5"
|
|
58
58
|
},
|