@atproto/common 0.3.3 → 0.3.4-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE.txt +1 -1
  3. package/dist/buffers.d.ts +1 -0
  4. package/dist/buffers.d.ts.map +1 -0
  5. package/dist/buffers.js +12 -0
  6. package/dist/buffers.js.map +1 -0
  7. package/dist/dates.d.ts +1 -0
  8. package/dist/dates.d.ts.map +1 -0
  9. package/dist/dates.js +20 -0
  10. package/dist/dates.js.map +1 -0
  11. package/dist/env.d.ts +5 -0
  12. package/dist/env.d.ts.map +1 -0
  13. package/dist/env.js +33 -0
  14. package/dist/env.js.map +1 -0
  15. package/dist/fs.d.ts +3 -0
  16. package/dist/fs.d.ts.map +1 -0
  17. package/dist/fs.js +47 -0
  18. package/dist/fs.js.map +1 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +25 -22656
  22. package/dist/index.js.map +1 -7
  23. package/dist/ipld-multi.d.ts +1 -0
  24. package/dist/ipld-multi.d.ts.map +1 -0
  25. package/dist/ipld-multi.js +53 -0
  26. package/dist/ipld-multi.js.map +1 -0
  27. package/dist/ipld.d.ts +1 -0
  28. package/dist/ipld.d.ts.map +1 -0
  29. package/dist/ipld.js +146 -0
  30. package/dist/ipld.js.map +1 -0
  31. package/dist/logger.d.ts +1 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +32 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/streams.d.ts +2 -1
  36. package/dist/streams.d.ts.map +1 -0
  37. package/dist/streams.js +81 -0
  38. package/dist/streams.js.map +1 -0
  39. package/jest.config.js +3 -3
  40. package/package.json +10 -7
  41. package/src/env.ts +25 -0
  42. package/src/fs.ts +27 -0
  43. package/src/index.ts +1 -0
  44. package/src/streams.ts +3 -2
  45. package/tsconfig.build.json +6 -2
  46. package/tsconfig.json +5 -8
  47. package/tsconfig.tests.json +7 -0
  48. package/babel.config.js +0 -1
  49. package/build.js +0 -14
@@ -1 +1,2 @@
1
1
  export declare const cborDecodeMulti: (encoded: Uint8Array) => unknown[];
2
+ //# sourceMappingURL=ipld-multi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipld-multi.d.ts","sourceRoot":"","sources":["../src/ipld-multi.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,eAAe,YAAa,UAAU,KAAG,OAAO,EAM5D,CAAA"}
@@ -0,0 +1,53 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.cborDecodeMulti = void 0;
27
+ const cborx = __importStar(require("cbor-x"));
28
+ const cid_1 = require("multiformats/cid");
29
+ // add extension for decoding CIDs
30
+ // decoding code taken from @ipld/dag-cbor
31
+ // does not support encoding cids
32
+ cborx.addExtension({
33
+ Class: cid_1.CID,
34
+ tag: 42,
35
+ encode: () => {
36
+ throw new Error('cannot encode cids');
37
+ },
38
+ decode: (bytes) => {
39
+ if (bytes[0] !== 0) {
40
+ throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00');
41
+ }
42
+ return cid_1.CID.decode(bytes.subarray(1)); // ignore leading 0x00
43
+ },
44
+ });
45
+ const cborDecodeMulti = (encoded) => {
46
+ const decoded = [];
47
+ cborx.decodeMultiple(encoded, (value) => {
48
+ decoded.push(value);
49
+ });
50
+ return decoded;
51
+ };
52
+ exports.cborDecodeMulti = cborDecodeMulti;
53
+ //# sourceMappingURL=ipld-multi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipld-multi.js","sourceRoot":"","sources":["../src/ipld-multi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAA+B;AAC/B,0CAAsC;AAEtC,kCAAkC;AAClC,0CAA0C;AAC1C,iCAAiC;AACjC,KAAK,CAAC,YAAY,CAAC;IACjB,KAAK,EAAE,SAAG;IACV,GAAG,EAAE,EAAE;IACP,MAAM,EAAE,GAAG,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,CAAC;IACD,MAAM,EAAE,CAAC,KAAiB,EAAO,EAAE;QACjC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QACD,OAAO,SAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,sBAAsB;IAC7D,CAAC;CACF,CAAC,CAAA;AAEK,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAa,EAAE;IAChE,MAAM,OAAO,GAAc,EAAE,CAAA;IAC7B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IACF,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B"}
package/dist/ipld.d.ts CHANGED
@@ -27,3 +27,4 @@ export declare class VerifyCidError extends Error {
27
27
  actual: CID;
28
28
  constructor(expected: CID, actual: CID);
29
29
  }
