@blorp-labs/piefed-api-client 0.0.0-7e59b13 → 0.0.0-838220e
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/create-client.d.ts +12 -4
- package/dist/create-client.d.ts.map +1 -1
- package/dist/create-client.js +21 -8
- package/dist/create-client.js.map +1 -1
- package/package.json +1 -1
- package/src/create-client.ts +26 -8
package/dist/create-client.d.ts
CHANGED
|
@@ -73,8 +73,7 @@ declare const allFns: {
|
|
|
73
73
|
getGetApiAlphaSiteInstanceChooserSearchUrl: (params?: import("./schemas").GetApiAlphaSiteInstanceChooserSearchParams) => string;
|
|
74
74
|
getApiAlphaSiteInstanceChooserSearch: (params?: import("./schemas").GetApiAlphaSiteInstanceChooserSearchParams, options?: RequestInit) => Promise<site.getApiAlphaSiteInstanceChooserSearchResponse>;
|
|
75
75
|
getGetApiAlphaPrivateMessageListUrl: (params?: import("./schemas").GetApiAlphaPrivateMessageListParams) => string;
|
|
76
|
-
getApiAlphaPrivateMessageList: (params?: import("./schemas").GetApiAlphaPrivateMessageListParams,
|
|
77
|
-
options?: RequestInit) => Promise<privateMessage.getApiAlphaPrivateMessageListResponse>;
|
|
76
|
+
getApiAlphaPrivateMessageList: (params?: import("./schemas").GetApiAlphaPrivateMessageListParams, options?: RequestInit) => Promise<privateMessage.getApiAlphaPrivateMessageListResponse>;
|
|
78
77
|
getGetApiAlphaPrivateMessageConversationUrl: (params?: import("./schemas").GetApiAlphaPrivateMessageConversationParams) => string;
|
|
79
78
|
getApiAlphaPrivateMessageConversation: (params?: import("./schemas").GetApiAlphaPrivateMessageConversationParams, options?: RequestInit) => Promise<privateMessage.getApiAlphaPrivateMessageConversationResponse>;
|
|
80
79
|
getPostApiAlphaPrivateMessageConversationLeaveUrl: () => string;
|
|
@@ -185,7 +184,7 @@ declare const allFns: {
|
|
|
185
184
|
putApiAlphaCommunityFlair: (communityFlairEditRequest: import("./schemas").CommunityFlairEditRequest, options?: RequestInit) => Promise<community.putApiAlphaCommunityFlairResponse>;
|
|
186
185
|
getPostApiAlphaCommunityFlairDeleteUrl: () => string;
|
|
187
186
|
postApiAlphaCommunityFlairDelete: (communityFlairDeleteRequest: import("./schemas").CommunityFlairDeleteRequest, options?: RequestInit) => Promise<community.postApiAlphaCommunityFlairDeleteResponse>;
|
|
188
|
-
getGetApiAlphaCommentListUrl: (//
|
|
187
|
+
getGetApiAlphaCommentListUrl: (//instance-b.com');
|
|
189
188
|
params?: import("./schemas").GetApiAlphaCommentListParams) => string;
|
|
190
189
|
getApiAlphaCommentList: (params?: import("./schemas").GetApiAlphaCommentListParams, options?: RequestInit) => Promise<comment.getApiAlphaCommentListResponse>;
|
|
191
190
|
getPostApiAlphaCommentLikeUrl: () => string;
|
|
@@ -223,6 +222,10 @@ type AsyncFn = (...args: any[]) => Promise<any>;
|
|
|
223
222
|
type ApiFunctions = {
|
|
224
223
|
[K in keyof typeof allFns as (typeof allFns)[K] extends AsyncFn ? K : never]: (typeof allFns)[K];
|
|
225
224
|
};
|
|
225
|
+
interface CreateClientOptions {
|
|
226
|
+
/** Default headers merged into every request (e.g. Authorization). */
|
|
227
|
+
headers?: Record<string, string>;
|
|
228
|
+
}
|
|
226
229
|
/**
|
|
227
230
|
* Create a client bound to a specific PieFed instance.
|
|
228
231
|
*
|
|
@@ -230,10 +233,15 @@ type ApiFunctions = {
|
|
|
230
233
|
* const client = createClient('https://piefed.social');
|
|
231
234
|
* const site = await client.getApiAlphaSite();
|
|
232
235
|
*
|
|
236
|
+
* // With auth:
|
|
237
|
+
* const client = createClient('https://piefed.social', {
|
|
238
|
+
* headers: { Authorization: 'Bearer <token>' },
|
|
239
|
+
* });
|
|
240
|
+
*
|
|
233
241
|
* // Two instances at the same time:
|
|
234
242
|
* const a = createClient('https://instance-a.com');
|
|
235
243
|
* const b = createClient('https://instance-b.com');
|
|
236
244
|
*/
|
|
237
|
-
export declare function createClient(baseUrl: string): ApiFunctions;
|
|
245
|
+
export declare function createClient(baseUrl: string, options?: CreateClientOptions): ApiFunctions;
|
|
238
246
|
export {};
|
|
239
247
|
//# sourceMappingURL=create-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../src/create-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAE3C,QAAA,MAAM,MAAM;;
|
|
1
|
+
{"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../src/create-client.ts"],"names":[],"mappings":"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"}
|
package/dist/create-client.js
CHANGED
|
@@ -29,33 +29,46 @@ const allFns = {
|
|
|
29
29
|
* const client = createClient('https://piefed.social');
|
|
30
30
|
* const site = await client.getApiAlphaSite();
|
|
31
31
|
*
|
|
32
|
+
* // With auth:
|
|
33
|
+
* const client = createClient('https://piefed.social', {
|
|
34
|
+
* headers: { Authorization: 'Bearer <token>' },
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
32
37
|
* // Two instances at the same time:
|
|
33
38
|
* const a = createClient('https://instance-a.com');
|
|
34
39
|
* const b = createClient('https://instance-b.com');
|
|
35
40
|
*/
|
|
36
|
-
export function createClient(baseUrl) {
|
|
41
|
+
export function createClient(baseUrl, options = {}) {
|
|
37
42
|
const boundFns = {};
|
|
38
43
|
for (const [key, fn] of Object.entries(allFns)) {
|
|
39
44
|
if (typeof fn !== 'function')
|
|
40
45
|
continue;
|
|
41
46
|
boundFns[key] = (...args) => {
|
|
42
|
-
// options is always the last argument; inject baseUrl into it
|
|
47
|
+
// options is always the last argument; inject baseUrl and default headers into it
|
|
43
48
|
const last = args[args.length - 1];
|
|
49
|
+
const extra = {
|
|
50
|
+
baseUrl,
|
|
51
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
52
|
+
};
|
|
44
53
|
if (last !== null && typeof last === 'object' && !Array.isArray(last)) {
|
|
45
|
-
|
|
54
|
+
const lastObj = last;
|
|
55
|
+
args[args.length - 1] = {
|
|
56
|
+
...extra,
|
|
57
|
+
...lastObj,
|
|
58
|
+
// per-call headers win, but default headers fill in any gaps
|
|
59
|
+
headers: { ...options.headers, ...lastObj.headers },
|
|
60
|
+
};
|
|
46
61
|
}
|
|
47
62
|
else if (last === undefined || args.length === 0) {
|
|
48
|
-
// either no args or options was explicitly undefined
|
|
49
63
|
if (args.length > 0) {
|
|
50
|
-
args[args.length - 1] =
|
|
64
|
+
args[args.length - 1] = extra;
|
|
51
65
|
}
|
|
52
66
|
else {
|
|
53
|
-
args.push(
|
|
67
|
+
args.push(extra);
|
|
54
68
|
}
|
|
55
69
|
}
|
|
56
70
|
else {
|
|
57
|
-
|
|
58
|
-
args.push({ baseUrl });
|
|
71
|
+
args.push(extra);
|
|
59
72
|
}
|
|
60
73
|
return fn(...args);
|
|
61
74
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-client.js","sourceRoot":"","sources":["../src/create-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAE3C,MAAM,MAAM,GAAG;IACb,GAAG,KAAK;IACR,GAAG,OAAO;IACV,GAAG,SAAS;IACZ,GAAG,IAAI;IACP,GAAG,IAAI;IACP,GAAG,IAAI;IACP,GAAG,cAAc;IACjB,GAAG,IAAI;IACP,GAAG,KAAK;IACR,GAAG,MAAM;IACT,GAAG,IAAI;CACR,CAAC;
|
|
1
|
+
{"version":3,"file":"create-client.js","sourceRoot":"","sources":["../src/create-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAE3C,MAAM,MAAM,GAAG;IACb,GAAG,KAAK;IACR,GAAG,OAAO;IACV,GAAG,SAAS;IACZ,GAAG,IAAI;IACP,GAAG,IAAI;IACP,GAAG,IAAI;IACP,GAAG,cAAc;IACjB,GAAG,IAAI;IACP,GAAG,KAAK;IACR,GAAG,MAAM;IACT,GAAG,IAAI;CACR,CAAC;AAaF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,UAA+B,EAAE;IAC7E,MAAM,QAAQ,GAAG,EAA6B,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,EAAE,KAAK,UAAU;YAAE,SAAS;QAEvC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACrC,kFAAkF;YAClF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAsC;gBAC/C,OAAO;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD,CAAC;YACF,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,MAAM,OAAO,GAAG,IAA0C,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;oBACtB,GAAG,KAAK;oBACR,GAAG,OAAO;oBACV,6DAA6D;oBAC7D,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,GAAI,OAAO,CAAC,OAA8C,EAAE;iBAC5F,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YACD,OAAQ,EAAc,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,QAAwB,CAAC;AAClC,CAAC"}
|
package/package.json
CHANGED
package/src/create-client.ts
CHANGED
|
@@ -30,6 +30,11 @@ type ApiFunctions = {
|
|
|
30
30
|
[K in keyof typeof allFns as (typeof allFns)[K] extends AsyncFn ? K : never]: (typeof allFns)[K];
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
+
interface CreateClientOptions {
|
|
34
|
+
/** Default headers merged into every request (e.g. Authorization). */
|
|
35
|
+
headers?: Record<string, string>;
|
|
36
|
+
}
|
|
37
|
+
|
|
33
38
|
/**
|
|
34
39
|
* Create a client bound to a specific PieFed instance.
|
|
35
40
|
*
|
|
@@ -37,31 +42,44 @@ type ApiFunctions = {
|
|
|
37
42
|
* const client = createClient('https://piefed.social');
|
|
38
43
|
* const site = await client.getApiAlphaSite();
|
|
39
44
|
*
|
|
45
|
+
* // With auth:
|
|
46
|
+
* const client = createClient('https://piefed.social', {
|
|
47
|
+
* headers: { Authorization: 'Bearer <token>' },
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
40
50
|
* // Two instances at the same time:
|
|
41
51
|
* const a = createClient('https://instance-a.com');
|
|
42
52
|
* const b = createClient('https://instance-b.com');
|
|
43
53
|
*/
|
|
44
|
-
export function createClient(baseUrl: string): ApiFunctions {
|
|
54
|
+
export function createClient(baseUrl: string, options: CreateClientOptions = {}): ApiFunctions {
|
|
45
55
|
const boundFns = {} as Record<string, AsyncFn>;
|
|
46
56
|
|
|
47
57
|
for (const [key, fn] of Object.entries(allFns)) {
|
|
48
58
|
if (typeof fn !== 'function') continue;
|
|
49
59
|
|
|
50
60
|
boundFns[key] = (...args: unknown[]) => {
|
|
51
|
-
// options is always the last argument; inject baseUrl into it
|
|
61
|
+
// options is always the last argument; inject baseUrl and default headers into it
|
|
52
62
|
const last = args[args.length - 1];
|
|
63
|
+
const extra: RequestInit & { baseUrl: string } = {
|
|
64
|
+
baseUrl,
|
|
65
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
66
|
+
};
|
|
53
67
|
if (last !== null && typeof last === 'object' && !Array.isArray(last)) {
|
|
54
|
-
|
|
68
|
+
const lastObj = last as RequestInit & { baseUrl?: string };
|
|
69
|
+
args[args.length - 1] = {
|
|
70
|
+
...extra,
|
|
71
|
+
...lastObj,
|
|
72
|
+
// per-call headers win, but default headers fill in any gaps
|
|
73
|
+
headers: { ...options.headers, ...(lastObj.headers as Record<string, string> | undefined) },
|
|
74
|
+
};
|
|
55
75
|
} else if (last === undefined || args.length === 0) {
|
|
56
|
-
// either no args or options was explicitly undefined
|
|
57
76
|
if (args.length > 0) {
|
|
58
|
-
args[args.length - 1] =
|
|
77
|
+
args[args.length - 1] = extra;
|
|
59
78
|
} else {
|
|
60
|
-
args.push(
|
|
79
|
+
args.push(extra);
|
|
61
80
|
}
|
|
62
81
|
} else {
|
|
63
|
-
|
|
64
|
-
args.push({ baseUrl });
|
|
82
|
+
args.push(extra);
|
|
65
83
|
}
|
|
66
84
|
return (fn as AsyncFn)(...args);
|
|
67
85
|
};
|