aegis-api 0.0.0-stage → 0.1.1

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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +229 -2
  3. package/dist/client.d.ts +22 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +37 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/errors.d.ts +18 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +16 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/generated/schema.d.ts +3650 -0
  12. package/dist/generated/schema.d.ts.map +1 -0
  13. package/dist/generated/schema.js +6 -0
  14. package/dist/generated/schema.js.map +1 -0
  15. package/dist/http.d.ts +25 -0
  16. package/dist/http.d.ts.map +1 -0
  17. package/dist/http.js +108 -0
  18. package/dist/http.js.map +1 -0
  19. package/dist/index.d.ts +26 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/resources/base.d.ts +9 -0
  24. package/dist/resources/base.d.ts.map +1 -0
  25. package/dist/resources/base.js +11 -0
  26. package/dist/resources/base.js.map +1 -0
  27. package/dist/resources/bible.d.ts +47 -0
  28. package/dist/resources/bible.d.ts.map +1 -0
  29. package/dist/resources/bible.js +36 -0
  30. package/dist/resources/bible.js.map +1 -0
  31. package/dist/resources/binary.d.ts +18 -0
  32. package/dist/resources/binary.d.ts.map +1 -0
  33. package/dist/resources/binary.js +12 -0
  34. package/dist/resources/binary.js.map +1 -0
  35. package/dist/resources/fun.d.ts +18 -0
  36. package/dist/resources/fun.d.ts.map +1 -0
  37. package/dist/resources/fun.js +8 -0
  38. package/dist/resources/fun.js.map +1 -0
  39. package/dist/resources/general.d.ts +19 -0
  40. package/dist/resources/general.d.ts.map +1 -0
  41. package/dist/resources/general.js +8 -0
  42. package/dist/resources/general.js.map +1 -0
  43. package/dist/resources/holidays.d.ts +29 -0
  44. package/dist/resources/holidays.d.ts.map +1 -0
  45. package/dist/resources/holidays.js +12 -0
  46. package/dist/resources/holidays.js.map +1 -0
  47. package/dist/resources/index.d.ts +12 -0
  48. package/dist/resources/index.d.ts.map +1 -0
  49. package/dist/resources/index.js +12 -0
  50. package/dist/resources/index.js.map +1 -0
  51. package/dist/resources/jobs.d.ts +28 -0
  52. package/dist/resources/jobs.d.ts.map +1 -0
  53. package/dist/resources/jobs.js +12 -0
  54. package/dist/resources/jobs.js.map +1 -0
  55. package/dist/resources/minecraft.d.ts +27 -0
  56. package/dist/resources/minecraft.d.ts.map +1 -0
  57. package/dist/resources/minecraft.js +16 -0
  58. package/dist/resources/minecraft.js.map +1 -0
  59. package/dist/resources/music/index.d.ts +3 -0
  60. package/dist/resources/music/index.d.ts.map +1 -0
  61. package/dist/resources/music/index.js +3 -0
  62. package/dist/resources/music/index.js.map +1 -0
  63. package/dist/resources/music/music-events.d.ts +43 -0
  64. package/dist/resources/music/music-events.d.ts.map +1 -0
  65. package/dist/resources/music/music-events.js +8 -0
  66. package/dist/resources/music/music-events.js.map +1 -0
  67. package/dist/resources/music/music.d.ts +106 -0
  68. package/dist/resources/music/music.d.ts.map +1 -0
  69. package/dist/resources/music/music.js +106 -0
  70. package/dist/resources/music/music.js.map +1 -0
  71. package/dist/resources/roblox.d.ts +43 -0
  72. package/dist/resources/roblox.d.ts.map +1 -0
  73. package/dist/resources/roblox.js +12 -0
  74. package/dist/resources/roblox.js.map +1 -0
  75. package/dist/resources/translation.d.ts +26 -0
  76. package/dist/resources/translation.d.ts.map +1 -0
  77. package/dist/resources/translation.js +16 -0
  78. package/dist/resources/translation.js.map +1 -0
  79. package/dist/socket.d.ts +36 -0
  80. package/dist/socket.d.ts.map +1 -0
  81. package/dist/socket.js +139 -0
  82. package/dist/socket.js.map +1 -0
  83. package/dist/types.d.ts +65 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +2 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +51 -4
