@atcute/client 3.0.1 → 3.1.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/README.md +72 -13
- package/dist/client.d.ts +181 -0
- package/dist/client.js +180 -0
- package/dist/client.js.map +1 -0
- package/dist/credential-manager.d.ts +47 -38
- package/dist/credential-manager.js +50 -41
- package/dist/credential-manager.js.map +1 -1
- package/dist/fetch-handler.d.ts +2 -2
- package/dist/fetch-handler.js +1 -1
- package/dist/fetch-handler.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/rpc.d.ts +44 -8
- package/dist/rpc.js +13 -1
- package/dist/rpc.js.map +1 -1
- package/lib/client.ts +406 -0
- package/lib/credential-manager.ts +119 -93
- package/lib/fetch-handler.ts +3 -3
- package/lib/index.ts +3 -2
- package/lib/rpc.ts +44 -8
- package/package.json +2 -2
|
@@ -1,21 +1,27 @@
|
|
|
1
|
+
import { Client, ClientResponseError, isXRPCErrorPayload, ok } from './client.js';
|
|
1
2
|
import { simpleFetchHandler } from './fetch-handler.js';
|
|
2
|
-
import { XRPC, XRPCError } from './rpc.js';
|
|
3
3
|
import { getPdsEndpoint } from './utils/did.js';
|
|
4
4
|
import { decodeJwt } from './utils/jwt.js';
|
|
5
5
|
export class CredentialManager {
|
|
6
|
+
/** internal client instance for making authentication requests */
|
|
6
7
|
#server;
|
|
8
|
+
/** holds a promise for the current refresh operation, used for debouncing */
|
|
7
9
|
#refreshSessionPromise;
|
|
10
|
+
/** callback for session expiration */
|
|
8
11
|
#onExpired;
|
|
12
|
+
/** callback for successful session refresh */
|
|
9
13
|
#onRefresh;
|
|
14
|
+
/** callback for session updates */
|
|
10
15
|
#onSessionUpdate;
|
|
11
16
|
constructor({ service, onExpired, onRefresh, onSessionUpdate, fetch: _fetch = fetch, }) {
|
|
12
17
|
this.serviceUrl = service;
|
|
13
18
|
this.fetch = _fetch;
|
|
14
|
-
this.#server = new
|
|
19
|
+
this.#server = new Client({ handler: simpleFetchHandler({ service, fetch: _fetch }) });
|
|
15
20
|
this.#onRefresh = onRefresh;
|
|
16
21
|
this.#onExpired = onExpired;
|
|
17
22
|
this.#onSessionUpdate = onSessionUpdate;
|
|
18
23
|
}
|
|
24
|
+
/** service URL to make actual API requests with */
|
|
19
25
|
get dispatchUrl() {
|
|
20
26
|
return this.session?.pdsUri ?? this.serviceUrl;
|
|
21
27
|
}
|
|
@@ -38,12 +44,13 @@ export class CredentialManager {
|
|
|
38
44
|
catch {
|
|
39
45
|
return initialResponse;
|
|
40
46
|
}
|
|
41
|
-
//
|
|
42
|
-
// - refreshSession
|
|
43
|
-
// -
|
|
47
|
+
// return initial response if:
|
|
48
|
+
// - the above refreshSession failed and cleared the session
|
|
49
|
+
// - provided request body was a stream, which can't be resent once consumed
|
|
44
50
|
if (!this.session || init.body instanceof ReadableStream) {
|
|
45
51
|
return initialResponse;
|
|
46
52
|
}
|
|
53
|
+
// set the new token and retry the request
|
|
47
54
|
headers.set('authorization', `Bearer ${this.session.accessJwt}`);
|
|
48
55
|
return await (0, this.fetch)(url, { ...init, headers });
|
|
49
56
|
}
|
|
@@ -55,24 +62,21 @@ export class CredentialManager {
|
|
|
55
62
|
if (!currentSession) {
|
|
56
63
|
return;
|
|
57
64
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (err instanceof XRPCError) {
|
|
69
|
-
const kind = err.kind;
|
|
70
|
-
if (kind === 'ExpiredToken' || kind === 'InvalidToken') {
|
|
71
|
-
this.session = undefined;
|
|
72
|
-
this.#onExpired?.(currentSession);
|
|
73
|
-
}
|
|
65
|
+
const response = await this.#server.post('com.atproto.server.refreshSession', {
|
|
66
|
+
headers: {
|
|
67
|
+
authorization: `Bearer ${currentSession.refreshJwt}`,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
if (!response.ok) {
|
|
71
|
+
const error = response.data.error;
|
|
72
|
+
if (error === 'ExpiredToken' || error === 'InvalidToken') {
|
|
73
|
+
this.session = undefined;
|
|
74
|
+
this.#onExpired?.(currentSession);
|
|
74
75
|
}
|
|
76
|
+
throw new ClientResponseError(response);
|
|
75
77
|
}
|
|
78
|
+
this.#updateSession({ ...currentSession, ...response.data });
|
|
79
|
+
this.#onRefresh?.(this.session);
|
|
76
80
|
}
|
|
77
81
|
#updateSession(raw) {
|
|
78
82
|
const didDoc = raw.didDoc;
|
|
@@ -88,7 +92,7 @@ export class CredentialManager {
|
|
|
88
92
|
pdsUri: pdsUri,
|
|
89
93
|
email: raw.email,
|
|
90
94
|
emailConfirmed: raw.emailConfirmed,
|
|
91
|
-
emailAuthFactor: raw.
|
|
95
|
+
emailAuthFactor: raw.emailAuthFactor,
|
|
92
96
|
active: raw.active ?? true,
|
|
93
97
|
inactiveStatus: raw.status,
|
|
94
98
|
};
|
|
@@ -97,14 +101,14 @@ export class CredentialManager {
|
|
|
97
101
|
return newSession;
|
|
98
102
|
}
|
|
99
103
|
/**
|
|
100
|
-
*
|
|
101
|
-
* @param session
|
|
104
|
+
* resume from a persisted session
|
|
105
|
+
* @param session session data, taken from `AtpAuth#session` after login
|
|
102
106
|
*/
|
|
103
107
|
async resume(session) {
|
|
104
|
-
const now = Date.now() /
|
|
108
|
+
const now = Date.now() / 1_000 + 60 * 5;
|
|
105
109
|
const refreshToken = decodeJwt(session.refreshJwt);
|
|
106
110
|
if (now >= refreshToken.exp) {
|
|
107
|
-
throw new
|
|
111
|
+
throw new ClientResponseError({ status: 401, data: { error: 'InvalidToken' } });
|
|
108
112
|
}
|
|
109
113
|
const accessToken = decodeJwt(session.accessJwt);
|
|
110
114
|
this.session = session;
|
|
@@ -112,42 +116,43 @@ export class CredentialManager {
|
|
|
112
116
|
await this.#refreshSession();
|
|
113
117
|
}
|
|
114
118
|
else {
|
|
115
|
-
const promise = this.#server.get('com.atproto.server.getSession', {
|
|
119
|
+
const promise = ok(this.#server.get('com.atproto.server.getSession', {
|
|
116
120
|
headers: {
|
|
117
121
|
authorization: `Bearer ${session.accessJwt}`,
|
|
118
122
|
},
|
|
119
|
-
});
|
|
120
|
-
promise.then((
|
|
123
|
+
}));
|
|
124
|
+
promise.then((next) => {
|
|
121
125
|
const existing = this.session;
|
|
122
|
-
|
|
123
|
-
if (!existing) {
|
|
126
|
+
if (!existing || existing.did !== next.did) {
|
|
124
127
|
return;
|
|
125
128
|
}
|
|
126
129
|
this.#updateSession({ ...existing, ...next });
|
|
130
|
+
}, (_err) => {
|
|
131
|
+
// ignore error
|
|
127
132
|
});
|
|
128
133
|
}
|
|
129
134
|
if (!this.session) {
|
|
130
|
-
throw new
|
|
135
|
+
throw new ClientResponseError({ status: 401, data: { error: 'InvalidToken' } });
|
|
131
136
|
}
|
|
132
137
|
return this.session;
|
|
133
138
|
}
|
|
134
139
|
/**
|
|
135
|
-
*
|
|
136
|
-
* @param options
|
|
137
|
-
* @returns
|
|
140
|
+
* sign in to an account
|
|
141
|
+
* @param options credential options
|
|
142
|
+
* @returns session data
|
|
138
143
|
*/
|
|
139
144
|
async login(options) {
|
|
140
145
|
// Reset the session
|
|
141
146
|
this.session = undefined;
|
|
142
|
-
const
|
|
143
|
-
|
|
147
|
+
const session = await ok(this.#server.post('com.atproto.server.createSession', {
|
|
148
|
+
input: {
|
|
144
149
|
identifier: options.identifier,
|
|
145
150
|
password: options.password,
|
|
146
151
|
authFactorToken: options.code,
|
|
147
152
|
allowTakendown: options.allowTakendown,
|
|
148
153
|
},
|
|
149
|
-
});
|
|
150
|
-
return this.#updateSession(
|
|
154
|
+
}));
|
|
155
|
+
return this.#updateSession(session);
|
|
151
156
|
}
|
|
152
157
|
}
|
|
153
158
|
const isExpiredTokenResponse = async (response) => {
|
|
@@ -157,14 +162,18 @@ const isExpiredTokenResponse = async (response) => {
|
|
|
157
162
|
if (extractContentType(response.headers) !== 'application/json') {
|
|
158
163
|
return false;
|
|
159
164
|
}
|
|
165
|
+
// this is nasty as it relies heavily on what the PDS returns, but avoiding
|
|
166
|
+
// cloning and reading the request as much as possible is better.
|
|
160
167
|
// {"error":"ExpiredToken","message":"Token has expired"}
|
|
161
168
|
// {"error":"ExpiredToken","message":"Token is expired"}
|
|
162
169
|
if (extractContentLength(response.headers) > 54 * 1.5) {
|
|
163
170
|
return false;
|
|
164
171
|
}
|
|
165
172
|
try {
|
|
166
|
-
const
|
|
167
|
-
|
|
173
|
+
const data = await response.clone().json();
|
|
174
|
+
if (isXRPCErrorPayload(data)) {
|
|
175
|
+
return data.error === 'ExpiredToken';
|
|
176
|
+
}
|
|
168
177
|
}
|
|
169
178
|
catch { }
|
|
170
179
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../lib/credential-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../lib/credential-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch-handler.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** fetch handler function */
|
|
2
2
|
export type FetchHandler = (pathname: string, init: RequestInit) => Promise<Response>;
|
|
3
|
-
/**
|
|
3
|
+
/** fetch handler in an object */
|
|
4
4
|
export interface FetchHandlerObject {
|
|
5
5
|
handle(this: FetchHandlerObject, pathname: string, init: RequestInit): Promise<Response>;
|
|
6
6
|
}
|
package/dist/fetch-handler.js
CHANGED
|
@@ -7,7 +7,7 @@ export const buildFetchHandler = (handler) => {
|
|
|
7
7
|
export const simpleFetchHandler = ({ service, fetch: _fetch = fetch, }) => {
|
|
8
8
|
return async (pathname, init) => {
|
|
9
9
|
const url = new URL(pathname, service);
|
|
10
|
-
return _fetch(url, init);
|
|
10
|
+
return await _fetch(url, init);
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
13
|
//# sourceMappingURL=fetch-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-handler.js","sourceRoot":"","sources":["../lib/fetch-handler.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAA0C,EAAgB,EAAE;IAC7F,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAClC,OAAO,EACP,KAAK,EAAE,MAAM,GAAG,KAAK,GACM,EAAgB,EAAE;IAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-handler.js","sourceRoot":"","sources":["../lib/fetch-handler.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAA0C,EAAgB,EAAE;IAC7F,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAClC,OAAO,EACP,KAAK,EAAE,MAAM,GAAG,KAAK,GACM,EAAgB,EAAE;IAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;AACH,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC"}
|
package/dist/rpc.d.ts
CHANGED
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
import type { At, Procedures, Queries } from './lexicons.js';
|
|
2
2
|
import { type FetchHandler, type FetchHandlerObject } from './fetch-handler.js';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated
|
|
5
|
+
*/
|
|
3
6
|
export type HeadersObject = Record<string, string>;
|
|
4
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Response from XRPC service
|
|
9
|
+
* @deprecated
|
|
10
|
+
*/
|
|
5
11
|
export interface XRPCResponse<T = any> {
|
|
6
12
|
data: T;
|
|
7
13
|
headers: HeadersObject;
|
|
8
14
|
}
|
|
9
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Options for constructing an XRPC error
|
|
17
|
+
* @deprecated
|
|
18
|
+
*/
|
|
10
19
|
export interface XRPCErrorOptions {
|
|
11
20
|
kind?: string;
|
|
12
21
|
description?: string;
|
|
13
22
|
headers?: HeadersObject;
|
|
14
23
|
cause?: unknown;
|
|
15
24
|
}
|
|
16
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Error coming from the XRPC service
|
|
27
|
+
* @deprecated
|
|
28
|
+
*/
|
|
17
29
|
export declare class XRPCError extends Error {
|
|
18
30
|
name: string;
|
|
19
31
|
/** Response status */
|
|
@@ -26,17 +38,26 @@ export declare class XRPCError extends Error {
|
|
|
26
38
|
description?: string;
|
|
27
39
|
constructor(status: number, { kind, description, headers, cause, }?: XRPCErrorOptions);
|
|
28
40
|
}
|
|
29
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Service proxy options
|
|
43
|
+
* @deprecated
|
|
44
|
+
*/
|
|
30
45
|
export interface XRPCProxyOptions {
|
|
31
46
|
type: 'atproto_pds' | 'atproto_labeler' | 'bsky_fg' | 'bsky_notif' | ({} & string);
|
|
32
47
|
service: At.Did;
|
|
33
48
|
}
|
|
34
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Options for constructing an XRPC
|
|
51
|
+
* @deprecated
|
|
52
|
+
*/
|
|
35
53
|
export interface XRPCOptions {
|
|
36
54
|
handler: FetchHandler | FetchHandlerObject;
|
|
37
55
|
proxy?: XRPCProxyOptions;
|
|
38
56
|
}
|
|
39
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* XRPC request options
|
|
59
|
+
* @deprecated
|
|
60
|
+
*/
|
|
40
61
|
export interface XRPCRequestOptions {
|
|
41
62
|
type: 'get' | 'post';
|
|
42
63
|
nsid: string;
|
|
@@ -45,7 +66,10 @@ export interface XRPCRequestOptions {
|
|
|
45
66
|
data?: FormData | Blob | ArrayBufferView | Record<string, unknown>;
|
|
46
67
|
signal?: AbortSignal;
|
|
47
68
|
}
|
|
48
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* XRPC response
|
|
71
|
+
* @deprecated
|
|
72
|
+
*/
|
|
49
73
|
export interface XRPCResponse<T = any> {
|
|
50
74
|
data: T;
|
|
51
75
|
headers: HeadersObject;
|
|
@@ -57,7 +81,10 @@ interface BaseRPCOptions {
|
|
|
57
81
|
/** Signal for aborting the request */
|
|
58
82
|
signal?: AbortSignal;
|
|
59
83
|
}
|
|
60
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Options for the query/procedure request
|
|
86
|
+
* @deprecated
|
|
87
|
+
*/
|
|
61
88
|
export type RPCOptions<T> = BaseRPCOptions & (T extends {
|
|
62
89
|
params: any;
|
|
63
90
|
} ? {
|
|
@@ -70,6 +97,9 @@ export type RPCOptions<T> = BaseRPCOptions & (T extends {
|
|
|
70
97
|
type OutputOf<T> = T extends {
|
|
71
98
|
output: any;
|
|
72
99
|
} ? T['output'] : never;
|
|
100
|
+
/**
|
|
101
|
+
* @deprecated
|
|
102
|
+
*/
|
|
73
103
|
export declare class XRPC {
|
|
74
104
|
handle: FetchHandler;
|
|
75
105
|
proxy: XRPCProxyOptions | undefined;
|
|
@@ -91,6 +121,12 @@ export declare class XRPC {
|
|
|
91
121
|
/** Makes a request to the XRPC service */
|
|
92
122
|
request(options: XRPCRequestOptions): Promise<XRPCResponse>;
|
|
93
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* @deprecated
|
|
126
|
+
*/
|
|
94
127
|
export declare const clone: (rpc: XRPC) => XRPC;
|
|
128
|
+
/**
|
|
129
|
+
* @deprecated
|
|
130
|
+
*/
|
|
95
131
|
export declare const withProxy: (rpc: XRPC, options: XRPCProxyOptions) => XRPC;
|
|
96
132
|
export {};
|
package/dist/rpc.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { buildFetchHandler } from './fetch-handler.js';
|
|
2
2
|
import { mergeHeaders } from './utils/http.js';
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Error coming from the XRPC service
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
4
7
|
export class XRPCError extends Error {
|
|
5
8
|
constructor(status, { kind = `HTTP error ${status}`, description = `Unspecified error description`, headers, cause, } = {}) {
|
|
6
9
|
super(`${kind} > ${description}`, { cause });
|
|
@@ -11,6 +14,9 @@ export class XRPCError extends Error {
|
|
|
11
14
|
this.headers = headers || {};
|
|
12
15
|
}
|
|
13
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated
|
|
19
|
+
*/
|
|
14
20
|
export class XRPC {
|
|
15
21
|
constructor({ handler, proxy }) {
|
|
16
22
|
this.handle = buildFetchHandler(handler);
|
|
@@ -132,9 +138,15 @@ const isErrorResponse = (value) => {
|
|
|
132
138
|
return ((kindType === 'undefined' || kindType === 'string') &&
|
|
133
139
|
(messageType === 'undefined' || messageType === 'string'));
|
|
134
140
|
};
|
|
141
|
+
/**
|
|
142
|
+
* @deprecated
|
|
143
|
+
*/
|
|
135
144
|
export const clone = (rpc) => {
|
|
136
145
|
return new XRPC({ handler: rpc.handle, proxy: rpc.proxy });
|
|
137
146
|
};
|
|
147
|
+
/**
|
|
148
|
+
* @deprecated
|
|
149
|
+
*/
|
|
138
150
|
export const withProxy = (rpc, options) => {
|
|
139
151
|
return new XRPC({ handler: rpc.handle, proxy: options });
|
|
140
152
|
};
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../lib/rpc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAA8C,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../lib/rpc.ts"],"names":[],"mappings":"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"}
|