@microsoft/teams.common 0.2.7

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 (92) hide show
  1. package/README.md +36 -0
  2. package/dist/events/event-emitter.d.mts +20 -0
  3. package/dist/events/event-emitter.d.ts +20 -0
  4. package/dist/events/event-emitter.js +38 -0
  5. package/dist/events/event-emitter.js.map +1 -0
  6. package/dist/events/event-emitter.mjs +36 -0
  7. package/dist/events/event-emitter.mjs.map +1 -0
  8. package/dist/events/index.d.mts +1 -0
  9. package/dist/events/index.d.ts +1 -0
  10. package/dist/events/index.js +14 -0
  11. package/dist/events/index.js.map +1 -0
  12. package/dist/events/index.mjs +3 -0
  13. package/dist/events/index.mjs.map +1 -0
  14. package/dist/http/client.d.mts +83 -0
  15. package/dist/http/client.d.ts +83 -0
  16. package/dist/http/client.js +159 -0
  17. package/dist/http/client.js.map +1 -0
  18. package/dist/http/client.mjs +153 -0
  19. package/dist/http/client.mjs.map +1 -0
  20. package/dist/http/index.d.mts +5 -0
  21. package/dist/http/index.d.ts +5 -0
  22. package/dist/http/index.js +28 -0
  23. package/dist/http/index.js.map +1 -0
  24. package/dist/http/index.mjs +5 -0
  25. package/dist/http/index.mjs.map +1 -0
  26. package/dist/http/interceptor.d.mts +53 -0
  27. package/dist/http/interceptor.d.ts +53 -0
  28. package/dist/http/interceptor.js +4 -0
  29. package/dist/http/interceptor.js.map +1 -0
  30. package/dist/http/interceptor.mjs +3 -0
  31. package/dist/http/interceptor.mjs.map +1 -0
  32. package/dist/http/token.d.mts +9 -0
  33. package/dist/http/token.d.ts +9 -0
  34. package/dist/http/token.js +4 -0
  35. package/dist/http/token.js.map +1 -0
  36. package/dist/http/token.mjs +3 -0
  37. package/dist/http/token.mjs.map +1 -0
  38. package/dist/index.d.mts +10 -0
  39. package/dist/index.d.ts +10 -0
  40. package/dist/index.js +35 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/index.mjs +6 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/logging/ansi.d.mts +34 -0
  45. package/dist/logging/ansi.d.ts +34 -0
  46. package/dist/logging/ansi.js +39 -0
  47. package/dist/logging/ansi.js.map +1 -0
  48. package/dist/logging/ansi.mjs +37 -0
  49. package/dist/logging/ansi.mjs.map +1 -0
  50. package/dist/logging/console.d.mts +18 -0
  51. package/dist/logging/console.d.ts +18 -0
  52. package/dist/logging/console.js +91 -0
  53. package/dist/logging/console.js.map +1 -0
  54. package/dist/logging/console.mjs +89 -0
  55. package/dist/logging/console.mjs.map +1 -0
  56. package/dist/logging/index.d.mts +3 -0
  57. package/dist/logging/index.d.ts +3 -0
  58. package/dist/logging/index.js +28 -0
  59. package/dist/logging/index.js.map +1 -0
  60. package/dist/logging/index.mjs +5 -0
  61. package/dist/logging/index.mjs.map +1 -0
  62. package/dist/logging/logger.d.mts +45 -0
  63. package/dist/logging/logger.d.ts +45 -0
  64. package/dist/logging/logger.js +4 -0
  65. package/dist/logging/logger.js.map +1 -0
  66. package/dist/logging/logger.mjs +3 -0
  67. package/dist/logging/logger.mjs.map +1 -0
  68. package/dist/logging/string.d.mts +36 -0
  69. package/dist/logging/string.d.ts +36 -0
  70. package/dist/logging/string.js +121 -0
  71. package/dist/logging/string.js.map +1 -0
  72. package/dist/logging/string.mjs +119 -0
  73. package/dist/logging/string.mjs.map +1 -0
  74. package/dist/storage/index.d.mts +2 -0
  75. package/dist/storage/index.d.ts +2 -0
  76. package/dist/storage/index.js +21 -0
  77. package/dist/storage/index.js.map +1 -0
  78. package/dist/storage/index.mjs +4 -0
  79. package/dist/storage/index.mjs.map +1 -0
  80. package/dist/storage/local-storage.d.mts +23 -0
  81. package/dist/storage/local-storage.d.ts +23 -0
  82. package/dist/storage/local-storage.js +69 -0
  83. package/dist/storage/local-storage.js.map +1 -0
  84. package/dist/storage/local-storage.mjs +67 -0
  85. package/dist/storage/local-storage.mjs.map +1 -0
  86. package/dist/storage/storage.d.mts +22 -0
  87. package/dist/storage/storage.d.ts +22 -0
  88. package/dist/storage/storage.js +4 -0
  89. package/dist/storage/storage.js.map +1 -0
  90. package/dist/storage/storage.mjs +3 -0
  91. package/dist/storage/storage.mjs.map +1 -0
  92. package/package.json +91 -0
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Teams: Common
2
+
3
+ <p>
4
+ <a href="https://www.npmjs.com/package/@microsoft/teams.common" target="_blank">
5
+ <img src="https://img.shields.io/npm/v/@microsoft/teams.common" />
6
+ </a>
7
+ <a href="https://www.npmjs.com/package/@microsoft/teams.common?activeTab=code" target="_blank">
8
+ <img src="https://img.shields.io/bundlephobia/min/@microsoft/teams.common" />
9
+ </a>
10
+ <a href="https://www.npmjs.com/package/@microsoft/teams.common?activeTab=dependencies" target="_blank">
11
+ <img src="https://img.shields.io/librariesio/release/npm/@microsoft/teams.common" />
12
+ </a>
13
+ <a href="https://www.npmjs.com/package/@microsoft/teams.common" target="_blank">
14
+ <img src="https://img.shields.io/npm/dw/@microsoft/teams.common" />
15
+ </a>
16
+ <a href="https://microsoft.github.io/teams.js" target="_blank">
17
+ <img src="https://img.shields.io/badge/📖 docs-open-blue" />
18
+ </a>
19
+ </p>
20
+
21
+ Common modules used to provide utility functionality to the other packages while
22
+ minimizing external dependencies.
23
+
24
+ <a href="https://microsoft.github.io/teams.js/2.getting-started/1.create-application.html" target="_blank">
25
+ <img src="https://img.shields.io/badge/📖 Getting Started-blue?style=for-the-badge" />
26
+ </a>
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ $: npm install @microsoft/teams.common
32
+ ```
33
+
34
+ ## Dependencies
35
+
36
+ N/A
@@ -0,0 +1,20 @@
1
+ type EventHandler<T = any> = (data: T) => void | Promise<void>;
2
+ interface IEventEmitter<EventTypes = Record<string, any>> {
3
+ on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
4
+ once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
5
+ off(id: number): void;
6
+ emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;
7
+ }
8
+ declare class EventEmitter<EventTypes = Record<string, any>> implements IEventEmitter<EventTypes> {
9
+ protected index: number;
10
+ protected subscriptions: Map<keyof EventTypes, {
11
+ readonly id: number;
12
+ readonly handler: EventHandler;
13
+ }[]>;
14
+ on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
15
+ once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
16
+ off(id: number): void;
17
+ emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;
18
+ }
19
+
20
+ export { EventEmitter, type EventHandler, type IEventEmitter };
@@ -0,0 +1,20 @@
1
+ type EventHandler<T = any> = (data: T) => void | Promise<void>;
2
+ interface IEventEmitter<EventTypes = Record<string, any>> {
3
+ on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
4
+ once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
5
+ off(id: number): void;
6
+ emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;
7
+ }
8
+ declare class EventEmitter<EventTypes = Record<string, any>> implements IEventEmitter<EventTypes> {
9
+ protected index: number;
10
+ protected subscriptions: Map<keyof EventTypes, {
11
+ readonly id: number;
12
+ readonly handler: EventHandler;
13
+ }[]>;
14
+ on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
15
+ once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number;
16
+ off(id: number): void;
17
+ emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;
18
+ }
19
+
20
+ export { EventEmitter, type EventHandler, type IEventEmitter };
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ class EventEmitter {
4
+ index = -1;
5
+ subscriptions = /* @__PURE__ */ new Map();
6
+ on(event, handler) {
7
+ const id = ++this.index;
8
+ const subs = this.subscriptions.get(event) || [];
9
+ subs.push({ id, handler });
10
+ this.subscriptions.set(event, subs);
11
+ return id;
12
+ }
13
+ once(event, handler) {
14
+ const id = this.on(event, (value) => {
15
+ this.off(id);
16
+ handler(value);
17
+ });
18
+ return id;
19
+ }
20
+ off(id) {
21
+ for (const [_, subs] of this.subscriptions.entries()) {
22
+ const i = subs.findIndex((s) => s.id === id);
23
+ if (i === -1) continue;
24
+ subs.splice(i, 1);
25
+ return;
26
+ }
27
+ }
28
+ emit(event, value) {
29
+ const subs = this.subscriptions.get(event) || [];
30
+ for (const sub of subs) {
31
+ sub.handler(value);
32
+ }
33
+ }
34
+ }
35
+
36
+ exports.EventEmitter = EventEmitter;
37
+ //# sourceMappingURL=event-emitter.js.map
38
+ //# sourceMappingURL=event-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":";;AAeO,MAAM,YAAoF,CAAA;AAAA,EACrF,KAAQ,GAAA,EAAA;AAAA,EACR,aAAA,uBAAoB,GAM5B,EAAA;AAAA,EAEF,EAAA,CAAmC,OAAc,OAA0C,EAAA;AACzF,IAAM,MAAA,EAAA,GAAK,EAAE,IAAK,CAAA,KAAA;AAClB,IAAA,MAAM,OAAO,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,KAAK,KAAK,EAAC;AAC/C,IAAA,IAAA,CAAK,IAAK,CAAA,EAAE,EAAI,EAAA,OAAA,EAAS,CAAA;AACzB,IAAK,IAAA,CAAA,aAAA,CAAc,GAAI,CAAA,KAAA,EAAO,IAAI,CAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,IAAA,CAAqC,OAAc,OAA0C,EAAA;AAC3F,IAAA,MAAM,EAAK,GAAA,IAAA,CAAK,EAAG,CAAA,KAAA,EAAO,CAAC,KAAU,KAAA;AACnC,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KACd,CAAA;AAED,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,IAAI,EAAY,EAAA;AACd,IAAA,KAAA,MAAW,CAAC,CAAG,EAAA,IAAI,KAAK,IAAK,CAAA,aAAA,CAAc,SAAW,EAAA;AACpD,MAAA,MAAM,IAAI,IAAK,CAAA,SAAA,CAAU,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,EAAE,CAAA;AAE3C,MAAA,IAAI,MAAM,EAAI,EAAA;AAEd,MAAK,IAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AAChB,MAAA;AAAA;AACF;AACF,EAEA,IAAA,CAAqC,OAAc,KAA0B,EAAA;AAC3E,IAAA,MAAM,OAAO,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,KAAK,KAAK,EAAC;AAE/C,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,MAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA;AACnB;AAEJ","file":"event-emitter.js","sourcesContent":["export type EventHandler<T = any> = (data: T) => void | Promise<void>;\n\nexport interface IEventEmitter<EventTypes = Record<string, any>> {\n on<Event extends keyof EventTypes>(\n event: Event,\n handler: EventHandler<EventTypes[Event]>\n ): number;\n once<Event extends keyof EventTypes>(\n event: Event,\n handler: EventHandler<EventTypes[Event]>\n ): number;\n off(id: number): void;\n emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;\n}\n\nexport class EventEmitter<EventTypes = Record<string, any>> implements IEventEmitter<EventTypes> {\n protected index = -1;\n protected subscriptions = new Map<\n keyof EventTypes,\n Array<{\n readonly id: number;\n readonly handler: EventHandler;\n }>\n >();\n\n on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>) {\n const id = ++this.index;\n const subs = this.subscriptions.get(event) || [];\n subs.push({ id, handler });\n this.subscriptions.set(event, subs);\n return id;\n }\n\n once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>) {\n const id = this.on(event, (value) => {\n this.off(id);\n handler(value);\n });\n\n return id;\n }\n\n off(id: number) {\n for (const [_, subs] of this.subscriptions.entries()) {\n const i = subs.findIndex((s) => s.id === id);\n\n if (i === -1) continue;\n\n subs.splice(i, 1);\n return;\n }\n }\n\n emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]) {\n const subs = this.subscriptions.get(event) || [];\n\n for (const sub of subs) {\n sub.handler(value);\n }\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ class EventEmitter {
2
+ index = -1;
3
+ subscriptions = /* @__PURE__ */ new Map();
4
+ on(event, handler) {
5
+ const id = ++this.index;
6
+ const subs = this.subscriptions.get(event) || [];
7
+ subs.push({ id, handler });
8
+ this.subscriptions.set(event, subs);
9
+ return id;
10
+ }
11
+ once(event, handler) {
12
+ const id = this.on(event, (value) => {
13
+ this.off(id);
14
+ handler(value);
15
+ });
16
+ return id;
17
+ }
18
+ off(id) {
19
+ for (const [_, subs] of this.subscriptions.entries()) {
20
+ const i = subs.findIndex((s) => s.id === id);
21
+ if (i === -1) continue;
22
+ subs.splice(i, 1);
23
+ return;
24
+ }
25
+ }
26
+ emit(event, value) {
27
+ const subs = this.subscriptions.get(event) || [];
28
+ for (const sub of subs) {
29
+ sub.handler(value);
30
+ }
31
+ }
32
+ }
33
+
34
+ export { EventEmitter };
35
+ //# sourceMappingURL=event-emitter.mjs.map
36
+ //# sourceMappingURL=event-emitter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"AAeO,MAAM,YAAoF,CAAA;AAAA,EACrF,KAAQ,GAAA,EAAA;AAAA,EACR,aAAA,uBAAoB,GAM5B,EAAA;AAAA,EAEF,EAAA,CAAmC,OAAc,OAA0C,EAAA;AACzF,IAAM,MAAA,EAAA,GAAK,EAAE,IAAK,CAAA,KAAA;AAClB,IAAA,MAAM,OAAO,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,KAAK,KAAK,EAAC;AAC/C,IAAA,IAAA,CAAK,IAAK,CAAA,EAAE,EAAI,EAAA,OAAA,EAAS,CAAA;AACzB,IAAK,IAAA,CAAA,aAAA,CAAc,GAAI,CAAA,KAAA,EAAO,IAAI,CAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,IAAA,CAAqC,OAAc,OAA0C,EAAA;AAC3F,IAAA,MAAM,EAAK,GAAA,IAAA,CAAK,EAAG,CAAA,KAAA,EAAO,CAAC,KAAU,KAAA;AACnC,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KACd,CAAA;AAED,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,IAAI,EAAY,EAAA;AACd,IAAA,KAAA,MAAW,CAAC,CAAG,EAAA,IAAI,KAAK,IAAK,CAAA,aAAA,CAAc,SAAW,EAAA;AACpD,MAAA,MAAM,IAAI,IAAK,CAAA,SAAA,CAAU,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,EAAE,CAAA;AAE3C,MAAA,IAAI,MAAM,EAAI,EAAA;AAEd,MAAK,IAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AAChB,MAAA;AAAA;AACF;AACF,EAEA,IAAA,CAAqC,OAAc,KAA0B,EAAA;AAC3E,IAAA,MAAM,OAAO,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,KAAK,KAAK,EAAC;AAE/C,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,MAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA;AACnB;AAEJ","file":"event-emitter.mjs","sourcesContent":["export type EventHandler<T = any> = (data: T) => void | Promise<void>;\n\nexport interface IEventEmitter<EventTypes = Record<string, any>> {\n on<Event extends keyof EventTypes>(\n event: Event,\n handler: EventHandler<EventTypes[Event]>\n ): number;\n once<Event extends keyof EventTypes>(\n event: Event,\n handler: EventHandler<EventTypes[Event]>\n ): number;\n off(id: number): void;\n emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;\n}\n\nexport class EventEmitter<EventTypes = Record<string, any>> implements IEventEmitter<EventTypes> {\n protected index = -1;\n protected subscriptions = new Map<\n keyof EventTypes,\n Array<{\n readonly id: number;\n readonly handler: EventHandler;\n }>\n >();\n\n on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>) {\n const id = ++this.index;\n const subs = this.subscriptions.get(event) || [];\n subs.push({ id, handler });\n this.subscriptions.set(event, subs);\n return id;\n }\n\n once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>) {\n const id = this.on(event, (value) => {\n this.off(id);\n handler(value);\n });\n\n return id;\n }\n\n off(id: number) {\n for (const [_, subs] of this.subscriptions.entries()) {\n const i = subs.findIndex((s) => s.id === id);\n\n if (i === -1) continue;\n\n subs.splice(i, 1);\n return;\n }\n }\n\n emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]) {\n const subs = this.subscriptions.get(event) || [];\n\n for (const sub of subs) {\n sub.handler(value);\n }\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export { EventEmitter, EventHandler, IEventEmitter } from './event-emitter.mjs';
@@ -0,0 +1 @@
1
+ export { EventEmitter, EventHandler, IEventEmitter } from './event-emitter.js';
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var eventEmitter = require('./event-emitter');
4
+
5
+
6
+
7
+ Object.keys(eventEmitter).forEach(function (k) {
8
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
9
+ enumerable: true,
10
+ get: function () { return eventEmitter[k]; }
11
+ });
12
+ });
13
+ //# sourceMappingURL=index.js.map
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -0,0 +1,3 @@
1
+ export * from './event-emitter';
2
+ //# sourceMappingURL=index.mjs.map
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs","sourcesContent":[]}
@@ -0,0 +1,83 @@
1
+ import { RawAxiosRequestHeaders, AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios';
2
+ import { ILogger } from '../logging/logger.mjs';
3
+ import { Interceptor } from './interceptor.mjs';
4
+ import { Token } from './token.mjs';
5
+
6
+ type ClientOptions = {
7
+ /**
8
+ * The client name
9
+ */
10
+ readonly name?: string;
11
+ /**
12
+ * The authorization token to use
13
+ */
14
+ readonly token?: Token;
15
+ /**
16
+ *: ILogger instance to use
17
+ */
18
+ readonly logger?: ILogger;
19
+ /**
20
+ * The baseUrl to prefix all client requests with
21
+ */
22
+ readonly baseUrl?: string;
23
+ /**
24
+ * Default request timeout (ms)
25
+ */
26
+ readonly timeout?: number;
27
+ /**
28
+ * Default headers
29
+ */
30
+ readonly headers?: RawAxiosRequestHeaders;
31
+ /**
32
+ * Default interceptors to register
33
+ */
34
+ readonly interceptors?: Array<Interceptor>;
35
+ };
36
+ type RequestConfig<D = any> = AxiosRequestConfig<D> & {
37
+ /**
38
+ * If provided, this token will be used instead of
39
+ * the default token provided in the `ClientOptions`
40
+ */
41
+ token?: Token;
42
+ };
43
+ type InterceptorRegistry = {
44
+ readonly requestId?: number;
45
+ readonly responseId?: number;
46
+ readonly interceptor: Interceptor;
47
+ };
48
+ declare class Client {
49
+ token?: Token;
50
+ readonly name: string;
51
+ protected options: ClientOptions;
52
+ protected log: ILogger;
53
+ protected http: AxiosInstance;
54
+ protected seq: number;
55
+ protected interceptors: Map<number, InterceptorRegistry>;
56
+ constructor(options?: ClientOptions);
57
+ get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>): Promise<R>;
58
+ post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: RequestConfig<D>): Promise<R>;
59
+ put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: RequestConfig<D>): Promise<R>;
60
+ patch<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: RequestConfig<D>): Promise<R>;
61
+ delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>): Promise<R>;
62
+ request<T = any, R = AxiosResponse<T>, D = any>(config: RequestConfig<D>): Promise<R>;
63
+ /**
64
+ * Register an interceptor to use
65
+ * as middleware for the request/response/error
66
+ */
67
+ use(interceptor: Interceptor): number;
68
+ /**
69
+ * Eject an interceptor
70
+ */
71
+ eject(id: number): void;
72
+ /**
73
+ * Clear (Eject) all interceptors
74
+ */
75
+ clear(): void;
76
+ /**
77
+ * Create a copy of the client
78
+ */
79
+ clone(options?: ClientOptions): Client;
80
+ protected withConfig(config?: RequestConfig): Promise<RequestConfig<any>>;
81
+ }
82
+
83
+ export { Client, type ClientOptions, type RequestConfig };
@@ -0,0 +1,83 @@
1
+ import { RawAxiosRequestHeaders, AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios';
2
+ import { ILogger } from '../logging/logger.js';
3
+ import { Interceptor } from './interceptor.js';
4
+ import { Token } from './token.js';
5
+
6
+ type ClientOptions = {
7
+ /**
8
+ * The client name
9
+ */
10
+ readonly name?: string;
11
+ /**
12
+ * The authorization token to use
13
+ */
14
+ readonly token?: Token;
15
+ /**
16
+ *: ILogger instance to use
17
+ */
18
+ readonly logger?: ILogger;
19
+ /**
20
+ * The baseUrl to prefix all client requests with
21
+ */
22
+ readonly baseUrl?: string;
23
+ /**
24
+ * Default request timeout (ms)
25
+ */
26
+ readonly timeout?: number;
27
+ /**
28
+ * Default headers
29
+ */
30
+ readonly headers?: RawAxiosRequestHeaders;
31
+ /**
32
+ * Default interceptors to register
33
+ */
34
+ readonly interceptors?: Array<Interceptor>;
35
+ };
36
+ type RequestConfig<D = any> = AxiosRequestConfig<D> & {
37
+ /**
38
+ * If provided, this token will be used instead of
39
+ * the default token provided in the `ClientOptions`
40
+ */
41
+ token?: Token;
42
+ };
43
+ type InterceptorRegistry = {
44
+ readonly requestId?: number;
45
+ readonly responseId?: number;
46
+ readonly interceptor: Interceptor;
47
+ };
48
+ declare class Client {
49
+ token?: Token;
50
+ readonly name: string;
51
+ protected options: ClientOptions;
52
+ protected log: ILogger;
53
+ protected http: AxiosInstance;
54
+ protected seq: number;
55
+ protected interceptors: Map<number, InterceptorRegistry>;
56
+ constructor(options?: ClientOptions);
57
+ get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>): Promise<R>;
58
+ post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: RequestConfig<D>): Promise<R>;
59
+ put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: RequestConfig<D>): Promise<R>;
60
+ patch<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: RequestConfig<D>): Promise<R>;
61
+ delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>): Promise<R>;
62
+ request<T = any, R = AxiosResponse<T>, D = any>(config: RequestConfig<D>): Promise<R>;
63
+ /**
64
+ * Register an interceptor to use
65
+ * as middleware for the request/response/error
66
+ */
67
+ use(interceptor: Interceptor): number;
68
+ /**
69
+ * Eject an interceptor
70
+ */
71
+ eject(id: number): void;
72
+ /**
73
+ * Clear (Eject) all interceptors
74
+ */
75
+ clear(): void;
76
+ /**
77
+ * Create a copy of the client
78
+ */
79
+ clone(options?: ClientOptions): Client;
80
+ protected withConfig(config?: RequestConfig): Promise<RequestConfig<any>>;
81
+ }
82
+
83
+ export { Client, type ClientOptions, type RequestConfig };
@@ -0,0 +1,159 @@
1
+ 'use strict';
2
+
3
+ var axios = require('axios');
4
+ var logging = require('../logging');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
9
+
10
+ class Client {
11
+ token;
12
+ name;
13
+ options;
14
+ log;
15
+ http;
16
+ seq = 0;
17
+ interceptors;
18
+ constructor(options = {}) {
19
+ this.options = options;
20
+ this.name = options.name || "http";
21
+ this.token = options.token;
22
+ this.log = options.logger || new logging.ConsoleLogger(this.name);
23
+ this.interceptors = /* @__PURE__ */ new Map();
24
+ this.http = axios__default.default.create({
25
+ baseURL: options.baseUrl,
26
+ timeout: options.timeout,
27
+ headers: options.headers
28
+ });
29
+ for (const interceptor of options.interceptors || []) {
30
+ this.use(interceptor);
31
+ }
32
+ }
33
+ async get(url, config) {
34
+ return this.http.get(url, await this.withConfig(config));
35
+ }
36
+ async post(url, data, config) {
37
+ return this.http.post(url, data, await this.withConfig(config));
38
+ }
39
+ async put(url, data, config) {
40
+ return this.http.put(url, data, await this.withConfig(config));
41
+ }
42
+ async patch(url, data, config) {
43
+ return this.http.patch(url, data, await this.withConfig(config));
44
+ }
45
+ async delete(url, config) {
46
+ return this.http.delete(url, await this.withConfig(config));
47
+ }
48
+ async request(config) {
49
+ return this.http.request(await this.withConfig(config));
50
+ }
51
+ /**
52
+ * Register an interceptor to use
53
+ * as middleware for the request/response/error
54
+ */
55
+ use(interceptor) {
56
+ const id = ++this.seq;
57
+ let requestId = void 0;
58
+ let responseId = void 0;
59
+ if (interceptor.request) {
60
+ requestId = this.http.interceptors.request.use(
61
+ /* istanbul ignore next */
62
+ (config) => {
63
+ return interceptor.request({ config, log: this.log });
64
+ },
65
+ /* istanbul ignore next */
66
+ (error) => {
67
+ if (!interceptor.error) return error;
68
+ return interceptor.error({ error, log: this.log });
69
+ }
70
+ );
71
+ }
72
+ if (interceptor.response) {
73
+ responseId = this.http.interceptors.response.use(
74
+ /* istanbul ignore next */
75
+ (res) => {
76
+ return interceptor.response({ res, log: this.log });
77
+ },
78
+ /* istanbul ignore next */
79
+ (error) => {
80
+ if (!interceptor.error) return error;
81
+ return interceptor.error({ error, log: this.log });
82
+ }
83
+ );
84
+ }
85
+ this.interceptors.set(id, {
86
+ requestId,
87
+ responseId,
88
+ interceptor
89
+ });
90
+ return id;
91
+ }
92
+ /**
93
+ * Eject an interceptor
94
+ */
95
+ eject(id) {
96
+ const registry = this.interceptors.get(id);
97
+ if (!registry) return;
98
+ if (registry.requestId) {
99
+ this.http.interceptors.request.eject(registry.requestId);
100
+ }
101
+ if (registry.responseId) {
102
+ this.http.interceptors.response.eject(registry.responseId);
103
+ }
104
+ this.interceptors.delete(id);
105
+ }
106
+ /**
107
+ * Clear (Eject) all interceptors
108
+ */
109
+ clear() {
110
+ for (const id of this.interceptors.keys()) {
111
+ this.eject(id);
112
+ }
113
+ }
114
+ /**
115
+ * Create a copy of the client
116
+ */
117
+ clone(options) {
118
+ return new Client({
119
+ ...this.options,
120
+ ...options,
121
+ headers: {
122
+ ...this.options.headers,
123
+ ...options?.headers
124
+ },
125
+ interceptors: [...Array.from(this.interceptors.values()).map((i) => i.interceptor)]
126
+ });
127
+ }
128
+ async withConfig(config = {}) {
129
+ let token = config.token || this.token;
130
+ if (config.token) {
131
+ delete config.token;
132
+ }
133
+ if (this.options.headers) {
134
+ if (!config.headers) {
135
+ config.headers = {};
136
+ }
137
+ for (const key in this.options.headers) {
138
+ config.headers[key] = this.options.headers[key];
139
+ }
140
+ }
141
+ if (token) {
142
+ if (!config.headers) {
143
+ config.headers = {};
144
+ }
145
+ if (typeof token === "function") {
146
+ token = await token(config);
147
+ }
148
+ if (token && typeof token === "object") {
149
+ token = token.toString();
150
+ }
151
+ config.headers["Authorization"] = `Bearer ${token}`;
152
+ }
153
+ return config;
154
+ }
155
+ }
156
+
157
+ exports.Client = Client;
158
+ //# sourceMappingURL=client.js.map
159
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http/client.ts"],"names":["ConsoleLogger","axios"],"mappings":"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","file":"client.js","sourcesContent":["import axios, {\n AxiosInstance,\n AxiosResponse,\n AxiosRequestConfig,\n RawAxiosRequestHeaders,\n} from 'axios';\n\nimport { ConsoleLogger, ILogger } from '../logging';\n\nimport { Interceptor } from './interceptor';\nimport { Token } from './token';\n\nexport type ClientOptions = {\n /**\n * The client name\n */\n readonly name?: string;\n\n /**\n * The authorization token to use\n */\n readonly token?: Token;\n\n /**\n *: ILogger instance to use\n */\n readonly logger?: ILogger;\n\n /**\n * The baseUrl to prefix all client requests with\n */\n readonly baseUrl?: string;\n\n /**\n * Default request timeout (ms)\n */\n readonly timeout?: number;\n\n /**\n * Default headers\n */\n readonly headers?: RawAxiosRequestHeaders;\n\n /**\n * Default interceptors to register\n */\n readonly interceptors?: Array<Interceptor>;\n};\n\nexport type RequestConfig<D = any> = AxiosRequestConfig<D> & {\n /**\n * If provided, this token will be used instead of\n * the default token provided in the `ClientOptions`\n */\n token?: Token;\n};\n\ntype InterceptorRegistry = {\n readonly requestId?: number;\n readonly responseId?: number;\n readonly interceptor: Interceptor;\n};\n\nexport class Client {\n token?: Token;\n readonly name: string;\n\n protected options: ClientOptions;\n protected log: ILogger;\n protected http: AxiosInstance;\n protected seq: number = 0;\n protected interceptors: Map<number, InterceptorRegistry>;\n\n constructor(options: ClientOptions = {}) {\n this.options = options;\n this.name = options.name || 'http';\n this.token = options.token;\n this.log = options.logger || new ConsoleLogger(this.name);\n this.interceptors = new Map<number, InterceptorRegistry>();\n this.http = axios.create({\n baseURL: options.baseUrl,\n timeout: options.timeout,\n headers: options.headers,\n });\n\n for (const interceptor of options.interceptors || []) {\n this.use(interceptor);\n }\n }\n\n async get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>) {\n return this.http.get<T, R, D>(url, await this.withConfig(config));\n }\n\n async post<T = any, R = AxiosResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: RequestConfig<D>\n ) {\n return this.http.post<T, R, D>(url, data, await this.withConfig(config));\n }\n\n async put<T = any, R = AxiosResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: RequestConfig<D>\n ) {\n return this.http.put<T, R, D>(url, data, await this.withConfig(config));\n }\n\n async patch<T = any, R = AxiosResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: RequestConfig<D>\n ) {\n return this.http.patch<T, R, D>(url, data, await this.withConfig(config));\n }\n\n async delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>) {\n return this.http.delete<T, R, D>(url, await this.withConfig(config));\n }\n\n async request<T = any, R = AxiosResponse<T>, D = any>(config: RequestConfig<D>) {\n return this.http.request<T, R, D>(await this.withConfig(config));\n }\n\n /**\n * Register an interceptor to use\n * as middleware for the request/response/error\n */\n use(interceptor: Interceptor) {\n const id = ++this.seq;\n let requestId: number | undefined = undefined;\n let responseId: number | undefined = undefined;\n\n if (interceptor.request) {\n requestId = this.http.interceptors.request.use(\n /* istanbul ignore next */\n (config) => {\n return interceptor.request!({ config, log: this.log });\n },\n /* istanbul ignore next */\n (error: any) => {\n if (!interceptor.error) return error;\n return interceptor.error({ error, log: this.log });\n }\n );\n }\n\n if (interceptor.response) {\n responseId = this.http.interceptors.response.use(\n /* istanbul ignore next */\n (res) => {\n return interceptor.response!({ res, log: this.log });\n },\n /* istanbul ignore next */\n (error: any) => {\n if (!interceptor.error) return error;\n return interceptor.error({ error, log: this.log });\n }\n );\n }\n\n this.interceptors.set(id, {\n requestId,\n responseId,\n interceptor,\n });\n\n return id;\n }\n\n /**\n * Eject an interceptor\n */\n eject(id: number) {\n const registry = this.interceptors.get(id);\n\n if (!registry) return;\n\n if (registry.requestId) {\n this.http.interceptors.request.eject(registry.requestId);\n }\n\n if (registry.responseId) {\n this.http.interceptors.response.eject(registry.responseId);\n }\n\n this.interceptors.delete(id);\n }\n\n /**\n * Clear (Eject) all interceptors\n */\n clear() {\n for (const id of this.interceptors.keys()) {\n this.eject(id);\n }\n }\n\n /**\n * Create a copy of the client\n */\n clone(options?: ClientOptions) {\n return new Client({\n ...this.options,\n ...options,\n headers: {\n ...this.options.headers,\n ...options?.headers,\n },\n interceptors: [...Array.from(this.interceptors.values()).map((i) => i.interceptor)],\n });\n }\n\n protected async withConfig(config: RequestConfig = {}) {\n let token = config.token || this.token;\n\n if (config.token) {\n delete config.token;\n }\n\n if (this.options.headers) {\n if (!config.headers) {\n config.headers = {};\n }\n\n for (const key in this.options.headers) {\n config.headers[key] = this.options.headers[key];\n }\n }\n\n if (token) {\n if (!config.headers) {\n config.headers = {};\n }\n\n if (typeof token === 'function') {\n token = await token(config);\n }\n\n if (token && typeof token === 'object') {\n token = token.toString();\n }\n\n config.headers['Authorization'] = `Bearer ${token}`;\n }\n\n return config;\n }\n}\n"]}