@waitaya.buc/client-js 0.1.0-alpha.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.
Files changed (166) hide show
  1. package/README.md +179 -0
  2. package/dist/adapters/livekit/api/recording.api.d.ts +15 -0
  3. package/dist/adapters/livekit/api/recording.api.d.ts.map +1 -0
  4. package/dist/adapters/livekit/api/recording.api.js +61 -0
  5. package/dist/adapters/livekit/api/recording.api.js.map +1 -0
  6. package/dist/adapters/livekit/index.d.ts +18 -0
  7. package/dist/adapters/livekit/index.d.ts.map +1 -0
  8. package/dist/adapters/livekit/index.js +26 -0
  9. package/dist/adapters/livekit/index.js.map +1 -0
  10. package/dist/adapters/livekit/livekit.adapter.d.ts +85 -0
  11. package/dist/adapters/livekit/livekit.adapter.d.ts.map +1 -0
  12. package/dist/adapters/livekit/livekit.adapter.js +531 -0
  13. package/dist/adapters/livekit/livekit.adapter.js.map +1 -0
  14. package/dist/adapters/livekit/livekit.mapper.d.ts +36 -0
  15. package/dist/adapters/livekit/livekit.mapper.d.ts.map +1 -0
  16. package/dist/adapters/livekit/livekit.mapper.js +108 -0
  17. package/dist/adapters/livekit/livekit.mapper.js.map +1 -0
  18. package/dist/adapters/livekit/livekit.types.d.ts +22 -0
  19. package/dist/adapters/livekit/livekit.types.d.ts.map +1 -0
  20. package/dist/adapters/livekit/livekit.types.js +10 -0
  21. package/dist/adapters/livekit/livekit.types.js.map +1 -0
  22. package/dist/adapters/livekit/service-adapters/index.d.ts +4 -0
  23. package/dist/adapters/livekit/service-adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/livekit/service-adapters/index.js +4 -0
  25. package/dist/adapters/livekit/service-adapters/index.js.map +1 -0
  26. package/dist/adapters/livekit/service-adapters/recording.adapter.d.ts +19 -0
  27. package/dist/adapters/livekit/service-adapters/recording.adapter.d.ts.map +1 -0
  28. package/dist/adapters/livekit/service-adapters/recording.adapter.js +30 -0
  29. package/dist/adapters/livekit/service-adapters/recording.adapter.js.map +1 -0
  30. package/dist/adapters/livekit/service-adapters/stats.adapter.d.ts +21 -0
  31. package/dist/adapters/livekit/service-adapters/stats.adapter.d.ts.map +1 -0
  32. package/dist/adapters/livekit/service-adapters/stats.adapter.js +54 -0
  33. package/dist/adapters/livekit/service-adapters/stats.adapter.js.map +1 -0
  34. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.d.ts +79 -0
  35. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.d.ts.map +1 -0
  36. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.js +348 -0
  37. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.js.map +1 -0
  38. package/dist/adapters/livekit/services/index.d.ts +3 -0
  39. package/dist/adapters/livekit/services/index.d.ts.map +1 -0
  40. package/dist/adapters/livekit/services/index.js +3 -0
  41. package/dist/adapters/livekit/services/index.js.map +1 -0
  42. package/dist/adapters/livekit/services/recording.service.d.ts +29 -0
  43. package/dist/adapters/livekit/services/recording.service.d.ts.map +1 -0
  44. package/dist/adapters/livekit/services/recording.service.js +34 -0
  45. package/dist/adapters/livekit/services/recording.service.js.map +1 -0
  46. package/dist/adapters/livekit/services/stats.service.d.ts +24 -0
  47. package/dist/adapters/livekit/services/stats.service.d.ts.map +1 -0
  48. package/dist/adapters/livekit/services/stats.service.js +56 -0
  49. package/dist/adapters/livekit/services/stats.service.js.map +1 -0
  50. package/dist/core/api/auth.api.d.ts +52 -0
  51. package/dist/core/api/auth.api.d.ts.map +1 -0
  52. package/dist/core/api/auth.api.js +59 -0
  53. package/dist/core/api/auth.api.js.map +1 -0
  54. package/dist/core/api/http.d.ts +86 -0
  55. package/dist/core/api/http.d.ts.map +1 -0
  56. package/dist/core/api/http.js +146 -0
  57. package/dist/core/api/http.js.map +1 -0
  58. package/dist/core/errors/error-codes.d.ts +43 -0
  59. package/dist/core/errors/error-codes.d.ts.map +1 -0
  60. package/dist/core/errors/error-codes.js +42 -0
  61. package/dist/core/errors/error-codes.js.map +1 -0
  62. package/dist/core/errors/vroom.error.d.ts +99 -0
  63. package/dist/core/errors/vroom.error.d.ts.map +1 -0
  64. package/dist/core/errors/vroom.error.js +141 -0
  65. package/dist/core/errors/vroom.error.js.map +1 -0
  66. package/dist/core/ports/outbound/provider-adapter-factory.port.d.ts +41 -0
  67. package/dist/core/ports/outbound/provider-adapter-factory.port.d.ts.map +1 -0
  68. package/dist/core/ports/outbound/provider-adapter-factory.port.js +2 -0
  69. package/dist/core/ports/outbound/provider-adapter-factory.port.js.map +1 -0
  70. package/dist/core/ports/outbound/provider-adapter.port.d.ts +130 -0
  71. package/dist/core/ports/outbound/provider-adapter.port.d.ts.map +1 -0
  72. package/dist/core/ports/outbound/provider-adapter.port.js +2 -0
  73. package/dist/core/ports/outbound/provider-adapter.port.js.map +1 -0
  74. package/dist/core/ports/outbound/recording-adapter.port.d.ts +40 -0
  75. package/dist/core/ports/outbound/recording-adapter.port.d.ts.map +1 -0
  76. package/dist/core/ports/outbound/recording-adapter.port.js +2 -0
  77. package/dist/core/ports/outbound/recording-adapter.port.js.map +1 -0
  78. package/dist/core/ports/outbound/stats-adapter.port.d.ts +31 -0
  79. package/dist/core/ports/outbound/stats-adapter.port.d.ts.map +1 -0
  80. package/dist/core/ports/outbound/stats-adapter.port.js +2 -0
  81. package/dist/core/ports/outbound/stats-adapter.port.js.map +1 -0
  82. package/dist/core/ports/outbound/track-attachment-adapter.port.d.ts +86 -0
  83. package/dist/core/ports/outbound/track-attachment-adapter.port.d.ts.map +1 -0
  84. package/dist/core/ports/outbound/track-attachment-adapter.port.js +2 -0
  85. package/dist/core/ports/outbound/track-attachment-adapter.port.js.map +1 -0
  86. package/dist/core/provider-registry.d.ts +29 -0
  87. package/dist/core/provider-registry.d.ts.map +1 -0
  88. package/dist/core/provider-registry.js +45 -0
  89. package/dist/core/provider-registry.js.map +1 -0
  90. package/dist/core/services/base.service.d.ts +15 -0
  91. package/dist/core/services/base.service.d.ts.map +1 -0
  92. package/dist/core/services/base.service.js +10 -0
  93. package/dist/core/services/base.service.js.map +1 -0
  94. package/dist/core/services/recording.service.d.ts +50 -0
  95. package/dist/core/services/recording.service.d.ts.map +1 -0
  96. package/dist/core/services/recording.service.js +89 -0
  97. package/dist/core/services/recording.service.js.map +1 -0
  98. package/dist/core/services/stats.service.d.ts +32 -0
  99. package/dist/core/services/stats.service.d.ts.map +1 -0
  100. package/dist/core/services/stats.service.js +69 -0
  101. package/dist/core/services/stats.service.js.map +1 -0
  102. package/dist/core/session.d.ts +142 -0
  103. package/dist/core/session.d.ts.map +1 -0
  104. package/dist/core/session.js +248 -0
  105. package/dist/core/session.js.map +1 -0
  106. package/dist/core/types/events.types.d.ts +263 -0
  107. package/dist/core/types/events.types.d.ts.map +1 -0
  108. package/dist/core/types/events.types.js +76 -0
  109. package/dist/core/types/events.types.js.map +1 -0
  110. package/dist/core/types/media.types.d.ts +81 -0
  111. package/dist/core/types/media.types.d.ts.map +1 -0
  112. package/dist/core/types/media.types.js +12 -0
  113. package/dist/core/types/media.types.js.map +1 -0
  114. package/dist/core/types/participant.types.d.ts +11 -0
  115. package/dist/core/types/participant.types.d.ts.map +1 -0
  116. package/dist/core/types/participant.types.js +2 -0
  117. package/dist/core/types/participant.types.js.map +1 -0
  118. package/dist/core/types/recording.types.d.ts +60 -0
  119. package/dist/core/types/recording.types.d.ts.map +1 -0
  120. package/dist/core/types/recording.types.js +7 -0
  121. package/dist/core/types/recording.types.js.map +1 -0
  122. package/dist/core/types/service-adapters.types.d.ts +46 -0
  123. package/dist/core/types/service-adapters.types.d.ts.map +1 -0
  124. package/dist/core/types/service-adapters.types.js +2 -0
  125. package/dist/core/types/service-adapters.types.js.map +1 -0
  126. package/dist/core/types/session.types.d.ts +57 -0
  127. package/dist/core/types/session.types.d.ts.map +1 -0
  128. package/dist/core/types/session.types.js +2 -0
  129. package/dist/core/types/session.types.js.map +1 -0
  130. package/dist/core/types/stats.types.d.ts +20 -0
  131. package/dist/core/types/stats.types.d.ts.map +1 -0
  132. package/dist/core/types/stats.types.js +7 -0
  133. package/dist/core/types/stats.types.js.map +1 -0
  134. package/dist/core/types/token.types.d.ts +82 -0
  135. package/dist/core/types/token.types.d.ts.map +1 -0
  136. package/dist/core/types/token.types.js +27 -0
  137. package/dist/core/types/token.types.js.map +1 -0
  138. package/dist/core/types/track.types.d.ts +39 -0
  139. package/dist/core/types/track.types.d.ts.map +1 -0
  140. package/dist/core/types/track.types.js +9 -0
  141. package/dist/core/types/track.types.js.map +1 -0
  142. package/dist/core/types/user.types.d.ts +23 -0
  143. package/dist/core/types/user.types.d.ts.map +1 -0
  144. package/dist/core/types/user.types.js +2 -0
  145. package/dist/core/types/user.types.js.map +1 -0
  146. package/dist/core/types/vroom.types.d.ts +86 -0
  147. package/dist/core/types/vroom.types.d.ts.map +1 -0
  148. package/dist/core/types/vroom.types.js +12 -0
  149. package/dist/core/types/vroom.types.js.map +1 -0
  150. package/dist/core/utils/token.d.ts +77 -0
  151. package/dist/core/utils/token.d.ts.map +1 -0
  152. package/dist/core/utils/token.js +127 -0
  153. package/dist/core/utils/token.js.map +1 -0
  154. package/dist/core/vroom.d.ts +90 -0
  155. package/dist/core/vroom.d.ts.map +1 -0
  156. package/dist/core/vroom.js +219 -0
  157. package/dist/core/vroom.js.map +1 -0
  158. package/dist/index.d.ts +25 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +17 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/react-native.d.ts +21 -0
  163. package/dist/react-native.d.ts.map +1 -0
  164. package/dist/react-native.js +32 -0
  165. package/dist/react-native.js.map +1 -0
  166. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.api.js","sourceRoot":"","sources":["../../../src/core/api/auth.api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAIvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAA2B,MAAM,QAAQ,CAAA;AAsCzD;;;GAGG;AACH,MAAM,gBAAgB,GAAuB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IACjE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,iBAAiB;YAC/B,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACxC,KAAK,UAAU,CAAC,cAAc;YAC5B,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;QACvC;YACE,OAAO,IAAI,CAAA,CAAC,oCAAoC;IACpD,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAGzB,YAAY,MAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,sBAAsB,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,OAAO,OAAO,CAAmB;YAC/B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,eAAe;YACpC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;YACvC,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;YAC3C,kBAAkB,EAAE,gBAAgB;YACpC,YAAY,EAAE,gCAAgC;SAC/C,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAuB;QACvC,OAAO,OAAO,CAAmB;YAC/B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,eAAe;YACpC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,SAAS,EAAE,EAAE;YACxD,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB;YACD,kBAAkB,EAAE,gBAAgB;YACpC,YAAY,EAAE,yBAAyB;SACxC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,86 @@
