@atproto/common-web 0.4.12 → 0.4.14

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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atproto/common-web
2
2
 
3
+ ## 0.4.14
4
+
5
+ ### Patch Changes
6
+
7
+ - [#4580](https://github.com/bluesky-social/atproto/pull/4580) [`d54d707`](https://github.com/bluesky-social/atproto/commit/d54d7077eb32041e1f61c312efa1dd0d768c774e) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Deprecate the `didDocument` schema in favor of `@atproto/did`
8
+
9
+ - [#4580](https://github.com/bluesky-social/atproto/pull/4580) [`d54d707`](https://github.com/bluesky-social/atproto/commit/d54d7077eb32041e1f61c312efa1dd0d768c774e) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Allow (and validate) `publicKeyJwk` properties in DID document verification methods
10
+
11
+ - [#4580](https://github.com/bluesky-social/atproto/pull/4580) [`d54d707`](https://github.com/bluesky-social/atproto/commit/d54d7077eb32041e1f61c312efa1dd0d768c774e) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Validate DID document's `@context` and `authentication` properties.
12
+
13
+ ## 0.4.13
14
+
15
+ ### Patch Changes
16
+
17
+ - [#4562](https://github.com/bluesky-social/atproto/pull/4562) [`7310b97`](https://github.com/bluesky-social/atproto/commit/7310b9704de678a3b389a741784d58bb7f79b10b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Use `noUndefinedVals` from `@atproto/common-web` instead of locally defined `stripUndefineds`
18
+
19
+ - Updated dependencies [[`99963d0`](https://github.com/bluesky-social/atproto/commit/99963d002a9e030e79aed5fba700e0a68f31e101), [`99963d0`](https://github.com/bluesky-social/atproto/commit/99963d002a9e030e79aed5fba700e0a68f31e101), [`aaedafc`](https://github.com/bluesky-social/atproto/commit/aaedafc6baef106b85e0954d8474cec21c00c1c2), [`99963d0`](https://github.com/bluesky-social/atproto/commit/99963d002a9e030e79aed5fba700e0a68f31e101), [`7310b97`](https://github.com/bluesky-social/atproto/commit/7310b9704de678a3b389a741784d58bb7f79b10b), [`99963d0`](https://github.com/bluesky-social/atproto/commit/99963d002a9e030e79aed5fba700e0a68f31e101), [`99963d0`](https://github.com/bluesky-social/atproto/commit/99963d002a9e030e79aed5fba700e0a68f31e101), [`99963d0`](https://github.com/bluesky-social/atproto/commit/99963d002a9e030e79aed5fba700e0a68f31e101)]:
20
+ - @atproto/syntax@0.4.3
21
+ - @atproto/lex-json@0.0.9
22
+ - @atproto/lex-data@0.0.9
23
+
3
24
  ## 0.4.12
4
25
 
5
26
  ### Patch Changes
package/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  Dual MIT/Apache-2.0 License
2
2
 
3
- Copyright (c) 2022-2025 Bluesky Social PBC, and Contributors
3
+ Copyright (c) 2022-2026 Bluesky Social PBC, and Contributors
4
4
 
5
5
  Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
6
6
 
package/dist/did-doc.d.ts CHANGED
@@ -18,64 +18,109 @@ export declare const getServiceEndpoint: (doc: DidDocument, opts: {
18
18
  id: string;
19
19
  type?: string;
20
20
  }) => string | undefined;
21
+ /**
22
+ * @deprecated Use `DidDocument` from `@atproto/did` instead as it applies
23
+ * stricter (and more spec-compliant) validation.
24
+ */
21
25
  export declare const didDocument: z.ZodObject<{
26
+ '@context': z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"https://www.w3.org/ns/did/v1">, z.ZodArray<z.ZodString, "many">]>>;
22
27
  id: z.ZodString;
23
28
  alsoKnownAs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
24
29
  verificationMethod: z.ZodOptional<z.ZodArray<z.ZodObject<{
25
30
  id: z.ZodString;
26
31
  type: z.ZodString;
27
32
  controller: z.ZodString;
33
+ publicKeyJwk: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
28
34
  publicKeyMultibase: z.ZodOptional<z.ZodString>;
29
35
  }, "strip", z.ZodTypeAny, {
30
- id: string;
31
36
  type: string;
37
+ id: string;
32
38
  controller: string;
39
+ publicKeyJwk?: Record<string, unknown> | undefined;
33
40
  publicKeyMultibase?: string | undefined;
34
41
  }, {
35
- id: string;
36
42
  type: string;
43
+ id: string;
37
44
  controller: string;
45
+ publicKeyJwk?: Record<string, unknown> | undefined;
38
46
  publicKeyMultibase?: string | undefined;
39
47
  }>, "many">>;
48
+ authentication: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
49
+ id: z.ZodString;
50
+ type: z.ZodString;
51
+ controller: z.ZodString;
52
+ publicKeyJwk: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
53
+ publicKeyMultibase: z.ZodOptional<z.ZodString>;
54
+ }, "strip", z.ZodTypeAny, {
55
+ type: string;
56
+ id: string;
57
+ controller: string;
58
+ publicKeyJwk?: Record<string, unknown> | undefined;
59
+ publicKeyMultibase?: string | undefined;
60
+ }, {
61
+ type: string;
62
+ id: string;
63
+ controller: string;
64
+ publicKeyJwk?: Record<string, unknown> | undefined;
65
+ publicKeyMultibase?: string | undefined;
66
+ }>]>, "many">>;
40
67
  service: z.ZodOptional<z.ZodArray<z.ZodObject<{
41
68
  id: z.ZodString;
42
69
  type: z.ZodString;
43
70
  serviceEndpoint: z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>;
44
71
  }, "strip", z.ZodTypeAny, {
45
- id: string;
46
72
  type: string;
73
+ id: string;
47
74
  serviceEndpoint: string | Record<string, unknown>;
48
75
  }, {
49
- id: string;
50
76
  type: string;
77
+ id: string;
51
78
  serviceEndpoint: string | Record<string, unknown>;
52
79
  }>, "many">>;
53
80
  }, "strip", z.ZodTypeAny, {
54
81
  id: string;
82
+ '@context'?: string[] | "https://www.w3.org/ns/did/v1" | undefined;
55
83
  alsoKnownAs?: string[] | undefined;
56
84
  verificationMethod?: {
57
- id: string;
58
85
  type: string;
86
+ id: string;
59
87
  controller: string;
88
+ publicKeyJwk?: Record<string, unknown> | undefined;
60
89
  publicKeyMultibase?: string | undefined;
61
90
  }[] | undefined;
62
- service?: {
91
+ authentication?: (string | {
92
+ type: string;
63
93
  id: string;
94
+ controller: string;
95
+ publicKeyJwk?: Record<string, unknown> | undefined;
96
+ publicKeyMultibase?: string | undefined;
97
+ })[] | undefined;
98
+ service?: {
64
99
  type: string;
100
+ id: string;
65
101
  serviceEndpoint: string | Record<string, unknown>;
66
102
  }[] | undefined;
67
103
  }, {
68
104
  id: string;
105
+ '@context'?: string[] | "https://www.w3.org/ns/did/v1" | undefined;
69
106
  alsoKnownAs?: string[] | undefined;
70
107
  verificationMethod?: {
71
- id: string;
72
108
  type: string;
109
+ id: string;
73
110
  controller: string;
111
+ publicKeyJwk?: Record<string, unknown> | undefined;
74
112
  publicKeyMultibase?: string | undefined;
75
113
  }[] | undefined;
76
- service?: {
114
+ authentication?: (string | {
115
+ type: string;
77
116
  id: string;
117
+ controller: string;
118
+ publicKeyJwk?: Record<string, unknown> | undefined;
119
+ publicKeyMultibase?: string | undefined;
120
+ })[] | undefined;
121
+ service?: {
78
122
  type: string;
123
+ id: string;
79
124
  serviceEndpoint: string | Record<string, unknown>;
80
125
  }[] | undefined;
81
126
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"did-doc.d.ts","sourceRoot":"","sources":["../src/did-doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,WAEnD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,KAAK,WAAW,KAAG,MAMzC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAYrD,CAAA;AAGD,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,KACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,SAEjD,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,KAAK,WAAW,EAChB,OAAO,MAAM,KACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,SAgBjD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAI5D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAK1D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAK9D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAK5D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,KAAK,WAAW,EAChB,MAAM;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,uBAkBpC,CAAA;AA4ED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"did-doc.d.ts","sourceRoot":"","sources":["../src/did-doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,WAEnD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,KAAK,WAAW,KAAG,MAMzC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAYrD,CAAA;AAGD,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,KACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,SAEjD,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,KAAK,WAAW,EAChB,OAAO,MAAM,KACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,SAgBjD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAI5D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAK1D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAK9D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,WAAW,KAAG,MAAM,GAAG,SAK5D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,KAAK,WAAW,EAChB,MAAM;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,uBAkBpC,CAAA;AA6ED;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA"}
package/dist/did-doc.js CHANGED
@@ -141,6 +141,7 @@ const verificationMethod = zod_1.z.object({
141
141
  id: zod_1.z.string(),
142
142
  type: zod_1.z.string(),
143
143
  controller: zod_1.z.string(),
144
+ publicKeyJwk: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
144
145
  publicKeyMultibase: zod_1.z.string().optional(),
145
146
  });
146
147
  const service = zod_1.z.object({
@@ -148,10 +149,21 @@ const service = zod_1.z.object({
148
149
  type: zod_1.z.string(),
149
150
  serviceEndpoint: zod_1.z.union([zod_1.z.string(), zod_1.z.record(zod_1.z.unknown())]),
150
151
  });
152
+ /**
153
+ * @deprecated Use `DidDocument` from `@atproto/did` instead as it applies
154
+ * stricter (and more spec-compliant) validation.
155
+ */
151
156
  exports.didDocument = zod_1.z.object({
157
+ '@context': zod_1.z
158
+ .union([
159
+ zod_1.z.literal('https://www.w3.org/ns/did/v1'),
160
+ zod_1.z.array(zod_1.z.string().url()),
161
+ ])
162
+ .optional(),
152
163
  id: zod_1.z.string(),
153
164
  alsoKnownAs: zod_1.z.array(zod_1.z.string()).optional(),
154
165
  verificationMethod: zod_1.z.array(verificationMethod).optional(),
166
+ authentication: zod_1.z.array(zod_1.z.union([zod_1.z.string(), verificationMethod])).optional(),
155
167
  service: zod_1.z.array(service).optional(),
156
168
  });
157
169
  //# sourceMappingURL=did-doc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"did-doc.js","sourceRoot":"","sources":["../src/did-doc.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\n\n// Parsing atproto data\n// --------\n\nexport const isValidDidDoc = (doc: unknown): doc is DidDocument => {\n return didDocument.safeParse(doc).success\n}\n\nexport const getDid = (doc: DidDocument): string => {\n const id = doc.id\n if (typeof id !== 'string') {\n throw new Error('No `id` on document')\n }\n return id\n}\n\nexport const getHandle = (doc: DidDocument): string | undefined => {\n const aka = doc.alsoKnownAs\n if (aka) {\n for (let i = 0; i < aka.length; i++) {\n const alias = aka[i]\n if (alias.startsWith('at://')) {\n // strip off \"at://\" prefix\n return alias.slice(5)\n }\n }\n }\n return undefined\n}\n\n// @NOTE we parse to type/publicKeyMultibase to avoid the dependency on @atproto/crypto\nexport const getSigningKey = (\n doc: DidDocument,\n): { type: string; publicKeyMultibase: string } | undefined => {\n return getVerificationMaterial(doc, 'atproto')\n}\n\nexport const getVerificationMaterial = (\n doc: DidDocument,\n keyId: string,\n): { type: string; publicKeyMultibase: string } | undefined => {\n // /!\\ Hot path\n\n const key = findItemById(doc, 'verificationMethod', `#${keyId}`)\n if (!key) {\n return undefined\n }\n\n if (!key.publicKeyMultibase) {\n return undefined\n }\n\n return {\n type: key.type,\n publicKeyMultibase: key.publicKeyMultibase,\n }\n}\n\nexport const getSigningDidKey = (doc: DidDocument): string | undefined => {\n const parsed = getSigningKey(doc)\n if (!parsed) return\n return `did:key:${parsed.publicKeyMultibase}`\n}\n\nexport const getPdsEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#atproto_pds',\n type: 'AtprotoPersonalDataServer',\n })\n}\n\nexport const getFeedGenEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#bsky_fg',\n type: 'BskyFeedGenerator',\n })\n}\n\nexport const getNotifEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#bsky_notif',\n type: 'BskyNotificationService',\n })\n}\n\nexport const getServiceEndpoint = (\n doc: DidDocument,\n opts: { id: string; type?: string },\n) => {\n // /!\\ Hot path\n\n const service = findItemById(doc, 'service', opts.id)\n if (!service) {\n return undefined\n }\n\n if (opts.type && service.type !== opts.type) {\n return undefined\n }\n\n if (typeof service.serviceEndpoint !== 'string') {\n return undefined\n }\n\n return validateUrl(service.serviceEndpoint)\n}\n\nfunction findItemById<\n D extends DidDocument,\n T extends 'verificationMethod' | 'service',\n>(doc: D, type: T, id: string): NonNullable<D[T]>[number] | undefined\nfunction findItemById(\n doc: DidDocument,\n type: 'verificationMethod' | 'service',\n id: string,\n) {\n // /!\\ Hot path\n\n const items = doc[type]\n if (items) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const itemId = item.id\n\n if (\n itemId[0] === '#'\n ? itemId === id\n : // Optimized version of: itemId === `${doc.id}${id}`\n itemId.length === doc.id.length + id.length &&\n itemId[doc.id.length] === '#' &&\n itemId.endsWith(id) &&\n itemId.startsWith(doc.id) // <== We could probably skip this check\n ) {\n return item\n }\n }\n }\n return undefined\n}\n\n// Check protocol and hostname to prevent potential SSRF\nconst validateUrl = (urlStr: string): string | undefined => {\n if (!urlStr.startsWith('http://') && !urlStr.startsWith('https://')) {\n return undefined\n }\n\n if (!canParseUrl(urlStr)) {\n return undefined\n }\n\n return urlStr\n}\n\nconst canParseUrl =\n URL.canParse ??\n // URL.canParse is not available in Node.js < 18.17.0\n ((urlStr: string): boolean => {\n try {\n new URL(urlStr)\n return true\n } catch {\n return false\n }\n })\n\n// Types\n// --------\n\nconst verificationMethod = z.object({\n id: z.string(),\n type: z.string(),\n controller: z.string(),\n publicKeyMultibase: z.string().optional(),\n})\n\nconst service = z.object({\n id: z.string(),\n type: z.string(),\n serviceEndpoint: z.union([z.string(), z.record(z.unknown())]),\n})\n\nexport const didDocument = z.object({\n id: z.string(),\n alsoKnownAs: z.array(z.string()).optional(),\n verificationMethod: z.array(verificationMethod).optional(),\n service: z.array(service).optional(),\n})\n\nexport type DidDocument = z.infer<typeof didDocument>\n"]}
1
+ {"version":3,"file":"did-doc.js","sourceRoot":"","sources":["../src/did-doc.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\n\n// Parsing atproto data\n// --------\n\nexport const isValidDidDoc = (doc: unknown): doc is DidDocument => {\n return didDocument.safeParse(doc).success\n}\n\nexport const getDid = (doc: DidDocument): string => {\n const id = doc.id\n if (typeof id !== 'string') {\n throw new Error('No `id` on document')\n }\n return id\n}\n\nexport const getHandle = (doc: DidDocument): string | undefined => {\n const aka = doc.alsoKnownAs\n if (aka) {\n for (let i = 0; i < aka.length; i++) {\n const alias = aka[i]\n if (alias.startsWith('at://')) {\n // strip off \"at://\" prefix\n return alias.slice(5)\n }\n }\n }\n return undefined\n}\n\n// @NOTE we parse to type/publicKeyMultibase to avoid the dependency on @atproto/crypto\nexport const getSigningKey = (\n doc: DidDocument,\n): { type: string; publicKeyMultibase: string } | undefined => {\n return getVerificationMaterial(doc, 'atproto')\n}\n\nexport const getVerificationMaterial = (\n doc: DidDocument,\n keyId: string,\n): { type: string; publicKeyMultibase: string } | undefined => {\n // /!\\ Hot path\n\n const key = findItemById(doc, 'verificationMethod', `#${keyId}`)\n if (!key) {\n return undefined\n }\n\n if (!key.publicKeyMultibase) {\n return undefined\n }\n\n return {\n type: key.type,\n publicKeyMultibase: key.publicKeyMultibase,\n }\n}\n\nexport const getSigningDidKey = (doc: DidDocument): string | undefined => {\n const parsed = getSigningKey(doc)\n if (!parsed) return\n return `did:key:${parsed.publicKeyMultibase}`\n}\n\nexport const getPdsEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#atproto_pds',\n type: 'AtprotoPersonalDataServer',\n })\n}\n\nexport const getFeedGenEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#bsky_fg',\n type: 'BskyFeedGenerator',\n })\n}\n\nexport const getNotifEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#bsky_notif',\n type: 'BskyNotificationService',\n })\n}\n\nexport const getServiceEndpoint = (\n doc: DidDocument,\n opts: { id: string; type?: string },\n) => {\n // /!\\ Hot path\n\n const service = findItemById(doc, 'service', opts.id)\n if (!service) {\n return undefined\n }\n\n if (opts.type && service.type !== opts.type) {\n return undefined\n }\n\n if (typeof service.serviceEndpoint !== 'string') {\n return undefined\n }\n\n return validateUrl(service.serviceEndpoint)\n}\n\nfunction findItemById<\n D extends DidDocument,\n T extends 'verificationMethod' | 'service',\n>(doc: D, type: T, id: string): NonNullable<D[T]>[number] | undefined\nfunction findItemById(\n doc: DidDocument,\n type: 'verificationMethod' | 'service',\n id: string,\n) {\n // /!\\ Hot path\n\n const items = doc[type]\n if (items) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const itemId = item.id\n\n if (\n itemId[0] === '#'\n ? itemId === id\n : // Optimized version of: itemId === `${doc.id}${id}`\n itemId.length === doc.id.length + id.length &&\n itemId[doc.id.length] === '#' &&\n itemId.endsWith(id) &&\n itemId.startsWith(doc.id) // <== We could probably skip this check\n ) {\n return item\n }\n }\n }\n return undefined\n}\n\n// Check protocol and hostname to prevent potential SSRF\nconst validateUrl = (urlStr: string): string | undefined => {\n if (!urlStr.startsWith('http://') && !urlStr.startsWith('https://')) {\n return undefined\n }\n\n if (!canParseUrl(urlStr)) {\n return undefined\n }\n\n return urlStr\n}\n\nconst canParseUrl =\n URL.canParse ??\n // URL.canParse is not available in Node.js < 18.17.0\n ((urlStr: string): boolean => {\n try {\n new URL(urlStr)\n return true\n } catch {\n return false\n }\n })\n\n// Types\n// --------\n\nconst verificationMethod = z.object({\n id: z.string(),\n type: z.string(),\n controller: z.string(),\n publicKeyJwk: z.record(z.string(), z.unknown()).optional(),\n publicKeyMultibase: z.string().optional(),\n})\n\nconst service = z.object({\n id: z.string(),\n type: z.string(),\n serviceEndpoint: z.union([z.string(), z.record(z.unknown())]),\n})\n\n/**\n * @deprecated Use `DidDocument` from `@atproto/did` instead as it applies\n * stricter (and more spec-compliant) validation.\n */\nexport const didDocument = z.object({\n '@context': z\n .union([\n z.literal('https://www.w3.org/ns/did/v1'),\n z.array(z.string().url()),\n ])\n .optional(),\n id: z.string(),\n alsoKnownAs: z.array(z.string()).optional(),\n verificationMethod: z.array(verificationMethod).optional(),\n authentication: z.array(z.union([z.string(), verificationMethod])).optional(),\n service: z.array(service).optional(),\n})\n\nexport type DidDocument = z.infer<typeof didDocument>\n"]}
package/dist/strings.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageTag, isLanguageString, parseLanguageString } from '@atproto/lex-data';
1
+ import { LanguageTag, isValidLanguage, parseLanguageString } from '@atproto/syntax';
2
2
  /**
3
3
  * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.
4
4
  */
@@ -15,14 +15,14 @@ export { utf8LenLegacy as utf8Len };
15
15
  type LanguageTagLegacy = LanguageTag;
16
16
  export type { LanguageTagLegacy as LanguageTag };
17
17
  /**
18
- * @deprecated Use {@link parseLanguageString} from `@atproto/lex-data` instead.
18
+ * @deprecated Use {@link parseLanguageString} from `@atproto/syntax` instead.
19
19
  */
20
- export declare const parseLanguageLegacy: typeof parseLanguageString;
20
+ declare const parseLanguageLegacy: typeof parseLanguageString;
21
21
  export { parseLanguageLegacy as parseLanguage };
22
22
  /**
23
- * @deprecated Use {@link isLanguageString} from `@atproto/lex-data` instead.
23
+ * @deprecated Use {@link isLanguageString} from `@atproto/syntax` instead.
24
24
  */
25
- export declare const validateLanguage: typeof isLanguageString;
25
+ export declare const validateLanguage: typeof isValidLanguage;
26
26
  /**
27
27
  * @deprecated Use {@link toBase64} from `@atproto/lex-data` instead.
28
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAGX,gBAAgB,EAChB,mBAAmB,EAGpB,MAAM,mBAAmB,CAAA;AAE1B;;GAEG;AACH,QAAA,MAAM,iBAAiB,yBAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA;AAE3C;;GAEG;AACH,QAAA,MAAM,aAAa,4BAAU,CAAA;AAC7B,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC;;GAEG;AACH,KAAK,iBAAiB,GAAG,WAAW,CAAA;AACpC,YAAY,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,mBAAmB,4BAAsB,CAAA;AACtD,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,yBAAmB,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAE3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAE1C,CAAA"}
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,eAAe,EACf,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AAExB;;GAEG;AACH,QAAA,MAAM,iBAAiB,yBAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA;AAE3C;;GAEG;AACH,QAAA,MAAM,aAAa,4BAAU,CAAA;AAC7B,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC;;GAEG;AACH,KAAK,iBAAiB,GAAG,WAAW,CAAA;AACpC,YAAY,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA;AAEhD;;GAEG;AACH,QAAA,MAAM,mBAAmB,4BAAsB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,wBAAkB,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAE3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAE1C,CAAA"}
package/dist/strings.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.b64UrlToUtf8 = exports.utf8ToB64Url = exports.validateLanguage = exports.parseLanguage = exports.parseLanguageLegacy = exports.utf8Len = exports.graphemeLen = void 0;
3
+ exports.b64UrlToUtf8 = exports.utf8ToB64Url = exports.validateLanguage = exports.parseLanguage = exports.utf8Len = exports.graphemeLen = void 0;
4
4
  const lex_data_1 = require("@atproto/lex-data");
5
+ const syntax_1 = require("@atproto/syntax");
5
6
  /**
6
7
  * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.
7
8
  */
@@ -13,14 +14,14 @@ exports.graphemeLen = graphemeLenLegacy;
13
14
  const utf8LenLegacy = lex_data_1.utf8Len;
14
15
  exports.utf8Len = utf8LenLegacy;
15
16
  /**
16
- * @deprecated Use {@link parseLanguageString} from `@atproto/lex-data` instead.
17
+ * @deprecated Use {@link parseLanguageString} from `@atproto/syntax` instead.
17
18
  */
18
- exports.parseLanguageLegacy = lex_data_1.parseLanguageString;
19
- exports.parseLanguage = exports.parseLanguageLegacy;
19
+ const parseLanguageLegacy = syntax_1.parseLanguageString;
20
+ exports.parseLanguage = parseLanguageLegacy;
20
21
  /**
21
- * @deprecated Use {@link isLanguageString} from `@atproto/lex-data` instead.
22
+ * @deprecated Use {@link isLanguageString} from `@atproto/syntax` instead.
22
23
  */
23
- exports.validateLanguage = lex_data_1.isLanguageString;
24
+ exports.validateLanguage = syntax_1.isValidLanguage;
24
25
  /**
25
26
  * @deprecated Use {@link toBase64} from `@atproto/lex-data` instead.
26
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";;;AAAA,gDAQ0B;AAE1B;;GAEG;AACH,MAAM,iBAAiB,GAAG,sBAAW,CAAA;AACP,wCAAW;AAEzC;;GAEG;AACH,MAAM,aAAa,GAAG,kBAAO,CAAA;AACH,gCAAO;AAQjC;;GAEG;AACU,QAAA,mBAAmB,GAAG,8BAAmB,CAAA;AACtB,wBADnB,2BAAmB,CACa;AAE7C;;GAEG;AACU,QAAA,gBAAgB,GAAG,2BAAgB,CAAA;AAEhD;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,OAAO,IAAA,mBAAQ,EAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAA;AAC9D,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAED;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAA,qBAAU,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB","sourcesContent":["import {\n LanguageTag,\n fromBase64,\n graphemeLen,\n isLanguageString,\n parseLanguageString,\n toBase64,\n utf8Len,\n} from '@atproto/lex-data'\n\n/**\n * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.\n */\nconst graphemeLenLegacy = graphemeLen\nexport { graphemeLenLegacy as graphemeLen }\n\n/**\n * @deprecated Use {@link utf8Len} from `@atproto/lex-data` instead.\n */\nconst utf8LenLegacy = utf8Len\nexport { utf8LenLegacy as utf8Len }\n\n/**\n * @deprecated Use {@link LanguageTag} from `@atproto/lex-data` instead.\n */\ntype LanguageTagLegacy = LanguageTag\nexport type { LanguageTagLegacy as LanguageTag }\n\n/**\n * @deprecated Use {@link parseLanguageString} from `@atproto/lex-data` instead.\n */\nexport const parseLanguageLegacy = parseLanguageString\nexport { parseLanguageLegacy as parseLanguage }\n\n/**\n * @deprecated Use {@link isLanguageString} from `@atproto/lex-data` instead.\n */\nexport const validateLanguage = isLanguageString\n\n/**\n * @deprecated Use {@link toBase64} from `@atproto/lex-data` instead.\n */\nexport const utf8ToB64Url = (utf8: string): string => {\n return toBase64(new TextEncoder().encode(utf8), 'base64url')\n}\n\n/**\n * @deprecated Use {@link fromBase64} from `@atproto/lex-data` instead.\n */\nexport const b64UrlToUtf8 = (b64: string): string => {\n return new TextDecoder().decode(fromBase64(b64, 'base64url'))\n}\n"]}
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";;;AAAA,gDAA8E;AAC9E,4CAIwB;AAExB;;GAEG;AACH,MAAM,iBAAiB,GAAG,sBAAW,CAAA;AACP,wCAAW;AAEzC;;GAEG;AACH,MAAM,aAAa,GAAG,kBAAO,CAAA;AACH,gCAAO;AAQjC;;GAEG;AACH,MAAM,mBAAmB,GAAG,4BAAmB,CAAA;AACf,4CAAa;AAE7C;;GAEG;AACU,QAAA,gBAAgB,GAAG,wBAAe,CAAA;AAE/C;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,OAAO,IAAA,mBAAQ,EAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAA;AAC9D,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAED;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAA,qBAAU,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB","sourcesContent":["import { fromBase64, graphemeLen, toBase64, utf8Len } from '@atproto/lex-data'\nimport {\n LanguageTag,\n isValidLanguage,\n parseLanguageString,\n} from '@atproto/syntax'\n\n/**\n * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.\n */\nconst graphemeLenLegacy = graphemeLen\nexport { graphemeLenLegacy as graphemeLen }\n\n/**\n * @deprecated Use {@link utf8Len} from `@atproto/lex-data` instead.\n */\nconst utf8LenLegacy = utf8Len\nexport { utf8LenLegacy as utf8Len }\n\n/**\n * @deprecated Use {@link LanguageTag} from `@atproto/lex-data` instead.\n */\ntype LanguageTagLegacy = LanguageTag\nexport type { LanguageTagLegacy as LanguageTag }\n\n/**\n * @deprecated Use {@link parseLanguageString} from `@atproto/syntax` instead.\n */\nconst parseLanguageLegacy = parseLanguageString\nexport { parseLanguageLegacy as parseLanguage }\n\n/**\n * @deprecated Use {@link isLanguageString} from `@atproto/syntax` instead.\n */\nexport const validateLanguage = isValidLanguage\n\n/**\n * @deprecated Use {@link toBase64} from `@atproto/lex-data` instead.\n */\nexport const utf8ToB64Url = (utf8: string): string => {\n return toBase64(new TextEncoder().encode(utf8), 'base64url')\n}\n\n/**\n * @deprecated Use {@link fromBase64} from `@atproto/lex-data` instead.\n */\nexport const b64UrlToUtf8 = (b64: string): string => {\n return new TextDecoder().decode(fromBase64(b64, 'base64url'))\n}\n"]}
package/dist/util.js CHANGED
@@ -4,11 +4,11 @@ exports.parseIntWithFallback = exports.dedupeStrs = exports.range = exports.chun
4
4
  exports.aggregateErrors = aggregateErrors;
5
5
  exports.omit = omit;
6
6
  const noUndefinedVals = (obj) => {
7
- Object.keys(obj).forEach((k) => {
7
+ for (const k of Object.keys(obj)) {
8
8
  if (obj[k] === undefined) {
9
9
  delete obj[k];
10
10
  }
11
- });
11
+ }
12
12
  return obj;
13
13
  };
14
14
  exports.noUndefinedVals = noUndefinedVals;
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAWA,0CAcC;AAoBD,oBAiBC;AA9DM,MAAM,eAAe,GAAG,CAC7B,GAAkC,EACf,EAAE;IACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,GAAwB,CAAA;AACjC,CAAC,CAAA;AATY,QAAA,eAAe,mBAS3B;AAED,SAAgB,eAAe,CAC7B,MAAiB,EACjB,OAAgB;IAEhB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK;YAC/B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC3E,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,cAAc,CACvB,MAAM,EACN,OAAO,IAAI,oBAAoB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAe;IACrC,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAaD,SAAgB,IAAI,CAClB,GAA+C,EAC/C,YAA+B;IAE/B,WAAW;IAEX,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAA;IAEpB,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAEM,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAA;AACtD,CAAC,CAAA;AAFY,QAAA,MAAM,UAElB;AAEM,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA;AAFY,QAAA,IAAI,QAEhB;AAOM,MAAM,YAAY,GAAG,CAAC,EAAU,EAAgB,EAAE;IACvD,IAAI,IAAI,CAAA;IACR,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QACnC,IAAI,GAAG,GAAG,EAAE;YACV,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,GAAG,EAAE,CAAA;QACP,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;AAC1C,CAAC,CAAA;AAVY,QAAA,YAAY,gBAUxB;AAEM,MAAM,kBAAkB,GAAG,CAAC,IAAkB,EAAc,EAAE;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IACzB,CAAC,EAAE,CAAC,CAAC,CAAA;IACL,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IACxC,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC1B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAXY,QAAA,kBAAkB,sBAW9B;AAEM,MAAM,cAAc,GAAG,KAAK,EACjC,MAAiC,EACZ,EAAE;IACvB,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAA;AACnC,CAAC,CAAA;AARY,QAAA,cAAc,kBAQ1B;AAED,MAAM,QAAQ,GAAG,kCAAkC,CAAA;AAE5C,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QAChB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QACtB,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AARY,QAAA,SAAS,aAQrB;AAEM,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AANY,QAAA,SAAS,aAMrB;AAEM,MAAM,WAAW,GAAG,KAAK,EAC9B,GAAQ,EACR,EAA8B,EAC9B,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC,CAAA;AANY,QAAA,WAAW,eAMvB;AAEM,MAAM,gBAAgB,GAAG,CAC9B,GAAY,EACkB,EAAE;IAChC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B;AAEM,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,GAAW,EAAW,EAAE;IAC9D,OAAO,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAA;AACnE,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB;AAEM,MAAM,UAAU,GAAG,CAAI,GAAQ,EAAE,SAAiB,EAAS,EAAE;IAClE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;QACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAW,CAAC,CAAA;AACjB,CAAC,CAAA;AATY,QAAA,UAAU,cAStB;AAEM,MAAM,KAAK,GAAG,CAAC,GAAW,EAAY,EAAE;IAC7C,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AANY,QAAA,KAAK,SAMjB;AAEM,MAAM,UAAU,GAAG,CAAC,IAAc,EAAY,EAAE;IACrD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3B,CAAC,CAAA;AAFY,QAAA,UAAU,cAEtB;AAEM,MAAM,oBAAoB,GAAG,CAClC,KAAyB,EACzB,QAAW,EACC,EAAE;IACd,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACxC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;AAC1C,CAAC,CAAA;AANY,QAAA,oBAAoB,wBAMhC","sourcesContent":["export const noUndefinedVals = <T>(\n obj: Record<string, T | undefined>,\n): Record<string, T> => {\n Object.keys(obj).forEach((k) => {\n if (obj[k] === undefined) {\n delete obj[k]\n }\n })\n return obj as Record<string, T>\n}\n\nexport function aggregateErrors(\n errors: unknown[],\n message?: string,\n): Error | AggregateError {\n if (errors.length === 1) {\n return errors[0] instanceof Error\n ? errors[0]\n : new Error(message ?? stringifyError(errors[0]), { cause: errors[0] })\n } else {\n return new AggregateError(\n errors,\n message ?? `Multiple errors: ${errors.map(stringifyError).join('\\n')}`,\n )\n }\n}\n\nfunction stringifyError(reason: unknown): string {\n if (reason instanceof Error) {\n return reason.message\n }\n return String(reason)\n}\n\n/**\n * Returns a shallow copy of the object without the specified keys. If the input\n * is nullish, it returns the input.\n */\nexport function omit<\n T extends undefined | null | Record<string, unknown>,\n K extends keyof NonNullable<T>,\n>(\n object: T,\n rejectedKeys: readonly K[],\n): T extends undefined ? undefined : T extends null ? null : Omit<T, K>\nexport function omit(\n src: undefined | null | Record<string, unknown>,\n rejectedKeys: readonly string[],\n): undefined | null | Record<string, unknown> {\n // Hot path\n\n if (!src) return src\n\n const dst = {}\n const srcKeys = Object.keys(src)\n for (let i = 0; i < srcKeys.length; i++) {\n const key = srcKeys[i]\n if (!rejectedKeys.includes(key)) {\n dst[key] = src[key]\n }\n }\n return dst\n}\n\nexport const jitter = (maxMs: number) => {\n return Math.round((Math.random() - 0.5) * maxMs * 2)\n}\n\nexport const wait = (ms: number) => {\n return new Promise((res) => setTimeout(res, ms))\n}\n\nexport type BailableWait = {\n bail: () => void\n wait: () => Promise<void>\n}\n\nexport const bailableWait = (ms: number): BailableWait => {\n let bail\n const waitPromise = new Promise<void>((res) => {\n const timeout = setTimeout(res, ms)\n bail = () => {\n clearTimeout(timeout)\n res()\n }\n })\n return { bail, wait: () => waitPromise }\n}\n\nexport const flattenUint8Arrays = (arrs: Uint8Array[]): Uint8Array => {\n const length = arrs.reduce((acc, cur) => {\n return acc + cur.length\n }, 0)\n const flattened = new Uint8Array(length)\n let offset = 0\n arrs.forEach((arr) => {\n flattened.set(arr, offset)\n offset += arr.length\n })\n return flattened\n}\n\nexport const streamToBuffer = async (\n stream: AsyncIterable<Uint8Array>,\n): Promise<Uint8Array> => {\n const arrays: Uint8Array[] = []\n for await (const chunk of stream) {\n arrays.push(chunk)\n }\n return flattenUint8Arrays(arrays)\n}\n\nconst S32_CHAR = '234567abcdefghijklmnopqrstuvwxyz'\n\nexport const s32encode = (i: number): string => {\n let s = ''\n while (i) {\n const c = i % 32\n i = Math.floor(i / 32)\n s = S32_CHAR.charAt(c) + s\n }\n return s\n}\n\nexport const s32decode = (s: string): number => {\n let i = 0\n for (const c of s) {\n i = i * 32 + S32_CHAR.indexOf(c)\n }\n return i\n}\n\nexport const asyncFilter = async <T>(\n arr: T[],\n fn: (t: T) => Promise<boolean>,\n) => {\n const results = await Promise.all(arr.map((t) => fn(t)))\n return arr.filter((_, i) => results[i])\n}\n\nexport const isErrnoException = (\n err: unknown,\n): err is NodeJS.ErrnoException => {\n return !!err && err['code']\n}\n\nexport const errHasMsg = (err: unknown, msg: string): boolean => {\n return !!err && typeof err === 'object' && err['message'] === msg\n}\n\nexport const chunkArray = <T>(arr: T[], chunkSize: number): T[][] => {\n return arr.reduce((acc, cur, i) => {\n const chunkI = Math.floor(i / chunkSize)\n if (!acc[chunkI]) {\n acc[chunkI] = []\n }\n acc[chunkI].push(cur)\n return acc\n }, [] as T[][])\n}\n\nexport const range = (num: number): number[] => {\n const nums: number[] = []\n for (let i = 0; i < num; i++) {\n nums.push(i)\n }\n return nums\n}\n\nexport const dedupeStrs = (strs: string[]): string[] => {\n return [...new Set(strs)]\n}\n\nexport const parseIntWithFallback = <T>(\n value: string | undefined,\n fallback: T,\n): number | T => {\n const parsed = parseInt(value || '', 10)\n return isNaN(parsed) ? fallback : parsed\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["export const noUndefinedVals = <T>(\n obj: Record<string, T | undefined>,\n): Record<string, T> => {\n for (const k of Object.keys(obj)) {\n if (obj[k] === undefined) {\n delete obj[k]\n }\n }\n return obj as Record<string, T>\n}\n\nexport function aggregateErrors(\n errors: unknown[],\n message?: string,\n): Error | AggregateError {\n if (errors.length === 1) {\n return errors[0] instanceof Error\n ? errors[0]\n : new Error(message ?? stringifyError(errors[0]), { cause: errors[0] })\n } else {\n return new AggregateError(\n errors,\n message ?? `Multiple errors: ${errors.map(stringifyError).join('\\n')}`,\n )\n }\n}\n\nfunction stringifyError(reason: unknown): string {\n if (reason instanceof Error) {\n return reason.message\n }\n return String(reason)\n}\n\n/**\n * Returns a shallow copy of the object without the specified keys. If the input\n * is nullish, it returns the input.\n */\nexport function omit<\n T extends undefined | null | Record<string, unknown>,\n K extends keyof NonNullable<T>,\n>(\n object: T,\n rejectedKeys: readonly K[],\n): T extends undefined ? undefined : T extends null ? null : Omit<T, K>\nexport function omit(\n src: undefined | null | Record<string, unknown>,\n rejectedKeys: readonly string[],\n): undefined | null | Record<string, unknown> {\n // Hot path\n\n if (!src) return src\n\n const dst = {}\n const srcKeys = Object.keys(src)\n for (let i = 0; i < srcKeys.length; i++) {\n const key = srcKeys[i]\n if (!rejectedKeys.includes(key)) {\n dst[key] = src[key]\n }\n }\n return dst\n}\n\nexport const jitter = (maxMs: number) => {\n return Math.round((Math.random() - 0.5) * maxMs * 2)\n}\n\nexport const wait = (ms: number) => {\n return new Promise((res) => setTimeout(res, ms))\n}\n\nexport type BailableWait = {\n bail: () => void\n wait: () => Promise<void>\n}\n\nexport const bailableWait = (ms: number): BailableWait => {\n let bail\n const waitPromise = new Promise<void>((res) => {\n const timeout = setTimeout(res, ms)\n bail = () => {\n clearTimeout(timeout)\n res()\n }\n })\n return { bail, wait: () => waitPromise }\n}\n\nexport const flattenUint8Arrays = (arrs: Uint8Array[]): Uint8Array => {\n const length = arrs.reduce((acc, cur) => {\n return acc + cur.length\n }, 0)\n const flattened = new Uint8Array(length)\n let offset = 0\n arrs.forEach((arr) => {\n flattened.set(arr, offset)\n offset += arr.length\n })\n return flattened\n}\n\nexport const streamToBuffer = async (\n stream: AsyncIterable<Uint8Array>,\n): Promise<Uint8Array> => {\n const arrays: Uint8Array[] = []\n for await (const chunk of stream) {\n arrays.push(chunk)\n }\n return flattenUint8Arrays(arrays)\n}\n\nconst S32_CHAR = '234567abcdefghijklmnopqrstuvwxyz'\n\nexport const s32encode = (i: number): string => {\n let s = ''\n while (i) {\n const c = i % 32\n i = Math.floor(i / 32)\n s = S32_CHAR.charAt(c) + s\n }\n return s\n}\n\nexport const s32decode = (s: string): number => {\n let i = 0\n for (const c of s) {\n i = i * 32 + S32_CHAR.indexOf(c)\n }\n return i\n}\n\nexport const asyncFilter = async <T>(\n arr: T[],\n fn: (t: T) => Promise<boolean>,\n) => {\n const results = await Promise.all(arr.map((t) => fn(t)))\n return arr.filter((_, i) => results[i])\n}\n\nexport const isErrnoException = (\n err: unknown,\n): err is NodeJS.ErrnoException => {\n return !!err && err['code']\n}\n\nexport const errHasMsg = (err: unknown, msg: string): boolean => {\n return !!err && typeof err === 'object' && err['message'] === msg\n}\n\nexport const chunkArray = <T>(arr: T[], chunkSize: number): T[][] => {\n return arr.reduce((acc, cur, i) => {\n const chunkI = Math.floor(i / chunkSize)\n if (!acc[chunkI]) {\n acc[chunkI] = []\n }\n acc[chunkI].push(cur)\n return acc\n }, [] as T[][])\n}\n\nexport const range = (num: number): number[] => {\n const nums: number[] = []\n for (let i = 0; i < num; i++) {\n nums.push(i)\n }\n return nums\n}\n\nexport const dedupeStrs = (strs: string[]): string[] => {\n return [...new Set(strs)]\n}\n\nexport const parseIntWithFallback = <T>(\n value: string | undefined,\n fallback: T,\n): number | T => {\n const parsed = parseInt(value || '', 10)\n return isNaN(parsed) ? fallback : parsed\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/common-web",
3
- "version": "0.4.12",
3
+ "version": "0.4.14",
4
4
  "license": "MIT",
5
5
  "description": "Shared web-platform-friendly code for atproto libraries",
6
6
  "keywords": [
@@ -16,8 +16,9 @@
16
16
  "types": "dist/index.d.ts",
17
17
  "dependencies": {
18
18
  "zod": "^3.23.8",
19
- "@atproto/lex-data": "0.0.8",
20
- "@atproto/lex-json": "0.0.8"
19
+ "@atproto/lex-data": "0.0.9",
20
+ "@atproto/lex-json": "0.0.9",
21
+ "@atproto/syntax": "0.4.3"
21
22
  },
22
23
  "devDependencies": {
23
24
  "jest": "^28.1.2",
package/src/did-doc.ts CHANGED
@@ -171,6 +171,7 @@ const verificationMethod = z.object({
171
171
  id: z.string(),
172
172
  type: z.string(),
173
173
  controller: z.string(),
174
+ publicKeyJwk: z.record(z.string(), z.unknown()).optional(),
174
175
  publicKeyMultibase: z.string().optional(),
175
176
  })
176
177
 
@@ -180,10 +181,21 @@ const service = z.object({
180
181
  serviceEndpoint: z.union([z.string(), z.record(z.unknown())]),
181
182
  })
182
183
 
184
+ /**
185
+ * @deprecated Use `DidDocument` from `@atproto/did` instead as it applies
186
+ * stricter (and more spec-compliant) validation.
187
+ */
183
188
  export const didDocument = z.object({
189
+ '@context': z
190
+ .union([
191
+ z.literal('https://www.w3.org/ns/did/v1'),
192
+ z.array(z.string().url()),
193
+ ])
194
+ .optional(),
184
195
  id: z.string(),
185
196
  alsoKnownAs: z.array(z.string()).optional(),
186
197
  verificationMethod: z.array(verificationMethod).optional(),
198
+ authentication: z.array(z.union([z.string(), verificationMethod])).optional(),
187
199
  service: z.array(service).optional(),
188
200
  })
189
201
 
package/src/strings.ts CHANGED
@@ -1,12 +1,9 @@
1
+ import { fromBase64, graphemeLen, toBase64, utf8Len } from '@atproto/lex-data'
1
2
  import {
2
3
  LanguageTag,
3
- fromBase64,
4
- graphemeLen,
5
- isLanguageString,
4
+ isValidLanguage,
6
5
  parseLanguageString,
7
- toBase64,
8
- utf8Len,
9
- } from '@atproto/lex-data'
6
+ } from '@atproto/syntax'
10
7
 
11
8
  /**
12
9
  * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.
@@ -27,15 +24,15 @@ type LanguageTagLegacy = LanguageTag
27
24
  export type { LanguageTagLegacy as LanguageTag }
28
25
 
29
26
  /**
30
- * @deprecated Use {@link parseLanguageString} from `@atproto/lex-data` instead.
27
+ * @deprecated Use {@link parseLanguageString} from `@atproto/syntax` instead.
31
28
  */
32
- export const parseLanguageLegacy = parseLanguageString
29
+ const parseLanguageLegacy = parseLanguageString
33
30
  export { parseLanguageLegacy as parseLanguage }
34
31
 
35
32
  /**
36
- * @deprecated Use {@link isLanguageString} from `@atproto/lex-data` instead.
33
+ * @deprecated Use {@link isLanguageString} from `@atproto/syntax` instead.
37
34
  */
38
- export const validateLanguage = isLanguageString
35
+ export const validateLanguage = isValidLanguage
39
36
 
40
37
  /**
41
38
  * @deprecated Use {@link toBase64} from `@atproto/lex-data` instead.
package/src/util.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  export const noUndefinedVals = <T>(
2
2
  obj: Record<string, T | undefined>,
3
3
  ): Record<string, T> => {
4
- Object.keys(obj).forEach((k) => {
4
+ for (const k of Object.keys(obj)) {
5
5
  if (obj[k] === undefined) {
6
6
  delete obj[k]
7
7
  }
8
- })
8
+ }
9
9
  return obj as Record<string, T>
10
10
  }
11
11