@atproto/bsky 0.0.62 → 0.0.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/hydration/util.d.ts +1 -1
- package/dist/hydration/util.d.ts.map +1 -1
- package/dist/hydration/util.js.map +1 -1
- package/dist/logger.d.ts +2 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +77 -63
- package/dist/logger.js.map +1 -1
- package/package.json +5 -5
- package/src/hydration/util.ts +1 -3
- package/src/logger.ts +81 -38
package/CHANGELOG.md
CHANGED
package/dist/hydration/util.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type RecordInfo<T> = {
|
|
|
14
14
|
};
|
|
15
15
|
export declare const parseRecord: <T>(entry: Record, includeTakedowns: boolean) => RecordInfo<T> | undefined;
|
|
16
16
|
export declare const parseRecordBytes: <T>(bytes: Uint8Array | undefined) => T | undefined;
|
|
17
|
-
export declare const parseJsonBytes: (bytes: Uint8Array | undefined) =>
|
|
17
|
+
export declare const parseJsonBytes: (bytes: Uint8Array | undefined) => unknown;
|
|
18
18
|
export declare const parseString: (str: string | undefined) => string | undefined;
|
|
19
19
|
export declare const parseCid: (cidStr: string | undefined) => CID | undefined;
|
|
20
20
|
export declare const didFromUri: (uri: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/hydration/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,qBAAa,YAAY,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,YAAW,MAAM;IAC1E,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;CAMlC;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;CACpC;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,MAAM,EAAE,CAAC,CAAA;IACT,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,IAAI,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,WAAW,aACf,MAAM,oBACK,OAAO,KACxB,WAAW,CAAC,CAAC,GAAG,SAiBlB,CAAA;AAgBD,eAAO,MAAM,gBAAgB,aACpB,UAAU,GAAG,SAAS,KAC5B,CAAC,GAAG,SAEN,CAAA;AAED,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/hydration/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,qBAAa,YAAY,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,YAAW,MAAM;IAC1E,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;CAMlC;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;CACpC;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,MAAM,EAAE,CAAC,CAAA;IACT,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,IAAI,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,WAAW,aACf,MAAM,oBACK,OAAO,KACxB,WAAW,CAAC,CAAC,GAAG,SAiBlB,CAAA;AAgBD,eAAO,MAAM,gBAAgB,aACpB,UAAU,GAAG,SAAS,KAC5B,CAAC,GAAG,SAEN,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,UAAU,GAAG,SAAS,KAAG,OAI9D,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAE9D,CAAA;AAED,eAAO,MAAM,QAAQ,WAAY,MAAM,GAAG,SAAS,KAAG,GAAG,GAAG,SAO3D,CAAA;AAED,eAAO,MAAM,UAAU,QAAS,MAAM,WAErC,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,MAAM,EAAE,KAAG,IAAI,MAAM,EAAE,MAAM,EAAE,CASrE,CAAA;AAED,eAAO,MAAM,KAAK,aACT,CAAC,EAAE,aACC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,KAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAWX,CAAA;AAED,eAAO,MAAM,eAAe,SAAU;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,MAAM,GAAG,SAIZ,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/hydration/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAuC;AACvC,8CAA4C;AAC5C,0CAAsC;AACtC,iDAAkC;AAClC,kDAA8C;AAG9C,MAAa,YAAgB,SAAQ,GAAqB;IACxD,KAAK,CAAC,GAAoB;QACxB,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAPD,oCAOC;AAaM,MAAM,WAAW,GAAG,CACzB,KAAa,EACb,gBAAyB,EACE,EAAE;IAC7B,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,wBAAgB,EAAI,KAAK,CAAC,MAAM,CAAC,CAAA;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;IACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;IACxD,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;QAAE,OAAM;IAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAM;IACR,CAAC;IACD,OAAO;QACL,MAAM;QACN,GAAG;QACH,QAAQ;QACR,WAAW,EAAE,IAAA,uBAAe,EAAC,KAAK,CAAC;KACpC,CAAA;AACH,CAAC,CAAA;AApBY,QAAA,WAAW,eAoBvB;AAED,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,EAAE;IACtC,MAAM,SAAS,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,CAAA;IACjC,IAAI,OAAO,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC;QACH,mBAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;QACzD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,mGAAmG;AAC5F,MAAM,gBAAgB,GAAG,CAC9B,KAA6B,EACd,EAAE;IACjB,OAAO,IAAA,sBAAc,EAAC,KAAK,CAAM,CAAA;AACnC,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B;AAEM,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/hydration/util.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node/http" />
|
|
1
2
|
import { subsystemLogger } from '@atproto/common';
|
|
2
3
|
export declare const dbLogger: ReturnType<typeof subsystemLogger>;
|
|
3
4
|
export declare const cacheLogger: ReturnType<typeof subsystemLogger>;
|
|
@@ -5,5 +6,5 @@ export declare const subLogger: ReturnType<typeof subsystemLogger>;
|
|
|
5
6
|
export declare const labelerLogger: ReturnType<typeof subsystemLogger>;
|
|
6
7
|
export declare const hydrationLogger: ReturnType<typeof subsystemLogger>;
|
|
7
8
|
export declare const httpLogger: ReturnType<typeof subsystemLogger>;
|
|
8
|
-
export declare const loggerMiddleware: import("pino-http").HttpLogger
|
|
9
|
+
export declare const loggerMiddleware: import("pino-http").HttpLogger<import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, never>;
|
|
9
10
|
//# sourceMappingURL=logger.d.ts.map
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,eAAO,MAAM,QAAQ,EAAE,UAAU,CAAC,OAAO,eAAe,CAC5B,CAAA;AAC5B,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,OAAO,eAAe,CAC5B,CAAA;AAC/B,eAAO,MAAM,SAAS,EAAE,UAAU,CAAC,OAAO,eAAe,CAC5B,CAAA;AAC7B,eAAO,MAAM,aAAa,EAAE,UAAU,CAAC,OAAO,eAAe,CAC5B,CAAA;AACjC,eAAO,MAAM,eAAe,EAAE,UAAU,CAAC,OAAO,eAAe,CAC5B,CAAA;AACnC,eAAO,MAAM,UAAU,EAAE,UAAU,CAAC,OAAO,eAAe,CACjC,CAAA;AAEzB,eAAO,MAAM,gBAAgB,sIAM3B,CAAA"}
|
package/dist/logger.js
CHANGED
|
@@ -1,37 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
6
|
exports.loggerMiddleware = exports.httpLogger = exports.hydrationLogger = exports.labelerLogger = exports.subLogger = exports.cacheLogger = exports.dbLogger = void 0;
|
|
30
|
-
const pino_1 =
|
|
7
|
+
const pino_1 = require("pino");
|
|
31
8
|
const pino_http_1 = __importDefault(require("pino-http"));
|
|
32
|
-
const jose = __importStar(require("jose"));
|
|
33
9
|
const common_1 = require("@atproto/common");
|
|
34
|
-
const auth_verifier_1 = require("./auth-verifier");
|
|
35
10
|
exports.dbLogger = (0, common_1.subsystemLogger)('bsky:db');
|
|
36
11
|
exports.cacheLogger = (0, common_1.subsystemLogger)('bsky:cache');
|
|
37
12
|
exports.subLogger = (0, common_1.subsystemLogger)('bsky:sub');
|
|
@@ -41,43 +16,82 @@ exports.httpLogger = (0, common_1.subsystemLogger)('bsky');
|
|
|
41
16
|
exports.loggerMiddleware = (0, pino_http_1.default)({
|
|
42
17
|
logger: exports.httpLogger,
|
|
43
18
|
serializers: {
|
|
44
|
-
err:
|
|
45
|
-
|
|
46
|
-
code: err?.code,
|
|
47
|
-
message: err?.message,
|
|
48
|
-
};
|
|
49
|
-
},
|
|
50
|
-
req: (req) => {
|
|
51
|
-
const serialized = pino_1.default.stdSerializers.req(req);
|
|
52
|
-
const authHeader = serialized.headers.authorization || '';
|
|
53
|
-
let auth = undefined;
|
|
54
|
-
if (authHeader.startsWith('Bearer ')) {
|
|
55
|
-
const token = authHeader.slice('Bearer '.length);
|
|
56
|
-
const { iss } = jose.decodeJwt(token);
|
|
57
|
-
if (iss) {
|
|
58
|
-
auth = 'Bearer ' + iss;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
auth = 'Bearer Invalid';
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (authHeader.startsWith('Basic ')) {
|
|
65
|
-
const parsed = (0, auth_verifier_1.parseBasicAuth)(authHeader);
|
|
66
|
-
if (!parsed) {
|
|
67
|
-
auth = 'Basic Invalid';
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
auth = 'Basic ' + parsed.username;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
...serialized,
|
|
75
|
-
headers: {
|
|
76
|
-
...serialized.headers,
|
|
77
|
-
authorization: auth,
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
},
|
|
19
|
+
err: errSerializer,
|
|
20
|
+
req: reqSerializer,
|
|
81
21
|
},
|
|
82
22
|
});
|
|
23
|
+
function errSerializer(err) {
|
|
24
|
+
return {
|
|
25
|
+
code: err?.code,
|
|
26
|
+
message: err?.message,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function reqSerializer(req) {
|
|
30
|
+
const serialized = pino_1.stdSerializers.req(req);
|
|
31
|
+
serialized.headers = obfuscateHeaders(serialized.headers);
|
|
32
|
+
return serialized;
|
|
33
|
+
}
|
|
34
|
+
function obfuscateHeaders(headers) {
|
|
35
|
+
const obfuscatedHeaders = {};
|
|
36
|
+
for (const key in headers) {
|
|
37
|
+
if (key.toLowerCase() === 'authorization') {
|
|
38
|
+
obfuscatedHeaders[key] = obfuscateAuthHeader(headers[key]);
|
|
39
|
+
}
|
|
40
|
+
else if (key.toLowerCase() === 'dpop') {
|
|
41
|
+
obfuscatedHeaders[key] = obfuscateJws(headers[key]) || 'Invalid';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
obfuscatedHeaders[key] = headers[key];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return obfuscatedHeaders;
|
|
48
|
+
}
|
|
49
|
+
function obfuscateAuthHeader(authHeader) {
|
|
50
|
+
// This is a hot path (runs on every request). Avoid using split() or regex.
|
|
51
|
+
const spaceIdx = authHeader.indexOf(' ');
|
|
52
|
+
if (spaceIdx === -1)
|
|
53
|
+
return 'Invalid';
|
|
54
|
+
const type = authHeader.slice(0, spaceIdx);
|
|
55
|
+
switch (type.toLowerCase()) {
|
|
56
|
+
case 'bearer':
|
|
57
|
+
return `${type} ${obfuscateBearer(authHeader.slice(spaceIdx + 1))}`;
|
|
58
|
+
case 'dpop':
|
|
59
|
+
return `${type} ${obfuscateJws(authHeader.slice(spaceIdx + 1)) || 'Invalid'}`;
|
|
60
|
+
case 'basic':
|
|
61
|
+
return `${type} ${obfuscateBasic(authHeader.slice(spaceIdx + 1)) || 'Invalid'}`;
|
|
62
|
+
default:
|
|
63
|
+
return `Invalid`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function obfuscateBasic(token) {
|
|
67
|
+
if (!token)
|
|
68
|
+
return null;
|
|
69
|
+
const buffer = Buffer.from(token, 'base64');
|
|
70
|
+
if (!buffer.length)
|
|
71
|
+
return null; // Buffer.from will silently ignore invalid base64 chars
|
|
72
|
+
const authHeader = buffer.toString('utf8');
|
|
73
|
+
const colIdx = authHeader.indexOf(':');
|
|
74
|
+
if (colIdx === -1)
|
|
75
|
+
return null;
|
|
76
|
+
const username = authHeader.slice(0, colIdx);
|
|
77
|
+
return `${username}:***`;
|
|
78
|
+
}
|
|
79
|
+
function obfuscateBearer(token) {
|
|
80
|
+
return obfuscateJws(token) || obfuscateToken(token);
|
|
81
|
+
}
|
|
82
|
+
function obfuscateToken(token) {
|
|
83
|
+
return token ? '***' : '';
|
|
84
|
+
}
|
|
85
|
+
function obfuscateJws(token) {
|
|
86
|
+
const firstDot = token.indexOf('.');
|
|
87
|
+
if (firstDot === -1)
|
|
88
|
+
return null;
|
|
89
|
+
const secondDot = token.indexOf('.', firstDot + 1);
|
|
90
|
+
if (secondDot === -1)
|
|
91
|
+
return null;
|
|
92
|
+
if (token.indexOf('.', secondDot + 1) !== -1)
|
|
93
|
+
return null;
|
|
94
|
+
// Strip the signature
|
|
95
|
+
return token.slice(0, secondDot) + '.obfuscated';
|
|
96
|
+
}
|
|
83
97
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/bsky",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.63",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Reference implementation of app.bsky App View (Bluesky API)",
|
|
6
6
|
"keywords": [
|
|
@@ -33,13 +33,13 @@
|
|
|
33
33
|
"multiformats": "^9.9.0",
|
|
34
34
|
"p-queue": "^6.6.2",
|
|
35
35
|
"pg": "^8.10.0",
|
|
36
|
-
"pino": "^8.
|
|
36
|
+
"pino": "^8.21.0",
|
|
37
37
|
"pino-http": "^8.2.1",
|
|
38
38
|
"sharp": "^0.32.6",
|
|
39
39
|
"structured-headers": "^1.0.1",
|
|
40
40
|
"typed-emitter": "^2.1.0",
|
|
41
41
|
"uint8arrays": "3.0.0",
|
|
42
|
-
"@atproto/api": "^0.12.
|
|
42
|
+
"@atproto/api": "^0.12.20",
|
|
43
43
|
"@atproto/common": "^0.4.0",
|
|
44
44
|
"@atproto/crypto": "^0.4.0",
|
|
45
45
|
"@atproto/identity": "^0.4.0",
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"axios": "^0.27.2",
|
|
62
62
|
"jest": "^28.1.2",
|
|
63
63
|
"ts-node": "^10.8.2",
|
|
64
|
-
"@atproto/api": "^0.12.
|
|
64
|
+
"@atproto/api": "^0.12.20",
|
|
65
65
|
"@atproto/lex-cli": "^0.4.0",
|
|
66
|
-
"@atproto/pds": "^0.4.
|
|
66
|
+
"@atproto/pds": "^0.4.36",
|
|
67
67
|
"@atproto/xrpc": "^0.5.0"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
package/src/hydration/util.ts
CHANGED
|
@@ -67,9 +67,7 @@ export const parseRecordBytes = <T>(
|
|
|
67
67
|
return parseJsonBytes(bytes) as T
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export const parseJsonBytes = (
|
|
71
|
-
bytes: Uint8Array | undefined,
|
|
72
|
-
): JSON | undefined => {
|
|
70
|
+
export const parseJsonBytes = (bytes: Uint8Array | undefined): unknown => {
|
|
73
71
|
if (!bytes || bytes.byteLength === 0) return
|
|
74
72
|
const parsed = JSON.parse(ui8.toString(bytes, 'utf8'))
|
|
75
73
|
return parsed ?? undefined
|
package/src/logger.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { stdSerializers } from 'pino'
|
|
2
2
|
import pinoHttp from 'pino-http'
|
|
3
|
-
import * as jose from 'jose'
|
|
4
3
|
import { subsystemLogger } from '@atproto/common'
|
|
5
|
-
import { parseBasicAuth } from './auth-verifier'
|
|
6
4
|
|
|
7
5
|
export const dbLogger: ReturnType<typeof subsystemLogger> =
|
|
8
6
|
subsystemLogger('bsky:db')
|
|
@@ -20,40 +18,85 @@ export const httpLogger: ReturnType<typeof subsystemLogger> =
|
|
|
20
18
|
export const loggerMiddleware = pinoHttp({
|
|
21
19
|
logger: httpLogger,
|
|
22
20
|
serializers: {
|
|
23
|
-
err:
|
|
24
|
-
|
|
25
|
-
code: err?.code,
|
|
26
|
-
message: err?.message,
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
req: (req) => {
|
|
30
|
-
const serialized = pino.stdSerializers.req(req)
|
|
31
|
-
const authHeader = serialized.headers.authorization || ''
|
|
32
|
-
let auth: string | undefined = undefined
|
|
33
|
-
if (authHeader.startsWith('Bearer ')) {
|
|
34
|
-
const token = authHeader.slice('Bearer '.length)
|
|
35
|
-
const { iss } = jose.decodeJwt(token)
|
|
36
|
-
if (iss) {
|
|
37
|
-
auth = 'Bearer ' + iss
|
|
38
|
-
} else {
|
|
39
|
-
auth = 'Bearer Invalid'
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (authHeader.startsWith('Basic ')) {
|
|
43
|
-
const parsed = parseBasicAuth(authHeader)
|
|
44
|
-
if (!parsed) {
|
|
45
|
-
auth = 'Basic Invalid'
|
|
46
|
-
} else {
|
|
47
|
-
auth = 'Basic ' + parsed.username
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
...serialized,
|
|
52
|
-
headers: {
|
|
53
|
-
...serialized.headers,
|
|
54
|
-
authorization: auth,
|
|
55
|
-
},
|
|
56
|
-
}
|
|
57
|
-
},
|
|
21
|
+
err: errSerializer,
|
|
22
|
+
req: reqSerializer,
|
|
58
23
|
},
|
|
59
24
|
})
|
|
25
|
+
|
|
26
|
+
function errSerializer(err: any) {
|
|
27
|
+
return {
|
|
28
|
+
code: err?.code,
|
|
29
|
+
message: err?.message,
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function reqSerializer(req: any) {
|
|
34
|
+
const serialized = stdSerializers.req(req)
|
|
35
|
+
serialized.headers = obfuscateHeaders(serialized.headers)
|
|
36
|
+
return serialized
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function obfuscateHeaders(headers: Record<string, string>) {
|
|
40
|
+
const obfuscatedHeaders: Record<string, string> = {}
|
|
41
|
+
for (const key in headers) {
|
|
42
|
+
if (key.toLowerCase() === 'authorization') {
|
|
43
|
+
obfuscatedHeaders[key] = obfuscateAuthHeader(headers[key])
|
|
44
|
+
} else if (key.toLowerCase() === 'dpop') {
|
|
45
|
+
obfuscatedHeaders[key] = obfuscateJws(headers[key]) || 'Invalid'
|
|
46
|
+
} else {
|
|
47
|
+
obfuscatedHeaders[key] = headers[key]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return obfuscatedHeaders
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function obfuscateAuthHeader(authHeader: string): string {
|
|
54
|
+
// This is a hot path (runs on every request). Avoid using split() or regex.
|
|
55
|
+
|
|
56
|
+
const spaceIdx = authHeader.indexOf(' ')
|
|
57
|
+
if (spaceIdx === -1) return 'Invalid'
|
|
58
|
+
|
|
59
|
+
const type = authHeader.slice(0, spaceIdx)
|
|
60
|
+
switch (type.toLowerCase()) {
|
|
61
|
+
case 'bearer':
|
|
62
|
+
return `${type} ${obfuscateBearer(authHeader.slice(spaceIdx + 1))}`
|
|
63
|
+
case 'dpop':
|
|
64
|
+
return `${type} ${obfuscateJws(authHeader.slice(spaceIdx + 1)) || 'Invalid'}`
|
|
65
|
+
case 'basic':
|
|
66
|
+
return `${type} ${obfuscateBasic(authHeader.slice(spaceIdx + 1)) || 'Invalid'}`
|
|
67
|
+
default:
|
|
68
|
+
return `Invalid`
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function obfuscateBasic(token: string): null | string {
|
|
73
|
+
if (!token) return null
|
|
74
|
+
const buffer = Buffer.from(token, 'base64')
|
|
75
|
+
if (!buffer.length) return null // Buffer.from will silently ignore invalid base64 chars
|
|
76
|
+
const authHeader = buffer.toString('utf8')
|
|
77
|
+
const colIdx = authHeader.indexOf(':')
|
|
78
|
+
if (colIdx === -1) return null
|
|
79
|
+
const username = authHeader.slice(0, colIdx)
|
|
80
|
+
return `${username}:***`
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function obfuscateBearer(token: string): string {
|
|
84
|
+
return obfuscateJws(token) || obfuscateToken(token)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function obfuscateToken(token: string): string {
|
|
88
|
+
return token ? '***' : ''
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function obfuscateJws(token: string): null | string {
|
|
92
|
+
const firstDot = token.indexOf('.')
|
|
93
|
+
if (firstDot === -1) return null
|
|
94
|
+
|
|
95
|
+
const secondDot = token.indexOf('.', firstDot + 1)
|
|
96
|
+
if (secondDot === -1) return null
|
|
97
|
+
|
|
98
|
+
if (token.indexOf('.', secondDot + 1) !== -1) return null
|
|
99
|
+
|
|
100
|
+
// Strip the signature
|
|
101
|
+
return token.slice(0, secondDot) + '.obfuscated'
|
|
102
|
+
}
|