@@ -0,0 +1,36 @@
1
+ import type { HttpOptions } from './http.js';
2
+ export type EventMap = Record<string, object>;
3
+ type Listener<E> = (data: E) => void;
4
+ type WebSocketLike = {
5
+ send(data: string): void;
6
+ close(code?: number, reason?: string): void;
7
+ readyState: number;
8
+ addEventListener(type: string, handler: (event: any) => void): void;
9
+ };
10
+ export type SocketOptions = HttpOptions & {
11
+ /** Injected in tests; defaults to the global WebSocket. */
12
+ createSocket?: (url: string, headers: Record<string, string>) => WebSocketLike;
13
+ };
14
+ export declare class EventSocket<Events extends EventMap> {
15
+ private readonly url;
16
+ private readonly headers;
17
+ private readonly createSocket;
18
+ private readonly listeners;
19
+ private socket;
20
+ private retry;
21
+ private closed;
22
+ constructor(options?: SocketOptions);
23
+ get connected(): boolean;
24
+ get listenerCount(): number;
25
+ /** Opens the socket on first use and returns an unsubscribe function. */
26
+ on<K extends keyof Events & string>(event: K, listener: Listener<Events[K]>): () => void;
27
+ once<K extends keyof Events & string>(event: K, listener: Listener<Events[K]>): () => void;
28
+ off<K extends keyof Events & string>(event: K, listener: Listener<Events[K]>): void;
29
+ close(): void;
30
+ private add;
31
+ private open;
32
+ private scheduleRetry;
33
+ private receive;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAQ5C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7C,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AAEpC,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAA;CACpE,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IACxC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAA;CAC/E,CAAA;AAQD,qBAAa,WAAW,CAAC,MAAM,SAAS,QAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IAEpE,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,GAAE,aAAkB;IAYvC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,aAAa,IAAI,MAAM,CAI1B;IAED,yEAAyE;IACzE,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAI3E,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,GAAG,MAAM,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAK/B,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,GAAG,MAAM,EACjC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAY/B,KAAK;IAUL,OAAO,CAAC,GAAG;IAmBX,OAAO,CAAC,IAAI;IAyBZ,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,OAAO;CA0BhB"}
package/dist/socket.js ADDED
@@ -0,0 +1,139 @@
1
+ /** Path on the API, relative to the base URL. */
2
+ const EVENTS_PATH = '/v1/events';
3
+ /** How long to wait before reconnecting after an unexpected close. */
4
+ const RETRY_MS = 5_000;
5
+ function socketUrl(baseUrl) {
6
+ const url = new URL(EVENTS_PATH, baseUrl);
7
+ url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
8
+ return url.toString();
9
+ }
10
+ export class EventSocket {
11
+ url;
12
+ headers;
13
+ createSocket;
14
+ listeners = new Map();
15
+ socket = null;
16
+ retry = null;
17
+ closed = false;
18
+ constructor(options = {}) {
19
+ const base = (options.baseUrl ?? 'https://api.aegi.run').replace(/\/+$/, '');
20
+ this.url = socketUrl(base);
21
+ this.headers = options.apiKey
22
+ ? { authorization: `Bearer ${options.apiKey}` }
23
+ : {};
24
+ this.createSocket =
25
+ options.createSocket ??
26
+ ((target, headers) => new WebSocket(target, { headers }));
27
+ }
28
+ get connected() {
29
+ return this.socket !== null;
30
+ }
31
+ get listenerCount() {
32
+ let total = 0;
33
+ for (const set of this.listeners.values())
34
+ total += set.size;
35
+ return total;
36
+ }
37
+ /** Opens the socket on first use and returns an unsubscribe function. */
38
+ on(event, listener) {
39
+ return this.add(event, listener, false);
40
+ }
41
+ once(event, listener) {
42
+ return this.add(event, listener, true);
43
+ }
44
+ off(event, listener) {
45
+ const set = this.listeners.get(event);
46
+ if (!set)
47
+ return;
48
+ set.delete(listener);
49
+ if (set.size === 0)
50
+ this.listeners.delete(event);
51
+ // Nothing left to hear, so the socket has no reason to stay open.
52
+ if (this.listenerCount === 0)
53
+ this.close();
54
+ }
55
+ close() {
56
+ this.closed = true;
57
+ if (this.retry)
58
+ clearTimeout(this.retry);
59
+ this.retry = null;
60
+ const socket = this.socket;
61
+ this.socket = null;
62
+ socket?.close(1000, 'client closed');
63
+ }
64
+ add(event, listener, once) {
65
+ const wrapped = ((data) => {
66
+ if (once)
67
+ this.off(event, wrapped);
68
+ listener(data);
69
+ });
70
+ const existing = this.listeners.get(event);
71
+ if (existing)
72
+ existing.add(wrapped);
73
+ else
74
+ this.listeners.set(event, new Set([wrapped]));
75
+ this.open();
76
+ return () => this.off(event, wrapped);
77
+ }
78
+ open() {
79
+ if (this.socket || this.closed)
80
+ return;
81
+ let socket;
82
+ try {
83
+ socket = this.createSocket(this.url, this.headers);
84
+ }
85
+ catch (error) {
86
+ console.error('[aegis] could not open the event socket', error);
87
+ this.scheduleRetry();
88
+ return;
89
+ }
90
+ this.socket = socket;
91
+ socket.addEventListener('message', (event) => {
92
+ this.receive(String(event.data));
93
+ });
94
+ socket.addEventListener('close', () => {
95
+ this.socket = null;
96
+ // Only reconnect while someone is still listening.
97
+ if (!this.closed && this.listenerCount > 0)
98
+ this.scheduleRetry();
99
+ });
100
+ }
101
+ scheduleRetry() {
102
+ if (this.retry || this.closed)
103
+ return;
104
+ this.retry = setTimeout(() => {
105
+ this.retry = null;
106
+ this.open();
107
+ }, RETRY_MS);
108
+ }
109
+ receive(raw) {
110
+ let message;
111
+ try {
112
+ message = JSON.parse(raw);
113
+ }
114
+ catch {
115
+ console.warn('[aegis] the event socket sent a non-JSON message');
116
+ return;
117
+ }
118
+ if (typeof message !== 'object' || message === null)
119
+ return;
120
+ const payload = message;
121
+ const type = payload['type'];
122
+ // `ready` and `ping` are transport, not something a caller subscribed to.
123
+ if (typeof type !== 'string' || type === 'ready' || type === 'ping')
124
+ return;
125
+ const set = this.listeners.get(type);
126
+ if (!set)
127
+ return;
128
+ for (const listener of [...set]) {
129
+ try {
130
+ ;
131
+ listener(payload);
132
+ }
133
+ catch (error) {
134
+ console.error(`[aegis] a ${type} listener threw`, error);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { paths } from './generated/schema.js';
2
+ export type Paths = paths;
3
+ export type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
4
+ export type PathKey = keyof Paths;
5
+ /** Missing methods are emitted as `?: never`, which indexes as `undefined`. */
6
+ export type MethodOf<P extends PathKey> = {
7
+ [M in keyof Paths[P] & HttpMethod]: [NonNullable<Paths[P][M]>] extends [never] ? never : M;
8
+ }[keyof Paths[P] & HttpMethod];
9
+ /** Looser than `MethodOf<P>` on purpose, so the pair can be forwarded. */
10
+ export type Operation<P extends PathKey, M extends HttpMethod> = [M] extends [
11
+ MethodOf<P>
12
+ ] ? Paths[P][M] : never;
13
+ declare const nothingBrand: unique symbol;
14
+ /** Branded, because a real parameter object is also assignable to `{}`. */
15
+ export type Nothing = {
16
+ readonly [nothingBrand]: true;
17
+ };
18
+ /** `openapi-typescript` marks an absent parameter group as `?: never`. */
19
+ type Defined<T> = [NonNullable<T>] extends [never] ? Nothing : NonNullable<T>;
20
+ type ResponsesOf<Op> = Op extends {
21
+ responses: infer R;
22
+ } ? R : never;
23
+ type SuccessCode<Op> = Extract<keyof ResponsesOf<Op>, 200 | 201 | 202 | 204>;
24
+ export type PathParamsOf<Op> = Op extends {
25
+ parameters: {
26
+ path?: infer P;
27
+ };
28
+ } ? Defined<P> : Nothing;
29
+ export type QueryOf<Op> = Op extends {
30
+ parameters: {
31
+ query?: infer Q;
32
+ };
33
+ } ? Defined<Q> : Nothing;
34
+ export type JsonBodyOf<Op> = Op extends {
35
+ requestBody: {
36
+ content: {
37
+ 'application/json': infer B;
38
+ };
39
+ };
40
+ } ? B : never;
41
+ /** The JSON body of the operation's success response. */
42
+ export type ResponseOf<Op> = {
43
+ [S in SuccessCode<Op>]: ResponsesOf<Op>[S] extends {
44
+ content: {
45
+ 'application/json': infer J;
46
+ };
47
+ } ? J : never;
48
+ }[SuccessCode<Op>];
49
+ /** Every endpoint answers `{ data }` on success, so that is what comes out. */
50
+ type Unwrap<T> = T extends {
51
+ data: infer D;
52
+ } ? D : T;
53
+ /** What a successful call resolves to. */
54
+ export type Result<P extends PathKey, M extends HttpMethod> = Unwrap<ResponseOf<Operation<P, M>>>;
55
+ export type HasPath<Op> = [PathParamsOf<Op>] extends [Nothing] ? false : true;
56
+ export type HasQuery<Op> = [QueryOf<Op>] extends [Nothing] ? false : true;
57
+ export type HasBody<Op> = [JsonBodyOf<Op>] extends [never] ? false : true;
58
+ /** Fields the route lacks are `Nothing`, so passing one is a type error. */
59
+ export type RequestOptions<P extends PathKey, M extends HttpMethod> = {
60
+ params?: PathParamsOf<Operation<P, M>>;
61
+ query?: QueryOf<Operation<P, M>>;
62
+ body?: JsonBodyOf<Operation<P, M>>;
63
+ };
64
+ export {};
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,53 @@
1
1
  {
2
2
  "name": "aegis-api",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "description": "Typed client for the Aegis API.",
5
+ "keywords": [
6
+ "aegis",
7
+ "discord",
8
+ "bot",
9
+ "discord.js",
10
+ "typescript",
11
+ "api-client"
12
+ ],
13
+ "license": "MIT",
14
+ "author": "Mubi",
15
+ "homepage": "https://github.com/AegisAPI/aegis.js#readme",
16
+ "bugs": "https://github.com/AegisAPI/aegis.js/issues",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/AegisAPI/aegis.js.git"
20
+ },
21
+ "type": "module",
22
+ "main": "dist/index.js",
23
+ "module": "dist/index.js",
24
+ "types": "dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "default": "./dist/index.js"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "sideEffects": false,
35
+ "engines": {
36
+ "node": ">=18"
37
+ },
38
+ "scripts": {
39
+ "schema:build": "openapi-typescript https://api.aegi.run/openapi.json -o src/generated/schema.ts",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "bun test",
42
+ "build": "tsc -p tsconfig.build.json",
43
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"*.md\" \"*.json\" \"*.mjs\"",
44
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\" \"*.md\" \"*.json\" \"*.mjs\"",
45
+ "prepublishOnly": "npm run typecheck && npm test && npm run build"
46
+ },
47
+ "devDependencies": {
48
+ "@types/bun": "latest",
49
+ "openapi-typescript": "^7.13.0",
50
+ "prettier": "^3.9.10",
51
+ "typescript": "^5.9.0"
52
+ }
53
+ }