mini-interactions-rest 0.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.
@@ -0,0 +1,14 @@
1
+ interface DiscordRestClientOptions {
2
+ token: string;
3
+ applicationId: string;
4
+ apiBaseUrl?: string;
5
+ fetchImplementation?: typeof fetch;
6
+ }
7
+ declare class DiscordRestClient {
8
+ #private;
9
+ readonly applicationId: string;
10
+ constructor(options: DiscordRestClientOptions);
11
+ request<T>(path: string, init?: RequestInit): Promise<T>;
12
+ }
13
+
14
+ export { DiscordRestClient, type DiscordRestClientOptions };
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ // src/index.ts
2
+ var DiscordRestClient = class {
3
+ #token;
4
+ #apiBaseUrl;
5
+ #fetch;
6
+ applicationId;
7
+ constructor(options) {
8
+ if (options.token.trim().length === 0) throw new TypeError("token must not be empty");
9
+ if (options.applicationId.trim().length === 0) throw new TypeError("applicationId must not be empty");
10
+ this.#token = options.token;
11
+ this.applicationId = options.applicationId;
12
+ this.#apiBaseUrl = (options.apiBaseUrl ?? "https://discord.com/api/v10").replace(/\/$/, "");
13
+ this.#fetch = options.fetchImplementation ?? globalThis.fetch;
14
+ if (typeof this.#fetch !== "function") throw new TypeError("fetch implementation must be provided");
15
+ }
16
+ async request(path, init = {}) {
17
+ const headers = new Headers(init.headers);
18
+ headers.set("Authorization", `Bot ${this.#token}`);
19
+ if (init.body !== void 0 && init.body !== null && !headers.has("Content-Type")) {
20
+ headers.set("Content-Type", "application/json");
21
+ }
22
+ const response = await this.#fetch(`${this.#apiBaseUrl}/${path.replace(/^\//, "")}`, { ...init, headers });
23
+ if (!response.ok) {
24
+ const details = await response.text();
25
+ throw new Error(`Discord API request failed (${response.status} ${response.statusText})${details ? `: ${details}` : ""}`);
26
+ }
27
+ if (response.status === 204) return void 0;
28
+ return await response.json();
29
+ }
30
+ };
31
+
32
+ export { DiscordRestClient };
33
+ //# sourceMappingURL=index.js.map
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAOO,IAAM,oBAAN,MAAwB;AAAA,EACpB,MAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACO,aAAA;AAAA,EAET,YAAY,OAAA,EAAmC;AACpD,IAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG,MAAM,IAAI,SAAA,CAAU,yBAAyB,CAAA;AACpF,IAAA,IAAI,OAAA,CAAQ,cAAc,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG,MAAM,IAAI,SAAA,CAAU,iCAAiC,CAAA;AACpG,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,KAAA;AACtB,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,aAAA;AAC7B,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,UAAA,IAAc,6BAAA,EAA+B,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC1F,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,mBAAA,IAAuB,UAAA,CAAW,KAAA;AACxD,IAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,YAAY,MAAM,IAAI,UAAU,uCAAuC,CAAA;AAAA,EACpG;AAAA,EAEA,MAAa,OAAA,CAAW,IAAA,EAAc,IAAA,GAAoB,EAAC,EAAe;AACxE,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AACxC,IAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AACjD,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,IAAA,KAAS,QAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AACjF,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AAAA,IAChD;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,EAAI,EAAE,GAAG,IAAA,EAAM,SAAS,CAAA;AACzG,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,OAAA,GAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAC1H;AACA,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AACpC,IAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,EAC7B;AACF","file":"index.js","sourcesContent":["export interface DiscordRestClientOptions {\n token: string;\n applicationId: string;\n apiBaseUrl?: string;\n fetchImplementation?: typeof fetch;\n}\n\nexport class DiscordRestClient {\n readonly #token: string;\n readonly #apiBaseUrl: string;\n readonly #fetch: typeof fetch;\n public readonly applicationId: string;\n\n public constructor(options: DiscordRestClientOptions) {\n if (options.token.trim().length === 0) throw new TypeError(\"token must not be empty\");\n if (options.applicationId.trim().length === 0) throw new TypeError(\"applicationId must not be empty\");\n this.#token = options.token;\n this.applicationId = options.applicationId;\n this.#apiBaseUrl = (options.apiBaseUrl ?? \"https://discord.com/api/v10\").replace(/\\/$/, \"\");\n this.#fetch = options.fetchImplementation ?? globalThis.fetch;\n if (typeof this.#fetch !== \"function\") throw new TypeError(\"fetch implementation must be provided\");\n }\n\n public async request<T>(path: string, init: RequestInit = {}): Promise<T> {\n const headers = new Headers(init.headers);\n headers.set(\"Authorization\", `Bot ${this.#token}`);\n if (init.body !== undefined && init.body !== null && !headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n const response = await this.#fetch(`${this.#apiBaseUrl}/${path.replace(/^\\//, \"\")}`, { ...init, headers });\n if (!response.ok) {\n const details = await response.text();\n throw new Error(`Discord API request failed (${response.status} ${response.statusText})${details ? `: ${details}` : \"\"}`);\n }\n if (response.status === 204) return undefined as T;\n return await response.json() as T;\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "mini-interactions-rest",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "sideEffects": false,
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "dependencies": {
17
+ "mini-interactions-core": "0.1.0"
18
+ },
19
+ "scripts": {
20
+ "build": "tsup",
21
+ "dev": "tsup --watch",
22
+ "typecheck": "tsc --noEmit",
23
+ "test": "vitest run",
24
+ "clean": "rm -rf dist"
25
+ }
26
+ }