@atproto/common-web 0.2.1 → 0.2.3
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 +12 -0
- package/LICENSE.txt +7 -0
- package/README.md +6 -1
- package/dist/async.d.ts +1 -0
- package/dist/did-doc.d.ts +91 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +133 -0
- package/dist/index.js.map +3 -3
- package/package.json +1 -1
- package/src/async.ts +22 -0
- package/src/did-doc.ts +133 -0
- package/src/index.ts +1 -0
- package/LICENSE +0 -21
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atproto/common-web
|
|
2
2
|
|
|
3
|
+
## 0.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#1788](https://github.com/bluesky-social/atproto/pull/1788) [`84e2d4d2`](https://github.com/bluesky-social/atproto/commit/84e2d4d2b6694f344d80c18672c78b650189d423) Thanks [@bnewbold](https://github.com/bnewbold)! - update license to "MIT or Apache2"
|
|
8
|
+
|
|
9
|
+
## 0.2.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`35d108ce`](https://github.com/bluesky-social/atproto/commit/35d108ce94866ce1b3d147cd0620a0ba1c4ebcd7) Thanks [@devinivy](https://github.com/devinivy)! - Allow pds to serve did doc with credentials, API client to respect PDS listed in the did doc.
|
|
14
|
+
|
|
3
15
|
## 0.2.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Dual MIT/Apache-2.0 License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022-2023 Bluesky PBC, and Contributors
|
|
4
|
+
|
|
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
|
+
|
|
7
|
+
Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0.
|
package/README.md
CHANGED
|
@@ -7,4 +7,9 @@ Shared TypeScript code for other `@atproto/*` packages, which is web-friendly (r
|
|
|
7
7
|
|
|
8
8
|
## License
|
|
9
9
|
|
|
10
|
-
MIT
|
|
10
|
+
This project is dual-licensed under MIT and Apache 2.0 terms:
|
|
11
|
+
|
|
12
|
+
- MIT license ([LICENSE-MIT.txt](https://github.com/bluesky-social/atproto/blob/main/LICENSE-MIT.txt) or http://opensource.org/licenses/MIT)
|
|
13
|
+
- Apache License, Version 2.0, ([LICENSE-APACHE.txt](https://github.com/bluesky-social/atproto/blob/main/LICENSE-APACHE.txt) or http://www.apache.org/licenses/LICENSE-2.0)
|
|
14
|
+
|
|
15
|
+
Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0.
|
package/dist/async.d.ts
CHANGED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const isValidDidDoc: (doc: unknown) => doc is {
|
|
3
|
+
id: string;
|
|
4
|
+
alsoKnownAs?: string[] | undefined;
|
|
5
|
+
verificationMethod?: {
|
|
6
|
+
id: string;
|
|
7
|
+
type: string;
|
|
8
|
+
controller: string;
|
|
9
|
+
publicKeyMultibase?: string | undefined;
|
|
10
|
+
}[] | undefined;
|
|
11
|
+
service?: {
|
|
12
|
+
id: string;
|
|
13
|
+
type: string;
|
|
14
|
+
serviceEndpoint: (string | Record<string, unknown>) & (string | Record<string, unknown> | undefined);
|
|
15
|
+
}[] | undefined;
|
|
16
|
+
};
|
|
17
|
+
export declare const getDid: (doc: DidDocument) => string;
|
|
18
|
+
export declare const getHandle: (doc: DidDocument) => string | undefined;
|
|
19
|
+
export declare const getSigningKey: (doc: DidDocument) => {
|
|
20
|
+
type: string;
|
|
21
|
+
publicKeyMultibase: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
export declare const getPdsEndpoint: (doc: DidDocument) => string | undefined;
|
|
24
|
+
export declare const getFeedGenEndpoint: (doc: DidDocument) => string | undefined;
|
|
25
|
+
export declare const getNotifEndpoint: (doc: DidDocument) => string | undefined;
|
|
26
|
+
export declare const getServiceEndpoint: (doc: DidDocument, opts: {
|
|
27
|
+
id: string;
|
|
28
|
+
type: string;
|
|
29
|
+
}) => string | undefined;
|
|
30
|
+
export declare const didDocument: z.ZodObject<{
|
|
31
|
+
id: z.ZodString;
|
|
32
|
+
alsoKnownAs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
33
|
+
verificationMethod: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
34
|
+
id: z.ZodString;
|
|
35
|
+
type: z.ZodString;
|
|
36
|
+
controller: z.ZodString;
|
|
37
|
+
publicKeyMultibase: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
id: string;
|
|
40
|
+
type: string;
|
|
41
|
+
controller: string;
|
|
42
|
+
publicKeyMultibase?: string | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
id: string;
|
|
45
|
+
type: string;
|
|
46
|
+
controller: string;
|
|
47
|
+
publicKeyMultibase?: string | undefined;
|
|
48
|
+
}>, "many">>;
|
|
49
|
+
service: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
50
|
+
id: z.ZodString;
|
|
51
|
+
type: z.ZodString;
|
|
52
|
+
serviceEndpoint: z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
id: string;
|
|
55
|
+
type: string;
|
|
56
|
+
serviceEndpoint: (string | Record<string, unknown>) & (string | Record<string, unknown> | undefined);
|
|
57
|
+
}, {
|
|
58
|
+
id: string;
|
|
59
|
+
type: string;
|
|
60
|
+
serviceEndpoint: (string | Record<string, unknown>) & (string | Record<string, unknown> | undefined);
|
|
61
|
+
}>, "many">>;
|
|
62
|
+
}, "strip", z.ZodTypeAny, {
|
|
63
|
+
id: string;
|
|
64
|
+
alsoKnownAs?: string[] | undefined;
|
|
65
|
+
verificationMethod?: {
|
|
66
|
+
id: string;
|
|
67
|
+
type: string;
|
|
68
|
+
controller: string;
|
|
69
|
+
publicKeyMultibase?: string | undefined;
|
|
70
|
+
}[] | undefined;
|
|
71
|
+
service?: {
|
|
72
|
+
id: string;
|
|
73
|
+
type: string;
|
|
74
|
+
serviceEndpoint: (string | Record<string, unknown>) & (string | Record<string, unknown> | undefined);
|
|
75
|
+
}[] | undefined;
|
|
76
|
+
}, {
|
|
77
|
+
id: string;
|
|
78
|
+
alsoKnownAs?: string[] | undefined;
|
|
79
|
+
verificationMethod?: {
|
|
80
|
+
id: string;
|
|
81
|
+
type: string;
|
|
82
|
+
controller: string;
|
|
83
|
+
publicKeyMultibase?: string | undefined;
|
|
84
|
+
}[] | undefined;
|
|
85
|
+
service?: {
|
|
86
|
+
id: string;
|
|
87
|
+
type: string;
|
|
88
|
+
serviceEndpoint: (string | Record<string, unknown>) & (string | Record<string, unknown> | undefined);
|
|
89
|
+
}[] | undefined;
|
|
90
|
+
}>;
|
|
91
|
+
export declare type DidDocument = z.infer<typeof didDocument>;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -8837,12 +8837,22 @@ __export(src_exports2, {
|
|
|
8837
8837
|
createDeferrables: () => createDeferrables,
|
|
8838
8838
|
dedupeStrs: () => dedupeStrs,
|
|
8839
8839
|
def: () => def,
|
|
8840
|
+
didDocument: () => didDocument,
|
|
8840
8841
|
errHasMsg: () => errHasMsg,
|
|
8841
8842
|
flattenUint8Arrays: () => flattenUint8Arrays,
|
|
8843
|
+
getDid: () => getDid,
|
|
8844
|
+
getFeedGenEndpoint: () => getFeedGenEndpoint,
|
|
8845
|
+
getHandle: () => getHandle,
|
|
8846
|
+
getNotifEndpoint: () => getNotifEndpoint,
|
|
8847
|
+
getPdsEndpoint: () => getPdsEndpoint,
|
|
8848
|
+
getServiceEndpoint: () => getServiceEndpoint,
|
|
8849
|
+
getSigningKey: () => getSigningKey,
|
|
8842
8850
|
graphemeLen: () => graphemeLen,
|
|
8851
|
+
handleAllSettledErrors: () => handleAllSettledErrors,
|
|
8843
8852
|
ipldEquals: () => ipldEquals,
|
|
8844
8853
|
ipldToJson: () => ipldToJson,
|
|
8845
8854
|
isErrnoException: () => isErrnoException,
|
|
8855
|
+
isValidDidDoc: () => isValidDidDoc,
|
|
8846
8856
|
jitter: () => jitter,
|
|
8847
8857
|
jsonToIpld: () => jsonToIpld,
|
|
8848
8858
|
lessThanAgoMs: () => lessThanAgoMs,
|
|
@@ -9108,6 +9118,19 @@ var AsyncBufferFullError = class extends Error {
|
|
|
9108
9118
|
super(`ReachedMaxBufferSize: ${maxSize}`);
|
|
9109
9119
|
}
|
|
9110
9120
|
};
|
|
9121
|
+
var handleAllSettledErrors = (results) => {
|
|
9122
|
+
const errors = results.filter(isRejected).map((res) => res.reason);
|
|
9123
|
+
if (errors.length === 0) {
|
|
9124
|
+
return;
|
|
9125
|
+
}
|
|
9126
|
+
if (errors.length === 1) {
|
|
9127
|
+
throw errors[0];
|
|
9128
|
+
}
|
|
9129
|
+
throw new AggregateError(errors, "Multiple errors: " + errors.map((err) => err?.message).join("\n"));
|
|
9130
|
+
};
|
|
9131
|
+
var isRejected = (result) => {
|
|
9132
|
+
return result.status === "rejected";
|
|
9133
|
+
};
|
|
9111
9134
|
|
|
9112
9135
|
// src/tid.ts
|
|
9113
9136
|
var TID_LEN = 13;
|
|
@@ -14055,4 +14078,114 @@ var validateLanguage = (langTag) => {
|
|
|
14055
14078
|
return bcp47Regexp.test(langTag);
|
|
14056
14079
|
};
|
|
14057
14080
|
var 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})+))$/;
|
|
14081
|
+
|
|
14082
|
+
// src/did-doc.ts
|
|
14083
|
+
var isValidDidDoc = (doc) => {
|
|
14084
|
+
return didDocument.safeParse(doc).success;
|
|
14085
|
+
};
|
|
14086
|
+
var getDid = (doc) => {
|
|
14087
|
+
const id = doc.id;
|
|
14088
|
+
if (typeof id !== "string") {
|
|
14089
|
+
throw new Error("No `id` on document");
|
|
14090
|
+
}
|
|
14091
|
+
return id;
|
|
14092
|
+
};
|
|
14093
|
+
var getHandle = (doc) => {
|
|
14094
|
+
const aka = doc.alsoKnownAs;
|
|
14095
|
+
if (!aka)
|
|
14096
|
+
return void 0;
|
|
14097
|
+
const found = aka.find((name2) => name2.startsWith("at://"));
|
|
14098
|
+
if (!found)
|
|
14099
|
+
return void 0;
|
|
14100
|
+
return found.slice(5);
|
|
14101
|
+
};
|
|
14102
|
+
var getSigningKey = (doc) => {
|
|
14103
|
+
const did = getDid(doc);
|
|
14104
|
+
let keys = doc.verificationMethod;
|
|
14105
|
+
if (!keys)
|
|
14106
|
+
return void 0;
|
|
14107
|
+
if (typeof keys !== "object")
|
|
14108
|
+
return void 0;
|
|
14109
|
+
if (!Array.isArray(keys)) {
|
|
14110
|
+
keys = [keys];
|
|
14111
|
+
}
|
|
14112
|
+
const found = keys.find((key) => key.id === "#atproto" || key.id === `${did}#atproto`);
|
|
14113
|
+
if (!found?.publicKeyMultibase)
|
|
14114
|
+
return void 0;
|
|
14115
|
+
return {
|
|
14116
|
+
type: found.type,
|
|
14117
|
+
publicKeyMultibase: found.publicKeyMultibase
|
|
14118
|
+
};
|
|
14119
|
+
};
|
|
14120
|
+
var getPdsEndpoint = (doc) => {
|
|
14121
|
+
return getServiceEndpoint(doc, {
|
|
14122
|
+
id: "#atproto_pds",
|
|
14123
|
+
type: "AtprotoPersonalDataServer"
|
|
14124
|
+
});
|
|
14125
|
+
};
|
|
14126
|
+
var getFeedGenEndpoint = (doc) => {
|
|
14127
|
+
return getServiceEndpoint(doc, {
|
|
14128
|
+
id: "#bsky_fg",
|
|
14129
|
+
type: "BskyFeedGenerator"
|
|
14130
|
+
});
|
|
14131
|
+
};
|
|
14132
|
+
var getNotifEndpoint = (doc) => {
|
|
14133
|
+
return getServiceEndpoint(doc, {
|
|
14134
|
+
id: "#bsky_notif",
|
|
14135
|
+
type: "BskyNotificationService"
|
|
14136
|
+
});
|
|
14137
|
+
};
|
|
14138
|
+
var getServiceEndpoint = (doc, opts) => {
|
|
14139
|
+
const did = getDid(doc);
|
|
14140
|
+
let services = doc.service;
|
|
14141
|
+
if (!services)
|
|
14142
|
+
return void 0;
|
|
14143
|
+
if (typeof services !== "object")
|
|
14144
|
+
return void 0;
|
|
14145
|
+
if (!Array.isArray(services)) {
|
|
14146
|
+
services = [services];
|
|
14147
|
+
}
|
|
14148
|
+
const found = services.find((service2) => service2.id === opts.id || service2.id === `${did}${opts.id}`);
|
|
14149
|
+
if (!found)
|
|
14150
|
+
return void 0;
|
|
14151
|
+
if (found.type !== opts.type) {
|
|
14152
|
+
return void 0;
|
|
14153
|
+
}
|
|
14154
|
+
if (typeof found.serviceEndpoint !== "string") {
|
|
14155
|
+
return void 0;
|
|
14156
|
+
}
|
|
14157
|
+
return validateUrl(found.serviceEndpoint);
|
|
14158
|
+
};
|
|
14159
|
+
var validateUrl = (urlStr) => {
|
|
14160
|
+
let url;
|
|
14161
|
+
try {
|
|
14162
|
+
url = new URL(urlStr);
|
|
14163
|
+
} catch {
|
|
14164
|
+
return void 0;
|
|
14165
|
+
}
|
|
14166
|
+
if (!["http:", "https:"].includes(url.protocol)) {
|
|
14167
|
+
return void 0;
|
|
14168
|
+
} else if (!url.hostname) {
|
|
14169
|
+
return void 0;
|
|
14170
|
+
} else {
|
|
14171
|
+
return urlStr;
|
|
14172
|
+
}
|
|
14173
|
+
};
|
|
14174
|
+
var verificationMethod = z.object({
|
|
14175
|
+
id: z.string(),
|
|
14176
|
+
type: z.string(),
|
|
14177
|
+
controller: z.string(),
|
|
14178
|
+
publicKeyMultibase: z.string().optional()
|
|
14179
|
+
});
|
|
14180
|
+
var service = z.object({
|
|
14181
|
+
id: z.string(),
|
|
14182
|
+
type: z.string(),
|
|
14183
|
+
serviceEndpoint: z.union([z.string(), z.record(z.unknown())])
|
|
14184
|
+
});
|
|
14185
|
+
var didDocument = z.object({
|
|
14186
|
+
id: z.string(),
|
|
14187
|
+
alsoKnownAs: z.array(z.string()).optional(),
|
|
14188
|
+
verificationMethod: z.array(verificationMethod).optional(),
|
|
14189
|
+
service: z.array(service).optional()
|
|
14190
|
+
});
|
|
14058
14191
|
//# sourceMappingURL=index.js.map
|