@atproto/common-web 0.2.3 → 0.2.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 (65) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE.txt +1 -1
  3. package/dist/arrays.d.ts +2 -0
  4. package/dist/arrays.d.ts.map +1 -0
  5. package/dist/arrays.js +22 -0
  6. package/dist/arrays.js.map +1 -0
  7. package/dist/async.d.ts +7 -1
  8. package/dist/async.d.ts.map +1 -0
  9. package/dist/async.js +187 -0
  10. package/dist/async.js.map +1 -0
  11. package/dist/check.d.ts +1 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +16 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/did-doc.d.ts +3 -1
  16. package/dist/did-doc.d.ts.map +1 -0
  17. package/dist/did-doc.js +138 -0
  18. package/dist/did-doc.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 +39 -14188
  22. package/dist/index.js.map +1 -7
  23. package/dist/ipld.d.ts +3 -2
  24. package/dist/ipld.d.ts.map +1 -0
  25. package/dist/ipld.js +119 -0
  26. package/dist/ipld.js.map +1 -0
  27. package/dist/retry.d.ts +8 -0
  28. package/dist/retry.d.ts.map +1 -0
  29. package/dist/retry.js +46 -0
  30. package/dist/retry.js.map +1 -0
  31. package/dist/strings.d.ts +2 -1
  32. package/dist/strings.d.ts.map +1 -0
  33. package/dist/strings.js +74 -0
  34. package/dist/strings.js.map +1 -0
  35. package/dist/tid.d.ts +1 -0
  36. package/dist/tid.d.ts.map +1 -0
  37. package/dist/tid.js +100 -0
  38. package/dist/tid.js.map +1 -0
  39. package/dist/times.d.ts +2 -0
  40. package/dist/times.d.ts.map +1 -0
  41. package/dist/times.js +19 -0
  42. package/dist/times.js.map +1 -0
  43. package/dist/types.d.ts +3 -2
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +42 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/util.d.ts +3 -2
  48. package/dist/util.d.ts.map +1 -0
  49. package/dist/util.js +114 -0
  50. package/dist/util.js.map +1 -0
  51. package/jest.config.js +3 -3
  52. package/package.json +7 -6
  53. package/src/arrays.ts +7 -0
  54. package/src/async.ts +27 -0
  55. package/src/did-doc.ts +5 -0
  56. package/src/index.ts +1 -0
  57. package/src/retry.ts +52 -0
  58. package/src/times.ts +7 -0
  59. package/src/util.ts +2 -2
  60. package/tests/retry.test.ts +93 -0
  61. package/tsconfig.build.json +6 -2
  62. package/tsconfig.json +5 -7
  63. package/tsconfig.tests.json +7 -0
  64. package/babel.config.js +0 -1
  65. package/build.js +0 -15