1
+ import { VroomError } from '../errors/vroom.error';
2
+ /**
3
+ * API error response from Vroom backend
4
+ */
5
+ export interface ApiErrorResponse {
6
+ code: string;
7
+ message: string;
8
+ }
9
+ /**
10
+ * Error context passed to custom error handlers
11
+ */
12
+ export interface ErrorContext {
13
+ response: Response;
14
+ code: string;
15
+ message: string;
16
+ }
17
+ /**
18
+ * Custom error handler for endpoint-specific errors.
19
+ * Return a VroomError to throw it, or null to fallback to common error handling.
20
+ */
21
+ export type CustomErrorHandler = (ctx: ErrorContext) => VroomError | null;
22
+ /**
23
+ * Base request options shared by request and requestVoid
24
+ */
25
+ export interface BaseRequestOptions<TBody = unknown> {
26
+ /** HTTP method */
27
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
28
+ /** Full URL to request */
29
+ url: string;
30
+ /** Request body (will be JSON stringified) */
31
+ body?: TBody;
32
+ /** Additional headers to include in the request */
33
+ headers?: Record<string, string>;
34
+ /** Custom error handler for endpoint-specific errors */
35
+ customErrorHandler?: CustomErrorHandler;
36
+ }
37
+ /**
38
+ * Request options for endpoints that return JSON data
39
+ */
40
+ export interface RequestOptions<TBody = unknown> extends BaseRequestOptions<TBody> {
41
+ /** Error message for NetworkError when fetch fails */
42
+ errorMessage: string;
43
+ }
44
+ /**
45
+ * Request options for endpoints that return no content (204, etc.)
46
+ */
47
+ export interface RequestVoidOptions<TBody = unknown> extends BaseRequestOptions<TBody> {
48
+ /** Error message for NetworkError when fetch fails (optional for void requests) */
49
+ errorMessage?: string;
50
+ }
51
+ /**
52
+ * Handle API error response with optional custom handler.
53
+ *
54
+ * Flow:
55
+ * 1. Try custom handler first (for endpoint-specific errors)
56
+ * 2. Handle common errors (BadRequest, PermissionDenied)
57
+ * 3. HTTP status fallback (403, 5xx)
58
+ * 4. Default to NetworkError
59
+ *
60
+ * @param response - Fetch response object
61
+ * @param customHandler - Optional custom error handler
62
+ */
63
+ export declare function handleApiError(response: Response, customHandler?: CustomErrorHandler): Promise<never>;
64
+ /**
65
+ * Make an HTTP request to the Vroom API that returns JSON data.
66
+ *
67
+ * Use this for endpoints that return a response body.
68
+ * For endpoints that return no content (204), use `requestVoid` instead.
69
+ *
70
+ * @param options - Request options
71
+ * @returns Parsed JSON response
72
+ * @throws NetworkError if response body is empty (unexpected)
73
+ * @throws VroomError subclass based on error type
74
+ */
75
+ export declare function request<TResponse, TBody = unknown>(options: RequestOptions<TBody>): Promise<TResponse>;
76
+ /**
77
+ * Make an HTTP request to the Vroom API that returns no content.
78
+ *
79
+ * Use this for endpoints that return 204 No Content or empty body.
80
+ * For endpoints that return JSON data, use `request` instead.
81
+ *
82
+ * @param options - Request options
83
+ * @throws VroomError subclass based on error type
84
+ */
85
+ export declare function requestVoid<TBody = unknown>(options: RequestVoidOptions<TBody>): Promise<void>;
86
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/api/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,UAAU,EACX,MAAM,uBAAuB,CAAA;AAG9B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,UAAU,GAAG,IAAI,CAAA;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,KAAK,GAAG,OAAO;IACjD,kBAAkB;IAClB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;IACzC,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,8CAA8C;IAC9C,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,kBAAkB,CAAC,KAAK,CAAC;IAChF,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,kBAAkB,CAAC,KAAK,CAAC;IACpF,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAoBD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,QAAQ,EAClB,aAAa,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,KAAK,CAAC,CA4ChB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAAC,SAAS,EAAE,KAAK,GAAG,OAAO,EACtD,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,GAC7B,OAAO,CAAC,SAAS,CAAC,CA+BpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,KAAK,GAAG,OAAO,EAC/C,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -0,0 +1,146 @@
1
+ import { BadRequestError, ConflictError, ForbiddenError, MethodNotAllowedError, NetworkError, NotFoundError, PermissionDeniedError, ServiceError, UnauthorizedError, VroomError, } from '../errors/vroom.error';
2
+ import { ErrorCodes } from '../errors/error-codes';
3
+ /**
4
+ * Parse error response from API
5
+ */
6
+ async function parseErrorResponse(response) {
7
+ let errorData = null;
8
+ try {
9
+ errorData = (await response.json());
10
+ }
11
+ catch {
12
+ // Response body is not JSON
13
+ }
14
+ return {
15
+ code: errorData?.code ?? 'E_UNKNOWN',
16
+ message: errorData?.message ?? `HTTP ${response.status}`,
17
+ };
18
+ }
19
+ /**
20
+ * Handle API error response with optional custom handler.
21
+ *
22
+ * Flow:
23
+ * 1. Try custom handler first (for endpoint-specific errors)
24
+ * 2. Handle common errors (BadRequest, PermissionDenied)
25
+ * 3. HTTP status fallback (403, 5xx)
26
+ * 4. Default to NetworkError
27
+ *
28
+ * @param response - Fetch response object
29
+ * @param customHandler - Optional custom error handler
30
+ */
31
+ export async function handleApiError(response, customHandler) {
32
+ const { code, message } = await parseErrorResponse(response);
33
+ const ctx = { response, code, message };
34
+ // 1. Try custom handler first
35
+ if (customHandler) {
36
+ const customError = customHandler(ctx);
37
+ if (customError)
38
+ throw customError;
39
+ }
40
+ // 2. Common errors by error code (from response body)
41
+ switch (code) {
42
+ case ErrorCodes.E_BAD_REQUEST:
43
+ throw new BadRequestError(message);
44
+ case ErrorCodes.E_PERMISSION_DENIED:
45
+ throw new PermissionDeniedError(message);
46
+ case ErrorCodes.E_FORBIDDEN:
47
+ throw new ForbiddenError(message);
48
+ case ErrorCodes.E_METHOD_NOT_ALLOWED:
49
+ throw new MethodNotAllowedError(message);
50
+ }
51
+ // 3. HTTP status fallback (when no specific error code)
52
+ switch (response.status) {
53
+ case 400:
54
+ throw new BadRequestError(message);
55
+ case 401:
56
+ throw new UnauthorizedError(message);
57
+ case 403:
58
+ throw new PermissionDeniedError(message);
59
+ case 404:
60
+ throw new NotFoundError(message);
61
+ case 405:
62
+ throw new MethodNotAllowedError(message);
63
+ case 409:
64
+ throw new ConflictError(message);
65
+ }
66
+ if (response.status >= 500) {
67
+ throw new ServiceError(message);
68
+ }
69
+ // 4. Default - unknown 4xx errors
70
+ throw new BadRequestError(message);
71
+ }
72
+ /**
73
+ * Make an HTTP request to the Vroom API that returns JSON data.
74
+ *
75
+ * Use this for endpoints that return a response body.
76
+ * For endpoints that return no content (204), use `requestVoid` instead.
77
+ *
78
+ * @param options - Request options
79
+ * @returns Parsed JSON response
80
+ * @throws NetworkError if response body is empty (unexpected)
81
+ * @throws VroomError subclass based on error type
82
+ */
83
+ export async function request(options) {
84
+ const { method, url, body, headers, customErrorHandler, errorMessage } = options;
85
+ try {
86
+ const response = await fetch(url, {
87
+ method,
88
+ headers: {
89
+ ...(body !== undefined && { 'Content-Type': 'application/json' }),
90
+ ...headers,
91
+ },
92
+ body: body !== undefined ? JSON.stringify(body) : undefined,
93
+ });
94
+ if (!response.ok) {
95
+ await handleApiError(response, customErrorHandler);
96
+ }
97
+ const text = await response.text();
98
+ if (!text) {
99
+ throw new NetworkError('Expected response body but received empty');
100
+ }
101
+ return JSON.parse(text);
102
+ }
103
+ catch (error) {
104
+ // Re-throw SDK errors as-is
105
+ if (error instanceof VroomError) {
106
+ throw error;
107
+ }
108
+ // Wrap other errors (TypeError, fetch errors, etc.) as NetworkError
109
+ throw new NetworkError(errorMessage, error);
110
+ }
111
+ }
112
+ /**
113
+ * Make an HTTP request to the Vroom API that returns no content.
114
+ *
115
+ * Use this for endpoints that return 204 No Content or empty body.
116
+ * For endpoints that return JSON data, use `request` instead.
117
+ *
118
+ * @param options - Request options
119
+ * @throws VroomError subclass based on error type
120
+ */
121
+ export async function requestVoid(options) {
122
+ const { method, url, body, headers, customErrorHandler, errorMessage } = options;
123
+ try {
124
+ const response = await fetch(url, {
125
+ method,
126
+ headers: {
127
+ ...(body !== undefined && { 'Content-Type': 'application/json' }),
128
+ ...headers,
129
+ },
130
+ body: body !== undefined ? JSON.stringify(body) : undefined,
131
+ });
132
+ if (!response.ok) {
133
+ await handleApiError(response, customErrorHandler);
134
+ }
135
+ // Don't parse response body - this is a void endpoint
136
+ }
137
+ catch (error) {
138
+ // Re-throw SDK errors as-is
139
+ if (error instanceof VroomError) {
140
+ throw error;
141
+ }
142
+ // Wrap other errors (TypeError, fetch errors, etc.) as NetworkError
143
+ throw new NetworkError(errorMessage ?? 'Request failed', error);
144
+ }
145
+ }
146
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/api/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Standard error codes for Vroom SDK
3
+ */
4
+ export declare const ErrorCodes: {
5
+ /** Missing or invalid request fields */
6
+ readonly E_BAD_REQUEST: "E_BAD_REQUEST";
7
+ /** API key validation failed */
8
+ readonly E_INVALID_API_KEY: "E_INVALID_API_KEY";
9
+ /** Invalid or expired auth token */
10
+ readonly E_UNAUTHORIZED: "E_UNAUTHORIZED";
11
+ /** Invalid or malformed token */
12
+ readonly E_INVALID_TOKEN: "E_INVALID_TOKEN";
13
+ /** Platform restriction violated */
14
+ readonly E_PLATFORM_MISMATCH: "E_PLATFORM_MISMATCH";
15
+ /** Network error occurred */
16
+ readonly E_NETWORK: "E_NETWORK";
17
+ /** Operation timed out */
18
+ readonly E_TIMEOUT: "E_TIMEOUT";
19
+ /** Service-specific error */
20
+ readonly E_SERVICE_ERROR: "E_SERVICE_ERROR";
21
+ /** Media permission denied */
22
+ readonly E_PERMISSION_DENIED: "E_PERMISSION_DENIED";
23
+ /** Media device operation failed (e.g., mute/unmute, device disconnected) */
24
+ readonly E_MEDIA: "E_MEDIA";
25
+ /** Feature not supported */
26
+ readonly E_UNSUPPORTED_FEATURE: "E_UNSUPPORTED_FEATURE";
27
+ /** Failed to start recording */
28
+ readonly E_RECORDING_START: "E_RECORDING_START";
29
+ /** Unsupported RTC provider */
30
+ readonly E_UNSUPPORTED_PROVIDER: "E_UNSUPPORTED_PROVIDER";
31
+ /** Resource not found */
32
+ readonly E_NOT_FOUND: "E_NOT_FOUND";
33
+ /** Resource conflict (e.g., already exists) */
34
+ readonly E_CONFLICT: "E_CONFLICT";
35
+ /** HTTP method not allowed */
36
+ readonly E_METHOD_NOT_ALLOWED: "E_METHOD_NOT_ALLOWED";
37
+ /** Access to resource is forbidden (e.g., cross-room access) */
38
+ readonly E_FORBIDDEN: "E_FORBIDDEN";
39
+ /** Internal server error */
40
+ readonly E_INTERNAL: "E_INTERNAL";
41
+ };
42
+ export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
43
+ //# sourceMappingURL=error-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../../src/core/errors/error-codes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,wCAAwC;;IAExC,gCAAgC;;IAEhC,oCAAoC;;IAEpC,iCAAiC;;IAEjC,oCAAoC;;IAEpC,6BAA6B;;IAE7B,0BAA0B;;IAE1B,6BAA6B;;IAE7B,8BAA8B;;IAE9B,6EAA6E;;IAE7E,4BAA4B;;IAE5B,gCAAgC;;IAEhC,+BAA+B;;IAE/B,yBAAyB;;IAEzB,+CAA+C;;IAE/C,8BAA8B;;IAE9B,gEAAgE;;IAEhE,4BAA4B;;CAEpB,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Standard error codes for Vroom SDK
3
+ */
4
+ export const ErrorCodes = {
5
+ /** Missing or invalid request fields */
6
+ E_BAD_REQUEST: 'E_BAD_REQUEST',
7
+ /** API key validation failed */
8
+ E_INVALID_API_KEY: 'E_INVALID_API_KEY',
9
+ /** Invalid or expired auth token */
10
+ E_UNAUTHORIZED: 'E_UNAUTHORIZED',
11
+ /** Invalid or malformed token */
12
+ E_INVALID_TOKEN: 'E_INVALID_TOKEN',
13
+ /** Platform restriction violated */
14
+ E_PLATFORM_MISMATCH: 'E_PLATFORM_MISMATCH',
15
+ /** Network error occurred */
16
+ E_NETWORK: 'E_NETWORK',
17
+ /** Operation timed out */
18
+ E_TIMEOUT: 'E_TIMEOUT',
19
+ /** Service-specific error */
20
+ E_SERVICE_ERROR: 'E_SERVICE_ERROR',
21
+ /** Media permission denied */
22
+ E_PERMISSION_DENIED: 'E_PERMISSION_DENIED',
23
+ /** Media device operation failed (e.g., mute/unmute, device disconnected) */
24
+ E_MEDIA: 'E_MEDIA',
25
+ /** Feature not supported */
26
+ E_UNSUPPORTED_FEATURE: 'E_UNSUPPORTED_FEATURE',
27
+ /** Failed to start recording */
28
+ E_RECORDING_START: 'E_RECORDING_START',
29
+ /** Unsupported RTC provider */
30
+ E_UNSUPPORTED_PROVIDER: 'E_UNSUPPORTED_PROVIDER',
31
+ /** Resource not found */
32
+ E_NOT_FOUND: 'E_NOT_FOUND',
33
+ /** Resource conflict (e.g., already exists) */
34
+ E_CONFLICT: 'E_CONFLICT',
35
+ /** HTTP method not allowed */
36
+ E_METHOD_NOT_ALLOWED: 'E_METHOD_NOT_ALLOWED',
37
+ /** Access to resource is forbidden (e.g., cross-room access) */
38
+ E_FORBIDDEN: 'E_FORBIDDEN',
39
+ /** Internal server error */
40
+ E_INTERNAL: 'E_INTERNAL',
41
+ };
42
+ //# sourceMappingURL=error-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../../src/core/errors/error-codes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,wCAAwC;IACxC,aAAa,EAAE,eAAe;IAC9B,gCAAgC;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,oCAAoC;IACpC,cAAc,EAAE,gBAAgB;IAChC,iCAAiC;IACjC,eAAe,EAAE,iBAAiB;IAClC,oCAAoC;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,6BAA6B;IAC7B,SAAS,EAAE,WAAW;IACtB,0BAA0B;IAC1B,SAAS,EAAE,WAAW;IACtB,6BAA6B;IAC7B,eAAe,EAAE,iBAAiB;IAClC,8BAA8B;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,6EAA6E;IAC7E,OAAO,EAAE,SAAS;IAClB,4BAA4B;IAC5B,qBAAqB,EAAE,uBAAuB;IAC9C,gCAAgC;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,+BAA+B;IAC/B,sBAAsB,EAAE,wBAAwB;IAChD,yBAAyB;IACzB,WAAW,EAAE,aAAa;IAC1B,+CAA+C;IAC/C,UAAU,EAAE,YAAY;IACxB,8BAA8B;IAC9B,oBAAoB,EAAE,sBAAsB;IAC5C,gEAAgE;IAChE,WAAW,EAAE,aAAa;IAC1B,4BAA4B;IAC5B,UAAU,EAAE,YAAY;CAChB,CAAA"}
@@ -0,0 +1,99 @@
1
+ import { type ErrorCode } from './error-codes';
2
+ /**
3
+ * Base error class for Vroom SDK
4
+ * All errors extend this class
5
+ */
6
+ export declare class VroomError extends Error {
7
+ /** Error code */
8
+ readonly code: ErrorCode;
9
+ /** Additional error details */
10
+ readonly details?: unknown;
11
+ /** Error timestamp */
12
+ readonly timestamp: number;
13
+ constructor(code: ErrorCode, message: string, details?: unknown);
14
+ }
15
+ /**
16
+ * Bad request error - missing or invalid request fields
17
+ */
18
+ export declare class BadRequestError extends VroomError {
19
+ constructor(message?: string, details?: unknown);
20
+ }
21
+ /**
22
+ * Invalid API key error
23
+ */
24
+ export declare class InvalidApiKeyError extends VroomError {
25
+ constructor(message?: string, details?: unknown);
26
+ }
27
+ /**
28
+ * Unauthorized error - invalid or expired auth token
29
+ */
30
+ export declare class UnauthorizedError extends VroomError {
31
+ constructor(message?: string, details?: unknown);
32
+ }
33
+ /**
34
+ * Platform mismatch error
35
+ */
36
+ export declare class PlatformMismatchError extends VroomError {
37
+ constructor(message?: string, details?: unknown);
38
+ }
39
+ /**
40
+ * Network error
41
+ */
42
+ export declare class NetworkError extends VroomError {
43
+ constructor(message?: string, details?: unknown);
44
+ }
45
+ /**
46
+ * Timeout error
47
+ */
48
+ export declare class TimeoutError extends VroomError {
49
+ constructor(message?: string, details?: unknown);
50
+ }
51
+ /**
52
+ * Service error
53
+ */
54
+ export declare class ServiceError extends VroomError {
55
+ constructor(message?: string, details?: unknown);
56
+ }
57
+ /**
58
+ * Permission denied error
59
+ */
60
+ export declare class PermissionDeniedError extends VroomError {
61
+ constructor(message?: string, details?: unknown);
62
+ }
63
+ /**
64
+ * Unsupported feature error
65
+ */
66
+ export declare class UnsupportedFeatureError extends VroomError {
67
+ constructor(message?: string, details?: unknown);
68
+ }
69
+ /**
70
+ * Recording start error
71
+ */
72
+ export declare class RecordingStartError extends VroomError {
73
+ constructor(message?: string, details?: unknown);
74
+ }
75
+ /**
76
+ * Not found error - resource does not exist
77
+ */
78
+ export declare class NotFoundError extends VroomError {
79
+ constructor(message?: string, details?: unknown);
80
+ }
81
+ /**
82
+ * Conflict error - resource already exists or state conflict
83
+ */
84
+ export declare class ConflictError extends VroomError {
85
+ constructor(message?: string, details?: unknown);
86
+ }
87
+ /**
88
+ * Method not allowed error
89
+ */
90
+ export declare class MethodNotAllowedError extends VroomError {
91
+ constructor(message?: string, details?: unknown);
92
+ }
93
+ /**
94
+ * Forbidden error - access to resource is forbidden (e.g., cross-room access)
95
+ */
96
+ export declare class ForbiddenError extends VroomError {
97
+ constructor(message?: string, details?: unknown);
98
+ }
99
+ //# sourceMappingURL=vroom.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vroom.error.d.ts","sourceRoot":"","sources":["../../../src/core/errors/vroom.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAE1D;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,iBAAiB;IACjB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAEd,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAOhE;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,SAAgB,EAAE,OAAO,CAAC,EAAE,OAAO;CAIvD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,OAAO,SAA8B,EAAE,OAAO,CAAC,EAAE,OAAO;CAIrE;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,SAAiB,EAAE,OAAO,CAAC,EAAE,OAAO;CAIxD;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,UAAU;gBACvC,OAAO,SAAkC,EAAE,OAAO,CAAC,EAAE,OAAO;CAIzE;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,OAAO,SAA2B,EAAE,OAAO,CAAC,EAAE,OAAO;CAIlE;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,OAAO,SAAwB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI/D;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,OAAO,SAA2B,EAAE,OAAO,CAAC,EAAE,OAAO;CAIlE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,UAAU;gBACvC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI7D;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,UAAU;gBACzC,OAAO,SAA0B,EAAE,OAAO,CAAC,EAAE,OAAO;CAIjE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,OAAO,SAA8B,EAAE,OAAO,CAAC,EAAE,OAAO;CAIrE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,OAAO,SAAuB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI9D;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI7D;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,UAAU;gBACvC,OAAO,SAAuB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI9D;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;gBAChC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,OAAO;CAIrD"}
@@ -0,0 +1,141 @@
1
+ import { ErrorCodes } from './error-codes';
2
+ /**
3
+ * Base error class for Vroom SDK
4
+ * All errors extend this class
5
+ */
6
+ export class VroomError extends Error {
7
+ constructor(code, message, details) {
8
+ super(message);
9
+ this.name = 'VroomError';
10
+ this.code = code;
11
+ this.details = details;
12
+ this.timestamp = Date.now();
13
+ }
14
+ }
15
+ /**
16
+ * Bad request error - missing or invalid request fields
17
+ */
18
+ export class BadRequestError extends VroomError {
19
+ constructor(message = 'Bad request', details) {
20
+ super(ErrorCodes.E_BAD_REQUEST, message, details);
21
+ this.name = 'BadRequestError';
22
+ }
23
+ }
24
+ /**
25
+ * Invalid API key error
26
+ */
27
+ export class InvalidApiKeyError extends VroomError {
28
+ constructor(message = 'API key validation failed', details) {
29
+ super(ErrorCodes.E_INVALID_API_KEY, message, details);
30
+ this.name = 'InvalidApiKeyError';
31
+ }
32
+ }
33
+ /**
34
+ * Unauthorized error - invalid or expired auth token
35
+ */
36
+ export class UnauthorizedError extends VroomError {
37
+ constructor(message = 'Unauthorized', details) {
38
+ super(ErrorCodes.E_UNAUTHORIZED, message, details);
39
+ this.name = 'UnauthorizedError';
40
+ }
41
+ }
42
+ /**
43
+ * Platform mismatch error
44
+ */
45
+ export class PlatformMismatchError extends VroomError {
46
+ constructor(message = 'Platform restriction violated', details) {
47
+ super(ErrorCodes.E_PLATFORM_MISMATCH, message, details);
48
+ this.name = 'PlatformMismatchError';
49
+ }
50
+ }
51
+ /**
52
+ * Network error
53
+ */
54
+ export class NetworkError extends VroomError {
55
+ constructor(message = 'Network error occurred', details) {
56
+ super(ErrorCodes.E_NETWORK, message, details);
57
+ this.name = 'NetworkError';
58
+ }
59
+ }
60
+ /**
61
+ * Timeout error
62
+ */
63
+ export class TimeoutError extends VroomError {
64
+ constructor(message = 'Operation timed out', details) {
65
+ super(ErrorCodes.E_TIMEOUT, message, details);
66
+ this.name = 'TimeoutError';
67
+ }
68
+ }
69
+ /**
70
+ * Service error
71
+ */
72
+ export class ServiceError extends VroomError {
73
+ constructor(message = 'Service error occurred', details) {
74
+ super(ErrorCodes.E_SERVICE_ERROR, message, details);
75
+ this.name = 'ServiceError';
76
+ }
77
+ }
78
+ /**
79
+ * Permission denied error
80
+ */
81
+ export class PermissionDeniedError extends VroomError {
82
+ constructor(message = 'Permission denied', details) {
83
+ super(ErrorCodes.E_PERMISSION_DENIED, message, details);
84
+ this.name = 'PermissionDeniedError';
85
+ }
86
+ }
87
+ /**
88
+ * Unsupported feature error
89
+ */
90
+ export class UnsupportedFeatureError extends VroomError {
91
+ constructor(message = 'Feature not supported', details) {
92
+ super(ErrorCodes.E_UNSUPPORTED_FEATURE, message, details);
93
+ this.name = 'UnsupportedFeatureError';
94
+ }
95
+ }
96
+ /**
97
+ * Recording start error
98
+ */
99
+ export class RecordingStartError extends VroomError {
100
+ constructor(message = 'Failed to start recording', details) {
101
+ super(ErrorCodes.E_RECORDING_START, message, details);
102
+ this.name = 'RecordingStartError';
103
+ }
104
+ }
105
+ /**
106
+ * Not found error - resource does not exist
107
+ */
108
+ export class NotFoundError extends VroomError {
109
+ constructor(message = 'Resource not found', details) {
110
+ super(ErrorCodes.E_NOT_FOUND, message, details);
111
+ this.name = 'NotFoundError';
112
+ }
113
+ }
114
+ /**
115
+ * Conflict error - resource already exists or state conflict
116
+ */
117
+ export class ConflictError extends VroomError {
118
+ constructor(message = 'Resource conflict', details) {
119
+ super(ErrorCodes.E_CONFLICT, message, details);
120
+ this.name = 'ConflictError';
121
+ }
122
+ }
123
+ /**
124
+ * Method not allowed error
125
+ */
126
+ export class MethodNotAllowedError extends VroomError {
127
+ constructor(message = 'Method not allowed', details) {
128
+ super(ErrorCodes.E_METHOD_NOT_ALLOWED, message, details);
129
+ this.name = 'MethodNotAllowedError';
130
+ }
131
+ }
132
+ /**
133
+ * Forbidden error - access to resource is forbidden (e.g., cross-room access)
134
+ */
135
+ export class ForbiddenError extends VroomError {
136
+ constructor(message = 'Forbidden', details) {
137
+ super(ErrorCodes.E_FORBIDDEN, message, details);
138
+ this.name = 'ForbiddenError';
139
+ }
140
+ }
141
+ //# sourceMappingURL=vroom.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vroom.error.js","sourceRoot":"","sources":["../../../src/core/errors/vroom.error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { ProviderAdapter } from './provider-adapter.port';
2
+ import type { ServiceContext } from '../../types/service-adapters.types';
3
+ import type { Platform } from '../../types/vroom.types';
4
+ /**
5
+ * Factory interface for creating provider adapters.
6
+ *
7
+ * This is the port (interface) that provider implementations must implement.
8
+ * The factory pattern allows the core to create adapters without knowing
9
+ * the concrete implementation, following Hexagonal Architecture principles.
10
+ *
11
+ * ## Lazy Loading
12
+ *
13
+ * Provider factories are async so adapters can be loaded lazily on demand.
14
+ * Platform setup (e.g., React Native WebRTC globals) should be handled during
15
+ * SDK init, before connect() is called.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // In adapter layer (e.g., adapters/livekit/index.ts)
20
+ * export const LiveKitAdapterFactory: ProviderAdapterFactory = {
21
+ * create: async (context, _platform) => {
22
+ * // Import adapter only when needed
23
+ * const { LiveKitAdapter } = await import('./livekit.adapter')
24
+ * return new LiveKitAdapter(context)
25
+ * },
26
+ * }
27
+ * ```
28
+ */
29
+ export interface ProviderAdapterFactory {
30
+ /**
31
+ * Create a new provider adapter instance.
32
+ *
33
+ * Can be async to support lazy loading.
34
+ *
35
+ * @param serviceContext - Context containing session token and API endpoint
36
+ * @param platform - Target platform ('web', 'ios', 'android') for platform-specific setup
37
+ * @returns A new ProviderAdapter instance (sync or async)
38
+ */
39
+ create(serviceContext: ServiceContext, platform: Platform): ProviderAdapter | Promise<ProviderAdapter>;
40
+ }
41
+ //# sourceMappingURL=provider-adapter-factory.port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-adapter-factory.port.d.ts","sourceRoot":"","sources":["../../../../src/core/ports/outbound/provider-adapter-factory.port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACvG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider-adapter-factory.port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-adapter-factory.port.js","sourceRoot":"","sources":["../../../../src/core/ports/outbound/provider-adapter-factory.port.ts"],"names":[],"mappings":""}