30
+ //# sourceMappingURL=ipld.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipld.d.ts","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":";;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAI3C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,eAAO,MAAM,UAAU,yBAAmB,CAAA;AAC1C,eAAO,MAAM,UAAU,yBAAmB,CAAA;AAE1C,eAAO,MAAM,eAAe,SAAgB,OAAO,kCAMlD,CAAA;AAED,eAAO,MAAM,UAAU,SAAgB,OAAO,KAAG,QAAQ,GAAG,CAG3D,CAAA;AAED,eAAO,MAAM,UAAU,WAAkB,MAAM,KAAG,QAAQ,OAAO,CAOhE,CAAA;AAED,eAAO,MAAM,iBAAiB,UACrB,UAAU,KAChB,OAAO,MAAM,EAAE,OAAO,CAMxB,CAAA;AAED,eAAO,MAAM,iBAAiB,QAAe,GAAG,SAAS,UAAU,kBAQlE,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,UAAU,SAAS,MAAM,KAAG,GAG7D,CAAA;AAED,eAAO,MAAM,cAAc,SAAU,UAAU,KAAG,GAEjD,CAAA;AAED,qBAAa,kBAAmB,SAAQ,SAAS;IAE5B,GAAG,EAAE,GAAG;IAD3B,MAAM,cAA8B;gBACjB,GAAG,EAAE,GAAG;IAI3B,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,iBAAiB;IAKzE,MAAM,CAAC,EAAE,EAAE,iBAAiB;CAgB7B;AAED,qBAAa,cAAe,SAAQ,KAAK;IACpB,QAAQ,EAAE,GAAG;IAAS,MAAM,EAAE,GAAG;gBAAjC,QAAQ,EAAE,GAAG,EAAS,MAAM,EAAE,GAAG;CAGrD"}
package/dist/ipld.js ADDED
@@ -0,0 +1,146 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.VerifyCidError = exports.VerifyCidTransform = exports.sha256RawToCid = exports.sha256ToCid = exports.verifyCidForBytes = exports.cborBytesToRecord = exports.isValidCid = exports.cidForCbor = exports.dataToCborBlock = exports.cborDecode = exports.cborEncode = void 0;
30
+ const crypto_1 = __importDefault(require("crypto"));
31
+ const stream_1 = require("stream");
32
+ const common_web_1 = require("@atproto/common-web");
33
+ const cid_1 = require("multiformats/cid");
34
+ const Block = __importStar(require("multiformats/block"));
35
+ const rawCodec = __importStar(require("multiformats/codecs/raw"));
36
+ const sha2_1 = require("multiformats/hashes/sha2");
37
+ const mf = __importStar(require("multiformats"));
38
+ const cborCodec = __importStar(require("@ipld/dag-cbor"));
39
+ exports.cborEncode = cborCodec.encode;
40
+ exports.cborDecode = cborCodec.decode;
41
+ const dataToCborBlock = async (data) => {
42
+ return Block.encode({
43
+ value: data,
44
+ codec: cborCodec,
45
+ hasher: sha2_1.sha256,
46
+ });
47
+ };
48
+ exports.dataToCborBlock = dataToCborBlock;
49
+ const cidForCbor = async (data) => {
50
+ const block = await (0, exports.dataToCborBlock)(data);
51
+ return block.cid;
52
+ };
53
+ exports.cidForCbor = cidForCbor;
54
+ const isValidCid = async (cidStr) => {
55
+ try {
56
+ const parsed = cid_1.CID.parse(cidStr);
57
+ return parsed.toString() === cidStr;
58
+ }
59
+ catch (err) {
60
+ return false;
61
+ }
62
+ };
63
+ exports.isValidCid = isValidCid;
64
+ const cborBytesToRecord = (bytes) => {
65
+ const val = (0, exports.cborDecode)(bytes);
66
+ if (!common_web_1.check.is(val, common_web_1.schema.map)) {
67
+ throw new Error(`Expected object, got: ${val}`);
68
+ }
69
+ return val;
70
+ };
71
+ exports.cborBytesToRecord = cborBytesToRecord;
72
+ const verifyCidForBytes = async (cid, bytes) => {
73
+ const digest = await sha2_1.sha256.digest(bytes);
74
+ const expected = cid_1.CID.createV1(cid.code, digest);
75
+ if (!cid.equals(expected)) {
76
+ throw new Error(`Not a valid CID for bytes. Expected: ${expected.toString()} Got: ${cid.toString()}`);
77
+ }
78
+ };
79
+ exports.verifyCidForBytes = verifyCidForBytes;
80
+ const sha256ToCid = (hash, codec) => {
81
+ const digest = mf.digest.create(sha2_1.sha256.code, hash);
82
+ return cid_1.CID.createV1(codec, digest);
83
+ };
84
+ exports.sha256ToCid = sha256ToCid;
85
+ const sha256RawToCid = (hash) => {
86
+ return (0, exports.sha256ToCid)(hash, rawCodec.code);
87
+ };
88
+ exports.sha256RawToCid = sha256RawToCid;
89
+ class VerifyCidTransform extends stream_1.Transform {
90
+ constructor(cid) {
91
+ super();
92
+ Object.defineProperty(this, "cid", {
93
+ enumerable: true,
94
+ configurable: true,
95
+ writable: true,
96
+ value: cid
97
+ });
98
+ Object.defineProperty(this, "hasher", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: crypto_1.default.createHash('sha256')
103
+ });
104
+ }
105
+ _transform(chunk, _enc, cb) {
106
+ this.hasher.update(chunk);
107
+ cb(null, chunk);
108
+ }
109
+ _flush(cb) {
110
+ try {
111
+ const cid = (0, exports.sha256RawToCid)(this.hasher.digest());
112
+ if (this.cid.equals(cid)) {
113
+ return cb();
114
+ }
115
+ else {
116
+ return cb(new VerifyCidError(this.cid, cid));
117
+ }
118
+ }
119
+ catch (_err) {
120
+ const err = _err instanceof Error
121
+ ? _err
122
+ : new Error('Unexpected error', { cause: _err });
123
+ return cb(err);
124
+ }
125
+ }
126
+ }
127
+ exports.VerifyCidTransform = VerifyCidTransform;
128
+ class VerifyCidError extends Error {
129
+ constructor(expected, actual) {
130
+ super('Bad cid check');
131
+ Object.defineProperty(this, "expected", {
132
+ enumerable: true,
133
+ configurable: true,
134
+ writable: true,
135
+ value: expected
136
+ });
137
+ Object.defineProperty(this, "actual", {
138
+ enumerable: true,
139
+ configurable: true,
140
+ writable: true,
141
+ value: actual
142
+ });
143
+ }
144
+ }
145
+ exports.VerifyCidError = VerifyCidError;
146
+ //# sourceMappingURL=ipld.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipld.js","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA2B;AAC3B,mCAAqD;AACrD,oDAAmD;AACnD,0CAAsC;AACtC,0DAA2C;AAC3C,kEAAmD;AACnD,mDAAiD;AACjD,iDAAkC;AAClC,0DAA2C;AAE9B,QAAA,UAAU,GAAG,SAAS,CAAC,MAAM,CAAA;AAC7B,QAAA,UAAU,GAAG,SAAS,CAAC,MAAM,CAAA;AAEnC,MAAM,eAAe,GAAG,KAAK,EAAE,IAAa,EAAE,EAAE;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,aAAM;KACf,CAAC,CAAA;AACJ,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B;AAEM,MAAM,UAAU,GAAG,KAAK,EAAE,IAAa,EAAgB,EAAE;IAC9D,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,GAAG,CAAA;AAClB,CAAC,CAAA;AAHY,QAAA,UAAU,cAGtB;AAEM,MAAM,UAAU,GAAG,KAAK,EAAE,MAAc,EAAoB,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAChC,OAAO,MAAM,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAA;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAPY,QAAA,UAAU,cAOtB;AAEM,MAAM,iBAAiB,GAAG,CAC/B,KAAiB,EACQ,EAAE;IAC3B,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAA;IAC7B,IAAI,CAAC,kBAAK,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AARY,QAAA,iBAAiB,qBAQ7B;AAEM,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAQ,EAAE,KAAiB,EAAE,EAAE;IACrE,MAAM,MAAM,GAAG,MAAM,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,SAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,QAAQ,EAAE,EAAE,CACrF,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AARY,QAAA,iBAAiB,qBAQ7B;AAEM,MAAM,WAAW,GAAG,CAAC,IAAgB,EAAE,KAAa,EAAO,EAAE;IAClE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAClD,OAAO,SAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACpC,CAAC,CAAA;AAHY,QAAA,WAAW,eAGvB;AAEM,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAO,EAAE;IACtD,OAAO,IAAA,mBAAW,EAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B;AAED,MAAa,kBAAmB,SAAQ,kBAAS;IAE/C,YAAmB,GAAQ;QACzB,KAAK,EAAE,CAAA;QADG;;;;mBAAO,GAAG;WAAK;QAD3B;;;;mBAAS,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;WAAA;IAGpC,CAAC;IAED,UAAU,CAAC,KAAiB,EAAE,IAAoB,EAAE,EAAqB;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,EAAqB;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,EAAE,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QAAC,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,GACP,IAAI,YAAY,KAAK;gBACnB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACpD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;CACF;AA3BD,gDA2BC;AAED,MAAa,cAAe,SAAQ,KAAK;IACvC,YAAmB,QAAa,EAAS,MAAW;QAClD,KAAK,CAAC,eAAe,CAAC,CAAA;QADZ;;;;mBAAO,QAAQ;WAAK;QAAE;;;;mBAAO,MAAM;WAAK;IAEpD,CAAC;CACF;AAJD,wCAIC"}
package/dist/logger.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import pino from 'pino';
2
2
  export declare const subsystemLogger: (name: string) => pino.Logger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAwBvB,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,KAAK,MAWnD,CAAA"}
