kitty-agent 1.1.3 → 2.0.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.
- package/out/handles/did-document.d.ts +57 -0
- package/out/handles/did-document.d.ts.map +1 -0
- package/out/handles/did-document.js +93 -0
- package/out/handles/did-document.js.map +1 -0
- package/out/handles/doh.d.ts +3 -0
- package/out/handles/doh.d.ts.map +1 -0
- package/out/handles/doh.js +77 -0
- package/out/handles/doh.js.map +1 -0
- package/out/handles/http.d.ts +3 -0
- package/out/handles/http.d.ts.map +1 -0
- package/out/handles/http.js +15 -0
- package/out/handles/http.js.map +1 -0
- package/out/handles/index.d.ts +3 -0
- package/out/handles/index.d.ts.map +1 -0
- package/out/handles/index.js +4 -0
- package/out/handles/index.js.map +1 -0
- package/out/handles/resolve.d.ts +2 -0
- package/out/handles/resolve.d.ts.map +1 -0
- package/out/handles/resolve.js +24 -0
- package/out/handles/resolve.js.map +1 -0
- package/out/index.d.ts +18 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +24 -1
- package/out/index.js.map +1 -1
- package/out/oauth.d.ts +98 -0
- package/out/oauth.d.ts.map +1 -0
- package/out/oauth.js +196 -0
- package/out/oauth.js.map +1 -0
- package/out/pds-helpers.d.ts +8 -0
- package/out/pds-helpers.d.ts.map +1 -0
- package/out/pds-helpers.js +16 -0
- package/out/pds-helpers.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
https://github.com/mary-ext/atcute
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
in the Software without restriction, including without limitation the rights
|
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
furnished to do so, subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
import type { At } from "@atcute/client/lexicons";
|
|
23
|
+
/**
|
|
24
|
+
* DID document
|
|
25
|
+
*/
|
|
26
|
+
interface DidDocument {
|
|
27
|
+
id: string;
|
|
28
|
+
alsoKnownAs?: string[];
|
|
29
|
+
verificationMethod?: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
type: string;
|
|
32
|
+
controller: string;
|
|
33
|
+
publicKeyMultibase?: string;
|
|
34
|
+
}>;
|
|
35
|
+
service?: Array<{
|
|
36
|
+
id: string;
|
|
37
|
+
type: string;
|
|
38
|
+
serviceEndpoint: string | Record<string, unknown>;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Retrieves AT Protocol PDS endpoint from the DID document, if available
|
|
43
|
+
* @param doc DID document
|
|
44
|
+
* @returns The PDS endpoint, if available
|
|
45
|
+
*/
|
|
46
|
+
export declare function getPdsEndpoint(doc: DidDocument): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Retrieve a service endpoint from the DID document, if available
|
|
49
|
+
* @param doc DID document
|
|
50
|
+
* @param serviceId Service ID
|
|
51
|
+
* @param serviceType Service type
|
|
52
|
+
* @returns The requested service endpoint, if available
|
|
53
|
+
*/
|
|
54
|
+
export declare function getServiceEndpoint(doc: DidDocument, serviceId: string, serviceType: string): string | undefined;
|
|
55
|
+
export declare function getDidDocument(did: At.DID): Promise<DidDocument>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=did-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did-document.d.ts","sourceRoot":"","sources":["../../src/handles/did-document.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;EAoBE;AAEF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAElD;;GAEG;AACH,UAAU,WAAW;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClD,CAAC,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS,CAWpB;AAiBD,wBAAsB,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CA0CtE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
https://github.com/mary-ext/atcute
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
in the Software without restriction, including without limitation the rights
|
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
furnished to do so, subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Retrieves AT Protocol PDS endpoint from the DID document, if available
|
|
24
|
+
* @param doc DID document
|
|
25
|
+
* @returns The PDS endpoint, if available
|
|
26
|
+
*/
|
|
27
|
+
export function getPdsEndpoint(doc) {
|
|
28
|
+
return getServiceEndpoint(doc, '#atproto_pds', 'AtprotoPersonalDataServer');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Retrieve a service endpoint from the DID document, if available
|
|
32
|
+
* @param doc DID document
|
|
33
|
+
* @param serviceId Service ID
|
|
34
|
+
* @param serviceType Service type
|
|
35
|
+
* @returns The requested service endpoint, if available
|
|
36
|
+
*/
|
|
37
|
+
export function getServiceEndpoint(doc, serviceId, serviceType) {
|
|
38
|
+
const did = doc.id;
|
|
39
|
+
const didServiceId = did + serviceId;
|
|
40
|
+
const found = doc.service?.find((service) => service.id === serviceId || service.id === didServiceId);
|
|
41
|
+
if (!found || found.type !== serviceType || typeof found.serviceEndpoint !== 'string') {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return validateUrl(found.serviceEndpoint);
|
|
45
|
+
}
|
|
46
|
+
function validateUrl(urlStr) {
|
|
47
|
+
let url;
|
|
48
|
+
try {
|
|
49
|
+
url = new URL(urlStr);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const proto = url.protocol;
|
|
55
|
+
if (url.hostname && (proto === 'http:' || proto === 'https:')) {
|
|
56
|
+
return urlStr;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export async function getDidDocument(did) {
|
|
60
|
+
const colon_index = did.indexOf(':', 4);
|
|
61
|
+
const type = did.slice(4, colon_index);
|
|
62
|
+
const ident = did.slice(colon_index + 1);
|
|
63
|
+
// 2. retrieve their DID documents
|
|
64
|
+
let doc;
|
|
65
|
+
if (type === 'plc') {
|
|
66
|
+
const response = await fetch(`https://plc.directory/${did}`);
|
|
67
|
+
if (response.status === 404) {
|
|
68
|
+
throw new Error(`did not found in directory`);
|
|
69
|
+
}
|
|
70
|
+
else if (!response.ok) {
|
|
71
|
+
throw new Error(`directory is unreachable`);
|
|
72
|
+
}
|
|
73
|
+
const json = await response.json();
|
|
74
|
+
doc = json;
|
|
75
|
+
}
|
|
76
|
+
else if (type === 'web') {
|
|
77
|
+
const DID_WEB_RE = /^([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*(?:\.[a-zA-Z]{2,}))$/;
|
|
78
|
+
if (!DID_WEB_RE.test(ident)) {
|
|
79
|
+
throw new Error(`invalid identifier`);
|
|
80
|
+
}
|
|
81
|
+
const response = await fetch(`https://${ident}/.well-known/did.json`);
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
throw new Error(`did document is unreachable`);
|
|
84
|
+
}
|
|
85
|
+
const json = await response.json();
|
|
86
|
+
doc = json;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new Error(`unsupported did method`);
|
|
90
|
+
}
|
|
91
|
+
return doc;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=did-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did-document.js","sourceRoot":"","sources":["../../src/handles/did-document.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;EAoBE;AAuBF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC3C,OAAO,kBAAkB,CAAC,GAAG,EAAE,cAAc,EAAE,2BAA2B,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAC9B,GAAgB,EAChB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;IAEnB,MAAM,YAAY,GAAG,GAAG,GAAG,SAAS,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IAEtG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACpF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IAC/B,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE3B,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC;IAClB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAEzC,kCAAkC;IAClC,IAAI,GAAgB,CAAC;IAErB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAE7D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,GAAG,GAAG,IAAmB,CAAC;IAC9B,CAAC;SAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,yDAAyD,CAAC;QAE7E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,KAAK,uBAAuB,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,GAAG,GAAG,IAAmB,CAAC;IAC9B,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doh.d.ts","sourceRoot":"","sources":["../../src/handles/doh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAMlD,eAAO,MAAM,mBAAmB,WAAkB,MAAM,KAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAiDxE,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { isDid } from "./index.js";
|
|
2
|
+
const SUBDOMAIN = '_atproto';
|
|
3
|
+
const PREFIX = 'did=';
|
|
4
|
+
export const resolveHandleViaDoH = async (handle) => {
|
|
5
|
+
const url = new URL('https://mozilla.cloudflare-dns.com/dns-query');
|
|
6
|
+
url.searchParams.set('type', 'TXT');
|
|
7
|
+
url.searchParams.set('name', `${SUBDOMAIN}.${handle}`);
|
|
8
|
+
const response = await fetch(url, {
|
|
9
|
+
method: 'GET',
|
|
10
|
+
headers: { accept: 'application/dns-json' },
|
|
11
|
+
redirect: 'follow',
|
|
12
|
+
});
|
|
13
|
+
const type = response.headers.get('content-type')?.trim();
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
const message = type?.startsWith('text/plain')
|
|
16
|
+
? await response.text()
|
|
17
|
+
: `failed to resolve ${handle}`;
|
|
18
|
+
throw new Error(message);
|
|
19
|
+
}
|
|
20
|
+
if (type !== 'application/dns-json') {
|
|
21
|
+
throw new Error(`unexpected response from DoH server`);
|
|
22
|
+
}
|
|
23
|
+
const result = asResult(await response.json());
|
|
24
|
+
const answers = result.Answer?.filter(isAnswerTxt).map(extractTxtData) ?? [];
|
|
25
|
+
for (let i = 0; i < answers.length; i++) {
|
|
26
|
+
// skip if the line does not start with "did="
|
|
27
|
+
if (!answers[i].startsWith(PREFIX)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
// ensure there is no other entry starting with "did="
|
|
31
|
+
for (let j = i + 1; j < answers.length; j++) {
|
|
32
|
+
if (answers[j].startsWith(PREFIX)) {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const did = answers[i].slice(PREFIX.length);
|
|
37
|
+
if (isDid(did)) {
|
|
38
|
+
return did;
|
|
39
|
+
}
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`failed to resolve ${handle}`);
|
|
43
|
+
};
|
|
44
|
+
const isResult = (result) => {
|
|
45
|
+
if (result === null || typeof result !== 'object') {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return ('Status' in result &&
|
|
49
|
+
typeof result.Status === 'number' &&
|
|
50
|
+
(!('Answer' in result) || (Array.isArray(result.Answer) && result.Answer.every(isAnswer))));
|
|
51
|
+
};
|
|
52
|
+
const asResult = (result) => {
|
|
53
|
+
if (!isResult(result)) {
|
|
54
|
+
throw new TypeError(`unexpected DoH response`);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
};
|
|
58
|
+
const isAnswer = (answer) => {
|
|
59
|
+
if (answer === null || typeof answer !== 'object') {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return ('name' in answer &&
|
|
63
|
+
typeof answer.name === 'string' &&
|
|
64
|
+
'type' in answer &&
|
|
65
|
+
typeof answer.type === 'number' &&
|
|
66
|
+
'data' in answer &&
|
|
67
|
+
typeof answer.data === 'string' &&
|
|
68
|
+
'TTL' in answer &&
|
|
69
|
+
typeof answer.TTL === 'number');
|
|
70
|
+
};
|
|
71
|
+
const isAnswerTxt = (answer) => {
|
|
72
|
+
return answer.type === 16;
|
|
73
|
+
};
|
|
74
|
+
const extractTxtData = (answer) => {
|
|
75
|
+
return answer.data.replace(/^"|"$/g, '').replace(/\\"/g, '"');
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=doh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doh.js","sourceRoot":"","sources":["../../src/handles/doh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/handles/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAGlD,eAAO,MAAM,oBAAoB,WAAkB,MAAM,KAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAgBzE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isDid } from "./index.js";
|
|
2
|
+
export const resolveHandleViaHttp = async (handle) => {
|
|
3
|
+
const url = new URL('/.well-known/atproto-did', `https://${handle}`);
|
|
4
|
+
const response = await fetch(url, { redirect: 'error' });
|
|
5
|
+
if (!response.ok) {
|
|
6
|
+
throw new Error(`domain is unreachable`);
|
|
7
|
+
}
|
|
8
|
+
const text = await response.text();
|
|
9
|
+
const did = text.split('\n')[0].trim();
|
|
10
|
+
if (isDid(did)) {
|
|
11
|
+
return did;
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`failed to resolve ${handle}`);
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/handles/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,0BAA0B,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handles/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAElD,eAAO,MAAM,KAAK,QAAS,MAAM,KAAG,GAAG,IAAI,EAAE,CAAC,GAE7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handles/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAiB,EAAE;IACnD,OAAO,kDAAkD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/handles/resolve.ts"],"names":[],"mappings":"AAMA,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,4BAsB5D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isDid } from "./index.js";
|
|
2
|
+
import { resolveHandleViaDoH } from "./doh.js";
|
|
3
|
+
import { resolveHandleViaHttp } from "./http.js";
|
|
4
|
+
const didCache = new Map();
|
|
5
|
+
export async function resolveHandleAnonymously(handle) {
|
|
6
|
+
if (isDid(handle))
|
|
7
|
+
return handle;
|
|
8
|
+
if (didCache.has(handle)) {
|
|
9
|
+
return didCache.get(handle);
|
|
10
|
+
}
|
|
11
|
+
const results = await Promise.allSettled([
|
|
12
|
+
resolveHandleViaHttp(handle),
|
|
13
|
+
resolveHandleViaDoH(handle),
|
|
14
|
+
]);
|
|
15
|
+
const did = results
|
|
16
|
+
.find(p => p.status === 'fulfilled')
|
|
17
|
+
?.value;
|
|
18
|
+
if (did === undefined) {
|
|
19
|
+
throw results;
|
|
20
|
+
}
|
|
21
|
+
didCache.set(handle, did);
|
|
22
|
+
return did;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/handles/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC3C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAc;IACzD,IAAI,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACrC,oBAAoB,CAAC,MAAM,CAAC;QAC5B,mBAAmB,CAAC,MAAM,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO;SACd,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;QACpC,EAAE,KAAK,CAAC;IAEZ,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,OAAO,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1B,OAAO,GAAG,CAAC;AACf,CAAC"}
|
package/out/index.d.ts
CHANGED
|
@@ -49,6 +49,7 @@ type DataThenParams<T> = T extends {
|
|
|
49
49
|
export declare class KittyAgent<X extends XRPC = XRPC> {
|
|
50
50
|
readonly xrpc: X;
|
|
51
51
|
constructor(opts: XRPCOptions | X);
|
|
52
|
+
static createUnauthed(service?: string): KittyAgent;
|
|
52
53
|
/** Makes a request to the XRPC service */
|
|
53
54
|
request(options: XRPCRequestOptions): Promise<XRPCResponse>;
|
|
54
55
|
query<K extends keyof Queries>(nsid: K, ...args: ParamsThenData<Queries[K]>): Promise<OutputOf<Queries[K]>>;
|
|
@@ -57,7 +58,23 @@ export declare class KittyAgent<X extends XRPC = XRPC> {
|
|
|
57
58
|
getBlob(params: ComAtprotoSyncGetBlob.Params | {
|
|
58
59
|
did: At.DID;
|
|
59
60
|
cid: At.Blob;
|
|
60
|
-
}): Promise<Uint8Array>;
|
|
61
|
+
}): Promise<Uint8Array | string>;
|
|
62
|
+
/**
|
|
63
|
+
* Atcute likes to return blobs as text sometimes. I don't know why yet. This returns them as binary if that
|
|
64
|
+
* happens.
|
|
65
|
+
*/
|
|
66
|
+
getBlobAsBinary(params: ComAtprotoSyncGetBlob.Params | {
|
|
67
|
+
did: At.DID;
|
|
68
|
+
cid: At.Blob;
|
|
69
|
+
}): Promise<Uint8Array<ArrayBufferLike>>;
|
|
70
|
+
/**
|
|
71
|
+
* Atcute likes to return blobs as text sometimes. I don't know why yet. This returns them as text no matter what,
|
|
72
|
+
* and also allows you to specify an encoding.
|
|
73
|
+
*/
|
|
74
|
+
getBlobAsText(params: ComAtprotoSyncGetBlob.Params | {
|
|
75
|
+
did: At.DID;
|
|
76
|
+
cid: At.Blob;
|
|
77
|
+
}, encoding?: string): Promise<string>;
|
|
61
78
|
tryGet<K extends keyof Records>(params: GetRecordParams<K>): Promise<GetRecordOutput<K> | {
|
|
62
79
|
uri: undefined;
|
|
63
80
|
value: undefined;
|
package/out/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/out/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
2
|
-
import { XRPC, XRPCError } from "@atcute/client";
|
|
2
|
+
import { simpleFetchHandler, XRPC, XRPCError } from "@atcute/client";
|
|
3
3
|
export function isInvalidSwapError(err) {
|
|
4
4
|
return err instanceof XRPCError && err.kind === 'InvalidSwap';
|
|
5
5
|
}
|
|
@@ -11,6 +11,9 @@ export class KittyAgent {
|
|
|
11
11
|
constructor(opts) {
|
|
12
12
|
this.xrpc = opts instanceof XRPC ? opts : new XRPC(opts);
|
|
13
13
|
}
|
|
14
|
+
static createUnauthed(service = 'https://bsky.social') {
|
|
15
|
+
return new KittyAgent({ handler: simpleFetchHandler({ service }) });
|
|
16
|
+
}
|
|
14
17
|
/** Makes a request to the XRPC service */
|
|
15
18
|
async request(options) {
|
|
16
19
|
return await this.xrpc.request(options);
|
|
@@ -39,6 +42,26 @@ export class KittyAgent {
|
|
|
39
42
|
const data = await this.query('com.atproto.sync.getBlob', params);
|
|
40
43
|
return data;
|
|
41
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Atcute likes to return blobs as text sometimes. I don't know why yet. This returns them as binary if that
|
|
47
|
+
* happens.
|
|
48
|
+
*/
|
|
49
|
+
async getBlobAsBinary(params) {
|
|
50
|
+
let blob = await this.getBlob(params);
|
|
51
|
+
if (typeof blob === 'string')
|
|
52
|
+
blob = new TextEncoder().encode(blob);
|
|
53
|
+
return blob;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Atcute likes to return blobs as text sometimes. I don't know why yet. This returns them as text no matter what,
|
|
57
|
+
* and also allows you to specify an encoding.
|
|
58
|
+
*/
|
|
59
|
+
async getBlobAsText(params, encoding) {
|
|
60
|
+
let blob = await this.getBlob(params);
|
|
61
|
+
if (typeof blob !== 'string')
|
|
62
|
+
blob = new TextDecoder(encoding).decode(blob);
|
|
63
|
+
return blob;
|
|
64
|
+
}
|
|
42
65
|
async tryGet(params) {
|
|
43
66
|
try {
|
|
44
67
|
return await this.get(params);
|
package/out/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAgE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/out/oauth.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { At } from '@atcute/client/lexicons';
|
|
2
|
+
import { OAuthUserAgent } from '@atcute/oauth-browser-client';
|
|
3
|
+
import { KittyAgent } from './index.js';
|
|
4
|
+
declare class OAuthClient {
|
|
5
|
+
private readonly scope;
|
|
6
|
+
constructor({ clientId, redirectUri, scope }: {
|
|
7
|
+
clientId: string;
|
|
8
|
+
redirectUri: string;
|
|
9
|
+
scope: string;
|
|
10
|
+
});
|
|
11
|
+
oauthAuthenticate(handle: string): Promise<void>;
|
|
12
|
+
oauthAuthenticateOrRefresh(handle: string, refreshOnly: boolean): Promise<OAuthUserAgent | undefined>;
|
|
13
|
+
revokeSessions(): void;
|
|
14
|
+
}
|
|
15
|
+
export interface LoginState<T> {
|
|
16
|
+
readonly handle: string;
|
|
17
|
+
readonly did: At.DID;
|
|
18
|
+
readonly pds: string;
|
|
19
|
+
readonly agent: KittyAgent;
|
|
20
|
+
readonly client: T;
|
|
21
|
+
}
|
|
22
|
+
export interface Account {
|
|
23
|
+
handle: string;
|
|
24
|
+
did: At.DID;
|
|
25
|
+
pds: string;
|
|
26
|
+
}
|
|
27
|
+
export declare namespace Store {
|
|
28
|
+
/** Callback to inform of a value updates. */
|
|
29
|
+
type Subscriber<T> = (value: T) => void;
|
|
30
|
+
/** Unsubscribes from value updates. */
|
|
31
|
+
type Unsubscriber = () => void;
|
|
32
|
+
/** Callback to update a value. */
|
|
33
|
+
type Updater<T> = (value: T) => T;
|
|
34
|
+
/** Readable interface for subscribing. */
|
|
35
|
+
interface Readable<T> {
|
|
36
|
+
/**
|
|
37
|
+
* Subscribe on value changes.
|
|
38
|
+
* @param run subscription callback
|
|
39
|
+
* @param invalidate cleanup callback
|
|
40
|
+
*/
|
|
41
|
+
subscribe(this: void, run: Subscriber<T>, invalidate?: () => void): Unsubscriber;
|
|
42
|
+
}
|
|
43
|
+
/** Writable interface for both updating and subscribing. */
|
|
44
|
+
interface Writable<T> extends Readable<T> {
|
|
45
|
+
/**
|
|
46
|
+
* Update value using callback and inform subscribers.
|
|
47
|
+
* @param updater callback
|
|
48
|
+
*/
|
|
49
|
+
update(this: void, updater: Updater<T>): void;
|
|
50
|
+
}
|
|
51
|
+
/** One or more values from `Readable` stores. */
|
|
52
|
+
type StoresValues<T> = T extends Readable<infer U> ? U : {
|
|
53
|
+
[K in keyof T]: T[K] extends Readable<infer U> ? U : never;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** Convenience class for readable stores that adds a .get() method. */
|
|
57
|
+
declare class ReadableEx<T, TStore extends Store.Readable<T> = Store.Readable<T>> implements Store.Readable<T> {
|
|
58
|
+
protected readonly store: TStore;
|
|
59
|
+
constructor(store: TStore);
|
|
60
|
+
subscribe: (this: void, run: Store.Subscriber<T>, invalidate?: () => void) => Store.Unsubscriber;
|
|
61
|
+
/**
|
|
62
|
+
* Get the current value from a store by subscribing and immediately unsubscribing.
|
|
63
|
+
* Reimplementation of `svelte/store` `get()`.
|
|
64
|
+
*/
|
|
65
|
+
get: (this: void) => T;
|
|
66
|
+
}
|
|
67
|
+
export declare class StatefulOAuthClient<TClient> extends OAuthClient {
|
|
68
|
+
private readonly createWritableStore;
|
|
69
|
+
private readonly createDerivedStore;
|
|
70
|
+
private readonly createClient;
|
|
71
|
+
private _account;
|
|
72
|
+
private _agent;
|
|
73
|
+
private _client;
|
|
74
|
+
get account(): ReadableEx<Account | undefined>;
|
|
75
|
+
readonly user: ReadableEx<LoginState<TClient> | undefined>;
|
|
76
|
+
readonly handle: ReadableEx<string | undefined>;
|
|
77
|
+
readonly did: ReadableEx<At.DID | undefined>;
|
|
78
|
+
readonly pds: ReadableEx<string | undefined>;
|
|
79
|
+
constructor(options: {
|
|
80
|
+
clientId: string;
|
|
81
|
+
redirectUri: string;
|
|
82
|
+
scope: string;
|
|
83
|
+
}, createWritableStore: <T>(value: T) => Store.Writable<T>, createDerivedStore: <T, S extends Store.Readable<any>[]>(stores: S, callback: (values: Store.StoresValues<S>) => T) => Store.Readable<T>, createClient: (loginState: {
|
|
84
|
+
readonly handle: string;
|
|
85
|
+
readonly did: At.DID;
|
|
86
|
+
readonly pds: string;
|
|
87
|
+
readonly agent: KittyAgent;
|
|
88
|
+
}) => TClient);
|
|
89
|
+
private useLocalStorage;
|
|
90
|
+
private writable;
|
|
91
|
+
private derived;
|
|
92
|
+
authenticateIfNecessary(handle: string, refreshOnly: boolean): Promise<boolean>;
|
|
93
|
+
initialSessionPromise: Promise<void> | undefined;
|
|
94
|
+
waitForInitialSession(): Promise<void>;
|
|
95
|
+
revokeSessions(): void;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
|
package/out/oauth.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { configureOAuth, createAuthorizationUrl, deleteStoredSession, getSession, listStoredSessions, OAuthUserAgent, resolveFromIdentity } from '@atcute/oauth-browser-client';
|
|
2
|
+
import { KittyAgent } from './index.js';
|
|
3
|
+
import { resolveHandleAnonymously } from './handles/resolve.js';
|
|
4
|
+
import { getDidAndPds } from './pds-helpers.js';
|
|
5
|
+
class OAuthClient {
|
|
6
|
+
scope;
|
|
7
|
+
constructor({ clientId, redirectUri, scope }) {
|
|
8
|
+
configureOAuth({
|
|
9
|
+
metadata: {
|
|
10
|
+
client_id: clientId,
|
|
11
|
+
redirect_uri: redirectUri,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
this.scope = scope;
|
|
15
|
+
}
|
|
16
|
+
async oauthAuthenticate(handle) {
|
|
17
|
+
const { identity, metadata } = await resolveFromIdentity(handle);
|
|
18
|
+
// passing `identity` is optional,
|
|
19
|
+
// it allows for the login form to be autofilled with the user's handle or DID
|
|
20
|
+
const authUrl = await createAuthorizationUrl({
|
|
21
|
+
metadata,
|
|
22
|
+
identity,
|
|
23
|
+
scope: this.scope,
|
|
24
|
+
});
|
|
25
|
+
console.log(authUrl);
|
|
26
|
+
// recommended to wait for the browser to persist local storage before proceeding
|
|
27
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
28
|
+
// redirect the user to sign in and authorize the app
|
|
29
|
+
document.location.href = authUrl.toString();
|
|
30
|
+
// Time out after 100 seconds if the redirect doesn't go through for some reason
|
|
31
|
+
await new Promise(reject => setTimeout(reject, 100000));
|
|
32
|
+
throw new Error('Unreachable code');
|
|
33
|
+
}
|
|
34
|
+
async oauthAuthenticateOrRefresh(handle, refreshOnly) {
|
|
35
|
+
let session;
|
|
36
|
+
try {
|
|
37
|
+
session = await getSession(await resolveHandleAnonymously(handle), { allowStale: false });
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.warn('Could not refresh session:', err);
|
|
41
|
+
}
|
|
42
|
+
console.log('seession', session);
|
|
43
|
+
if (refreshOnly && !session)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (!session) {
|
|
46
|
+
await this.oauthAuthenticate(handle); // will not return
|
|
47
|
+
throw new Error('Should never happen');
|
|
48
|
+
}
|
|
49
|
+
const oauthAgent = new OAuthUserAgent(session);
|
|
50
|
+
return oauthAgent;
|
|
51
|
+
}
|
|
52
|
+
revokeSessions() {
|
|
53
|
+
for (const session of listStoredSessions()) {
|
|
54
|
+
deleteStoredSession(session);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Convenience class for readable stores that adds a .get() method. */
|
|
59
|
+
class ReadableEx {
|
|
60
|
+
store;
|
|
61
|
+
constructor(store) {
|
|
62
|
+
this.store = store;
|
|
63
|
+
this.subscribe = (run, invalidate) => {
|
|
64
|
+
return store.subscribe(run, invalidate);
|
|
65
|
+
};
|
|
66
|
+
this.get = () => {
|
|
67
|
+
let value;
|
|
68
|
+
const unsub = store.subscribe(avalue => value = avalue);
|
|
69
|
+
unsub();
|
|
70
|
+
return value;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
subscribe;
|
|
74
|
+
/**
|
|
75
|
+
* Get the current value from a store by subscribing and immediately unsubscribing.
|
|
76
|
+
* Reimplementation of `svelte/store` `get()`.
|
|
77
|
+
*/
|
|
78
|
+
get;
|
|
79
|
+
}
|
|
80
|
+
/** Convenience class for writable stores that adds a .get() method. */
|
|
81
|
+
class WritableEx extends ReadableEx {
|
|
82
|
+
constructor(store) {
|
|
83
|
+
super(store);
|
|
84
|
+
this.update = (updater) => {
|
|
85
|
+
return this.store.update(updater);
|
|
86
|
+
};
|
|
87
|
+
this.set = (value) => {
|
|
88
|
+
return this.store.update(() => value);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
update;
|
|
92
|
+
/**
|
|
93
|
+
* Set value and inform subscribers.
|
|
94
|
+
* @param value to set
|
|
95
|
+
*/
|
|
96
|
+
set;
|
|
97
|
+
}
|
|
98
|
+
class LoginStateImpl {
|
|
99
|
+
account;
|
|
100
|
+
agent;
|
|
101
|
+
client;
|
|
102
|
+
constructor(account, agent, client) {
|
|
103
|
+
this.account = account;
|
|
104
|
+
this.agent = agent;
|
|
105
|
+
this.client = client;
|
|
106
|
+
}
|
|
107
|
+
get handle() { return this.account.handle; }
|
|
108
|
+
get did() { return this.account.did; }
|
|
109
|
+
get pds() { return this.account.pds; }
|
|
110
|
+
}
|
|
111
|
+
export class StatefulOAuthClient extends OAuthClient {
|
|
112
|
+
createWritableStore;
|
|
113
|
+
createDerivedStore;
|
|
114
|
+
createClient;
|
|
115
|
+
_account;
|
|
116
|
+
_agent;
|
|
117
|
+
_client;
|
|
118
|
+
get account() { return this._account; }
|
|
119
|
+
user;
|
|
120
|
+
handle;
|
|
121
|
+
did;
|
|
122
|
+
pds;
|
|
123
|
+
constructor(options, createWritableStore, createDerivedStore, createClient) {
|
|
124
|
+
super(options);
|
|
125
|
+
this.createWritableStore = createWritableStore;
|
|
126
|
+
this.createDerivedStore = createDerivedStore;
|
|
127
|
+
this.createClient = createClient;
|
|
128
|
+
// TODO computations created outside a `createRoot` or `render` will never be disposed
|
|
129
|
+
// use createContext/useContext?
|
|
130
|
+
this._account = this.useLocalStorage('user', undefined, {
|
|
131
|
+
deserializer(raw) { return raw === 'null' ? undefined : JSON.parse(raw); },
|
|
132
|
+
serializer(value) { return value === undefined ? 'null' : JSON.stringify(value); },
|
|
133
|
+
});
|
|
134
|
+
this._agent = this.writable(undefined);
|
|
135
|
+
this._client = this.writable(undefined);
|
|
136
|
+
this.user = this.derived([this._account, this._agent, this._client], ([account, agent, client]) => {
|
|
137
|
+
return account && agent && client ? new LoginStateImpl(account, agent, client) : undefined;
|
|
138
|
+
});
|
|
139
|
+
this.handle = this.derived([this._account], ([account]) => account?.handle);
|
|
140
|
+
this.did = this.derived([this._account], ([account]) => account?.did);
|
|
141
|
+
this.pds = this.derived([this._account], ([account]) => account?.pds);
|
|
142
|
+
}
|
|
143
|
+
useLocalStorage(key, initialValue, options) {
|
|
144
|
+
let value = this.writable(initialValue);
|
|
145
|
+
if (key in localStorage) {
|
|
146
|
+
value.set(options.deserializer(localStorage[key]));
|
|
147
|
+
}
|
|
148
|
+
value.subscribe(newValue => {
|
|
149
|
+
localStorage[key] = options.serializer(newValue);
|
|
150
|
+
});
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
writable(initialValue) {
|
|
154
|
+
return new WritableEx(this.createWritableStore(initialValue));
|
|
155
|
+
}
|
|
156
|
+
derived(stores, callback) {
|
|
157
|
+
return new ReadableEx(this.createDerivedStore(stores, callback));
|
|
158
|
+
}
|
|
159
|
+
async authenticateIfNecessary(handle, refreshOnly) {
|
|
160
|
+
const account = this._account.get();
|
|
161
|
+
if (this.user.get() && account && account.handle === handle) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
const oauthAgent = await this.oauthAuthenticateOrRefresh(handle, refreshOnly);
|
|
165
|
+
if (oauthAgent === undefined)
|
|
166
|
+
return false;
|
|
167
|
+
const { did, pds } = await getDidAndPds(handle);
|
|
168
|
+
this._account.set({ did, pds, handle });
|
|
169
|
+
const agent = new KittyAgent({ handler: oauthAgent });
|
|
170
|
+
this._agent.set(agent);
|
|
171
|
+
this._client.set(this.createClient({ did, pds, handle, agent }));
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
initialSessionPromise;
|
|
175
|
+
async waitForInitialSession() {
|
|
176
|
+
if (!this.initialSessionPromise) {
|
|
177
|
+
this.initialSessionPromise = (async () => {
|
|
178
|
+
const account = this._account.get();
|
|
179
|
+
if (account) { // automatically sign in if possible
|
|
180
|
+
const result = await this.authenticateIfNecessary(account.handle, true);
|
|
181
|
+
console.log(`early authentication complete: ${result}`);
|
|
182
|
+
}
|
|
183
|
+
})();
|
|
184
|
+
}
|
|
185
|
+
await this.initialSessionPromise;
|
|
186
|
+
}
|
|
187
|
+
revokeSessions() {
|
|
188
|
+
super.revokeSessions();
|
|
189
|
+
this._account.set(undefined);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function isTokenUsable({ token }) {
|
|
193
|
+
const expires = token.expires_at;
|
|
194
|
+
return expires == null || Date.now() + 60_000 <= expires;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=oauth.js.map
|
package/out/oauth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,mBAAmB,EAAyB,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAgB,MAAM,8BAA8B,CAAC;AACrN,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW;IACI,KAAK,CAAS;IAE/B,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAIzC;QACG,cAAc,CAAC;YACX,QAAQ,EAAE;gBACN,SAAS,EAAE,QAAQ;gBACnB,YAAY,EAAE,WAAW;aAC5B;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAClC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEjE,kCAAkC;QAClC,8EAA8E;QAC9E,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;YACzC,QAAQ;YACR,QAAQ;YACR,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAErB,iFAAiF;QACjF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvD,qDAAqD;QACrD,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAE5C,gFAAgF;QAChF,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAExD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC5B,MAAc,EACd,WAAoB;QAEpB,IAAI,OAA4B,CAAC;QACjC,IAAI,CAAC;YACD,OAAO,GAAG,MAAM,UAAU,CACtB,MAAM,wBAAwB,CAAC,MAAM,CAAC,EACtC,EAAE,UAAU,EAAE,KAAK,EAAE,CACxB,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjC,IAAI,WAAW,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB;YACxD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAE/C,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,cAAc;QACV,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,EAAE,CAAC;YACzC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;CACJ;AAkDD,uEAAuE;AACvE,MAAM,UAAU;IACmB;IAA/B,YAA+B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QACxC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAwB,EAAE,UAAuB,EAAsB,EAAE;YACvF,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,GAAM,EAAE;YACf,IAAI,KAAQ,CAAC;YACb,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YACxD,KAAK,EAAE,CAAC;YACR,OAAO,KAAM,CAAC;QAClB,CAAC,CAAC;IACN,CAAC;IAED,SAAS,CAAwF;IAEjG;;;OAGG;IACH,GAAG,CAAoB;CAC1B;AAED,uEAAuE;AACvE,MAAM,UAAc,SAAQ,UAAgC;IACxD,YAAY,KAAwB;QAChC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,IAAI,CAAC,MAAM,GAAG,CAAC,OAAyB,EAAQ,EAAE;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,CAAC,KAAQ,EAAQ,EAAE;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC;IACN,CAAC;IAED,MAAM,CAAkD;IAExD;;;OAGG;IACH,GAAG,CAAiC;CACvC;AAED,MAAM,cAAc;IAEK;IACR;IACA;IAHb,YACqB,OAAgB,EACxB,KAAiB,EACjB,MAAS;QAFD,YAAO,GAAP,OAAO,CAAS;QACxB,UAAK,GAAL,KAAK,CAAY;QACjB,WAAM,GAAN,MAAM,CAAG;IACnB,CAAC;IAEJ,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,IAAI,GAAG,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;CACjD;AAED,MAAM,OAAO,mBAA6B,SAAQ,WAAW;IAiBpC;IACA;IACA;IAlBb,QAAQ,CAAkC;IAC1C,MAAM,CAAqC;IAC3C,OAAO,CAAkC;IAEjD,IAAI,OAAO,KAAsC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,IAAI,CAA8C;IAClD,MAAM,CAAiC;IACvC,GAAG,CAAiC;IACpC,GAAG,CAAiC;IAE7C,YACI,OAIC,EACgB,mBAAuD,EACvD,kBAAwI,EACxI,YAKJ;QAEb,KAAK,CAAC,OAAO,CAAC,CAAC;QATE,wBAAmB,GAAnB,mBAAmB,CAAoC;QACvD,uBAAkB,GAAlB,kBAAkB,CAAsH;QACxI,iBAAY,GAAZ,YAAY,CAKhB;QAIb,sFAAsF;QACtF,gCAAgC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAsB,MAAM,EAAE,SAAS,EAAE;YACzE,YAAY,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1E,UAAU,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACrF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAyB,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAsB,SAAS,CAAC,CAAC;QAE7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAU,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;YACvG,OAAO,OAAO,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;IAEO,eAAe,CAAI,GAAW,EAAE,YAAe,EAAE,OAA6E;QAClI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACvB,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,QAAQ,CAAI,YAAe;QAC/B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC;IAEO,OAAO,CAAqC,MAAS,EAAE,QAA8C;QACzG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,uBAAuB,CACzB,MAAc,EACd,WAAoB;QAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAEpC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9E,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,qBAAqB,CAA4B;IACjD,KAAK,CAAC,qBAAqB;QACvB,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC9B,IAAI,CAAC,qBAAqB,GAAG,CAAC,KAAK,IAAI,EAAE;gBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAEpC,IAAI,OAAO,EAAE,CAAC,CAAC,oCAAoC;oBAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACxE,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QAED,MAAM,IAAI,CAAC,qBAAqB,CAAC;IACrC,CAAC;IAED,cAAc;QACV,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACJ;AAED,SAAS,aAAa,CAAC,EAAE,KAAK,EAAW;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;IACjC,OAAO,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { At } from "@atcute/client/lexicons";
|
|
2
|
+
import type { DidDocument } from '@atcute/client/utils/did';
|
|
3
|
+
export declare function getDidAndPds(handleOrDid: string): Promise<{
|
|
4
|
+
did: At.DID;
|
|
5
|
+
pds: string;
|
|
6
|
+
didDocument: DidDocument;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=pds-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pds-helpers.d.ts","sourceRoot":"","sources":["../src/pds-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAI5D,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC,CAavH"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getDidDocument, getPdsEndpoint } from './handles/did-document.js';
|
|
2
|
+
import { resolveHandleAnonymously } from "./handles/resolve.js";
|
|
3
|
+
const didPdsCache = new Map();
|
|
4
|
+
export async function getDidAndPds(handleOrDid) {
|
|
5
|
+
if (didPdsCache.has(handleOrDid)) {
|
|
6
|
+
return didPdsCache.get(handleOrDid);
|
|
7
|
+
}
|
|
8
|
+
const did = await resolveHandleAnonymously(handleOrDid);
|
|
9
|
+
const didDocument = await getDidDocument(did);
|
|
10
|
+
const pds = getPdsEndpoint(didDocument);
|
|
11
|
+
if (!pds)
|
|
12
|
+
throw new Error(`No PDS for ${handleOrDid} (${did})!`);
|
|
13
|
+
didPdsCache.set(handleOrDid, { did, pds, didDocument });
|
|
14
|
+
return { did, pds, didDocument };
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=pds-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pds-helpers.js","sourceRoot":"","sources":["../src/pds-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkE,CAAC;AAE9F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IAClD,IAAI,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;IACzC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,WAAW,KAAK,GAAG,IAAI,CAAC,CAAC;IAEjE,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAExD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kitty-agent",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "2.0.0",
|
|
5
5
|
"description": "Helpers for @atcute/client",
|
|
6
6
|
"main": "out/index.js",
|
|
7
7
|
"types": "out/index.d.ts",
|
|
@@ -15,9 +15,11 @@
|
|
|
15
15
|
"author": "",
|
|
16
16
|
"license": "ISC",
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@atcute/client": "^2.0.6"
|
|
18
|
+
"@atcute/client": "^2.0.6",
|
|
19
|
+
"@atcute/oauth-browser-client": "^1.0.9"
|
|
19
20
|
},
|
|
20
21
|
"peerDependencies": {
|
|
21
|
-
"@atcute/client": "^2.0.6"
|
|
22
|
+
"@atcute/client": "^2.0.6",
|
|
23
|
+
"@atcute/oauth-browser-client": "^1.0.9"
|
|
22
24
|
}
|
|
23
25
|
}
|