@sogni-ai/expo-client 1.0.0-alpha.10

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 (262) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +411 -0
  3. package/dist/cjs/Account/index.d.ts +60 -0
  4. package/dist/cjs/Account/index.d.ts.map +1 -0
  5. package/dist/cjs/Account/index.js +188 -0
  6. package/dist/cjs/Account/index.js.map +1 -0
  7. package/dist/cjs/Account/types.d.ts +43 -0
  8. package/dist/cjs/Account/types.d.ts.map +1 -0
  9. package/dist/cjs/Account/types.js +18 -0
  10. package/dist/cjs/Account/types.js.map +1 -0
  11. package/dist/cjs/ApiClient/WebSocketClient/events.d.ts +139 -0
  12. package/dist/cjs/ApiClient/WebSocketClient/events.d.ts.map +1 -0
  13. package/dist/cjs/ApiClient/WebSocketClient/events.js +3 -0
  14. package/dist/cjs/ApiClient/WebSocketClient/events.js.map +1 -0
  15. package/dist/cjs/ApiClient/WebSocketClient/index.d.ts +45 -0
  16. package/dist/cjs/ApiClient/WebSocketClient/index.d.ts.map +1 -0
  17. package/dist/cjs/ApiClient/WebSocketClient/index.js +283 -0
  18. package/dist/cjs/ApiClient/WebSocketClient/index.js.map +1 -0
  19. package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts +45 -0
  20. package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts.map +1 -0
  21. package/dist/cjs/ApiClient/WebSocketClient/normalize.js +245 -0
  22. package/dist/cjs/ApiClient/WebSocketClient/normalize.js.map +1 -0
  23. package/dist/cjs/ApiClient/WebSocketClient/types.d.ts +9 -0
  24. package/dist/cjs/ApiClient/WebSocketClient/types.d.ts.map +1 -0
  25. package/dist/cjs/ApiClient/WebSocketClient/types.js +3 -0
  26. package/dist/cjs/ApiClient/WebSocketClient/types.js.map +1 -0
  27. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts +161 -0
  28. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts.map +1 -0
  29. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js +11 -0
  30. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
  31. package/dist/cjs/ApiClient/index.d.ts +60 -0
  32. package/dist/cjs/ApiClient/index.d.ts.map +1 -0
  33. package/dist/cjs/ApiClient/index.js +87 -0
  34. package/dist/cjs/ApiClient/index.js.map +1 -0
  35. package/dist/cjs/Chat/ChatStream.d.ts +42 -0
  36. package/dist/cjs/Chat/ChatStream.d.ts.map +1 -0
  37. package/dist/cjs/Chat/ChatStream.js +146 -0
  38. package/dist/cjs/Chat/ChatStream.js.map +1 -0
  39. package/dist/cjs/Chat/index.d.ts +61 -0
  40. package/dist/cjs/Chat/index.d.ts.map +1 -0
  41. package/dist/cjs/Chat/index.js +179 -0
  42. package/dist/cjs/Chat/index.js.map +1 -0
  43. package/dist/cjs/Chat/tools.d.ts +13 -0
  44. package/dist/cjs/Chat/tools.d.ts.map +1 -0
  45. package/dist/cjs/Chat/tools.js +22 -0
  46. package/dist/cjs/Chat/tools.js.map +1 -0
  47. package/dist/cjs/Chat/types.d.ts +153 -0
  48. package/dist/cjs/Chat/types.d.ts.map +1 -0
  49. package/dist/cjs/Chat/types.js +3 -0
  50. package/dist/cjs/Chat/types.js.map +1 -0
  51. package/dist/cjs/Projects/ControlNet.d.ts +30 -0
  52. package/dist/cjs/Projects/ControlNet.d.ts.map +1 -0
  53. package/dist/cjs/Projects/ControlNet.js +45 -0
  54. package/dist/cjs/Projects/ControlNet.js.map +1 -0
  55. package/dist/cjs/Projects/createJobRequestMessage.d.ts +11 -0
  56. package/dist/cjs/Projects/createJobRequestMessage.d.ts.map +1 -0
  57. package/dist/cjs/Projects/createJobRequestMessage.js +239 -0
  58. package/dist/cjs/Projects/createJobRequestMessage.js.map +1 -0
  59. package/dist/cjs/Projects/index.d.ts +96 -0
  60. package/dist/cjs/Projects/index.d.ts.map +1 -0
  61. package/dist/cjs/Projects/index.js +536 -0
  62. package/dist/cjs/Projects/index.js.map +1 -0
  63. package/dist/cjs/Projects/restNormalize.d.ts +60 -0
  64. package/dist/cjs/Projects/restNormalize.d.ts.map +1 -0
  65. package/dist/cjs/Projects/restNormalize.js +89 -0
  66. package/dist/cjs/Projects/restNormalize.js.map +1 -0
  67. package/dist/cjs/Projects/types.d.ts +233 -0
  68. package/dist/cjs/Projects/types.d.ts.map +1 -0
  69. package/dist/cjs/Projects/types.js +3 -0
  70. package/dist/cjs/Projects/types.js.map +1 -0
  71. package/dist/cjs/Projects/utils.d.ts +23 -0
  72. package/dist/cjs/Projects/utils.d.ts.map +1 -0
  73. package/dist/cjs/Projects/utils.js +65 -0
  74. package/dist/cjs/Projects/utils.js.map +1 -0
  75. package/dist/cjs/index.d.ts +63 -0
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/index.js +116 -0
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts +15 -0
  80. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts.map +1 -0
  81. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js +47 -0
  82. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  83. package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts +23 -0
  84. package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts.map +1 -0
  85. package/dist/cjs/lib/AuthManager/AuthManagerBase.js +14 -0
  86. package/dist/cjs/lib/AuthManager/AuthManagerBase.js.map +1 -0
  87. package/dist/cjs/lib/AuthManager/AuthStorage.d.ts +11 -0
  88. package/dist/cjs/lib/AuthManager/AuthStorage.d.ts.map +1 -0
  89. package/dist/cjs/lib/AuthManager/AuthStorage.js +50 -0
  90. package/dist/cjs/lib/AuthManager/AuthStorage.js.map +1 -0
  91. package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts +35 -0
  92. package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts.map +1 -0
  93. package/dist/cjs/lib/AuthManager/TokenAuthManager.js +164 -0
  94. package/dist/cjs/lib/AuthManager/TokenAuthManager.js.map +1 -0
  95. package/dist/cjs/lib/AuthManager/index.d.ts +7 -0
  96. package/dist/cjs/lib/AuthManager/index.d.ts.map +1 -0
  97. package/dist/cjs/lib/AuthManager/index.js +13 -0
  98. package/dist/cjs/lib/AuthManager/index.js.map +1 -0
  99. package/dist/cjs/lib/Cache.d.ts +12 -0
  100. package/dist/cjs/lib/Cache.d.ts.map +1 -0
  101. package/dist/cjs/lib/Cache.js +36 -0
  102. package/dist/cjs/lib/Cache.js.map +1 -0
  103. package/dist/cjs/lib/DefaultLogger.d.ts +17 -0
  104. package/dist/cjs/lib/DefaultLogger.d.ts.map +1 -0
  105. package/dist/cjs/lib/DefaultLogger.js +36 -0
  106. package/dist/cjs/lib/DefaultLogger.js.map +1 -0
  107. package/dist/cjs/lib/RestClient.d.ts +18 -0
  108. package/dist/cjs/lib/RestClient.d.ts.map +1 -0
  109. package/dist/cjs/lib/RestClient.js +67 -0
  110. package/dist/cjs/lib/RestClient.js.map +1 -0
  111. package/dist/cjs/lib/TypedEventEmitter.d.ts +16 -0
  112. package/dist/cjs/lib/TypedEventEmitter.d.ts.map +1 -0
  113. package/dist/cjs/lib/TypedEventEmitter.js +46 -0
  114. package/dist/cjs/lib/TypedEventEmitter.js.map +1 -0
  115. package/dist/cjs/lib/base64.d.ts +3 -0
  116. package/dist/cjs/lib/base64.d.ts.map +1 -0
  117. package/dist/cjs/lib/base64.js +21 -0
  118. package/dist/cjs/lib/base64.js.map +1 -0
  119. package/dist/cjs/lib/getUUID.d.ts +12 -0
  120. package/dist/cjs/lib/getUUID.d.ts.map +1 -0
  121. package/dist/cjs/lib/getUUID.js +29 -0
  122. package/dist/cjs/lib/getUUID.js.map +1 -0
  123. package/dist/cjs/lib/mediaInput.d.ts +33 -0
  124. package/dist/cjs/lib/mediaInput.d.ts.map +1 -0
  125. package/dist/cjs/lib/mediaInput.js +32 -0
  126. package/dist/cjs/lib/mediaInput.js.map +1 -0
  127. package/dist/cjs/lib/utils.d.ts +10 -0
  128. package/dist/cjs/lib/utils.d.ts.map +1 -0
  129. package/dist/cjs/lib/utils.js +24 -0
  130. package/dist/cjs/lib/utils.js.map +1 -0
  131. package/dist/cjs/types/ErrorData.d.ts +7 -0
  132. package/dist/cjs/types/ErrorData.d.ts.map +1 -0
  133. package/dist/cjs/types/ErrorData.js +3 -0
  134. package/dist/cjs/types/ErrorData.js.map +1 -0
  135. package/dist/cjs/types/json.d.ts +6 -0
  136. package/dist/cjs/types/json.d.ts.map +1 -0
  137. package/dist/cjs/types/json.js +3 -0
  138. package/dist/cjs/types/json.js.map +1 -0
  139. package/dist/cjs/types/token.d.ts +2 -0
  140. package/dist/cjs/types/token.d.ts.map +1 -0
  141. package/dist/cjs/types/token.js +3 -0
  142. package/dist/cjs/types/token.js.map +1 -0
  143. package/dist/cjs/version.d.ts +2 -0
  144. package/dist/cjs/version.d.ts.map +1 -0
  145. package/dist/cjs/version.js +5 -0
  146. package/dist/cjs/version.js.map +1 -0
  147. package/dist/cjs/wallet.d.ts +59 -0
  148. package/dist/cjs/wallet.d.ts.map +1 -0
  149. package/dist/cjs/wallet.js +125 -0
  150. package/dist/cjs/wallet.js.map +1 -0
  151. package/dist/esm/Account/index.js +183 -0
  152. package/dist/esm/Account/index.js.map +1 -0
  153. package/dist/esm/Account/types.js +15 -0
  154. package/dist/esm/Account/types.js.map +1 -0
  155. package/dist/esm/ApiClient/WebSocketClient/events.js +2 -0
  156. package/dist/esm/ApiClient/WebSocketClient/events.js.map +1 -0
  157. package/dist/esm/ApiClient/WebSocketClient/index.js +278 -0
  158. package/dist/esm/ApiClient/WebSocketClient/index.js.map +1 -0
  159. package/dist/esm/ApiClient/WebSocketClient/normalize.js +229 -0
  160. package/dist/esm/ApiClient/WebSocketClient/normalize.js.map +1 -0
  161. package/dist/esm/ApiClient/WebSocketClient/types.js +2 -0
  162. package/dist/esm/ApiClient/WebSocketClient/types.js.map +1 -0
  163. package/dist/esm/ApiClient/WebSocketClient/wireTypes.js +10 -0
  164. package/dist/esm/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
  165. package/dist/esm/ApiClient/index.js +80 -0
  166. package/dist/esm/ApiClient/index.js.map +1 -0
  167. package/dist/esm/Chat/ChatStream.js +144 -0
  168. package/dist/esm/Chat/ChatStream.js.map +1 -0
  169. package/dist/esm/Chat/index.js +174 -0
  170. package/dist/esm/Chat/index.js.map +1 -0
  171. package/dist/esm/Chat/tools.js +19 -0
  172. package/dist/esm/Chat/tools.js.map +1 -0
  173. package/dist/esm/Chat/types.js +2 -0
  174. package/dist/esm/Chat/types.js.map +1 -0
  175. package/dist/esm/Projects/ControlNet.js +41 -0
  176. package/dist/esm/Projects/ControlNet.js.map +1 -0
  177. package/dist/esm/Projects/createJobRequestMessage.js +236 -0
  178. package/dist/esm/Projects/createJobRequestMessage.js.map +1 -0
  179. package/dist/esm/Projects/index.js +531 -0
  180. package/dist/esm/Projects/index.js.map +1 -0
  181. package/dist/esm/Projects/restNormalize.js +86 -0
  182. package/dist/esm/Projects/restNormalize.js.map +1 -0
  183. package/dist/esm/Projects/types.js +2 -0
  184. package/dist/esm/Projects/types.js.map +1 -0
  185. package/dist/esm/Projects/utils.js +55 -0
  186. package/dist/esm/Projects/utils.js.map +1 -0
  187. package/dist/esm/index.js +72 -0
  188. package/dist/esm/index.js.map +1 -0
  189. package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js +42 -0
  190. package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  191. package/dist/esm/lib/AuthManager/AuthManagerBase.js +9 -0
  192. package/dist/esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
  193. package/dist/esm/lib/AuthManager/AuthStorage.js +13 -0
  194. package/dist/esm/lib/AuthManager/AuthStorage.js.map +1 -0
  195. package/dist/esm/lib/AuthManager/TokenAuthManager.js +159 -0
  196. package/dist/esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
  197. package/dist/esm/lib/AuthManager/index.js +5 -0
  198. package/dist/esm/lib/AuthManager/index.js.map +1 -0
  199. package/dist/esm/lib/Cache.js +33 -0
  200. package/dist/esm/lib/Cache.js.map +1 -0
  201. package/dist/esm/lib/DefaultLogger.js +32 -0
  202. package/dist/esm/lib/DefaultLogger.js.map +1 -0
  203. package/dist/esm/lib/RestClient.js +62 -0
  204. package/dist/esm/lib/RestClient.js.map +1 -0
  205. package/dist/esm/lib/TypedEventEmitter.js +44 -0
  206. package/dist/esm/lib/TypedEventEmitter.js.map +1 -0
  207. package/dist/esm/lib/base64.js +17 -0
  208. package/dist/esm/lib/base64.js.map +1 -0
  209. package/dist/esm/lib/getUUID.js +26 -0
  210. package/dist/esm/lib/getUUID.js.map +1 -0
  211. package/dist/esm/lib/mediaInput.js +28 -0
  212. package/dist/esm/lib/mediaInput.js.map +1 -0
  213. package/dist/esm/lib/utils.js +19 -0
  214. package/dist/esm/lib/utils.js.map +1 -0
  215. package/dist/esm/types/ErrorData.js +2 -0
  216. package/dist/esm/types/ErrorData.js.map +1 -0
  217. package/dist/esm/types/json.js +2 -0
  218. package/dist/esm/types/json.js.map +1 -0
  219. package/dist/esm/types/token.js +2 -0
  220. package/dist/esm/types/token.js.map +1 -0
  221. package/dist/esm/version.js +2 -0
  222. package/dist/esm/version.js.map +1 -0
  223. package/dist/esm/wallet.js +117 -0
  224. package/dist/esm/wallet.js.map +1 -0
  225. package/package.json +92 -0
  226. package/src/Account/index.ts +214 -0
  227. package/src/Account/types.ts +61 -0
  228. package/src/ApiClient/WebSocketClient/events.ts +168 -0
  229. package/src/ApiClient/WebSocketClient/index.ts +345 -0
  230. package/src/ApiClient/WebSocketClient/normalize.ts +287 -0
  231. package/src/ApiClient/WebSocketClient/types.ts +10 -0
  232. package/src/ApiClient/WebSocketClient/wireTypes.ts +183 -0
  233. package/src/ApiClient/index.ts +147 -0
  234. package/src/Chat/ChatStream.ts +164 -0
  235. package/src/Chat/index.ts +224 -0
  236. package/src/Chat/tools.ts +23 -0
  237. package/src/Chat/types.ts +165 -0
  238. package/src/Projects/ControlNet.ts +84 -0
  239. package/src/Projects/createJobRequestMessage.ts +241 -0
  240. package/src/Projects/index.ts +608 -0
  241. package/src/Projects/restNormalize.ts +154 -0
  242. package/src/Projects/types.ts +266 -0
  243. package/src/Projects/utils.ts +60 -0
  244. package/src/index.ts +217 -0
  245. package/src/lib/AuthManager/ApiKeyAuthManager.ts +52 -0
  246. package/src/lib/AuthManager/AuthManagerBase.ts +35 -0
  247. package/src/lib/AuthManager/AuthStorage.ts +21 -0
  248. package/src/lib/AuthManager/TokenAuthManager.ts +179 -0
  249. package/src/lib/AuthManager/index.ts +8 -0
  250. package/src/lib/Cache.ts +45 -0
  251. package/src/lib/DefaultLogger.ts +47 -0
  252. package/src/lib/RestClient.ts +77 -0
  253. package/src/lib/TypedEventEmitter.ts +52 -0
  254. package/src/lib/base64.ts +17 -0
  255. package/src/lib/getUUID.ts +27 -0
  256. package/src/lib/mediaInput.ts +54 -0
  257. package/src/lib/utils.ts +21 -0
  258. package/src/types/ErrorData.ts +7 -0
  259. package/src/types/json.ts +5 -0
  260. package/src/types/token.ts +1 -0
  261. package/src/version.ts +1 -0
  262. package/src/wallet.ts +158 -0