package/dist/logger.js ADDED
@@ -0,0 +1,32 @@
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.subsystemLogger = void 0;
7
+ const pino_1 = __importDefault(require("pino"));
8
+ const allSystemsEnabled = !process.env.LOG_SYSTEMS;
9
+ const enabledSystems = (process.env.LOG_SYSTEMS || '')
10
+ .replace(',', ' ')
11
+ .split(' ');
12
+ const enabledEnv = process.env.LOG_ENABLED;
13
+ const enabled = enabledEnv === 'true' || enabledEnv === 't' || enabledEnv === '1';
14
+ const level = process.env.LOG_LEVEL || 'info';
15
+ const config = {
16
+ enabled,
17
+ level,
18
+ };
19
+ const rootLogger = process.env.LOG_DESTINATION
20
+ ? (0, pino_1.default)(config, pino_1.default.destination(process.env.LOG_DESTINATION))
21
+ : (0, pino_1.default)(config);
22
+ const subsystems = {};
23
+ const subsystemLogger = (name) => {
24
+ if (subsystems[name])
25
+ return subsystems[name];
26
+ const subsystemEnabled = enabled && (allSystemsEnabled || enabledSystems.indexOf(name) > -1);
27
+ // can't disable child loggers, so we just set their level to fatal to effectively turn them off
28
+ subsystems[name] = rootLogger.child({ name }, { level: subsystemEnabled ? level : 'silent' });
29
+ return subsystems[name];
30
+ };
31
+ exports.subsystemLogger = subsystemLogger;
32
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AAEvB,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;AAClD,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;KACnD,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;KACjB,KAAK,CAAC,GAAG,CAAC,CAAA;AAEb,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;AAC1C,MAAM,OAAO,GACX,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAA;AAEnE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAA;AAE7C,MAAM,MAAM,GAAG;IACb,OAAO;IACP,KAAK;CACN,CAAA;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe;IAC5C,CAAC,CAAC,IAAA,cAAI,EAAC,MAAM,EAAE,cAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7D,CAAC,CAAC,IAAA,cAAI,EAAC,MAAM,CAAC,CAAA;AAEhB,MAAM,UAAU,GAAgC,EAAE,CAAA;AAE3C,MAAM,eAAe,GAAG,CAAC,IAAY,EAAe,EAAE;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;IAC7C,MAAM,gBAAgB,GACpB,OAAO,IAAI,CAAC,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAErE,gGAAgG;IAChG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CACjC,EAAE,IAAI,EAAE,EACR,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC/C,CAAA;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA;AAXY,QAAA,eAAe,mBAW3B"}
package/dist/streams.d.ts CHANGED
@@ -12,5 +12,6 @@ export declare class MaxSizeChecker extends Transform {
12
12
  createError: () => Error;
13
13
  totalSize: number;
14
14
  constructor(maxSize: number, createError: () => Error);
15
- _transform(chunk: Uint8Array, _enc: BufferEncoding, cb: TransformCallback): void | this;
15
+ _transform(chunk: Uint8Array, _enc: BufferEncoding, cb: TransformCallback): void;
16
16
  }
