@atproto/bsky 0.0.103 → 0.0.105
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 +31 -0
- package/dist/api/blob-dispatcher.d.ts +4 -0
- package/dist/api/blob-dispatcher.d.ts.map +1 -0
- package/dist/api/blob-dispatcher.js +37 -0
- package/dist/api/blob-dispatcher.js.map +1 -0
- package/dist/api/blob-resolver.d.ts +17 -8
- package/dist/api/blob-resolver.d.ts.map +1 -1
- package/dist/api/blob-resolver.js +246 -99
- package/dist/api/blob-resolver.js.map +1 -1
- package/dist/api/well-known.d.ts.map +1 -1
- package/dist/api/well-known.js +30 -24
- package/dist/api/well-known.js.map +1 -1
- package/dist/config.d.ts +14 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +40 -5
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +3 -0
- package/dist/context.js.map +1 -1
- package/dist/data-plane/server/indexing/index.js +2 -2
- package/dist/image/server.d.ts +7 -13
- package/dist/image/server.d.ts.map +1 -1
- package/dist/image/server.js +119 -115
- package/dist/image/server.js.map +1 -1
- package/dist/image/sharp.d.ts +11 -2
- package/dist/image/sharp.d.ts.map +1 -1
- package/dist/image/sharp.js +35 -38
- package/dist/image/sharp.js.map +1 -1
- package/dist/image/util.d.ts +6 -4
- package/dist/image/util.d.ts.map +1 -1
- package/dist/image/util.js +14 -10
- package/dist/image/util.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -10
- package/dist/index.js.map +1 -1
- package/dist/util/http.d.ts +12 -0
- package/dist/util/http.d.ts.map +1 -0
- package/dist/util/http.js +36 -0
- package/dist/util/http.js.map +1 -0
- package/dist/util/retry.d.ts +2 -5
- package/dist/util/retry.d.ts.map +1 -1
- package/dist/util/retry.js +8 -27
- package/dist/util/retry.js.map +1 -1
- package/package.json +18 -14
- package/src/api/blob-dispatcher.ts +38 -0
- package/src/api/blob-resolver.ts +341 -106
- package/src/api/well-known.ts +31 -24
- package/src/config.ts +63 -6
- package/src/context.ts +6 -0
- package/src/data-plane/server/indexing/index.ts +3 -3
- package/src/image/server.ts +131 -107
- package/src/image/sharp.ts +48 -52
- package/src/image/util.ts +20 -12
- package/src/index.ts +8 -15
- package/src/util/http.ts +41 -0
- package/src/util/retry.ts +8 -32
- package/tests/_util.ts +50 -3
- package/tests/blob-resolver.test.ts +62 -36
- package/tests/image/server.test.ts +40 -32
- package/tests/image/sharp.test.ts +17 -4
- package/tests/label-hydration.test.ts +6 -6
- package/tests/server.test.ts +41 -56
- package/tsconfig.build.tsbuildinfo +1 -1
package/dist/image/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"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"}
|
package/dist/image/sharp.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import { Readable } from 'stream';
|
|
1
|
+
import { PassThrough, Readable } from 'node:stream';
|
|
2
|
+
import sharp from 'sharp';
|
|
2
3
|
import { ImageInfo, Options } from './util';
|
|
3
4
|
export type { Options };
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Scale up to hit any specified minimum size
|
|
7
|
+
*/
|
|
8
|
+
export declare function createImageUpscaler({ min }: Options): sharp.Sharp | PassThrough;
|
|
9
|
+
/**
|
|
10
|
+
* Scale down (or possibly up if min is true) to desired size, then compress
|
|
11
|
+
* to the desired format.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createImageProcessor({ height, width, min, fit, format, quality, }: Options): sharp.Sharp;
|
|
5
14
|
export declare function maybeGetInfo(stream: Readable): Promise<ImageInfo | null>;
|
|
6
15
|
export declare function getInfo(stream: Readable): Promise<ImageInfo>;
|
|
7
16
|
//# sourceMappingURL=sharp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharp.d.ts","sourceRoot":"","sources":["../../src/image/sharp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sharp.d.ts","sourceRoot":"","sources":["../../src/image/sharp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAkB,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAE3D,YAAY,EAAE,OAAO,EAAE,CAAA;AAEvB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,GAAW,EAAE,EAAE,OAAO,6BAY3D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,KAAK,EACL,GAAW,EACX,GAAa,EACb,MAAM,EACN,OAAa,GACd,EAAE,OAAO,eAeT;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAyB3B;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAMlE"}
|
package/dist/image/sharp.js
CHANGED
|
@@ -3,58 +3,68 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.createImageUpscaler = createImageUpscaler;
|
|
7
|
+
exports.createImageProcessor = createImageProcessor;
|
|
7
8
|
exports.maybeGetInfo = maybeGetInfo;
|
|
8
9
|
exports.getInfo = getInfo;
|
|
9
|
-
const promises_1 = require("stream/promises");
|
|
10
|
-
const sharp_1 = __importDefault(require("sharp"));
|
|
11
10
|
const common_1 = require("@atproto/common");
|
|
11
|
+
const node_stream_1 = require("node:stream");
|
|
12
|
+
const promises_1 = require("node:stream/promises");
|
|
13
|
+
const sharp_1 = __importDefault(require("sharp"));
|
|
12
14
|
const util_1 = require("./util");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Scale up to hit any specified minimum size
|
|
17
|
+
*/
|
|
18
|
+
function createImageUpscaler({ min = false }) {
|
|
19
|
+
// Due to the way sharp works, up-scaling must happen in a separate processor
|
|
20
|
+
// than down-scaling.
|
|
21
|
+
return typeof min !== 'boolean'
|
|
22
|
+
? (0, sharp_1.default)().resize({
|
|
19
23
|
fit: 'outside',
|
|
20
24
|
width: min.width,
|
|
21
25
|
height: min.height,
|
|
22
26
|
withoutReduction: true,
|
|
23
27
|
withoutEnlargement: false,
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
})
|
|
29
|
+
: new node_stream_1.PassThrough();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Scale down (or possibly up if min is true) to desired size, then compress
|
|
33
|
+
* to the desired format.
|
|
34
|
+
*/
|
|
35
|
+
function createImageProcessor({ height, width, min = false, fit = 'cover', format, quality = 100, }) {
|
|
36
|
+
const processor = (0, sharp_1.default)().resize({
|
|
30
37
|
fit,
|
|
31
38
|
width,
|
|
32
39
|
height,
|
|
33
40
|
withoutEnlargement: min !== true,
|
|
34
41
|
});
|
|
35
|
-
// Output to specified format
|
|
36
42
|
if (format === 'jpeg') {
|
|
37
|
-
|
|
43
|
+
return processor.jpeg({ quality });
|
|
38
44
|
}
|
|
39
45
|
else if (format === 'png') {
|
|
40
|
-
|
|
46
|
+
return processor.png({ quality });
|
|
41
47
|
}
|
|
42
48
|
else {
|
|
43
|
-
|
|
44
|
-
throw new Error(`Unhandled case: ${exhaustiveCheck}`);
|
|
49
|
+
throw new Error(`Unhandled case: ${format}`);
|
|
45
50
|
}
|
|
46
|
-
(0, common_1.forwardStreamErrors)(stream, processor);
|
|
47
|
-
return stream.pipe(processor);
|
|
48
51
|
}
|
|
49
52
|
async function maybeGetInfo(stream) {
|
|
50
|
-
let metadata;
|
|
51
53
|
try {
|
|
52
54
|
const processor = (0, sharp_1.default)();
|
|
53
|
-
const [
|
|
55
|
+
const [{ size, height, width, format }] = await Promise.all([
|
|
54
56
|
processor.metadata(),
|
|
55
57
|
(0, promises_1.pipeline)(stream, processor), // Handles error propagation
|
|
56
58
|
]);
|
|
57
|
-
|
|
59
|
+
if (size == null || height == null || width == null || format == null) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
height,
|
|
64
|
+
width,
|
|
65
|
+
size,
|
|
66
|
+
mime: util_1.formatsToMimes.get(format) ?? 'unknown',
|
|
67
|
+
};
|
|
58
68
|
}
|
|
59
69
|
catch (err) {
|
|
60
70
|
if ((0, common_1.errHasMsg)(err, 'Input buffer contains unsupported image format')) {
|
|
@@ -62,19 +72,6 @@ async function maybeGetInfo(stream) {
|
|
|
62
72
|
}
|
|
63
73
|
throw err;
|
|
64
74
|
}
|
|
65
|
-
const { size, height, width, format } = metadata;
|
|
66
|
-
if (size === undefined ||
|
|
67
|
-
height === undefined ||
|
|
68
|
-
width === undefined ||
|
|
69
|
-
format === undefined) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
height,
|
|
74
|
-
width,
|
|
75
|
-
size,
|
|
76
|
-
mime: util_1.formatsToMimes[format] ?? 'unknown',
|
|
77
|
-
};
|
|
78
75
|
}
|
|
79
76
|
async function getInfo(stream) {
|
|
80
77
|
const maybeInfo = await maybeGetInfo(stream);
|
package/dist/image/sharp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharp.js","sourceRoot":"","sources":["../../src/image/sharp.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"sharp.js","sourceRoot":"","sources":["../../src/image/sharp.ts"],"names":[],"mappings":";;;;;AAWA,kDAYC;AAMD,oDAsBC;AAED,oCA2BC;AAED,0BAMC;AAxFD,4CAA2C;AAC3C,6CAAmD;AACnD,mDAA+C;AAC/C,kDAAyB;AACzB,iCAA2D;AAI3D;;GAEG;AACH,SAAgB,mBAAmB,CAAC,EAAE,GAAG,GAAG,KAAK,EAAW;IAC1D,6EAA6E;IAC7E,qBAAqB;IACrB,OAAO,OAAO,GAAG,KAAK,SAAS;QAC7B,CAAC,CAAC,IAAA,eAAK,GAAE,CAAC,MAAM,CAAC;YACb,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,gBAAgB,EAAE,IAAI;YACtB,kBAAkB,EAAE,KAAK;SAC1B,CAAC;QACJ,CAAC,CAAC,IAAI,yBAAW,EAAE,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,KAAK,EACL,GAAG,GAAG,KAAK,EACX,GAAG,GAAG,OAAO,EACb,MAAM,EACN,OAAO,GAAG,GAAG,GACL;IACR,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAC,MAAM,CAAC;QAC/B,GAAG;QACH,KAAK;QACL,MAAM;QACN,kBAAkB,EAAE,GAAG,KAAK,IAAI;KACjC,CAAC,CAAA;IAEF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACpC,CAAC;SAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,MAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAA;QAEzB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1D,SAAS,CAAC,QAAQ,EAAE;YACpB,IAAA,mBAAQ,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,4BAA4B;SAC1D,CAAC,CAAA;QAEF,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACtE,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO;YACL,MAAM;YACN,KAAK;YACL,IAAI;YACJ,IAAI,EAAE,qBAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;SAC9C,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,IAAA,kBAAS,EAAC,GAAG,EAAE,gDAAgD,CAAC,EAAE,CAAC;YACrE,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,MAAgB;IAC5C,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAA;IAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
package/dist/image/util.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { FormatEnum } from 'sharp';
|
|
1
|
+
import { FormatEnum, OutputInfo } from 'sharp';
|
|
2
|
+
export type ImageMime = `image/${string}`;
|
|
2
3
|
export type Options = Dimensions & {
|
|
3
4
|
format: 'jpeg' | 'png';
|
|
4
5
|
fit?: 'cover' | 'inside';
|
|
@@ -7,13 +8,14 @@ export type Options = Dimensions & {
|
|
|
7
8
|
};
|
|
8
9
|
export type ImageInfo = Dimensions & {
|
|
9
10
|
size: number;
|
|
10
|
-
mime:
|
|
11
|
+
mime: ImageMime | 'unknown';
|
|
11
12
|
};
|
|
12
13
|
export type Dimensions = {
|
|
13
14
|
height: number;
|
|
14
15
|
width: number;
|
|
15
16
|
};
|
|
16
|
-
export declare const formatsToMimes: {
|
|
17
|
-
|
|
17
|
+
export declare const formatsToMimes: Map<keyof FormatEnum, `image/${string}`>;
|
|
18
|
+
export type SharpInfo = OutputInfo & {
|
|
19
|
+
format: keyof FormatEnum;
|
|
18
20
|
};
|
|
19
21
|
//# sourceMappingURL=util.d.ts.map
|
package/dist/image/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/image/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/image/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAE9C,MAAM,MAAM,SAAS,GAAG,SAAS,MAAM,EAAE,CAAA;AAEzC,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG;IACjC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAA;IAGtB,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAIxB,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAE1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1D,eAAO,MAAM,cAAc,0CAazB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,UAAU,CAAA;CAAE,CAAA"}
|
package/dist/image/util.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.formatsToMimes = void 0;
|
|
4
|
-
exports.formatsToMimes =
|
|
5
|
-
jpg
|
|
6
|
-
jpeg
|
|
7
|
-
png
|
|
8
|
-
gif
|
|
9
|
-
svg
|
|
10
|
-
tif
|
|
11
|
-
tiff
|
|
12
|
-
webp
|
|
13
|
-
|
|
4
|
+
exports.formatsToMimes = new Map([
|
|
5
|
+
['jpg', 'image/jpeg'],
|
|
6
|
+
['jpeg', 'image/jpeg'],
|
|
7
|
+
['png', 'image/png'],
|
|
8
|
+
['gif', 'image/gif'],
|
|
9
|
+
['svg', 'image/svg+xml'],
|
|
10
|
+
['tif', 'image/tiff'],
|
|
11
|
+
['tiff', 'image/tiff'],
|
|
12
|
+
['webp', 'image/webp'],
|
|
13
|
+
['avif', 'image/avif'],
|
|
14
|
+
['heif', 'image/heif'],
|
|
15
|
+
['jp2', 'image/jp2'],
|
|
16
|
+
['jxl', 'image/jxl'],
|
|
17
|
+
]);
|
|
14
18
|
//# sourceMappingURL=util.js.map
|
package/dist/image/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/image/util.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/image/util.ts"],"names":[],"mappings":";;;AAwBa,QAAA,cAAc,GAAG,IAAI,GAAG,CAA8B;IACjE,CAAC,KAAK,EAAE,YAAY,CAAC;IACrB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,eAAe,CAAC;IACxB,CAAC,KAAK,EAAE,YAAY,CAAC;IACrB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,WAAW,CAAC;CACrB,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import http from 'http';
|
|
3
|
+
import { Keypair } from '@atproto/crypto';
|
|
3
4
|
import { ServerConfig } from './config';
|
|
4
5
|
import AppContext from './context';
|
|
5
|
-
import { Keypair } from '@atproto/crypto';
|
|
6
6
|
export * from './data-plane';
|
|
7
7
|
export type { ServerConfigValues } from './config';
|
|
8
8
|
export { ServerConfig } from './config';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;AASvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAIzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAIvC,OAAO,UAAU,MAAM,WAAW,CAAA;AAWlC,cAAc,cAAc,CAAA;AAC5B,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;gBAEvB,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE;IAK/D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW;IAsIT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAY7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B;AAED,eAAe,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -43,7 +43,7 @@ const error = __importStar(require("./error"));
|
|
|
43
43
|
const logger_1 = require("./logger");
|
|
44
44
|
const lexicon_1 = require("./lexicon");
|
|
45
45
|
const uri_1 = require("./image/uri");
|
|
46
|
-
const
|
|
46
|
+
const imageServer = __importStar(require("./image/server"));
|
|
47
47
|
const context_1 = __importDefault(require("./context"));
|
|
48
48
|
const client_1 = require("./data-plane/client");
|
|
49
49
|
const hydrator_1 = require("./hydration/hydrator");
|
|
@@ -53,6 +53,7 @@ const bsync_1 = require("./bsync");
|
|
|
53
53
|
const courier_1 = require("./courier");
|
|
54
54
|
const feature_gates_1 = require("./feature-gates");
|
|
55
55
|
const util_1 = require("./views/util");
|
|
56
|
+
const blob_dispatcher_1 = require("./api/blob-dispatcher");
|
|
56
57
|
__exportStar(require("./data-plane"), exports);
|
|
57
58
|
var config_1 = require("./config");
|
|
58
59
|
Object.defineProperty(exports, "ServerConfig", { enumerable: true, get: function () { return config_1.ServerConfig; } });
|
|
@@ -111,11 +112,6 @@ class BskyAppView {
|
|
|
111
112
|
thumbnailUrlPattern: config.videoThumbnailUrlPattern ||
|
|
112
113
|
`${config.publicUrl}/vid/%s/%s/thumbnail.jpg`,
|
|
113
114
|
});
|
|
114
|
-
let imgProcessingServer;
|
|
115
|
-
if (!config.cdnUrl) {
|
|
116
|
-
const imgProcessingCache = new server_1.BlobDiskCache(config.blobCacheLocation);
|
|
117
|
-
imgProcessingServer = new server_1.ImageProcessingServer(config, imgProcessingCache);
|
|
118
|
-
}
|
|
119
115
|
const searchAgent = config.searchUrl
|
|
120
116
|
? new api_1.AtpAgent({ service: config.searchUrl })
|
|
121
117
|
: undefined;
|
|
@@ -171,6 +167,7 @@ class BskyAppView {
|
|
|
171
167
|
apiKey: config.statsigKey,
|
|
172
168
|
env: config.statsigEnv,
|
|
173
169
|
});
|
|
170
|
+
const blobDispatcher = (0, blob_dispatcher_1.createBlobDispatcher)(config);
|
|
174
171
|
const ctx = new context_1.default({
|
|
175
172
|
cfg: config,
|
|
176
173
|
dataplane,
|
|
@@ -185,6 +182,7 @@ class BskyAppView {
|
|
|
185
182
|
courierClient,
|
|
186
183
|
authVerifier,
|
|
187
184
|
featureGates,
|
|
185
|
+
blobDispatcher,
|
|
188
186
|
});
|
|
189
187
|
let server = (0, lexicon_1.createServer)({
|
|
190
188
|
validateResponse: config.debugMode,
|
|
@@ -197,10 +195,8 @@ class BskyAppView {
|
|
|
197
195
|
server = (0, api_2.default)(server, ctx);
|
|
198
196
|
app.use(api_2.health.createRouter(ctx));
|
|
199
197
|
app.use(api_2.wellKnown.createRouter(ctx));
|
|
200
|
-
app.use(api_2.blobResolver.
|
|
201
|
-
|
|
202
|
-
app.use('/img', imgProcessingServer.app);
|
|
203
|
-
}
|
|
198
|
+
app.use(api_2.blobResolver.createMiddleware(ctx));
|
|
199
|
+
app.use(imageServer.createMiddleware(ctx, { prefix: '/img/' }));
|
|
204
200
|
app.use(server.xrpc.router);
|
|
205
201
|
app.use(error.handler);
|
|
206
202
|
return new BskyAppView({ ctx, app });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA6B;AAG7B,oDAA2B;AAC3B,qDAAsE;AACtE,gDAAuB;AACvB,8DAAqC;AACrC,sCAAuC;AACvC,gDAA8C;AAC9C,4CAA6C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import { IncomingHttpHeaders } from 'undici/types/header';
|
|
3
|
+
type NextFunction = (err?: unknown) => void;
|
|
4
|
+
export type Middleware = (req: IncomingMessage, res: ServerResponse, next: NextFunction) => void;
|
|
5
|
+
export type ResponseData = {
|
|
6
|
+
statusCode: number;
|
|
7
|
+
headers: IncomingHttpHeaders;
|
|
8
|
+
};
|
|
9
|
+
export declare function proxyResponseHeaders(data: ResponseData, res: ServerResponse): void;
|
|
10
|
+
export declare function responseSignal(res: ServerResponse): AbortSignal;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/util/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAEzD,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;AAE3C,MAAM,MAAM,UAAU,GAAG,CACvB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,YAAY,KACf,IAAI,CAAA;AAET,MAAM,MAAM,YAAY,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAe/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,QAM3E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,WAAW,CAK/D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.proxyResponseHeaders = proxyResponseHeaders;
|
|
7
|
+
exports.responseSignal = responseSignal;
|
|
8
|
+
const http_errors_1 = __importDefault(require("http-errors"));
|
|
9
|
+
const RESPONSE_HEADERS_TO_PROXY = new Set([
|
|
10
|
+
'content-type',
|
|
11
|
+
'content-length',
|
|
12
|
+
'content-encoding',
|
|
13
|
+
'content-language',
|
|
14
|
+
'cache-control',
|
|
15
|
+
'last-modified',
|
|
16
|
+
'etag',
|
|
17
|
+
'expires',
|
|
18
|
+
'retry-after',
|
|
19
|
+
'vary', // Might vary based on "accept" headers
|
|
20
|
+
]);
|
|
21
|
+
function proxyResponseHeaders(data, res) {
|
|
22
|
+
res.statusCode = data.statusCode >= 500 ? 502 : data.statusCode;
|
|
23
|
+
for (const name of RESPONSE_HEADERS_TO_PROXY) {
|
|
24
|
+
const val = data.headers[name];
|
|
25
|
+
if (val)
|
|
26
|
+
res.setHeader(name, val);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function responseSignal(res) {
|
|
30
|
+
if (res.destroyed)
|
|
31
|
+
throw (0, http_errors_1.default)(499, 'Client Disconnected');
|
|
32
|
+
const controller = new AbortController();
|
|
33
|
+
res.once('close', () => controller.abort());
|
|
34
|
+
return controller.signal;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/util/http.ts"],"names":[],"mappings":";;;;;AA2BA,oDAMC;AAED,wCAKC;AAxCD,8DAAyC;AAczC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,MAAM;IACN,SAAS;IACT,aAAa;IACb,MAAM,EAAE,uCAAuC;CACC,CAAC,CAAA;AAEnD,SAAgB,oBAAoB,CAAC,IAAkB,EAAE,GAAmB;IAC1E,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAA;IAC/D,KAAK,MAAM,IAAI,IAAI,yBAAyB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,GAAG;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,GAAmB;IAChD,IAAI,GAAG,CAAC,SAAS;QAAE,MAAM,IAAA,qBAAe,EAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;IACpE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3C,OAAO,UAAU,CAAC,MAAM,CAAA;AAC1B,CAAC"}
|
package/dist/util/retry.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export declare
|
|
3
|
-
export declare function retryableHttp(err: unknown): boolean;
|
|
4
|
-
export declare function retryConnect<T>(fn: () => Promise<T>, opts?: RetryOptions): Promise<T>;
|
|
5
|
-
export declare function retryableConnect(err: unknown): boolean;
|
|
1
|
+
export declare const RETRYABLE_HTTP_STATUS_CODES: Set<number>;
|
|
2
|
+
export declare const retryXrpc: <T>(fn: () => Promise<T>, opts?: import("@atproto/common").RetryOptions) => Promise<T>;
|
|
6
3
|
//# sourceMappingURL=retry.d.ts.map
|
package/dist/util/retry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,2BAA2B,aAEtC,CAAA;AAEF,eAAO,MAAM,SAAS,wFAMpB,CAAA"}
|
package/dist/util/retry.js
CHANGED
|
@@ -1,36 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.retryableHttp = retryableHttp;
|
|
5
|
-
exports.retryConnect = retryConnect;
|
|
6
|
-
exports.retryableConnect = retryableConnect;
|
|
7
|
-
const axios_1 = require("axios");
|
|
8
|
-
const xrpc_1 = require("@atproto/xrpc");
|
|
3
|
+
exports.retryXrpc = exports.RETRYABLE_HTTP_STATUS_CODES = void 0;
|
|
9
4
|
const common_1 = require("@atproto/common");
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
const xrpc_1 = require("@atproto/xrpc");
|
|
6
|
+
exports.RETRYABLE_HTTP_STATUS_CODES = new Set([
|
|
7
|
+
408, 425, 429, 500, 502, 503, 504, 522, 524,
|
|
8
|
+
]);
|
|
9
|
+
exports.retryXrpc = (0, common_1.createRetryable)((err) => {
|
|
15
10
|
if (err instanceof xrpc_1.XRPCError) {
|
|
16
11
|
if (err.status === xrpc_1.ResponseType.Unknown)
|
|
17
12
|
return true;
|
|
18
|
-
return
|
|
19
|
-
}
|
|
20
|
-
if (err instanceof axios_1.AxiosError) {
|
|
21
|
-
if (!err.response)
|
|
22
|
-
return true;
|
|
23
|
-
return retryableHttpStatusCodes.has(err.response.status);
|
|
13
|
+
return exports.RETRYABLE_HTTP_STATUS_CODES.has(err.status);
|
|
24
14
|
}
|
|
25
15
|
return false;
|
|
26
|
-
}
|
|
27
|
-
const retryableHttpStatusCodes = new Set([
|
|
28
|
-
408, 425, 429, 500, 502, 503, 504, 522, 524,
|
|
29
|
-
]);
|
|
30
|
-
async function retryConnect(fn, opts = {}) {
|
|
31
|
-
return (0, common_1.retry)(fn, { retryable: retryableConnect, ...opts });
|
|
32
|
-
}
|
|
33
|
-
function retryableConnect(err) {
|
|
34
|
-
return err instanceof connect_1.ConnectError && err.code === connect_1.Code.Unavailable;
|
|
35
|
-
}
|
|
16
|
+
});
|
|
36
17
|
//# sourceMappingURL=retry.js.map
|
package/dist/util/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":";;;AAAA,4CAAiD;AACjD,wCAAuD;AAE1C,QAAA,2BAA2B,GAAG,IAAI,GAAG,CAAC;IACjD,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAC5C,CAAC,CAAA;AAEW,QAAA,SAAS,GAAG,IAAA,wBAAe,EAAC,CAAC,GAAY,EAAE,EAAE;IACxD,IAAI,GAAG,YAAY,gBAAS,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAY,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACpD,OAAO,mCAA2B,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/bsky",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.105",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Reference implementation of app.bsky App View (Bluesky API)",
|
|
6
6
|
"keywords": [
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"@connectrpc/connect-express": "^1.1.4",
|
|
23
23
|
"@connectrpc/connect-node": "^1.1.4",
|
|
24
24
|
"@did-plc/lib": "^0.0.1",
|
|
25
|
+
"@types/http-errors": "^2.0.1",
|
|
25
26
|
"compression": "^1.7.4",
|
|
26
27
|
"cors": "^2.8.5",
|
|
27
28
|
"express": "^4.17.2",
|
|
@@ -42,15 +43,19 @@
|
|
|
42
43
|
"structured-headers": "^1.0.1",
|
|
43
44
|
"typed-emitter": "^2.1.0",
|
|
44
45
|
"uint8arrays": "3.0.0",
|
|
45
|
-
"
|
|
46
|
-
"@atproto/
|
|
47
|
-
"@atproto/
|
|
48
|
-
"@atproto/
|
|
49
|
-
"@atproto/
|
|
50
|
-
"@atproto/
|
|
51
|
-
"@atproto/
|
|
46
|
+
"undici": "^6.19.8",
|
|
47
|
+
"@atproto-labs/fetch-node": "0.1.4",
|
|
48
|
+
"@atproto-labs/xrpc-utils": "0.0.2",
|
|
49
|
+
"@atproto/api": "^0.13.26",
|
|
50
|
+
"@atproto/common": "^0.4.6",
|
|
51
|
+
"@atproto/crypto": "^0.4.3",
|
|
52
|
+
"@atproto/did": "^0.1.3",
|
|
53
|
+
"@atproto/identity": "^0.4.5",
|
|
54
|
+
"@atproto/lexicon": "^0.4.5",
|
|
55
|
+
"@atproto/repo": "^0.6.2",
|
|
56
|
+
"@atproto/sync": "^0.1.9",
|
|
52
57
|
"@atproto/syntax": "^0.3.1",
|
|
53
|
-
"@atproto/xrpc-server": "^0.7.
|
|
58
|
+
"@atproto/xrpc-server": "^0.7.6"
|
|
54
59
|
},
|
|
55
60
|
"devDependencies": {
|
|
56
61
|
"@bufbuild/buf": "^1.28.1",
|
|
@@ -62,14 +67,13 @@
|
|
|
62
67
|
"@types/express-serve-static-core": "^4.17.36",
|
|
63
68
|
"@types/pg": "^8.6.6",
|
|
64
69
|
"@types/qs": "^6.9.7",
|
|
65
|
-
"axios": "^0.27.2",
|
|
66
70
|
"jest": "^28.1.2",
|
|
67
71
|
"ts-node": "^10.8.2",
|
|
68
72
|
"typescript": "^5.6.3",
|
|
69
|
-
"@atproto/api": "^0.13.
|
|
70
|
-
"@atproto/lex-cli": "^0.5.
|
|
71
|
-
"@atproto/pds": "^0.4.
|
|
72
|
-
"@atproto/xrpc": "^0.6.
|
|
73
|
+
"@atproto/api": "^0.13.26",
|
|
74
|
+
"@atproto/lex-cli": "^0.5.5",
|
|
75
|
+
"@atproto/pds": "^0.4.83",
|
|
76
|
+
"@atproto/xrpc": "^0.6.6"
|
|
73
77
|
},
|
|
74
78
|
"scripts": {
|
|
75
79
|
"codegen": "lex gen-server --yes ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/chat/bsky/*/*",
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { isUnicastIp, unicastLookup } from '@atproto-labs/fetch-node'
|
|
2
|
+
import { Agent, Dispatcher, Pool, RetryAgent } from 'undici'
|
|
3
|
+
|
|
4
|
+
import { ServerConfig } from '../config'
|
|
5
|
+
import { RETRYABLE_HTTP_STATUS_CODES } from '../util/retry'
|
|
6
|
+
|
|
7
|
+
export function createBlobDispatcher(cfg: ServerConfig): Dispatcher {
|
|
8
|
+
const baseDispatcher = new Agent({
|
|
9
|
+
allowH2: cfg.proxyAllowHTTP2, // This is experimental
|
|
10
|
+
headersTimeout: cfg.proxyHeadersTimeout,
|
|
11
|
+
maxResponseSize: cfg.proxyMaxResponseSize,
|
|
12
|
+
bodyTimeout: cfg.proxyBodyTimeout,
|
|
13
|
+
factory: cfg.disableSsrfProtection
|
|
14
|
+
? undefined
|
|
15
|
+
: (origin, opts) => {
|
|
16
|
+
const { protocol, hostname } =
|
|
17
|
+
origin instanceof URL ? origin : new URL(origin)
|
|
18
|
+
if (protocol !== 'https:') {
|
|
19
|
+
throw new Error(`Forbidden protocol "${protocol}"`)
|
|
20
|
+
}
|
|
21
|
+
if (isUnicastIp(hostname) === false) {
|
|
22
|
+
throw new Error('Hostname resolved to non-unicast address')
|
|
23
|
+
}
|
|
24
|
+
return new Pool(origin, opts)
|
|
25
|
+
},
|
|
26
|
+
connect: {
|
|
27
|
+
lookup: cfg.disableSsrfProtection ? undefined : unicastLookup,
|
|
28
|
+
},
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return cfg.proxyMaxRetries > 0
|
|
32
|
+
? new RetryAgent(baseDispatcher, {
|
|
33
|
+
statusCodes: [...RETRYABLE_HTTP_STATUS_CODES],
|
|
34
|
+
methods: ['GET', 'HEAD'],
|
|
35
|
+
maxRetries: cfg.proxyMaxRetries,
|
|
36
|
+
})
|
|
37
|
+
: baseDispatcher
|
|
38
|
+
}
|