@@ -0,0 +1,55 @@
1
+ const COMFY_MODEL_PREFIXES = ['z_image_', 'qwen_image_', 'flux2_', 'wan_', 'ace_step'];
2
+ export function isComfyModel(modelId) {
3
+ return COMFY_MODEL_PREFIXES.some((p) => modelId.startsWith(p));
4
+ }
5
+ export function isVideoModel(modelId) {
6
+ return isWanModel(modelId) || isLtx2Model(modelId) || isSeedanceModel(modelId);
7
+ }
8
+ export function isWanModel(modelId) {
9
+ return modelId.startsWith('wan_v2.2-') || modelId.startsWith('wan_');
10
+ }
11
+ export function isLtx2Model(modelId) {
12
+ return modelId.startsWith('ltx2-') || modelId.startsWith('ltx23-');
13
+ }
14
+ export function isSeedanceModel(modelId) {
15
+ return modelId.startsWith('seedance-2-0');
16
+ }
17
+ export function isAudioModel(modelId) {
18
+ return modelId.startsWith('ace_step_');
19
+ }
20
+ const LTX2_FRAME_STEP = 8;
21
+ /**
22
+ * Compute the actual frame count to request from the server for a given
23
+ * model, duration, and fps.
24
+ *
25
+ * - **WAN 2.2**: always uses 16 fps internally regardless of the `fps` param,
26
+ * so frames = round(duration * 16) + 1.
27
+ * - **LTX-2.3**: uses `fps` directly, then snaps the frame count to the
28
+ * pattern `1 + n*8` required by the model architecture.
29
+ * - **Seedance / other video**: uses `fps` directly.
30
+ *
31
+ * Returns the recommended frame count; the SDK passes this through to the
32
+ * server as `frames` on the keyframe payload.
33
+ */
34
+ export function calculateVideoFrames(modelId, duration, fps) {
35
+ if (isWanModel(modelId)) {
36
+ return Math.round(duration * 16) + 1;
37
+ }
38
+ let frames = Math.round(duration * fps) + 1;
39
+ if (isLtx2Model(modelId)) {
40
+ const n = Math.round((frames - 1) / LTX2_FRAME_STEP);
41
+ frames = n * LTX2_FRAME_STEP + 1;
42
+ }
43
+ return frames;
44
+ }
45
+ /** Approximate per-model maximum duration in seconds. */
46
+ export function getMaxVideoDuration(modelId) {
47
+ if (isWanModel(modelId))
48
+ return 10;
49
+ if (isLtx2Model(modelId))
50
+ return 20;
51
+ if (isSeedanceModel(modelId))
52
+ return 15;
53
+ return 10;
54
+ }
55
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/Projects/utils.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEvF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,QAAgB,EAAE,GAAW;IACjF,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,WAAW,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,eAAe,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,72 @@
1
+ import AccountApi from './Account';
2
+ import ChatApi from './Chat';
3
+ import ChatStream from './Chat/ChatStream';
4
+ import { parseToolCallArguments } from './Chat/tools';
5
+ import ApiClient, { ApiError } from './ApiClient';
6
+ import ProjectsApi from './Projects';
7
+ import { DefaultLogger } from './lib/DefaultLogger';
8
+ import { ApiKeyAuthManager, TokenAuthManager } from './lib/AuthManager';
9
+ import { LIB_VERSION } from './version';
10
+ export { ApiError, ApiKeyAuthManager, ChatStream, LIB_VERSION, parseToolCallArguments };
11
+ function assertCryptoPolyfill() {
12
+ if (typeof globalThis.crypto === 'undefined' ||
13
+ typeof globalThis.crypto.getRandomValues !== 'function') {
14
+ throw new Error("@sogni-ai/expo-client requires crypto.getRandomValues. At your app entry point (e.g. app/_layout.tsx) add:\n import { polyfillWebCrypto } from 'expo-standard-web-crypto';\n polyfillWebCrypto();\nSee README for details.");
15
+ }
16
+ }
17
+ export class SogniClient {
18
+ constructor(client, options = {}) {
19
+ this.apiClient = client;
20
+ this.account = new AccountApi(client, { testnet: options.testnet });
21
+ this.projects = new ProjectsApi(client);
22
+ this.chat = new ChatApi(client);
23
+ }
24
+ get isAuthenticated() {
25
+ return this.apiClient.isAuthenticated;
26
+ }
27
+ /**
28
+ * For token-based auth, restore a session from refresh+access tokens.
29
+ * Typically called once at app startup; the SDK also auto-restores from
30
+ * secure storage in `create()`, so this is only needed when migrating
31
+ * tokens from another source.
32
+ */
33
+ async setTokens(tokens) {
34
+ const auth = this.apiClient.auth;
35
+ if (!(auth instanceof TokenAuthManager)) {
36
+ throw new Error('setTokens can only be used with token authentication');
37
+ }
38
+ await auth.authenticate(tokens);
39
+ }
40
+ /** Disconnect and tear down resources. Instance should not be reused after dispose(). */
41
+ dispose() {
42
+ this.apiClient.dispose();
43
+ }
44
+ static async create(config) {
45
+ assertCryptoPolyfill();
46
+ const restEndpoint = config.restEndpoint || 'https://api.sogni.ai';
47
+ const socketEndpoint = config.socketEndpoint || 'wss://socket.sogni.ai';
48
+ const network = config.network || 'fast';
49
+ const logger = config.logger || new DefaultLogger(config.logLevel || 'warn');
50
+ const authType = config.apiKey ? 'apiKey' : config.authType || 'token';
51
+ const apiClient = new ApiClient({
52
+ baseUrl: restEndpoint,
53
+ socketUrl: socketEndpoint,
54
+ appId: config.appId,
55
+ appSource: config.appSource,
56
+ networkType: network,
57
+ authType,
58
+ logger,
59
+ authStorage: config.authStorage,
60
+ disableSocket: config.disableSocket
61
+ });
62
+ if (config.apiKey) {
63
+ const auth = apiClient.auth;
64
+ await auth.authenticate(config.apiKey);
65
+ }
66
+ else if (apiClient.auth instanceof TokenAuthManager) {
67
+ await apiClient.auth.restore();
68
+ }
69
+ return new SogniClient(apiClient, { testnet: config.testnet });
70
+ }
71
+ }
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import AuthManagerBase from './AuthManagerBase';
2
+ class ApiKeyAuthManager extends AuthManagerBase {
3
+ constructor(logger) {
4
+ super(logger);
5
+ }
6
+ get isAuthenticated() {
7
+ return !!this._apiKey;
8
+ }
9
+ async authenticate(apiKey) {
10
+ if (this._apiKey === apiKey) {
11
+ return;
12
+ }
13
+ this._apiKey = apiKey;
14
+ this.emit('updated', true);
15
+ }
16
+ clear() {
17
+ if (!this._apiKey) {
18
+ return;
19
+ }
20
+ this._apiKey = undefined;
21
+ this.emit('updated', false);
22
+ }
23
+ async backup() {
24
+ return this._apiKey || null;
25
+ }
26
+ async authenticateRequest(options) {
27
+ if (!this._apiKey) {
28
+ return options;
29
+ }
30
+ return {
31
+ ...options,
32
+ headers: { ...options.headers, 'api-key': this._apiKey }
33
+ };
34
+ }
35
+ async socketAuth() {
36
+ if (!this._apiKey)
37
+ return {};
38
+ return { queryParams: { apiKey: this._apiKey } };
39
+ }
40
+ }
41
+ export default ApiKeyAuthManager;
42
+ //# sourceMappingURL=ApiKeyAuthManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiKeyAuthManager.js","sourceRoot":"","sources":["../../../../src/lib/AuthManager/ApiKeyAuthManager.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAIhD,MAAM,iBAAkB,SAAQ,eAA8B;IAG5D,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAoB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO;YACL,GAAG,OAAO;YACV,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;SACzD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACnD,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import TypedEventEmitter from '../TypedEventEmitter';
2
+ class AuthManagerBase extends TypedEventEmitter {
3
+ constructor(logger) {
4
+ super();
5
+ this._logger = logger;
6
+ }
7
+ }
8
+ export default AuthManagerBase;
9
+ //# sourceMappingURL=AuthManagerBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthManagerBase.js","sourceRoot":"","sources":["../../../../src/lib/AuthManager/AuthManagerBase.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAOrD,MAAe,eAAkC,SAAQ,iBAAoC;IAG3F,YAAY,MAAc;QACxB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;CAkBF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ import * as SecureStore from 'expo-secure-store';
2
+ export class ExpoSecureStorage {
3
+ async getItem(key) {
4
+ return SecureStore.getItemAsync(key);
5
+ }
6
+ async setItem(key, value) {
7
+ await SecureStore.setItemAsync(key, value);
8
+ }
9
+ async removeItem(key) {
10
+ await SecureStore.deleteItemAsync(key);
11
+ }
12
+ }
13
+ //# sourceMappingURL=AuthStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthStorage.js","sourceRoot":"","sources":["../../../../src/lib/AuthManager/AuthStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAQjD,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,OAAO,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,MAAM,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,159 @@
1
+ import { decodeToken, decodeRefreshToken } from '../utils';
2
+ import { ApiError } from '../../ApiClient';
3
+ import AuthManagerBase from './AuthManagerBase';
4
+ import { ExpoSecureStorage } from './AuthStorage';
5
+ const STORAGE_KEY = 'sogni.tokens';
6
+ class TokenAuthManager extends AuthManagerBase {
7
+ constructor(baseUrl, logger, storage) {
8
+ super(logger);
9
+ this._tokenExpiresAt = new Date(0);
10
+ this._refreshTokenExpiresAt = new Date(0);
11
+ this._baseUrl = baseUrl;
12
+ this._storage = storage ?? new ExpoSecureStorage();
13
+ }
14
+ get isAuthenticated() {
15
+ return !!this._refreshToken && this._refreshTokenExpiresAt > new Date();
16
+ }
17
+ /**
18
+ * Hydrate tokens from secure storage. Called by SogniClient.create() on init.
19
+ * Returns true if a valid session was restored, false otherwise.
20
+ */
21
+ async restore() {
22
+ let raw;
23
+ try {
24
+ raw = await this._storage.getItem(STORAGE_KEY);
25
+ }
26
+ catch (e) {
27
+ this._logger.warn('Failed to read tokens from secure storage:', e);
28
+ return false;
29
+ }
30
+ if (!raw)
31
+ return false;
32
+ try {
33
+ const tokens = JSON.parse(raw);
34
+ await this.authenticate(tokens);
35
+ return this.isAuthenticated;
36
+ }
37
+ catch (e) {
38
+ this._logger.warn('Stored tokens are unreadable, clearing:', e);
39
+ await this._storage.removeItem(STORAGE_KEY).catch(() => undefined);
40
+ return false;
41
+ }
42
+ }
43
+ async backup() {
44
+ if (this._token && this._refreshToken) {
45
+ return { token: this._token, refreshToken: this._refreshToken };
46
+ }
47
+ return null;
48
+ }
49
+ async authenticate({ refreshToken, token }) {
50
+ if (token) {
51
+ const { expiresAt } = decodeToken(token);
52
+ if (expiresAt > new Date()) {
53
+ await this._updateTokens({ token, refreshToken });
54
+ return;
55
+ }
56
+ }
57
+ this._refreshToken = refreshToken;
58
+ const { expiresAt: refreshExpiresAt } = decodeRefreshToken(refreshToken);
59
+ this._refreshTokenExpiresAt = refreshExpiresAt;
60
+ await this._renewTokenSafe();
61
+ }
62
+ clear() {
63
+ if (!this._token && !this._refreshToken) {
64
+ return;
65
+ }
66
+ this._refreshToken = undefined;
67
+ this._refreshTokenExpiresAt = new Date(0);
68
+ this._token = undefined;
69
+ this._tokenExpiresAt = new Date(0);
70
+ this._storage.removeItem(STORAGE_KEY).catch((e) => {
71
+ this._logger.warn('Failed to clear tokens from secure storage:', e);
72
+ });
73
+ this.emit('updated', false);
74
+ }
75
+ async authenticateRequest(option) {
76
+ if (this._token && this._tokenExpiresAt > new Date()) {
77
+ return { ...option, headers: { ...option.headers, Authorization: this._token } };
78
+ }
79
+ if (!this._refreshToken) {
80
+ return option;
81
+ }
82
+ const token = await this._renewTokenSafe();
83
+ return { ...option, headers: { ...option.headers, Authorization: token } };
84
+ }
85
+ async socketAuth() {
86
+ const token = await this._getToken();
87
+ if (!token)
88
+ return {};
89
+ return { headers: { Authorization: token } };
90
+ }
91
+ async _getToken() {
92
+ if (this._token && this._tokenExpiresAt > new Date()) {
93
+ return this._token;
94
+ }
95
+ if (!this._refreshToken) {
96
+ return undefined;
97
+ }
98
+ return this._renewTokenSafe();
99
+ }
100
+ async _renewTokenSafe() {
101
+ if (this._renewTokenPromise) {
102
+ return this._renewTokenPromise;
103
+ }
104
+ this._renewTokenPromise = this._renewToken();
105
+ this._renewTokenPromise.finally(() => {
106
+ this._renewTokenPromise = undefined;
107
+ });
108
+ return this._renewTokenPromise;
109
+ }
110
+ async _updateTokens({ token, refreshToken }) {
111
+ if (this._token === token && this._refreshToken === refreshToken) {
112
+ return;
113
+ }
114
+ this._token = token;
115
+ const { expiresAt } = decodeToken(token);
116
+ this._tokenExpiresAt = expiresAt;
117
+ this._refreshToken = refreshToken;
118
+ const { expiresAt: refreshExpiresAt } = decodeRefreshToken(refreshToken);
119
+ this._refreshTokenExpiresAt = refreshExpiresAt;
120
+ try {
121
+ await this._storage.setItem(STORAGE_KEY, JSON.stringify({ token, refreshToken }));
122
+ }
123
+ catch (e) {
124
+ this._logger.warn('Failed to persist tokens to secure storage:', e);
125
+ }
126
+ this.emit('updated', true);
127
+ }
128
+ async _renewToken() {
129
+ if (this._refreshTokenExpiresAt < new Date()) {
130
+ throw new Error('Refresh token expired');
131
+ }
132
+ const url = new URL('/v1/account/refresh-token', this._baseUrl).toString();
133
+ const response = await fetch(url, {
134
+ method: 'POST',
135
+ headers: {
136
+ 'Content-Type': 'application/json'
137
+ },
138
+ body: JSON.stringify({ refreshToken: this._refreshToken })
139
+ });
140
+ let responseData;
141
+ try {
142
+ responseData = await response.json();
143
+ }
144
+ catch (e) {
145
+ this.clear();
146
+ this._logger.error('Failed to parse refresh-token response:', e);
147
+ throw new Error('Failed to parse response');
148
+ }
149
+ if (!response.ok) {
150
+ this.clear();
151
+ throw new ApiError(response.status, responseData);
152
+ }
153
+ const { token, refreshToken } = responseData.data;
154
+ await this._updateTokens({ token, refreshToken });
155
+ return this._token;
156
+ }
157
+ }
158
+ export default TokenAuthManager;
159
+ //# sourceMappingURL=TokenAuthManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenAuthManager.js","sourceRoot":"","sources":["../../../../src/lib/AuthManager/TokenAuthManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import ApiKeyAuthManager from './ApiKeyAuthManager';
2
+ import TokenAuthManager from './TokenAuthManager';
3
+ import { ExpoSecureStorage } from './AuthStorage';
4
+ export { ApiKeyAuthManager, TokenAuthManager, ExpoSecureStorage };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/AuthManager/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,gBAAmC,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAe,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG/D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ export default class Cache {
2
+ constructor(defaultTTL) {
3
+ this.data = new Map();
4
+ this.ttl = defaultTTL;
5
+ this.interval = setInterval(() => this.cleanup(), 10000);
6
+ }
7
+ write(key, value, ttl) {
8
+ this.data.set(key, {
9
+ exp: Date.now() + (ttl || this.ttl),
10
+ value
11
+ });
12
+ }
13
+ read(key) {
14
+ const record = this.data.get(key);
15
+ return record && record.exp > Date.now() ? record.value : undefined;
16
+ }
17
+ clear() {
18
+ this.data.clear();
19
+ }
20
+ dispose() {
21
+ clearInterval(this.interval);
22
+ this.data.clear();
23
+ }
24
+ cleanup() {
25
+ const now = Date.now();
26
+ this.data.forEach((record, key) => {
27
+ if (record.exp < now) {
28
+ this.data.delete(key);
29
+ }
30
+ });
31
+ }
32
+ }
33
+ //# sourceMappingURL=Cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/lib/Cache.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,OAAO,KAAK;IAKxB,YAAY,UAAkB;QAHtB,SAAI,GAAgC,IAAI,GAAG,EAAE,CAAC;QAIpD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAQ,EAAE,GAAY;QACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YACnC,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,GAAW;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACL,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAChC,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ export const LOG_LEVELS = {
2
+ error: 0,
3
+ warn: 1,
4
+ info: 2,
5
+ debug: 3
6
+ };
7
+ export class DefaultLogger {
8
+ constructor(level = 'warn') {
9
+ this._level = LOG_LEVELS[level];
10
+ }
11
+ error(...args) {
12
+ if (this._level >= LOG_LEVELS.error) {
13
+ console.error(...args);
14
+ }
15
+ }
16
+ warn(...args) {
17
+ if (this._level >= LOG_LEVELS.warn) {
18
+ console.warn(...args);
19
+ }
20
+ }
21
+ info(...args) {
22
+ if (this._level >= LOG_LEVELS.info) {
23
+ console.info(...args);
24
+ }
25
+ }
26
+ debug(...args) {
27
+ if (this._level >= LOG_LEVELS.debug) {
28
+ console.debug(...args);
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=DefaultLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultLogger.js","sourceRoot":"","sources":["../../../src/lib/DefaultLogger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AASF,MAAM,OAAO,aAAa;IAGxB,YAAY,QAAkB,MAAM;QAClC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAW;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,62 @@
1
+ import { ApiError } from '../ApiClient';
2
+ import TypedEventEmitter from './TypedEventEmitter';
3
+ const REQUEST_TIMEOUT_MS = 30000;
4
+ class RestClient extends TypedEventEmitter {
5
+ constructor(baseUrl, auth, logger) {
6
+ super();
7
+ this.baseUrl = baseUrl;
8
+ this._auth = auth;
9
+ this._logger = logger;
10
+ }
11
+ get auth() {
12
+ return this._auth;
13
+ }
14
+ formatUrl(relativeUrl, query = {}) {
15
+ const url = new URL(relativeUrl, this.baseUrl);
16
+ Object.keys(query).forEach((key) => {
17
+ url.searchParams.append(key, query[key]);
18
+ });
19
+ return url.toString();
20
+ }
21
+ async request(url, options = {}) {
22
+ const init = await this.auth.authenticateRequest(options);
23
+ const controller = new AbortController();
24
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
25
+ try {
26
+ const response = await fetch(url, { ...init, signal: controller.signal });
27
+ return this.processResponse(response);
28
+ }
29
+ finally {
30
+ clearTimeout(timeoutId);
31
+ }
32
+ }
33
+ async processResponse(response) {
34
+ let responseData;
35
+ try {
36
+ responseData = await response.json();
37
+ }
38
+ catch (e) {
39
+ this._logger.error('Failed to parse response:', e);
40
+ throw new Error('Failed to parse response');
41
+ }
42
+ if (response.status === 401 && this.auth.isAuthenticated) {
43
+ this.auth.clear();
44
+ }
45
+ if (!response.ok) {
46
+ throw new ApiError(response.status, responseData);
47
+ }
48
+ return responseData;
49
+ }
50
+ get(path, query = {}) {
51
+ return this.request(this.formatUrl(path, query));
52
+ }
53
+ post(path, body = {}) {
54
+ return this.request(this.formatUrl(path), {
55
+ method: 'POST',
56
+ headers: { 'Content-Type': 'application/json' },
57
+ body: JSON.stringify(body)
58
+ });
59
+ }
60
+ }
61
+ export default RestClient;
62
+ //# sourceMappingURL=RestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../../src/lib/RestClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ class TypedEventEmitter {
2
+ constructor() {
3
+ this.listeners = {};
4
+ }
5
+ on(event, listener) {
6
+ if (!this.listeners[event]) {
7
+ this.listeners[event] = [];
8
+ }
9
+ this.listeners[event].push(listener);
10
+ return () => {
11
+ this.off(event, listener);
12
+ };
13
+ }
14
+ once(event, listener) {
15
+ const remove = this.on(event, (data) => {
16
+ remove();
17
+ listener(data);
18
+ });
19
+ return remove;
20
+ }
21
+ off(event, listener) {
22
+ if (!this.listeners[event]) {
23
+ return;
24
+ }
25
+ this.listeners[event] = this.listeners[event].filter((l) => l !== listener);
26
+ }
27
+ removeAllListeners(event) {
28
+ if (event) {
29
+ delete this.listeners[event];
30
+ }
31
+ else {
32
+ this.listeners = {};
33
+ }
34
+ }
35
+ emit(event, data) {
36
+ const listeners = this.listeners[event];
37
+ if (!listeners) {
38
+ return;
39
+ }
40
+ listeners.forEach((listener) => listener(data));
41
+ }
42
+ }
43
+ export default TypedEventEmitter;
44
+ //# sourceMappingURL=TypedEventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedEventEmitter.js","sourceRoot":"","sources":["../../../src/lib/TypedEventEmitter.ts"],"names":[],"mappings":"AAMA,MAAe,iBAAiB;IAAhC;QACY,cAAS,GAA+C,EAAE,CAAC;IA0CvE,CAAC;IAxCC,EAAE,CAAoB,KAAQ,EAAE,QAA6B;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAoB,KAAQ,EAAE,QAA6B;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACrC,MAAM,EAAE,CAAC;YACT,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAoB,KAAQ,EAAE,QAA6B;QAC5D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,kBAAkB,CAAoB,KAAS;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAES,IAAI,CAAoB,KAAQ,EAAE,IAAU;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export function base64Encode(str) {
2
+ const encoder = new TextEncoder();
3
+ const uint8Array = encoder.encode(str);
4
+ const chunkSize = 8192;
5
+ let binaryString = '';
6
+ for (let i = 0; i < uint8Array.length; i += chunkSize) {
7
+ binaryString += String.fromCharCode(...uint8Array.subarray(i, i + chunkSize));
8
+ }
9
+ return btoa(binaryString);
10
+ }
11
+ export function base64Decode(str) {
12
+ const binaryString = atob(str);
13
+ const binaryArray = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
14
+ const decoder = new TextDecoder();
15
+ return decoder.decode(binaryArray);
16
+ }
17
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/lib/base64.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACtD,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Generate a v4 UUID using crypto.getRandomValues, returned in uppercase form.
3
+ *
4
+ * Mac workers in the Sogni Supernet use uppercase UUIDs; the SDK keeps that
5
+ * convention end-to-end so wire-level comparisons stay simple.
6
+ *
7
+ * Requires `crypto.getRandomValues` (polyfilled in Expo via
8
+ * `expo-standard-web-crypto/polyfill`). SogniClient.create() verifies the
9
+ * polyfill is present and throws a clear error otherwise.
10
+ */
11
+ export default function getUUID() {
12
+ const bytes = crypto.getRandomValues(new Uint8Array(16));
13
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
14
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
15
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
16
+ return (hex.slice(0, 8) +
17
+ '-' +
18
+ hex.slice(8, 12) +
19
+ '-' +
20
+ hex.slice(12, 16) +
21
+ '-' +
22
+ hex.slice(16, 20) +
23
+ '-' +
24
+ hex.slice(20)).toUpperCase();
25
+ }
26
+ //# sourceMappingURL=getUUID.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUUID.js","sourceRoot":"","sources":["../../../src/lib/getUUID.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,CACL,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACf,GAAG;QACH,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChB,GAAG;QACH,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG;QACH,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG;QACH,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACd,CAAC,WAAW,EAAE,CAAC;AAClB,CAAC"}