17
+ //# sourceMappingURL=streams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,MAAM,EACN,QAAQ,EAER,SAAS,EACT,iBAAiB,EAClB,MAAM,QAAQ,CAAA;AAEf,eAAO,MAAM,mBAAmB,eAAgB,MAAM,EAAE,SAQvD,CAAA;AAED,eAAO,MAAM,WAAW,WAAY,QAAQ,KAAG,QAI9C,CAAA;AAED,eAAO,MAAM,UAAU,WAAkB,QAAQ,KAAG,QAAQ,MAAM,CAMjE,CAAA;AAED,eAAO,MAAM,aAAa,WAAkB,QAAQ,KAAG,QAAQ,UAAU,CAMxE,CAAA;AAED,eAAO,MAAM,oBAAoB,SACzB,cAAc,UAAU,CAAC,KAC9B,QAEF,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,UAAU,KAAG,QAKjD,CAAA;AAED,qBAAa,cAAe,SAAQ,SAAS;IAExB,OAAO,EAAE,MAAM;IAAS,WAAW,EAAE,MAAM,KAAK;IADnE,SAAS,SAAI;gBACM,OAAO,EAAE,MAAM,EAAS,WAAW,EAAE,MAAM,KAAK;IAGnE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,iBAAiB;CAQ1E"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MaxSizeChecker = exports.bytesToStream = exports.byteIterableToStream = exports.streamToBytes = exports.streamSize = exports.cloneStream = exports.forwardStreamErrors = void 0;
4
+ const stream_1 = require("stream");
5
+ const forwardStreamErrors = (...streams) => {
6
+ for (let i = 0; i < streams.length; ++i) {
7
+ const stream = streams[i];
8
+ const next = streams[i + 1];
9
+ if (next) {
10
+ stream.once('error', (err) => next.emit('error', err));
11
+ }
12
+ }
13
+ };
14
+ exports.forwardStreamErrors = forwardStreamErrors;
15
+ const cloneStream = (stream) => {
16
+ const passthrough = new stream_1.PassThrough();
17
+ (0, exports.forwardStreamErrors)(stream, passthrough);
18
+ return stream.pipe(passthrough);
19
+ };
20
+ exports.cloneStream = cloneStream;
21
+ const streamSize = async (stream) => {
22
+ let size = 0;
23
+ for await (const chunk of stream) {
24
+ size += chunk.length;
25
+ }
26
+ return size;
27
+ };
28
+ exports.streamSize = streamSize;
29
+ const streamToBytes = async (stream) => {
30
+ const bufs = [];
31
+ for await (const bytes of stream) {
32
+ bufs.push(bytes);
33
+ }
34
+ return new Uint8Array(Buffer.concat(bufs));
35
+ };
36
+ exports.streamToBytes = streamToBytes;
37
+ const byteIterableToStream = (iter) => {
38
+ return stream_1.Readable.from(iter, { objectMode: false });
39
+ };
40
+ exports.byteIterableToStream = byteIterableToStream;
41
+ const bytesToStream = (bytes) => {
42
+ const stream = new stream_1.Readable();
43
+ stream.push(bytes);
44
+ stream.push(null);
45
+ return stream;
46
+ };
47
+ exports.bytesToStream = bytesToStream;
48
+ class MaxSizeChecker extends stream_1.Transform {
49
+ constructor(maxSize, createError) {
50
+ super();
51
+ Object.defineProperty(this, "maxSize", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: maxSize
56
+ });
57
+ Object.defineProperty(this, "createError", {
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true,
61
+ value: createError
62
+ });
63
+ Object.defineProperty(this, "totalSize", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: 0
68
+ });
69
+ }
70
+ _transform(chunk, _enc, cb) {
71
+ this.totalSize += chunk.length;
72
+ if (this.totalSize > this.maxSize) {
73
+ cb(this.createError());
74
+ }
75
+ else {
76
+ cb(null, chunk);
77
+ }
78
+ }
79
+ }
80
+ exports.MaxSizeChecker = MaxSizeChecker;
81
+ //# sourceMappingURL=streams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streams.js","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":";;;AAAA,mCAMe;AAER,MAAM,mBAAmB,GAAG,CAAC,GAAG,OAAiB,EAAE,EAAE;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AARY,QAAA,mBAAmB,uBAQ/B;AAEM,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAY,EAAE;IACxD,MAAM,WAAW,GAAG,IAAI,oBAAW,EAAE,CAAA;IACrC,IAAA,2BAAmB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AACjC,CAAC,CAAA;AAJY,QAAA,WAAW,eAIvB;AAEM,MAAM,UAAU,GAAG,KAAK,EAAE,MAAgB,EAAmB,EAAE;IACpE,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAA;IACtB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AANY,QAAA,UAAU,cAMtB;AAEM,MAAM,aAAa,GAAG,KAAK,EAAE,MAAgB,EAAuB,EAAE;IAC3E,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA;AANY,QAAA,aAAa,iBAMzB;AAEM,MAAM,oBAAoB,GAAG,CAClC,IAA+B,EACrB,EAAE;IACZ,OAAO,iBAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;AACnD,CAAC,CAAA;AAJY,QAAA,oBAAoB,wBAIhC;AAEM,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAY,EAAE;IAC3D,MAAM,MAAM,GAAG,IAAI,iBAAQ,EAAE,CAAA;IAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjB,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AALY,QAAA,aAAa,iBAKzB;AAED,MAAa,cAAe,SAAQ,kBAAS;IAE3C,YAAmB,OAAe,EAAS,WAAwB;QACjE,KAAK,EAAE,CAAA;QADG;;;;mBAAO,OAAO;WAAQ;QAAE;;;;mBAAO,WAAW;WAAa;QADnE;;;;mBAAY,CAAC;WAAA;IAGb,CAAC;IACD,UAAU,CAAC,KAAiB,EAAE,IAAoB,EAAE,EAAqB;QACvE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAA;QAC9B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;CACF;AAbD,wCAaC"}
package/jest.config.js CHANGED
@@ -1,6 +1,6 @@
1
- const base = require('../../jest.config.base.js')
2
-
1
+ /** @type {import('jest').Config} */
3
2
  module.exports = {
4
- ...base,
5
3
  displayName: 'Common',
4
+ transform: { '^.+\\.(t|j)s$': '@swc/jest' },
5
+ setupFiles: ['<rootDir>/../../jest.setup.ts'],
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/common",
3
- "version": "0.3.3",
3
+ "version": "0.3.4-next.0",
4
4
  "license": "MIT",
5
5
  "description": "Shared web-platform-friendly code for atproto libraries",
6
6
  "keywords": [
@@ -13,6 +13,7 @@
13
13
  "directory": "packages/common"
14
14
  },
15
15
  "main": "dist/index.js",
16
+ "types": "dist/index.d.ts",
16
17
  "dependencies": {
17
18
  "@ipld/dag-cbor": "^7.0.3",
18
19
  "cbor-x": "^1.5.1",
@@ -20,13 +21,15 @@
20
21
  "multiformats": "^9.9.0",
21
22
  "pino": "^8.15.0",
22
23
  "zod": "3.21.4",
23
- "@atproto/common-web": "^0.2.3"
24
+ "@atproto/common-web": "^0.2.4-next.0"
25
+ },
26
+ "devDependencies": {
27
+ "jest": "^28.1.2",
28
+ "typescript": "^5.3.3",
29
+ "uint8arrays": "3.0.0"
24
30
  },
25
31
  "scripts": {
26
32
  "test": "jest",
27
- "build": "node ./build.js",
28
- "postbuild": "tsc --build tsconfig.build.json",
29
- "update-main-to-dist": "node ../../update-main-to-dist.js packages/common"
30
- },
31
- "types": "dist/index.d.ts"
33
+ "build": "tsc --build tsconfig.build.json"
34
+ }
32
35
  }