package/dist/ipld.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import { CID } from 'multiformats/cid';
2
- export declare type JsonValue = boolean | number | string | null | undefined | unknown | Array<JsonValue> | {
2
+ export type JsonValue = boolean | number | string | null | undefined | unknown | Array<JsonValue> | {
3
3
  [key: string]: JsonValue;
4
4
  };
5
- export declare type IpldValue = JsonValue | CID | Uint8Array | Array<IpldValue> | {
5
+ export type IpldValue = JsonValue | CID | Uint8Array | Array<IpldValue> | {
6
6
  [key: string]: IpldValue;
7
7
  };
8
8
  export declare const jsonToIpld: (val: JsonValue) => IpldValue;
9
9
  export declare const ipldToJson: (val: IpldValue) => JsonValue;
10
10
  export declare const ipldEquals: (a: IpldValue, b: IpldValue) => boolean;
11
+ //# sourceMappingURL=ipld.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipld.d.ts","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,GACP,KAAK,CAAC,SAAS,CAAC,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEhC,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,GAAG,GACH,UAAU,GACV,KAAK,CAAC,SAAS,CAAC,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAKhC,eAAO,MAAM,UAAU,QAAS,SAAS,KAAG,SAuB3C,CAAA;AAED,eAAO,MAAM,UAAU,QAAS,SAAS,KAAG,SA4B3C,CAAA;AAED,eAAO,MAAM,UAAU,MAAO,SAAS,KAAK,SAAS,KAAG,OA2BvD,CAAA"}
package/dist/ipld.js ADDED
@@ -0,0 +1,119 @@
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.ipldEquals = exports.ipldToJson = exports.jsonToIpld = void 0;
27
+ const cid_1 = require("multiformats/cid");
28
+ const ui8 = __importStar(require("uint8arrays"));
29
+ // @NOTE avoiding use of check.is() here only because it makes
30
+ // these implementations slow, and they often live in hot paths.
31
+ const jsonToIpld = (val) => {
32
+ // walk arrays
33
+ if (Array.isArray(val)) {
34
+ return val.map((item) => (0, exports.jsonToIpld)(item));
35
+ }
36
+ // objects
37
+ if (val && typeof val === 'object') {
38
+ // check for dag json values
39
+ if (typeof val['$link'] === 'string' && Object.keys(val).length === 1) {
40
+ return cid_1.CID.parse(val['$link']);
41
+ }
42
+ if (typeof val['$bytes'] === 'string' && Object.keys(val).length === 1) {
43
+ return ui8.fromString(val['$bytes'], 'base64');
44
+ }
45
+ // walk plain objects
46
+ const toReturn = {};
47
+ for (const key of Object.keys(val)) {
48
+ toReturn[key] = (0, exports.jsonToIpld)(val[key]);
49
+ }
50
+ return toReturn;
51
+ }
52
+ // pass through
53
+ return val;
54
+ };
55
+ exports.jsonToIpld = jsonToIpld;
56
+ const ipldToJson = (val) => {
57
+ // walk arrays
58
+ if (Array.isArray(val)) {
59
+ return val.map((item) => (0, exports.ipldToJson)(item));
60
+ }
61
+ // objects
62
+ if (val && typeof val === 'object') {
63
+ // convert bytes
64
+ if (val instanceof Uint8Array) {
65
+ return {
66
+ $bytes: ui8.toString(val, 'base64'),
67
+ };
68
+ }
69
+ // convert cids
70
+ if (cid_1.CID.asCID(val)) {
71
+ return {
72
+ $link: val.toString(),
73
+ };
74
+ }
75
+ // walk plain objects
76
+ const toReturn = {};
77
+ for (const key of Object.keys(val)) {
78
+ toReturn[key] = (0, exports.ipldToJson)(val[key]);
79
+ }
80
+ return toReturn;
81
+ }
82
+ // pass through
83
+ return val;
84
+ };
85
+ exports.ipldToJson = ipldToJson;
86
+ const ipldEquals = (a, b) => {
87
+ // walk arrays
88
+ if (Array.isArray(a) && Array.isArray(b)) {
89
+ if (a.length !== b.length)
90
+ return false;
91
+ for (let i = 0; i < a.length; i++) {
92
+ if (!(0, exports.ipldEquals)(a[i], b[i]))
93
+ return false;
94
+ }
95
+ return true;
96
+ }
97
+ // objects
98
+ if (a && b && typeof a === 'object' && typeof b === 'object') {
99
+ // check bytes
100
+ if (a instanceof Uint8Array && b instanceof Uint8Array) {
101
+ return ui8.equals(a, b);
102
+ }
103
+ // check cids
104
+ if (cid_1.CID.asCID(a) && cid_1.CID.asCID(b)) {
105
+ return cid_1.CID.asCID(a)?.equals(cid_1.CID.asCID(b));
106
+ }
107
+ // walk plain objects
108
+ if (Object.keys(a).length !== Object.keys(b).length)
109
+ return false;
110
+ for (const key of Object.keys(a)) {
111
+ if (!(0, exports.ipldEquals)(a[key], b[key]))
112
+ return false;
113
+ }
114
+ return true;
115
+ }
116
+ return a === b;
117
+ };
118
+ exports.ipldEquals = ipldEquals;
119
+ //# sourceMappingURL=ipld.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipld.js","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type RetryOptions = {
2
+ maxRetries?: number;
3
+ getWaitMs?: (n: number) => number | null;
4
+ retryable?: (err: unknown) => boolean;
5
+ };
6
+ export declare function retry<T>(fn: () => Promise<T>, opts?: RetryOptions): Promise<T>;
7
+ export declare function backoffMs(n: number, multiplier?: number, max?: number): number;
8
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;CACtC,CAAA;AAED,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAGD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,GAAG,SAAO,UAIhE"}
package/dist/retry.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.backoffMs = exports.retry = void 0;
4
+ const util_1 = require("./util");
5
+ async function retry(fn, opts = {}) {
6
+ const { maxRetries = 3, retryable = () => true, getWaitMs = backoffMs } = opts;
7
+ let retries = 0;
8
+ let doneError;
9
+ while (!doneError) {
10
+ try {
11
+ return await fn();
12
+ }
13
+ catch (err) {
14
+ const waitMs = getWaitMs(retries);
15
+ const willRetry = retries < maxRetries && waitMs !== null && retryable(err);
16
+ if (willRetry) {
17
+ retries += 1;
18
+ if (waitMs !== 0) {
19
+ await (0, util_1.wait)(waitMs);
20
+ }
21
+ }
22
+ else {
23
+ doneError = err;
24
+ }
25
+ }
26
+ }
27
+ throw doneError;
28
+ }
29
+ exports.retry = retry;
30
+ // Waits exponential backoff with max and jitter: ~100, ~200, ~400, ~800, ~1000, ~1000, ...
31
+ function backoffMs(n, multiplier = 100, max = 1000) {
32
+ const exponentialMs = Math.pow(2, n) * multiplier;
33
+ const ms = Math.min(exponentialMs, max);
34
+ return jitter(ms);
35
+ }
36
+ exports.backoffMs = backoffMs;
37
+ // Adds randomness +/-15% of value
38
+ function jitter(value) {
39
+ const delta = value * 0.15;
40
+ return value + randomRange(-delta, delta);
41
+ }
42
+ function randomRange(from, to) {
43
+ const rand = Math.random() * (to - from);
44
+ return rand + from;
45
+ }
46
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":";;;AAAA,iCAA6B;AAQtB,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,OAAqB,EAAE;IAEvB,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI,CAAA;IAC9E,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,SAAkB,CAAA;IACtB,OAAO,CAAC,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;YACjC,MAAM,SAAS,GACb,OAAO,GAAG,UAAU,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAA;YAC3D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,CAAA;gBACZ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAA,WAAI,EAAC,MAAM,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,GAAG,CAAA;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,SAAS,CAAA;AACjB,CAAC;AAzBD,sBAyBC;AAED,2FAA2F;AAC3F,SAAgB,SAAS,CAAC,CAAS,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI;IAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAA;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;AACnB,CAAC;AAJD,8BAIC;AAED,kCAAkC;AAClC,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAA;IAC1B,OAAO,KAAK,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,EAAU;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IACxC,OAAO,IAAI,GAAG,IAAI,CAAA;AACpB,CAAC"}
package/dist/strings.d.ts CHANGED
@@ -4,7 +4,7 @@ export declare const utf8ToB64Url: (utf8: string) => string;
4
4
  export declare const b64UrlToUtf8: (b64: string) => string;
5
5
  export declare const parseLanguage: (langTag: string) => LanguageTag | null;
6
6
  export declare const validateLanguage: (langTag: string) => boolean;
7
- export declare type LanguageTag = {
7
+ export type LanguageTag = {
8
8
  grandfathered?: string;
9
9
  language?: string;
10
10
  extlang?: string;
@@ -14,3 +14,4 @@ export declare type LanguageTag = {
14
14
  extension?: string;
15
15
  privateUse?: string;
16
16
  };
17
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,QAAS,MAAM,KAAG,MAErC,CAAA;AAGD,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,MAGzC,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,MAE3C,CAAA;AAED,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,MAE1C,CAAA;AAED,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,WAAW,GAAG,IAc7D,CAAA;AAED,eAAO,MAAM,gBAAgB,YAAa,MAAM,KAAG,OAElD,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA"}
@@ -0,0 +1,74 @@
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.validateLanguage = exports.parseLanguage = exports.b64UrlToUtf8 = exports.utf8ToB64Url = exports.graphemeLen = exports.utf8Len = void 0;
30
+ const graphemer_1 = __importDefault(require("graphemer"));
31
+ const ui8 = __importStar(require("uint8arrays"));
32
+ // counts the number of bytes in a utf8 string
33
+ const utf8Len = (str) => {
34
+ return new TextEncoder().encode(str).byteLength;
35
+ };
36
+ exports.utf8Len = utf8Len;
37
+ // counts the number of graphemes (user-displayed characters) in a string
38
+ const graphemeLen = (str) => {
39
+ const splitter = new graphemer_1.default();
40
+ return splitter.countGraphemes(str);
41
+ };
42
+ exports.graphemeLen = graphemeLen;
43
+ const utf8ToB64Url = (utf8) => {
44
+ return ui8.toString(ui8.fromString(utf8, 'utf8'), 'base64url');
45
+ };
46
+ exports.utf8ToB64Url = utf8ToB64Url;
47
+ const b64UrlToUtf8 = (b64) => {
48
+ return ui8.toString(ui8.fromString(b64, 'base64url'), 'utf8');
49
+ };
50
+ exports.b64UrlToUtf8 = b64UrlToUtf8;
51
+ const parseLanguage = (langTag) => {
52
+ const parsed = langTag.match(bcp47Regexp);
53
+ if (!parsed?.groups)
54
+ return null;
55
+ const parts = parsed.groups;
56
+ return {
57
+ grandfathered: parts.grandfathered,
58
+ language: parts.language,
59
+ extlang: parts.extlang,
60
+ script: parts.script,
61
+ region: parts.region,
62
+ variant: parts.variant,
63
+ extension: parts.extension,
64
+ privateUse: parts.privateUseA || parts.privateUseB,
65
+ };
66
+ };
67
+ exports.parseLanguage = parseLanguage;
68
+ const validateLanguage = (langTag) => {
69
+ return bcp47Regexp.test(langTag);
70
+ };
71
+ exports.validateLanguage = validateLanguage;
72
+ // Validates well-formed BCP 47 syntax: https://www.rfc-editor.org/rfc/rfc5646.html#section-2.1
73
+ const bcp47Regexp = /^((?<grandfathered>(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?<language>([A-Za-z]{2,3}(-(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?<script>[A-Za-z]{4}))?(-(?<region>[A-Za-z]{2}|[0-9]{3}))?(-(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?<extension>[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?<privateUseA>x(-[A-Za-z0-9]{1,8})+))?)|(?<privateUseB>x(-[A-Za-z0-9]{1,8})+))$/;
74
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAiC;AACjC,iDAAkC;AAElC,8CAA8C;AACvC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE;IAC7C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAA;AACjD,CAAC,CAAA;AAFY,QAAA,OAAO,WAEnB;AAED,yEAAyE;AAClE,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;IACjD,MAAM,QAAQ,GAAG,IAAI,mBAAS,EAAE,CAAA;IAChC,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;AACrC,CAAC,CAAA;AAHY,QAAA,WAAW,eAGvB;AAEM,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,CAAA;AAChE,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAEM,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAA;AAC/D,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAEM,MAAM,aAAa,GAAG,CAAC,OAAe,EAAsB,EAAE;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;IAC3B,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW;KACnD,CAAA;AACH,CAAC,CAAA;AAdY,QAAA,aAAa,iBAczB;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAW,EAAE;IAC3D,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B;AAaD,+FAA+F;AAC/F,MAAM,WAAW,GACf,mlBAAmlB,CAAA"}
package/dist/tid.d.ts CHANGED
@@ -18,3 +18,4 @@ export declare class TID {
18
18
  olderThan(other: TID): boolean;
19
19
  }
20
20
  export default TID;
21
+ //# sourceMappingURL=tid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tid.d.ts","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":"AAYA,qBAAa,GAAG;IACd,GAAG,EAAE,MAAM,CAAA;gBAEC,GAAG,EAAE,MAAM;IAQvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG;IAsB5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG;IAMxD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAIhC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM;IAI1C,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM;IAI1C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAQnB,QAAQ,IAAI,MAAM;IAKlB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAM7B,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAI3B,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAI9B,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;CAG/B;AAED,eAAe,GAAG,CAAA"}
package/dist/tid.js ADDED
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TID = void 0;
4
+ const util_1 = require("./util");
5
+ const TID_LEN = 13;
6
+ let lastTimestamp = 0;
7
+ let timestampCount = 0;
8
+ let clockid = null;
9
+ function dedash(str) {
10
+ return str.replaceAll('-', '');
11
+ }
12
+ class TID {
13
+ constructor(str) {
14
+ Object.defineProperty(this, "str", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: void 0
19
+ });
20
+ const noDashes = dedash(str);
21
+ if (noDashes.length !== TID_LEN) {
22
+ throw new Error(`Poorly formatted TID: ${noDashes.length} length`);
23
+ }
24
+ this.str = noDashes;
25
+ }
26
+ static next(prev) {
27
+ // javascript does not have microsecond precision
28
+ // instead, we append a counter to the timestamp to indicate if multiple timestamps were created within the same millisecond
29
+ // take max of current time & last timestamp to prevent tids moving backwards if system clock drifts backwards
30
+ const time = Math.max(Date.now(), lastTimestamp);
31
+ if (time === lastTimestamp) {
32
+ timestampCount++;
33
+ }
34
+ lastTimestamp = time;
35
+ const timestamp = time * 1000 + timestampCount;
36
+ // the bottom 32 clock ids can be randomized & are not guaranteed to be collision resistant
37
+ // we use the same clockid for all tids coming from this machine
38
+ if (clockid === null) {
39
+ clockid = Math.floor(Math.random() * 32);
40
+ }
41
+ const tid = TID.fromTime(timestamp, clockid);
42
+ if (!prev || tid.newerThan(prev)) {
43
+ return tid;
44
+ }
45
+ return TID.fromTime(prev.timestamp() + 1, clockid);
46
+ }
47
+ static nextStr(prev) {
48
+ return TID.next(prev ? new TID(prev) : undefined).toString();
49
+ }
50
+ static fromTime(timestamp, clockid) {
51
+ // base32 encode with encoding variant sort (s32)
52
+ const str = `${(0, util_1.s32encode)(timestamp)}${(0, util_1.s32encode)(clockid).padStart(2, '2')}`;
53
+ return new TID(str);
54
+ }
55
+ static fromStr(str) {
56
+ return new TID(str);
57
+ }
58
+ static oldestFirst(a, b) {
59
+ return a.compareTo(b);
60
+ }
61
+ static newestFirst(a, b) {
62
+ return b.compareTo(a);
63
+ }
64
+ static is(str) {
65
+ return dedash(str).length === TID_LEN;
66
+ }
67
+ timestamp() {
68
+ return (0, util_1.s32decode)(this.str.slice(0, 11));
69
+ }
70
+ clockid() {
71
+ return (0, util_1.s32decode)(this.str.slice(11, 13));
72
+ }
73
+ formatted() {
74
+ const str = this.toString();
75
+ return `${str.slice(0, 4)}-${str.slice(4, 7)}-${str.slice(7, 11)}-${str.slice(11, 13)}`;
76
+ }
77
+ toString() {
78
+ return this.str;
79
+ }
80
+ // newer > older
81
+ compareTo(other) {
82
+ if (this.str > other.str)
83
+ return 1;
84
+ if (this.str < other.str)
85
+ return -1;
86
+ return 0;
87
+ }
88
+ equals(other) {
89
+ return this.str === other.str;
90
+ }
91
+ newerThan(other) {
92
+ return this.compareTo(other) > 0;
93
+ }
94
+ olderThan(other) {
95
+ return this.compareTo(other) < 0;
96
+ }
97
+ }
98
+ exports.TID = TID;
99
+ exports.default = TID;
100
+ //# sourceMappingURL=tid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tid.js","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":"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"}
package/dist/times.d.ts CHANGED
@@ -3,3 +3,5 @@ export declare const MINUTE: number;
3
3
  export declare const HOUR: number;
4
4
  export declare const DAY: number;
5
5
  export declare const lessThanAgoMs: (time: Date, range: number) => boolean;
6
+ export declare const addHoursToDate: (hours: number, startingDate?: Date) => Date;
7
+ //# sourceMappingURL=times.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"times.d.ts","sourceRoot":"","sources":["../src/times.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,OAAO,CAAA;AAC1B,eAAO,MAAM,MAAM,QAAc,CAAA;AACjC,eAAO,MAAM,IAAI,QAAc,CAAA;AAC/B,eAAO,MAAM,GAAG,QAAY,CAAA;AAE5B,eAAO,MAAM,aAAa,SAAU,IAAI,SAAS,MAAM,YAEtD,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,MAAM,iBAAiB,IAAI,KAAG,IAKnE,CAAA"}
package/dist/times.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addHoursToDate = exports.lessThanAgoMs = exports.DAY = exports.HOUR = exports.MINUTE = exports.SECOND = void 0;
4
+ exports.SECOND = 1000;
5
+ exports.MINUTE = exports.SECOND * 60;
6
+ exports.HOUR = exports.MINUTE * 60;
7
+ exports.DAY = exports.HOUR * 24;
8
+ const lessThanAgoMs = (time, range) => {
9
+ return Date.now() < time.getTime() + range;
10
+ };
11
+ exports.lessThanAgoMs = lessThanAgoMs;
12
+ const addHoursToDate = (hours, startingDate) => {
13
+ // When date is passed, clone before calling `setHours()` so that we are not mutating the original date
14
+ const currentDate = startingDate ? new Date(startingDate) : new Date();
15
+ currentDate.setHours(currentDate.getHours() + hours);
16
+ return currentDate;
17
+ };
18
+ exports.addHoursToDate = addHoursToDate;
19
+ //# sourceMappingURL=times.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"times.js","sourceRoot":"","sources":["../src/times.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,IAAI,CAAA;AACb,QAAA,MAAM,GAAG,cAAM,GAAG,EAAE,CAAA;AACpB,QAAA,IAAI,GAAG,cAAM,GAAG,EAAE,CAAA;AAClB,QAAA,GAAG,GAAG,YAAI,GAAG,EAAE,CAAA;AAErB,MAAM,aAAa,GAAG,CAAC,IAAU,EAAE,KAAa,EAAE,EAAE;IACzD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAA;AAC5C,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAEM,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,YAAmB,EAAQ,EAAE;IACzE,uGAAuG;IACvG,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IACtE,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAA;IACpD,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B"}
package/dist/types.d.ts CHANGED
@@ -16,5 +16,6 @@ export declare const def: {
16
16
  map: Def<Record<string, unknown>>;
17
17
  unknown: Def<unknown>;
18
18
  };
19
- export declare type ArrayEl<A> = A extends readonly (infer T)[] ? T : never;
20
- export declare type NotEmptyArray<T> = [T, ...T[]];
19
+ export type ArrayEl<A> = A extends readonly (infer T)[] ? T : never;
20
+ export type NotEmptyArray<T> = [T, ...T[]];
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAS7B,eAAO,MAAM,MAAM;;;;;;;CAOlB,CAAA;AAED,eAAO,MAAM,GAAG;;;;;;CAqBf,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;AAEnE,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.def = exports.schema = void 0;
4
+ const cid_1 = require("multiformats/cid");
5
+ const zod_1 = require("zod");
6
+ const cidSchema = zod_1.z
7
+ .any()
8
+ .refine((obj) => cid_1.CID.asCID(obj) !== null, {
9
+ message: 'Not a CID',
10
+ })
11
+ .transform((obj) => cid_1.CID.asCID(obj));
12
+ exports.schema = {
13
+ cid: cidSchema,
14
+ bytes: zod_1.z.instanceof(Uint8Array),
15
+ string: zod_1.z.string(),
16
+ array: zod_1.z.array(zod_1.z.unknown()),
17
+ map: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
18
+ unknown: zod_1.z.unknown(),
19
+ };
20
+ exports.def = {
21
+ cid: {
22
+ name: 'cid',
23
+ schema: exports.schema.cid,
24
+ },
25
+ bytes: {
26
+ name: 'bytes',
27
+ schema: exports.schema.bytes,
28
+ },
29
+ string: {
30
+ name: 'string',
31
+ schema: exports.schema.string,
32
+ },
33
+ map: {
34
+ name: 'map',
35
+ schema: exports.schema.map,
36
+ },
37
+ unknown: {
38
+ name: 'unknown',
39
+ schema: exports.schema.unknown,
40
+ },
41
+ };
42
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,0CAAsC;AACtC,6BAAuB;AAGvB,MAAM,SAAS,GAAG,OAAC;KAChB,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,SAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;IACjD,OAAO,EAAE,WAAW;CACrB,CAAC;KACD,SAAS,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,SAAG,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC,CAAA;AAExC,QAAA,MAAM,GAAG;IACpB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,OAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAC/B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,GAAG,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE;CACrB,CAAA;AAEY,QAAA,GAAG,GAAG;IACjB,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,cAAM,CAAC,GAAG;KACP;IACb,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,cAAM,CAAC,KAAK;KACF;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,cAAM,CAAC,MAAM;KACP;IAChB,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,cAAM,CAAC,GAAG;KACa;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,cAAM,CAAC,OAAO;KACP;CAClB,CAAA"}
package/dist/util.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /// <reference types="node" />
2
- export declare const noUndefinedVals: <T>(obj: Record<string, T>) => Record<string, T>;
2
+ export declare const noUndefinedVals: <T>(obj: Record<string, T | undefined>) => Record<string, T>;
3
3
  export declare const jitter: (maxMs: number) => number;
4
4
  export declare const wait: (ms: number) => Promise<unknown>;
5
- export declare type BailableWait = {
5
+ export type BailableWait = {
6
6
  bail: () => void;
7
7
  wait: () => Promise<void>;
8
8
  };
@@ -18,3 +18,4 @@ export declare const chunkArray: <T>(arr: T[], chunkSize: number) => T[][];
18
18
  export declare const range: (num: number) => number[];
19
19
  export declare const dedupeStrs: (strs: string[]) => string[];
20
20
  export declare const parseIntWithFallback: <T>(value: string | undefined, fallback: T) => number | T;
21
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,eAAe,8DAS3B,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,MAAM,WAEnC,CAAA;AAED,eAAO,MAAM,IAAI,OAAQ,MAAM,qBAE9B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,YAAY,OAAQ,MAAM,KAAG,YAUzC,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAU,UAAU,EAAE,KAAG,UAWvD,CAAA;AAED,eAAO,MAAM,cAAc,WACjB,cAAc,UAAU,CAAC,KAChC,QAAQ,UAAU,CAMpB,CAAA;AAID,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MAQrC,CAAA;AAED,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MAMrC,CAAA;AAED,eAAO,MAAM,WAAW,8BAER,QAAQ,OAAO,CAAC,iBAI/B,CAAA;AAED,eAAO,MAAM,gBAAgB,QACtB,OAAO,iCAGb,CAAA;AAED,eAAO,MAAM,SAAS,QAAS,OAAO,OAAO,MAAM,KAAG,OAErD,CAAA;AAED,eAAO,MAAM,UAAU,2BAA4B,MAAM,UASxD,CAAA;AAED,eAAO,MAAM,KAAK,QAAS,MAAM,KAAG,MAAM,EAMzC,CAAA;AAED,eAAO,MAAM,UAAU,SAAU,MAAM,EAAE,KAAG,MAAM,EAEjD,CAAA;AAED,eAAO,MAAM,oBAAoB,aACxB,MAAM,GAAG,SAAS,4BAK1B,CAAA"}