@atcute/client 3.1.0 → 4.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/dist/client.d.ts +26 -41
- package/dist/client.js +14 -2
- package/dist/client.js.map +1 -1
- package/dist/credential-manager.d.ts +5 -5
- package/dist/credential-manager.js +8 -5
- package/dist/credential-manager.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/lib/client.ts +83 -28
- package/lib/credential-manager.ts +19 -12
- package/lib/env.d.ts +1 -0
- package/lib/index.ts +1 -2
- package/package.json +12 -11
- package/dist/lexicons.d.ts +0 -2199
- package/dist/lexicons.js +0 -4
- package/dist/lexicons.js.map +0 -1
- package/dist/rpc.d.ts +0 -132
- package/dist/rpc.js +0 -153
- package/dist/rpc.js.map +0 -1
- package/dist/utils/did.d.ts +0 -38
- package/dist/utils/did.js +0 -44
- package/dist/utils/did.js.map +0 -1
- package/dist/utils/http.d.ts +0 -7
- package/dist/utils/http.js +0 -20
- package/dist/utils/http.js.map +0 -1
- package/lib/lexicons.ts +0 -2204
- package/lib/rpc.ts +0 -298
- package/lib/utils/did.ts +0 -73
- package/lib/utils/http.ts +0 -27
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Did } from '@atcute/lexicons';
|
|
2
|
+
import type { XRPCProcedures, XRPCQueries } from '@atcute/lexicons/ambient';
|
|
3
|
+
import type { InferInput, InferOutput, ObjectSchema, XRPCBlobBodyParam, XRPCLexBodyParam, XRPCProcedureMetadata, XRPCQueryMetadata } from '@atcute/lexicons/validations';
|
|
2
4
|
import { type FetchHandler, type FetchHandlerObject } from './fetch-handler.js';
|
|
3
5
|
type RequiredKeysOf<TType extends object> = TType extends any ? Exclude<{
|
|
4
6
|
[Key in keyof TType]: TType extends Record<Key, TType[Key]> ? Key : never;
|
|
@@ -6,11 +8,7 @@ type RequiredKeysOf<TType extends object> = TType extends any ? Exclude<{
|
|
|
6
8
|
type HasRequiredKeys<TType extends object> = RequiredKeysOf<TType> extends never ? false : true;
|
|
7
9
|
type ResponseFormat = 'json' | 'blob' | 'bytes' | 'stream';
|
|
8
10
|
type FormattedResponse<TDef> = {
|
|
9
|
-
json: TDef extends
|
|
10
|
-
response: {
|
|
11
|
-
json: infer TData;
|
|
12
|
-
};
|
|
13
|
-
} ? TData : unknown;
|
|
11
|
+
json: TDef extends XRPCQueryMetadata<any, infer Body extends XRPCLexBodyParam, any> ? InferOutput<Body['schema']> : TDef extends XRPCProcedureMetadata<any, any, infer Body extends XRPCLexBodyParam, any> ? InferOutput<Body['schema']> : unknown;
|
|
14
12
|
blob: Blob;
|
|
15
13
|
bytes: Uint8Array;
|
|
16
14
|
stream: ReadableStream<Uint8Array>;
|
|
@@ -19,45 +17,36 @@ type BaseRequestOptions = {
|
|
|
19
17
|
signal?: AbortSignal;
|
|
20
18
|
headers?: HeadersInit;
|
|
21
19
|
};
|
|
22
|
-
export type QueryRequestOptions<TDef> = BaseRequestOptions & (TDef extends {
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
} ? {
|
|
20
|
+
export type QueryRequestOptions<TDef> = BaseRequestOptions & (TDef extends XRPCQueryMetadata<infer Params, infer Output, any> ? (Params extends ObjectSchema ? {
|
|
21
|
+
params: InferInput<Params>;
|
|
22
|
+
} : {
|
|
23
|
+
params?: Record<string, unknown>;
|
|
24
|
+
}) & (Output extends XRPCLexBodyParam ? {
|
|
27
25
|
as?: ResponseFormat | null;
|
|
28
26
|
} : {
|
|
29
27
|
as: ResponseFormat | null;
|
|
30
|
-
} : {
|
|
28
|
+
}) : {
|
|
31
29
|
as: ResponseFormat | null;
|
|
32
|
-
}) & (TDef extends {
|
|
33
|
-
params: infer TParams;
|
|
34
|
-
} ? {
|
|
35
|
-
params: TParams;
|
|
36
|
-
} : {
|
|
37
30
|
params?: Record<string, unknown>;
|
|
38
31
|
});
|
|
39
|
-
export type ProcedureRequestOptions<TDef> = BaseRequestOptions & (TDef extends {
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
} ? {
|
|
32
|
+
export type ProcedureRequestOptions<TDef> = BaseRequestOptions & (TDef extends XRPCProcedureMetadata<infer Params, infer Input, infer Output, any> ? (Params extends ObjectSchema ? {
|
|
33
|
+
params: InferInput<Params>;
|
|
34
|
+
} : {
|
|
35
|
+
params?: Record<string, unknown>;
|
|
36
|
+
}) & (Input extends XRPCLexBodyParam ? {
|
|
37
|
+
input: InferInput<Input['schema']>;
|
|
38
|
+
} : Input extends XRPCBlobBodyParam ? {
|
|
39
|
+
input: Blob | ArrayBuffer | ArrayBufferView | ReadableStream;
|
|
40
|
+
} : {
|
|
41
|
+
input?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream;
|
|
42
|
+
}) & (Output extends XRPCLexBodyParam ? {
|
|
44
43
|
as?: ResponseFormat | null;
|
|
45
44
|
} : {
|
|
46
45
|
as: ResponseFormat | null;
|
|
47
|
-
} : {
|
|
46
|
+
}) : {
|
|
48
47
|
as: ResponseFormat | null;
|
|
49
|
-
|
|
50
|
-
params: infer TParams;
|
|
51
|
-
} ? {
|
|
52
|
-
params: TParams;
|
|
53
|
-
} : {
|
|
48
|
+
input?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream;
|
|
54
49
|
params?: Record<string, unknown>;
|
|
55
|
-
}) & (TDef extends {
|
|
56
|
-
input: infer TInput;
|
|
57
|
-
} ? {
|
|
58
|
-
input: TInput;
|
|
59
|
-
} : {
|
|
60
|
-
input?: Record<string, unknown>;
|
|
61
50
|
});
|
|
62
51
|
/** standard XRPC error payload structure */
|
|
63
52
|
export type XRPCErrorPayload = {
|
|
@@ -78,11 +67,7 @@ export type SuccessClientResponse<TDef, TInit> = BaseClientResponse & {
|
|
|
78
67
|
/** response data */
|
|
79
68
|
data: TInit extends {
|
|
80
69
|
as: infer TFormat;
|
|
81
|
-
} ? TFormat extends ResponseFormat ? FormattedResponse<TDef>[TFormat] : TFormat extends null ? null : never : TDef extends
|
|
82
|
-
response: {
|
|
83
|
-
json: infer TData;
|
|
84
|
-
};
|
|
85
|
-
} ? TData : never;
|
|
70
|
+
} ? TFormat extends ResponseFormat ? FormattedResponse<TDef>[TFormat] : TFormat extends null ? null : never : TDef extends XRPCQueryMetadata<any, infer Body extends XRPCLexBodyParam, any> ? InferOutput<Body['schema']> : TDef extends XRPCProcedureMetadata<any, any, infer Body extends XRPCLexBodyParam, any> ? InferOutput<Body['schema']> : never;
|
|
86
71
|
};
|
|
87
72
|
/** represents a failed response returned by the client */
|
|
88
73
|
export type FailedClientResponse = BaseClientResponse & {
|
|
@@ -95,7 +80,7 @@ export type ClientResponse<TDef, TInit> = SuccessClientResponse<TDef, TInit> | F
|
|
|
95
80
|
/** options for configuring service proxying */
|
|
96
81
|
export type ServiceProxyOptions = {
|
|
97
82
|
/** DID identifier that the upstream service should look up */
|
|
98
|
-
did:
|
|
83
|
+
did: Did;
|
|
99
84
|
/**
|
|
100
85
|
* the specific service ID within the resolved DID document's `service` array
|
|
101
86
|
* that the upstream service should forward requests to.
|
|
@@ -117,7 +102,7 @@ export type ClientOptions = {
|
|
|
117
102
|
proxy?: ServiceProxyOptions | null;
|
|
118
103
|
};
|
|
119
104
|
/** XRPC API client */
|
|
120
|
-
export declare class Client<TQueries =
|
|
105
|
+
export declare class Client<TQueries = XRPCQueries, TProcedures = XRPCProcedures> {
|
|
121
106
|
#private;
|
|
122
107
|
handler: FetchHandler;
|
|
123
108
|
proxy: ServiceProxyOptions | null;
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { buildFetchHandler } from './fetch-handler.js';
|
|
2
|
-
import { mergeHeaders } from './utils/http.js';
|
|
3
2
|
const JSON_CONTENT_TYPE_RE = /\bapplication\/json\b/;
|
|
4
3
|
/** XRPC API client */
|
|
5
4
|
export class Client {
|
|
@@ -32,7 +31,7 @@ export class Client {
|
|
|
32
31
|
method,
|
|
33
32
|
signal,
|
|
34
33
|
body: input && !isWebInput ? JSON.stringify(input) : input,
|
|
35
|
-
headers:
|
|
34
|
+
headers: _mergeHeaders(headers, {
|
|
36
35
|
'content-type': input && !isWebInput ? 'application/json' : null,
|
|
37
36
|
'atproto-proxy': _constructProxyHeader(this.proxy),
|
|
38
37
|
}),
|
|
@@ -138,6 +137,19 @@ const _constructProxyHeader = (proxy) => {
|
|
|
138
137
|
}
|
|
139
138
|
return null;
|
|
140
139
|
};
|
|
140
|
+
const _mergeHeaders = (init, defaults) => {
|
|
141
|
+
let headers;
|
|
142
|
+
for (const name in defaults) {
|
|
143
|
+
const value = defaults[name];
|
|
144
|
+
if (value !== null) {
|
|
145
|
+
headers ??= new Headers(init);
|
|
146
|
+
if (!headers.has(name)) {
|
|
147
|
+
headers.set(name, value);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return headers ?? init;
|
|
152
|
+
};
|
|
141
153
|
export const isXRPCErrorPayload = (input) => {
|
|
142
154
|
if (typeof input !== 'object' || input == null) {
|
|
143
155
|
return false;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../lib/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../lib/client.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAA8C,MAAM,oBAAoB,CAAC;AAgKnG,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAErD,sBAAsB;AACtB,MAAM,OAAO,MAAM;IAIlB,YAAY,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI,EAAiB;QACnD,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,KAA6B,EAAE;QAIhF,OAAO,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAYD,GAAG,CAAC,IAAY,EAAE,UAAkC,EAAE;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAYD,IAAI,CAAC,IAAY,EAAE,UAAkC,EAAE;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CACb,MAAsB,EACtB,IAAY,EACZ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAA0B;QAE/E,MAAM,UAAU,GACf,KAAK;YACL,CAAC,KAAK,YAAY,IAAI;gBACrB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;gBACzB,KAAK,YAAY,WAAW;gBAC5B,KAAK,YAAY,cAAc,CAAC,CAAC;QAEnC,MAAM,GAAG,GAAG,SAAS,IAAI,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACxC,MAAM;YACN,MAAM;YACN,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;YAC1D,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE;gBAC/B,cAAc,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;gBAChE,eAAe,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;aAClD,CAAC;SACF,CAAC,CAAC;QAEH,CAAC;YACA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YAEjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAEzC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,IAAS,CAAC;gBAEd,IAAI,IAAI,IAAI,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrD,sDAAsD;oBACtD,IAAI,CAAC;wBACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACrC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;4BAChC,IAAI,GAAG,MAAM,CAAC;wBACf,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;gBACX,CAAC;qBAAM,CAAC;oBACP,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC/B,CAAC;gBAED,OAAO;oBACN,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,IAAI,IAAI;wBACb,KAAK,EAAE,kBAAkB;wBACzB,OAAO,EAAE,mCAAmC,MAAM,EAAE;qBACpD;iBACD,CAAC;YACH,CAAC;YAED,CAAC;gBACA,IAAI,IAAS,CAAC;gBACd,QAAQ,MAAM,EAAE,CAAC;oBAChB,KAAK,MAAM,CAAC,CAAC,CAAC;wBACb,IAAI,IAAI,IAAI,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BACrD,0CAA0C;4BAC1C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAC9B,CAAC;6BAAM,CAAC;4BACP,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;4BAE9B,MAAM,IAAI,SAAS,CAAC,sCAAsC,IAAI,GAAG,CAAC,CAAC;wBACpE,CAAC;wBAED,MAAM;oBACP,CAAC;oBAED,KAAK,IAAI,CAAC,CAAC,CAAC;wBACX,IAAI,GAAG,IAAI,CAAC;wBAEZ,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;wBAE9B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;4BAClB,MAAM,IAAI,SAAS,CAAC,sCAAsC,IAAI,GAAG,CAAC,CAAC;wBACpE,CAAC;wBAED,MAAM;oBACP,CAAC;oBAED,KAAK,MAAM,CAAC,CAAC,CAAC;wBACb,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAC7B,MAAM;oBACP,CAAC;oBACD,KAAK,OAAO,CAAC,CAAC,CAAC;wBACd,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;wBACpD,MAAM;oBACP,CAAC;oBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACf,IAAI,GAAG,QAAQ,CAAC,IAAK,CAAC;wBACtB,MAAM;oBACP,CAAC;gBACF,CAAC;gBAED,OAAO;oBACN,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,IAAI;iBACV,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAED,aAAa;AAEb,4BAA4B;AAC5B,MAAM,sBAAsB,GAAG,CAAC,MAA2C,EAAU,EAAE;IACtF,IAAI,YAAyC,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,YAAY,KAAK,IAAI,eAAe,EAAE,CAAC;YAEvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;oBACxD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBACvB,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,KAA6C,EAAiB,EAAE;IAC9F,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACrB,IAA6B,EAC7B,QAAuC,EACb,EAAE;IAC5B,IAAI,OAA4B,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAE9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,OAAO,IAAI,IAAI,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAU,EAA6B,EAAE;IAC3E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,KAAK,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,OAAO,CAAC;IAEzC,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,QAAQ,CAAC,CAAC;AAC3F,CAAC,CAAC;AAMF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,EAAE,GAGX,CAAC,KAAmE,EAAO,EAAE;IAChF,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,KAAK,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC;AASF,0DAA0D;AAC1D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAW7C,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE,IAAI,EAA8B;QAChF,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,IAAI,2BAA2B,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAElC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QAEhC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD;AAED,aAAa"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Did } from '@atcute/lexicons';
|
|
2
2
|
import { type FetchHandlerObject } from './fetch-handler.js';
|
|
3
3
|
/**
|
|
4
4
|
* represents the decoded access token, for convenience
|
|
@@ -8,7 +8,7 @@ export interface AtpAccessJwt {
|
|
|
8
8
|
/** access token scope */
|
|
9
9
|
scope: 'com.atproto.access' | 'com.atproto.appPass' | 'com.atproto.appPassPrivileged' | 'com.atproto.signupQueued' | 'com.atproto.takendown';
|
|
10
10
|
/** account DID */
|
|
11
|
-
sub:
|
|
11
|
+
sub: Did;
|
|
12
12
|
/** expiration time in Unix seconds */
|
|
13
13
|
exp: number;
|
|
14
14
|
/** token issued time in Unix seconds */
|
|
@@ -24,9 +24,9 @@ export interface AtpRefreshJwt {
|
|
|
24
24
|
/** unique identifier for this session */
|
|
25
25
|
jti: string;
|
|
26
26
|
/** account DID */
|
|
27
|
-
sub:
|
|
27
|
+
sub: Did;
|
|
28
28
|
/** intended audience of this refresh token, in DID */
|
|
29
|
-
aud:
|
|
29
|
+
aud: Did;
|
|
30
30
|
/** token expiration time in seconds */
|
|
31
31
|
exp: number;
|
|
32
32
|
/** token issued time in seconds */
|
|
@@ -41,7 +41,7 @@ export interface AtpSessionData {
|
|
|
41
41
|
/** account handle */
|
|
42
42
|
handle: string;
|
|
43
43
|
/** account DID */
|
|
44
|
-
did:
|
|
44
|
+
did: Did;
|
|
45
45
|
/** PDS endpoint found in the DID document, this will be used as the service URI if provided */
|
|
46
46
|
pdsUri?: string;
|
|
47
47
|
/** email address of the account, might not be available if on app password */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { getPdsEndpoint } from '@atcute/identity';
|
|
1
2
|
import { Client, ClientResponseError, isXRPCErrorPayload, ok } from './client.js';
|
|
2
3
|
import { simpleFetchHandler } from './fetch-handler.js';
|
|
3
|
-
import { getPdsEndpoint } from './utils/did.js';
|
|
4
4
|
import { decodeJwt } from './utils/jwt.js';
|
|
5
5
|
export class CredentialManager {
|
|
6
6
|
/** internal client instance for making authentication requests */
|
|
@@ -68,10 +68,13 @@ export class CredentialManager {
|
|
|
68
68
|
},
|
|
69
69
|
});
|
|
70
70
|
if (!response.ok) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
switch (response.data.error) {
|
|
72
|
+
case 'ExpiredToken':
|
|
73
|
+
case 'InvalidToken': {
|
|
74
|
+
this.session = undefined;
|
|
75
|
+
this.#onExpired?.(currentSession);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
75
78
|
}
|
|
76
79
|
throw new ClientResponseError(response);
|
|
77
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../lib/credential-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../lib/credential-manager.ts"],"names":[],"mappings":"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"}
|
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,aAAa,CAAC;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
|
package/lib/client.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Did } from '@atcute/lexicons';
|
|
2
|
+
import type { XRPCProcedures, XRPCQueries } from '@atcute/lexicons/ambient';
|
|
3
|
+
import type {
|
|
4
|
+
InferInput,
|
|
5
|
+
InferOutput,
|
|
6
|
+
ObjectSchema,
|
|
7
|
+
XRPCBlobBodyParam,
|
|
8
|
+
XRPCLexBodyParam,
|
|
9
|
+
XRPCProcedureMetadata,
|
|
10
|
+
XRPCQueryMetadata,
|
|
11
|
+
} from '@atcute/lexicons/validations';
|
|
2
12
|
|
|
3
13
|
import { buildFetchHandler, type FetchHandler, type FetchHandlerObject } from './fetch-handler.js';
|
|
4
|
-
import { mergeHeaders } from './utils/http.js';
|
|
5
14
|
|
|
6
15
|
// #region Type utilities
|
|
7
16
|
type RequiredKeysOf<TType extends object> = TType extends any
|
|
@@ -21,7 +30,11 @@ type HasRequiredKeys<TType extends object> = RequiredKeysOf<TType> extends never
|
|
|
21
30
|
type ResponseFormat = 'json' | 'blob' | 'bytes' | 'stream';
|
|
22
31
|
|
|
23
32
|
type FormattedResponse<TDef> = {
|
|
24
|
-
json: TDef extends
|
|
33
|
+
json: TDef extends XRPCQueryMetadata<any, infer Body extends XRPCLexBodyParam, any>
|
|
34
|
+
? InferOutput<Body['schema']>
|
|
35
|
+
: TDef extends XRPCProcedureMetadata<any, any, infer Body extends XRPCLexBodyParam, any>
|
|
36
|
+
? InferOutput<Body['schema']>
|
|
37
|
+
: unknown;
|
|
25
38
|
blob: Blob;
|
|
26
39
|
bytes: Uint8Array;
|
|
27
40
|
stream: ReadableStream<Uint8Array>;
|
|
@@ -36,27 +49,46 @@ type BaseRequestOptions = {
|
|
|
36
49
|
};
|
|
37
50
|
|
|
38
51
|
export type QueryRequestOptions<TDef> = BaseRequestOptions &
|
|
39
|
-
(TDef extends
|
|
40
|
-
?
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
(TDef extends XRPCQueryMetadata<infer Params, infer Output, any>
|
|
53
|
+
? (Params extends ObjectSchema
|
|
54
|
+
? // query has parameters
|
|
55
|
+
{ params: InferInput<Params> }
|
|
56
|
+
: // query has no parameters
|
|
57
|
+
{ params?: Record<string, unknown> }) &
|
|
58
|
+
(Output extends XRPCLexBodyParam // query has JSON response, format is optionally specified
|
|
59
|
+
? { as?: ResponseFormat | null }
|
|
60
|
+
: // query doesn't have JSON response, format needs to be specified
|
|
61
|
+
{ as: ResponseFormat | null })
|
|
62
|
+
: {
|
|
63
|
+
as: ResponseFormat | null;
|
|
64
|
+
params?: Record<string, unknown>;
|
|
65
|
+
});
|
|
48
66
|
|
|
49
67
|
export type ProcedureRequestOptions<TDef> = BaseRequestOptions &
|
|
50
|
-
(TDef extends
|
|
51
|
-
?
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
68
|
+
(TDef extends XRPCProcedureMetadata<infer Params, infer Input, infer Output, any>
|
|
69
|
+
? (Params extends ObjectSchema
|
|
70
|
+
? // procedure has parameters
|
|
71
|
+
{ params: InferInput<Params> }
|
|
72
|
+
: // procedure has no parameters
|
|
73
|
+
{ params?: Record<string, unknown> }) &
|
|
74
|
+
(Input extends XRPCLexBodyParam
|
|
75
|
+
? // procedure requires JSON input
|
|
76
|
+
{ input: InferInput<Input['schema']> }
|
|
77
|
+
: Input extends XRPCBlobBodyParam
|
|
78
|
+
? // procedure requires blob
|
|
79
|
+
{ input: Blob | ArrayBuffer | ArrayBufferView | ReadableStream }
|
|
80
|
+
: // procedure doesn't specify input
|
|
81
|
+
{ input?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream }) &
|
|
82
|
+
(Output extends XRPCLexBodyParam
|
|
83
|
+
? // procedure has JSON response, format is optionally specified
|
|
84
|
+
{ as?: ResponseFormat | null }
|
|
85
|
+
: // procedure doesn't have JSON response, format needs to be specified
|
|
86
|
+
{ as: ResponseFormat | null })
|
|
87
|
+
: {
|
|
88
|
+
as: ResponseFormat | null;
|
|
89
|
+
input?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream;
|
|
90
|
+
params?: Record<string, unknown>;
|
|
91
|
+
});
|
|
60
92
|
|
|
61
93
|
type InternalRequestOptions = BaseRequestOptions & {
|
|
62
94
|
as?: ResponseFormat | null;
|
|
@@ -92,9 +124,11 @@ export type SuccessClientResponse<TDef, TInit> = BaseClientResponse & {
|
|
|
92
124
|
: TFormat extends null
|
|
93
125
|
? null
|
|
94
126
|
: never
|
|
95
|
-
: TDef extends
|
|
96
|
-
?
|
|
97
|
-
:
|
|
127
|
+
: TDef extends XRPCQueryMetadata<any, infer Body extends XRPCLexBodyParam, any>
|
|
128
|
+
? InferOutput<Body['schema']>
|
|
129
|
+
: TDef extends XRPCProcedureMetadata<any, any, infer Body extends XRPCLexBodyParam, any>
|
|
130
|
+
? InferOutput<Body['schema']>
|
|
131
|
+
: never;
|
|
98
132
|
};
|
|
99
133
|
|
|
100
134
|
/** represents a failed response returned by the client */
|
|
@@ -113,7 +147,7 @@ export type ClientResponse<TDef, TInit> = SuccessClientResponse<TDef, TInit> | F
|
|
|
113
147
|
/** options for configuring service proxying */
|
|
114
148
|
export type ServiceProxyOptions = {
|
|
115
149
|
/** DID identifier that the upstream service should look up */
|
|
116
|
-
did:
|
|
150
|
+
did: Did;
|
|
117
151
|
/**
|
|
118
152
|
* the specific service ID within the resolved DID document's `service` array
|
|
119
153
|
* that the upstream service should forward requests to.
|
|
@@ -139,7 +173,7 @@ export type ClientOptions = {
|
|
|
139
173
|
const JSON_CONTENT_TYPE_RE = /\bapplication\/json\b/;
|
|
140
174
|
|
|
141
175
|
/** XRPC API client */
|
|
142
|
-
export class Client<TQueries =
|
|
176
|
+
export class Client<TQueries = XRPCQueries, TProcedures = XRPCProcedures> {
|
|
143
177
|
handler: FetchHandler;
|
|
144
178
|
proxy: ServiceProxyOptions | null;
|
|
145
179
|
|
|
@@ -206,7 +240,7 @@ export class Client<TQueries = Queries, TProcedures = Procedures> {
|
|
|
206
240
|
method,
|
|
207
241
|
signal,
|
|
208
242
|
body: input && !isWebInput ? JSON.stringify(input) : input,
|
|
209
|
-
headers:
|
|
243
|
+
headers: _mergeHeaders(headers, {
|
|
210
244
|
'content-type': input && !isWebInput ? 'application/json' : null,
|
|
211
245
|
'atproto-proxy': _constructProxyHeader(this.proxy),
|
|
212
246
|
}),
|
|
@@ -331,6 +365,27 @@ const _constructProxyHeader = (proxy: ServiceProxyOptions | null | undefined): s
|
|
|
331
365
|
return null;
|
|
332
366
|
};
|
|
333
367
|
|
|
368
|
+
const _mergeHeaders = (
|
|
369
|
+
init: HeadersInit | undefined,
|
|
370
|
+
defaults: Record<string, string | null>,
|
|
371
|
+
): HeadersInit | undefined => {
|
|
372
|
+
let headers: Headers | undefined;
|
|
373
|
+
|
|
374
|
+
for (const name in defaults) {
|
|
375
|
+
const value = defaults[name];
|
|
376
|
+
|
|
377
|
+
if (value !== null) {
|
|
378
|
+
headers ??= new Headers(init);
|
|
379
|
+
|
|
380
|
+
if (!headers.has(name)) {
|
|
381
|
+
headers.set(name, value);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return headers ?? init;
|
|
387
|
+
};
|
|
388
|
+
|
|
334
389
|
export const isXRPCErrorPayload = (input: any): input is XRPCErrorPayload => {
|
|
335
390
|
if (typeof input !== 'object' || input == null) {
|
|
336
391
|
return false;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { getPdsEndpoint, type DidDocument } from '@atcute/identity';
|
|
2
|
+
import type { Did } from '@atcute/lexicons';
|
|
3
|
+
import type { InferXRPCBodyOutput } from '@atcute/lexicons/validations';
|
|
4
|
+
|
|
5
|
+
import type { ComAtprotoServerCreateSession } from '@atcute/atproto';
|
|
2
6
|
|
|
3
7
|
import { Client, ClientResponseError, isXRPCErrorPayload, ok } from './client.js';
|
|
4
8
|
import { simpleFetchHandler, type FetchHandlerObject } from './fetch-handler.js';
|
|
5
9
|
|
|
6
|
-
import { getPdsEndpoint, type DidDocument } from './utils/did.js';
|
|
7
10
|
import { decodeJwt } from './utils/jwt.js';
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -19,7 +22,7 @@ export interface AtpAccessJwt {
|
|
|
19
22
|
| 'com.atproto.signupQueued'
|
|
20
23
|
| 'com.atproto.takendown';
|
|
21
24
|
/** account DID */
|
|
22
|
-
sub:
|
|
25
|
+
sub: Did;
|
|
23
26
|
/** expiration time in Unix seconds */
|
|
24
27
|
exp: number;
|
|
25
28
|
/** token issued time in Unix seconds */
|
|
@@ -36,9 +39,9 @@ export interface AtpRefreshJwt {
|
|
|
36
39
|
/** unique identifier for this session */
|
|
37
40
|
jti: string;
|
|
38
41
|
/** account DID */
|
|
39
|
-
sub:
|
|
42
|
+
sub: Did;
|
|
40
43
|
/** intended audience of this refresh token, in DID */
|
|
41
|
-
aud:
|
|
44
|
+
aud: Did;
|
|
42
45
|
/** token expiration time in seconds */
|
|
43
46
|
exp: number;
|
|
44
47
|
/** token issued time in seconds */
|
|
@@ -54,7 +57,7 @@ export interface AtpSessionData {
|
|
|
54
57
|
/** account handle */
|
|
55
58
|
handle: string;
|
|
56
59
|
/** account DID */
|
|
57
|
-
did:
|
|
60
|
+
did: Did;
|
|
58
61
|
/** PDS endpoint found in the DID document, this will be used as the service URI if provided */
|
|
59
62
|
pdsUri?: string;
|
|
60
63
|
/** email address of the account, might not be available if on app password */
|
|
@@ -184,11 +187,13 @@ export class CredentialManager implements FetchHandlerObject {
|
|
|
184
187
|
});
|
|
185
188
|
|
|
186
189
|
if (!response.ok) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
switch (response.data.error) {
|
|
191
|
+
case 'ExpiredToken':
|
|
192
|
+
case 'InvalidToken': {
|
|
193
|
+
this.session = undefined;
|
|
194
|
+
this.#onExpired?.(currentSession);
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
192
197
|
}
|
|
193
198
|
|
|
194
199
|
throw new ClientResponseError(response);
|
|
@@ -198,7 +203,9 @@ export class CredentialManager implements FetchHandlerObject {
|
|
|
198
203
|
this.#onRefresh?.(this.session!);
|
|
199
204
|
}
|
|
200
205
|
|
|
201
|
-
#updateSession(
|
|
206
|
+
#updateSession(
|
|
207
|
+
raw: InferXRPCBodyOutput<ComAtprotoServerCreateSession.mainSchema['output']>,
|
|
208
|
+
): AtpSessionData {
|
|
202
209
|
const didDoc = raw.didDoc as DidDocument | undefined;
|
|
203
210
|
|
|
204
211
|
let pdsUri: string | undefined;
|
package/lib/env.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import type {} from '@atcute/atproto';
|
package/lib/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/client",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "4.0.0",
|
|
5
5
|
"description": "lightweight and cute API client for AT Protocol",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -15,22 +15,23 @@
|
|
|
15
15
|
"!lib/**/*.test.ts"
|
|
16
16
|
],
|
|
17
17
|
"exports": {
|
|
18
|
-
".": "./dist/index.js"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
18
|
+
".": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@atcute/identity": "^1.0.0",
|
|
22
|
+
"@atcute/lexicons": "^1.0.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@vitest/coverage-v8": "^3.
|
|
26
|
-
"vitest": "^3.
|
|
27
|
-
"@atcute/
|
|
28
|
-
"@atcute/
|
|
25
|
+
"@vitest/coverage-v8": "^3.1.3",
|
|
26
|
+
"vitest": "^3.1.3",
|
|
27
|
+
"@atcute/bluesky": "^3.0.0",
|
|
28
|
+
"@atcute/atproto": "^3.0.0",
|
|
29
|
+
"@atcute/internal-dev-env": "^1.0.1"
|
|
29
30
|
},
|
|
30
31
|
"scripts": {
|
|
31
32
|
"build": "tsc --project tsconfig.build.json",
|
|
33
|
+
"postbuild": "node ./scripts/ensure-files.js",
|
|
32
34
|
"test": "vitest run --coverage",
|
|
33
|
-
"generate": "./scripts/generate-lexicons.sh",
|
|
34
35
|
"prepublish": "rm -rf dist; pnpm run build"
|
|
35
36
|
}
|
|
36
37
|
}
|