package/src/env.ts ADDED
@@ -0,0 +1,25 @@
1
+ import { parseIntWithFallback } from '@atproto/common-web'
2
+
3
+ export const envInt = (name: string): number | undefined => {
4
+ const str = process.env[name]
5
+ return parseIntWithFallback(str, undefined)
6
+ }
7
+
8
+ export const envStr = (name: string): string | undefined => {
9
+ const str = process.env[name]
10
+ if (str === undefined || str.length === 0) return undefined
11
+ return str
12
+ }
13
+
14
+ export const envBool = (name: string): boolean | undefined => {
15
+ const str = process.env[name]
16
+ if (str === 'true' || str === '1') return true
17
+ if (str === 'false' || str === '0') return false
18
+ return undefined
19
+ }
20
+
21
+ export const envList = (name: string): string[] => {
22
+ const str = process.env[name]
23
+ if (str === undefined || str.length === 0) return []
24
+ return str.split(',')
25
+ }
package/src/fs.ts CHANGED
@@ -13,3 +13,30 @@ export const fileExists = async (location: string): Promise<boolean> => {
13
13
  throw err
14
14
  }
15
15
  }
16
+
17
+ export const readIfExists = async (
18
+ filepath: string,
19
+ ): Promise<Uint8Array | undefined> => {
20
+ try {
21
+ return await fs.readFile(filepath)
22
+ } catch (err) {
23
+ if (isErrnoException(err) && err.code === 'ENOENT') {
24
+ return
25
+ }
26
+ throw err
27
+ }
28
+ }
29
+
30
+ export const rmIfExists = async (
31
+ filepath: string,
32
+ recursive = false,
33
+ ): Promise<void> => {
34
+ try {
35
+ await fs.rm(filepath, { recursive })
36
+ } catch (err) {
37
+ if (isErrnoException(err) && err.code === 'ENOENT') {
38
+ return
39
+ }
40
+ throw err
41
+ }
42
+ }
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from '@atproto/common-web'
2
2
  export * from './dates'
3
+ export * from './env'
3
4
  export * from './fs'
4
5
  export * from './ipld'
5
6
  export * from './ipld-multi'
package/src/streams.ts CHANGED
@@ -59,8 +59,9 @@ export class MaxSizeChecker extends Transform {
59
59
  _transform(chunk: Uint8Array, _enc: BufferEncoding, cb: TransformCallback) {
60
60
  this.totalSize += chunk.length
61
61
  if (this.totalSize > this.maxSize) {
62
- return this.destroy(this.createError())
62
+ cb(this.createError())
63
+ } else {
64
+ cb(null, chunk)
63
65
  }
64
- return cb(null, chunk)
65
66
  }
66
67
  }
@@ -1,4 +1,8 @@
1
1
  {
2
- "extends": "./tsconfig.json",
3
- "exclude": ["**/*.spec.ts", "**/*.test.ts"]
2
+ "extends": "../../tsconfig/node.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src",
5
+ "outDir": "./dist"
6
+ },
7
+ "include": ["./src"]
4
8
  }
package/tsconfig.json CHANGED
@@ -1,10 +1,7 @@
1
1
  {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "rootDir": "./src",
5
- "outDir": "./dist", // Your outDir,
6
- "emitDeclarationOnly": true
7
- },
8
- "include": ["./src", "__tests__/**/**.ts"],
9
- "references": [{ "path": "../common-web/tsconfig.build.json" }]
2
+ "include": [],
3
+ "references": [
4
+ { "path": "./tsconfig.build.json" },
5
+ { "path": "./tsconfig.tests.json" }
6
+ ]
10
7
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../../tsconfig/tests.json",
3
+ "compilerOptions": {
4
+ "rootDir": "."
5
+ },
6
+ "include": ["./tests"]
7
+ }
package/babel.config.js DELETED
@@ -1 +0,0 @@
1
- module.exports = require('../../babel.config.js')
package/build.js DELETED
@@ -1,14 +0,0 @@
1
- const { nodeExternalsPlugin } = require('esbuild-node-externals')
2
-
3
- const buildShallow =
4
- process.argv.includes('--shallow') || process.env.ATP_BUILD_SHALLOW === 'true'
5
-
6
- require('esbuild').build({
7
- logLevel: 'info',
8
- entryPoints: ['src/index.ts'],
9
- bundle: true,
10
- sourcemap: true,
11
- outdir: 'dist',
12
- platform: 'node',
13
- plugins: buildShallow ? [nodeExternalsPlugin()] : [],
14
- })