syzygy-foundation-rn 1.0.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 (293) hide show
  1. package/.github/workflows/ci.yml +100 -0
  2. package/CHANGELOG.md +87 -0
  3. package/LICENSE +21 -0
  4. package/README.md +179 -0
  5. package/dist/__tests__/AuthToken.test.d.ts +2 -0
  6. package/dist/__tests__/AuthToken.test.d.ts.map +1 -0
  7. package/dist/__tests__/AuthToken.test.js +40 -0
  8. package/dist/__tests__/AuthToken.test.js.map +1 -0
  9. package/dist/__tests__/FixedTimeProvider.test.d.ts +2 -0
  10. package/dist/__tests__/FixedTimeProvider.test.d.ts.map +1 -0
  11. package/dist/__tests__/FixedTimeProvider.test.js +23 -0
  12. package/dist/__tests__/FixedTimeProvider.test.js.map +1 -0
  13. package/dist/__tests__/MockAuthProvider.test.d.ts +2 -0
  14. package/dist/__tests__/MockAuthProvider.test.d.ts.map +1 -0
  15. package/dist/__tests__/MockAuthProvider.test.js +46 -0
  16. package/dist/__tests__/MockAuthProvider.test.js.map +1 -0
  17. package/dist/__tests__/MockConnectivityProvider.test.d.ts +2 -0
  18. package/dist/__tests__/MockConnectivityProvider.test.d.ts.map +1 -0
  19. package/dist/__tests__/MockConnectivityProvider.test.js +34 -0
  20. package/dist/__tests__/MockConnectivityProvider.test.js.map +1 -0
  21. package/dist/__tests__/MockLogger.test.d.ts +2 -0
  22. package/dist/__tests__/MockLogger.test.d.ts.map +1 -0
  23. package/dist/__tests__/MockLogger.test.js +42 -0
  24. package/dist/__tests__/MockLogger.test.js.map +1 -0
  25. package/dist/__tests__/MockNetworkClient.test.d.ts +2 -0
  26. package/dist/__tests__/MockNetworkClient.test.d.ts.map +1 -0
  27. package/dist/__tests__/MockNetworkClient.test.js +41 -0
  28. package/dist/__tests__/MockNetworkClient.test.js.map +1 -0
  29. package/dist/__tests__/MockStorageProvider.test.d.ts +2 -0
  30. package/dist/__tests__/MockStorageProvider.test.d.ts.map +1 -0
  31. package/dist/__tests__/MockStorageProvider.test.js +38 -0
  32. package/dist/__tests__/MockStorageProvider.test.js.map +1 -0
  33. package/dist/__tests__/NetworkRequest.test.d.ts +2 -0
  34. package/dist/__tests__/NetworkRequest.test.d.ts.map +1 -0
  35. package/dist/__tests__/NetworkRequest.test.js +44 -0
  36. package/dist/__tests__/NetworkRequest.test.js.map +1 -0
  37. package/dist/__tests__/Page.test.d.ts +2 -0
  38. package/dist/__tests__/Page.test.d.ts.map +1 -0
  39. package/dist/__tests__/Page.test.js +53 -0
  40. package/dist/__tests__/Page.test.js.map +1 -0
  41. package/dist/__tests__/SpyAnalyticsProvider.test.d.ts +2 -0
  42. package/dist/__tests__/SpyAnalyticsProvider.test.d.ts.map +1 -0
  43. package/dist/__tests__/SpyAnalyticsProvider.test.js +40 -0
  44. package/dist/__tests__/SpyAnalyticsProvider.test.js.map +1 -0
  45. package/dist/__tests__/SyzygyEnvironment.test.d.ts +2 -0
  46. package/dist/__tests__/SyzygyEnvironment.test.d.ts.map +1 -0
  47. package/dist/__tests__/SyzygyEnvironment.test.js +21 -0
  48. package/dist/__tests__/SyzygyEnvironment.test.js.map +1 -0
  49. package/dist/__tests__/SyzygyErrorCode.test.d.ts +2 -0
  50. package/dist/__tests__/SyzygyErrorCode.test.d.ts.map +1 -0
  51. package/dist/__tests__/SyzygyErrorCode.test.js +31 -0
  52. package/dist/__tests__/SyzygyErrorCode.test.js.map +1 -0
  53. package/dist/__tests__/SyzygyID.test.d.ts +2 -0
  54. package/dist/__tests__/SyzygyID.test.d.ts.map +1 -0
  55. package/dist/__tests__/SyzygyID.test.js +43 -0
  56. package/dist/__tests__/SyzygyID.test.js.map +1 -0
  57. package/dist/__tests__/SyzygyTimestamp.test.d.ts +2 -0
  58. package/dist/__tests__/SyzygyTimestamp.test.d.ts.map +1 -0
  59. package/dist/__tests__/SyzygyTimestamp.test.js +36 -0
  60. package/dist/__tests__/SyzygyTimestamp.test.js.map +1 -0
  61. package/dist/__tests__/SyzygyVersion.test.d.ts +2 -0
  62. package/dist/__tests__/SyzygyVersion.test.d.ts.map +1 -0
  63. package/dist/__tests__/SyzygyVersion.test.js +9 -0
  64. package/dist/__tests__/SyzygyVersion.test.js.map +1 -0
  65. package/dist/__tests__/ValidationResult.test.d.ts +2 -0
  66. package/dist/__tests__/ValidationResult.test.d.ts.map +1 -0
  67. package/dist/__tests__/ValidationResult.test.js +25 -0
  68. package/dist/__tests__/ValidationResult.test.js.map +1 -0
  69. package/dist/contracts/analytics/AnalyticsEvent.d.ts +15 -0
  70. package/dist/contracts/analytics/AnalyticsEvent.d.ts.map +1 -0
  71. package/dist/contracts/analytics/AnalyticsEvent.js +8 -0
  72. package/dist/contracts/analytics/AnalyticsEvent.js.map +1 -0
  73. package/dist/contracts/analytics/AnalyticsProvider.d.ts +7 -0
  74. package/dist/contracts/analytics/AnalyticsProvider.d.ts.map +1 -0
  75. package/dist/contracts/analytics/AnalyticsProvider.js +3 -0
  76. package/dist/contracts/analytics/AnalyticsProvider.js.map +1 -0
  77. package/dist/contracts/auth/AuthProvider.d.ts +15 -0
  78. package/dist/contracts/auth/AuthProvider.d.ts.map +1 -0
  79. package/dist/contracts/auth/AuthProvider.js +3 -0
  80. package/dist/contracts/auth/AuthProvider.js.map +1 -0
  81. package/dist/contracts/auth/AuthState.d.ts +21 -0
  82. package/dist/contracts/auth/AuthState.d.ts.map +1 -0
  83. package/dist/contracts/auth/AuthState.js +14 -0
  84. package/dist/contracts/auth/AuthState.js.map +1 -0
  85. package/dist/contracts/auth/AuthToken.d.ts +8 -0
  86. package/dist/contracts/auth/AuthToken.d.ts.map +1 -0
  87. package/dist/contracts/auth/AuthToken.js +10 -0
  88. package/dist/contracts/auth/AuthToken.js.map +1 -0
  89. package/dist/contracts/connectivity/ConnectivityProvider.d.ts +13 -0
  90. package/dist/contracts/connectivity/ConnectivityProvider.d.ts.map +1 -0
  91. package/dist/contracts/connectivity/ConnectivityProvider.js +3 -0
  92. package/dist/contracts/connectivity/ConnectivityProvider.js.map +1 -0
  93. package/dist/contracts/connectivity/ConnectivityState.d.ts +3 -0
  94. package/dist/contracts/connectivity/ConnectivityState.d.ts.map +1 -0
  95. package/dist/contracts/connectivity/ConnectivityState.js +7 -0
  96. package/dist/contracts/connectivity/ConnectivityState.js.map +1 -0
  97. package/dist/contracts/logging/LogEntry.d.ts +19 -0
  98. package/dist/contracts/logging/LogEntry.d.ts.map +1 -0
  99. package/dist/contracts/logging/LogEntry.js +3 -0
  100. package/dist/contracts/logging/LogEntry.js.map +1 -0
  101. package/dist/contracts/logging/LogLevel.d.ts +8 -0
  102. package/dist/contracts/logging/LogLevel.d.ts.map +1 -0
  103. package/dist/contracts/logging/LogLevel.js +12 -0
  104. package/dist/contracts/logging/LogLevel.js.map +1 -0
  105. package/dist/contracts/logging/LoggerProtocol.d.ts +22 -0
  106. package/dist/contracts/logging/LoggerProtocol.d.ts.map +1 -0
  107. package/dist/contracts/logging/LoggerProtocol.js +28 -0
  108. package/dist/contracts/logging/LoggerProtocol.js.map +1 -0
  109. package/dist/contracts/network/NetworkClientProtocol.d.ts +6 -0
  110. package/dist/contracts/network/NetworkClientProtocol.d.ts.map +1 -0
  111. package/dist/contracts/network/NetworkClientProtocol.js +3 -0
  112. package/dist/contracts/network/NetworkClientProtocol.js.map +1 -0
  113. package/dist/contracts/network/NetworkMethod.d.ts +10 -0
  114. package/dist/contracts/network/NetworkMethod.d.ts.map +1 -0
  115. package/dist/contracts/network/NetworkMethod.js +12 -0
  116. package/dist/contracts/network/NetworkMethod.js.map +1 -0
  117. package/dist/contracts/network/NetworkRequest.d.ts +12 -0
  118. package/dist/contracts/network/NetworkRequest.d.ts.map +1 -0
  119. package/dist/contracts/network/NetworkRequest.js +7 -0
  120. package/dist/contracts/network/NetworkRequest.js.map +1 -0
  121. package/dist/contracts/network/NetworkResponse.d.ts +14 -0
  122. package/dist/contracts/network/NetworkResponse.d.ts.map +1 -0
  123. package/dist/contracts/network/NetworkResponse.js +12 -0
  124. package/dist/contracts/network/NetworkResponse.js.map +1 -0
  125. package/dist/contracts/storage/StorageKey.d.ts +6 -0
  126. package/dist/contracts/storage/StorageKey.d.ts.map +1 -0
  127. package/dist/contracts/storage/StorageKey.js +7 -0
  128. package/dist/contracts/storage/StorageKey.js.map +1 -0
  129. package/dist/contracts/storage/StorageProvider.d.ts +12 -0
  130. package/dist/contracts/storage/StorageProvider.d.ts.map +1 -0
  131. package/dist/contracts/storage/StorageProvider.js +3 -0
  132. package/dist/contracts/storage/StorageProvider.js.map +1 -0
  133. package/dist/errors/SyzygyError.d.ts +9 -0
  134. package/dist/errors/SyzygyError.d.ts.map +1 -0
  135. package/dist/errors/SyzygyError.js +3 -0
  136. package/dist/errors/SyzygyError.js.map +1 -0
  137. package/dist/errors/SyzygyErrorCode.d.ts +17 -0
  138. package/dist/errors/SyzygyErrorCode.d.ts.map +1 -0
  139. package/dist/errors/SyzygyErrorCode.js +26 -0
  140. package/dist/errors/SyzygyErrorCode.js.map +1 -0
  141. package/dist/errors/SyzygyErrorSeverity.d.ts +7 -0
  142. package/dist/errors/SyzygyErrorSeverity.d.ts.map +1 -0
  143. package/dist/errors/SyzygyErrorSeverity.js +11 -0
  144. package/dist/errors/SyzygyErrorSeverity.js.map +1 -0
  145. package/dist/index.d.ts +32 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +52 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/primitives/id/SyzygyID.d.ts +10 -0
  150. package/dist/primitives/id/SyzygyID.d.ts.map +1 -0
  151. package/dist/primitives/id/SyzygyID.js +25 -0
  152. package/dist/primitives/id/SyzygyID.js.map +1 -0
  153. package/dist/primitives/pagination/Page.d.ts +17 -0
  154. package/dist/primitives/pagination/Page.d.ts.map +1 -0
  155. package/dist/primitives/pagination/Page.js +13 -0
  156. package/dist/primitives/pagination/Page.js.map +1 -0
  157. package/dist/primitives/pagination/PaginationRequest.d.ts +7 -0
  158. package/dist/primitives/pagination/PaginationRequest.d.ts.map +1 -0
  159. package/dist/primitives/pagination/PaginationRequest.js +11 -0
  160. package/dist/primitives/pagination/PaginationRequest.js.map +1 -0
  161. package/dist/primitives/time/SyzygyDuration.d.ts +13 -0
  162. package/dist/primitives/time/SyzygyDuration.d.ts.map +1 -0
  163. package/dist/primitives/time/SyzygyDuration.js +18 -0
  164. package/dist/primitives/time/SyzygyDuration.js.map +1 -0
  165. package/dist/primitives/time/SyzygyTimestamp.d.ts +10 -0
  166. package/dist/primitives/time/SyzygyTimestamp.d.ts.map +1 -0
  167. package/dist/primitives/time/SyzygyTimestamp.js +17 -0
  168. package/dist/primitives/time/SyzygyTimestamp.js.map +1 -0
  169. package/dist/primitives/time/TimeProvider.d.ts +7 -0
  170. package/dist/primitives/time/TimeProvider.d.ts.map +1 -0
  171. package/dist/primitives/time/TimeProvider.js +3 -0
  172. package/dist/primitives/time/TimeProvider.js.map +1 -0
  173. package/dist/primitives/validation/ValidationResult.d.ts +14 -0
  174. package/dist/primitives/validation/ValidationResult.d.ts.map +1 -0
  175. package/dist/primitives/validation/ValidationResult.js +12 -0
  176. package/dist/primitives/validation/ValidationResult.js.map +1 -0
  177. package/dist/primitives/validation/ValidationRule.d.ts +5 -0
  178. package/dist/primitives/validation/ValidationRule.d.ts.map +1 -0
  179. package/dist/primitives/validation/ValidationRule.js +3 -0
  180. package/dist/primitives/validation/ValidationRule.js.map +1 -0
  181. package/dist/sharedtypes/SyzygyBuildInfo.d.ts +11 -0
  182. package/dist/sharedtypes/SyzygyBuildInfo.d.ts.map +1 -0
  183. package/dist/sharedtypes/SyzygyBuildInfo.js +3 -0
  184. package/dist/sharedtypes/SyzygyBuildInfo.js.map +1 -0
  185. package/dist/sharedtypes/SyzygyConfiguration.d.ts +10 -0
  186. package/dist/sharedtypes/SyzygyConfiguration.d.ts.map +1 -0
  187. package/dist/sharedtypes/SyzygyConfiguration.js +3 -0
  188. package/dist/sharedtypes/SyzygyConfiguration.js.map +1 -0
  189. package/dist/sharedtypes/SyzygyEnvironment.d.ts +9 -0
  190. package/dist/sharedtypes/SyzygyEnvironment.d.ts.map +1 -0
  191. package/dist/sharedtypes/SyzygyEnvironment.js +11 -0
  192. package/dist/sharedtypes/SyzygyEnvironment.js.map +1 -0
  193. package/dist/sharedtypes/SyzygyVersion.d.ts +13 -0
  194. package/dist/sharedtypes/SyzygyVersion.d.ts.map +1 -0
  195. package/dist/sharedtypes/SyzygyVersion.js +22 -0
  196. package/dist/sharedtypes/SyzygyVersion.js.map +1 -0
  197. package/dist/testing/fixtures/FixedTimeProvider.d.ts +10 -0
  198. package/dist/testing/fixtures/FixedTimeProvider.d.ts.map +1 -0
  199. package/dist/testing/fixtures/FixedTimeProvider.js +18 -0
  200. package/dist/testing/fixtures/FixedTimeProvider.js.map +1 -0
  201. package/dist/testing/fixtures/FixtureProvider.d.ts +20 -0
  202. package/dist/testing/fixtures/FixtureProvider.d.ts.map +1 -0
  203. package/dist/testing/fixtures/FixtureProvider.js +50 -0
  204. package/dist/testing/fixtures/FixtureProvider.js.map +1 -0
  205. package/dist/testing/mocks/MockAuthProvider.d.ts +22 -0
  206. package/dist/testing/mocks/MockAuthProvider.d.ts.map +1 -0
  207. package/dist/testing/mocks/MockAuthProvider.js +43 -0
  208. package/dist/testing/mocks/MockAuthProvider.js.map +1 -0
  209. package/dist/testing/mocks/MockConnectivityProvider.d.ts +12 -0
  210. package/dist/testing/mocks/MockConnectivityProvider.d.ts.map +1 -0
  211. package/dist/testing/mocks/MockConnectivityProvider.js +28 -0
  212. package/dist/testing/mocks/MockConnectivityProvider.js.map +1 -0
  213. package/dist/testing/mocks/MockLogger.d.ts +10 -0
  214. package/dist/testing/mocks/MockLogger.d.ts.map +1 -0
  215. package/dist/testing/mocks/MockLogger.js +21 -0
  216. package/dist/testing/mocks/MockLogger.js.map +1 -0
  217. package/dist/testing/mocks/MockNetworkClient.d.ts +10 -0
  218. package/dist/testing/mocks/MockNetworkClient.d.ts.map +1 -0
  219. package/dist/testing/mocks/MockNetworkClient.js +20 -0
  220. package/dist/testing/mocks/MockNetworkClient.js.map +1 -0
  221. package/dist/testing/mocks/MockStorageProvider.d.ts +11 -0
  222. package/dist/testing/mocks/MockStorageProvider.d.ts.map +1 -0
  223. package/dist/testing/mocks/MockStorageProvider.js +25 -0
  224. package/dist/testing/mocks/MockStorageProvider.js.map +1 -0
  225. package/dist/testing/spies/SpyAnalyticsProvider.d.ts +15 -0
  226. package/dist/testing/spies/SpyAnalyticsProvider.d.ts.map +1 -0
  227. package/dist/testing/spies/SpyAnalyticsProvider.js +24 -0
  228. package/dist/testing/spies/SpyAnalyticsProvider.js.map +1 -0
  229. package/dist/testing.d.ts +9 -0
  230. package/dist/testing.d.ts.map +1 -0
  231. package/dist/testing.js +25 -0
  232. package/dist/testing.js.map +1 -0
  233. package/jest.config.js +6 -0
  234. package/package.json +31 -0
  235. package/src/__tests__/AuthToken.test.ts +46 -0
  236. package/src/__tests__/FixedTimeProvider.test.ts +23 -0
  237. package/src/__tests__/MockAuthProvider.test.ts +51 -0
  238. package/src/__tests__/MockConnectivityProvider.test.ts +36 -0
  239. package/src/__tests__/MockLogger.test.ts +46 -0
  240. package/src/__tests__/MockNetworkClient.test.ts +48 -0
  241. package/src/__tests__/MockStorageProvider.test.ts +42 -0
  242. package/src/__tests__/NetworkRequest.test.ts +49 -0
  243. package/src/__tests__/Page.test.ts +60 -0
  244. package/src/__tests__/SpyAnalyticsProvider.test.ts +43 -0
  245. package/src/__tests__/SyzygyEnvironment.test.ts +21 -0
  246. package/src/__tests__/SyzygyErrorCode.test.ts +32 -0
  247. package/src/__tests__/SyzygyID.test.ts +48 -0
  248. package/src/__tests__/SyzygyTimestamp.test.ts +41 -0
  249. package/src/__tests__/SyzygyVersion.test.ts +7 -0
  250. package/src/__tests__/ValidationResult.test.ts +28 -0
  251. package/src/contracts/analytics/AnalyticsEvent.ts +21 -0
  252. package/src/contracts/analytics/AnalyticsProvider.ts +7 -0
  253. package/src/contracts/auth/AuthProvider.ts +16 -0
  254. package/src/contracts/auth/AuthState.ts +18 -0
  255. package/src/contracts/auth/AuthToken.ts +12 -0
  256. package/src/contracts/connectivity/ConnectivityProvider.ts +14 -0
  257. package/src/contracts/connectivity/ConnectivityState.ts +5 -0
  258. package/src/contracts/logging/LogEntry.ts +19 -0
  259. package/src/contracts/logging/LogLevel.ts +7 -0
  260. package/src/contracts/logging/LoggerProtocol.ts +40 -0
  261. package/src/contracts/network/NetworkClientProtocol.ts +6 -0
  262. package/src/contracts/network/NetworkMethod.ts +10 -0
  263. package/src/contracts/network/NetworkRequest.ts +15 -0
  264. package/src/contracts/network/NetworkResponse.ts +21 -0
  265. package/src/contracts/storage/StorageKey.ts +8 -0
  266. package/src/contracts/storage/StorageProvider.ts +12 -0
  267. package/src/errors/SyzygyError.ts +9 -0
  268. package/src/errors/SyzygyErrorCode.ts +26 -0
  269. package/src/errors/SyzygyErrorSeverity.ts +6 -0
  270. package/src/index.ts +38 -0
  271. package/src/primitives/id/SyzygyID.ts +27 -0
  272. package/src/primitives/pagination/Page.ts +25 -0
  273. package/src/primitives/pagination/PaginationRequest.ts +13 -0
  274. package/src/primitives/time/SyzygyDuration.ts +22 -0
  275. package/src/primitives/time/SyzygyTimestamp.ts +19 -0
  276. package/src/primitives/time/TimeProvider.ts +7 -0
  277. package/src/primitives/validation/ValidationResult.ts +12 -0
  278. package/src/primitives/validation/ValidationRule.ts +5 -0
  279. package/src/sharedtypes/SyzygyBuildInfo.ts +10 -0
  280. package/src/sharedtypes/SyzygyConfiguration.ts +10 -0
  281. package/src/sharedtypes/SyzygyEnvironment.ts +9 -0
  282. package/src/sharedtypes/SyzygyVersion.ts +23 -0
  283. package/src/testing/fixtures/FixedTimeProvider.ts +21 -0
  284. package/src/testing/fixtures/FixtureProvider.ts +63 -0
  285. package/src/testing/mocks/MockAuthProvider.ts +46 -0
  286. package/src/testing/mocks/MockConnectivityProvider.ts +35 -0
  287. package/src/testing/mocks/MockLogger.ts +19 -0
  288. package/src/testing/mocks/MockNetworkClient.ts +17 -0
  289. package/src/testing/mocks/MockStorageProvider.ts +26 -0
  290. package/src/testing/spies/SpyAnalyticsProvider.ts +24 -0
  291. package/src/testing.ts +8 -0
  292. package/syzygy.yml +10 -0
  293. package/tsconfig.json +18 -0
@@ -0,0 +1,100 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: ['**']
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
14
+
15
+ - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
16
+ with:
17
+ node-version: '20'
18
+
19
+ - name: Install
20
+ run: npm install
21
+
22
+ - name: Typecheck
23
+ run: npm run typecheck
24
+
25
+ - name: Fetch lint config
26
+ run: |
27
+ curl -fsSL https://raw.githubusercontent.com/Syzygy-Hub/.github/948d4cf819a30989d277c8abea615e585f37e188/engineering/tooling/rn/.eslintrc.ts.json \
28
+ -o .eslintrc.json
29
+
30
+ - name: Lint
31
+ run: npm run lint
32
+
33
+ - name: Test with coverage
34
+ run: npm test -- --coverage --coverageReporters=text-summary 2>&1 | tee /tmp/jest-output.txt
35
+
36
+ - name: Upload coverage
37
+ if: always()
38
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
39
+ with:
40
+ name: coverage
41
+ path: coverage
42
+ if-no-files-found: warn
43
+
44
+ - name: Coverage summary
45
+ run: |
46
+ {
47
+ echo "## Coverage Report"
48
+ echo "\`\`\`"
49
+ grep -A20 "Coverage summary" /tmp/jest-output.txt || echo "No coverage summary found."
50
+ echo "\`\`\`"
51
+ } >> "$GITHUB_STEP_SUMMARY"
52
+
53
+ release:
54
+ name: Release
55
+ needs: [build]
56
+ if: |
57
+ github.event_name == 'push' &&
58
+ github.ref == 'refs/heads/main' &&
59
+ startsWith(github.event.head_commit.message, 'release:')
60
+ runs-on: ubuntu-latest
61
+ permissions:
62
+ contents: write
63
+ id-token: write
64
+ steps:
65
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
66
+
67
+ - name: Set up Node
68
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
69
+ with:
70
+ node-version: '20'
71
+ registry-url: 'https://registry.npmjs.org'
72
+
73
+ - name: Read version from syzygy.yml
74
+ id: version
75
+ run: |
76
+ VERSION=$(grep '^version:' syzygy.yml | sed 's/version: //' | tr -d ' ')
77
+ echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
78
+
79
+ - name: Install dependencies
80
+ run: npm install
81
+
82
+ - name: Build
83
+ run: npm run build
84
+
85
+ - name: Extract CHANGELOG entry
86
+ run: |
87
+ awk '/^## \[/{if(found) exit; found=1; next} found' CHANGELOG.md > release_notes.txt
88
+
89
+ - name: Create GitHub Release
90
+ env:
91
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
92
+ run: |
93
+ gh release create "${{ steps.version.outputs.VERSION }}" \
94
+ --title "${{ steps.version.outputs.VERSION }}" \
95
+ --notes-file release_notes.txt
96
+
97
+ - name: Publish to npm
98
+ run: npm publish --access=public --provenance
99
+ env:
100
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/CHANGELOG.md ADDED
@@ -0,0 +1,87 @@
1
+ # Changelog
2
+
3
+ All notable changes to `syzygy-foundation-rn` are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ---
8
+
9
+ ## [Unreleased]
10
+
11
+ ---
12
+
13
+ ## [1.0.0] - 2026-08-06
14
+
15
+ ### Added
16
+
17
+ #### Primitives
18
+ - `SyzygyID<T>` — generic typed opaque identifier; `equals`, `compareTo`, `generate`, `toString`, `toJSON`; `createSyzygyID` factory
19
+ - `Page<T>` — paginated result container with `hasNextPage`, `hasPreviousPage`, `isEmpty`, `totalPages`; `createPage` factory
20
+ - `PaginationRequest` — cursor and page-number pagination parameters; `createPaginationRequest` factory
21
+ - `SyzygyTimestamp` — millisecond-precision timestamp value type; `toDate`; `SyzygyTimestamp.now()` static factory
22
+ - `SyzygyDuration` — duration value type; `SyzygyDuration.milliseconds`, `.seconds`, `.minutes`, `.hours` static factories
23
+ - `TimeProvider` — interface for injectable time source
24
+ - `ValidationResult` — discriminated union (`valid` / `invalid`); `ValidationResult.valid()` and `.invalid(messages)` factories
25
+ - `ValidationRule<T>` — generic validation rule interface
26
+
27
+ #### Contracts — Network
28
+ - `NetworkMethod` — union type + const namespace (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`)
29
+ - `NetworkRequest` — request value type with `url`, `method`, `headers`, `body`, `timeoutSeconds`; `createNetworkRequest` factory (default 30 s)
30
+ - `NetworkResponse` — response value type with `statusCode`, `data`, `headers`, `isSuccess`, `isClientError`, `isServerError`; `createNetworkResponse` factory
31
+ - `NetworkClientProtocol` — `execute(request): Promise<NetworkResponse>` interface
32
+
33
+ #### Contracts — Storage
34
+ - `StorageKey<T>` — typed key with `identifier` and optional `defaultValue`; `createStorageKey` factory
35
+ - `StorageProvider` — async `get`, `set`, `remove`, `clear` interface (Promise-based for AsyncStorage compatibility)
36
+
37
+ #### Contracts — Auth
38
+ - `AuthToken` — `accessToken`, optional `refreshToken`, optional `expiresAt`; `isExpired` helper
39
+ - `AuthState` — discriminated union (`unauthenticated`, `authenticated`, `expired`, `refreshing`); `AuthState` namespace with factory methods and helpers
40
+ - `AuthProvider` — callback-based auth contract with `subscribe`, `authenticate`, `refresh`, `signOut`; `AuthStateListener` type
41
+
42
+ #### Contracts — Analytics
43
+ - `AnalyticsEvent` — `name`, `properties: Record<string, unknown>`, `timestamp`; `createAnalyticsEvent` factory
44
+ - `AnalyticsProvider` — `track`, `identify`, `reset` interface
45
+
46
+ #### Contracts — Logging
47
+ - `LogLevel` — `Debug(0)`, `Info(1)`, `Warning(2)`, `Error(3)`, `Critical(4)` enum
48
+ - `LogEntry` — `level`, `message`, `timestamp`, `metadata: Record<string, string>`, optional `error`
49
+ - `LoggerProtocol` — interface with `log`, `debug`, `info`, `warning`, `error`, `critical`
50
+ - `BaseLogger` — abstract class implementing convenience methods on top of abstract `log(entry)`
51
+
52
+ #### Contracts — Connectivity
53
+ - `ConnectivityState` — union type `'connected' | 'disconnected' | 'unknown'`; `isConnected` helper
54
+ - `ConnectivityProvider` — controlled state contract with `state`, `isConnected`, `subscribe`; `ConnectivityStateListener` type
55
+
56
+ #### Shared Types
57
+ - `SyzygyEnvironment` — union type `'debug' | 'staging' | 'production'` with `isDebug`, `isProduction` helpers
58
+ - `SyzygyConfiguration` — top-level app configuration: `environment`, `baseURL`, `buildInfo`, `version`
59
+ - `SyzygyBuildInfo` — consumer-injected `appName`, `bundleId`, `buildNumber`, `version`
60
+ - `SyzygyVersion` — semver value type; `SyzygyVersion.create`, `.toString`, `.compare`, `.current` namespace
61
+
62
+ #### Errors
63
+ - `SyzygyErrorSeverity` — `Info(0)`, `Warning(1)`, `Error(2)`, `Critical(3)` enum
64
+ - `SyzygyErrorCode` — typed error code class with `equals`, `toString`; static codes: `unknown`, `cancelled`, `timeout`, `unauthenticated`, `forbidden`, `notFound`, `serverError`, `networkUnavailable`, `decodingFailed`, `encodingFailed`
65
+ - `SyzygyError` — interface extending `Error` with `code`, `severity`, optional `underlyingError`
66
+
67
+ #### Testing (`testing` entry point — `devDependencies` / test files only)
68
+ - `MockLogger` — extends `BaseLogger`; captures entries; `entriesForLevel`, `clear`
69
+ - `MockConnectivityProvider` — controllable connectivity state with `setState` and `subscribe`
70
+ - `MockAuthProvider` — full `AuthProvider` mock with call counts and configurable `refreshResult`
71
+ - `MockStorageProvider` — in-memory async storage with `inspect` helper
72
+ - `MockNetworkClient` — queue-based network client with `responses`, `requests`, configurable `error`
73
+ - `SpyAnalyticsProvider` — records `trackedEvents`, `identifiedUsers`, `resetCallCount`; `eventsNamed` helper
74
+ - `Fixtures` — namespace with `syzygyId`, `authToken`, `networkRequest`, `networkResponse`, `analyticsEvent`, `logEntry`, `syzygyVersion` factory methods
75
+ - `FixedTimeProvider` — `TimeProvider` implementation pinned to a configurable timestamp
76
+
77
+ #### Repository
78
+ - `syzygy.yml` manifest added
79
+
80
+ ### Changed
81
+ - CI lint step now fetches `.eslintrc.json` and `.prettierrc` from `Syzygy-Hub/.github/main/engineering/tooling/rn/`
82
+ - CI coverage step added: `--coverage --coverageReporters=text-summary` + summary written to `GITHUB_STEP_SUMMARY`
83
+ - `tooling/rn/.eslintrc.json` updated with documentation-only comment header
84
+ - README rewritten to Syzygy engineering standard
85
+
86
+ [Unreleased]: https://github.com/Syzygy-Hub/syzygy-foundation-rn/compare/1.0.0...HEAD
87
+ [1.0.0]: https://github.com/Syzygy-Hub/syzygy-foundation-rn/releases/tag/1.0.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Syzygy Hub
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,179 @@
1
+ [![React Native](https://img.shields.io/badge/React%20Native-TypeScript-7F77DD?style=flat)](https://reactnative.dev/) [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-1D9E75?logo=typescript&logoColor=white&style=flat)](https://typescriptlang.org) [![CI](https://img.shields.io/github/actions/workflow/status/Syzygy-Hub/syzygy-foundation-rn/ci.yml?label=ci&style=flat)](https://github.com/Syzygy-Hub/syzygy-foundation-rn/actions/workflows/ci.yml) [![Version](https://img.shields.io/badge/version-1.0.0-D85A30?style=flat)](https://github.com/Syzygy-Hub/syzygy-foundation-rn/releases) [![License](https://img.shields.io/badge/License-MIT-green?style=flat)](LICENSE)
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Syzygy-Hub/.github/main/brand/syzygy-banner-dark-1200.png">
5
+ <img src="https://raw.githubusercontent.com/Syzygy-Hub/.github/main/brand/syzygy-banner-light-1200.png" alt="Syzygy" width="600">
6
+ </picture>
7
+
8
+ # syzygy-foundation-rn
9
+
10
+ Contracts, primitives, and shared types for the React Native Syzygy ecosystem — zero implementation, zero dependencies.
11
+
12
+ ## About
13
+
14
+ syzygy-foundation-rn is the base layer every other Syzygy React Native library depends on. It defines the interfaces that Services implements, the value types that UI and Core consume, and the error types the whole stack shares. Nothing in Foundation has behaviour beyond property storage — no network calls, no platform APIs, no business logic. Swap any implementation in Services or Core by conforming to these contracts; Foundation never needs to change.
15
+
16
+ ## Platforms
17
+
18
+ | Platform | Min Version | Package Manager | Status |
19
+ |---|---|---|---|
20
+ | React Native | 0.71+ | npm | ✅ Supported |
21
+
22
+ ## Requirements
23
+
24
+ - React Native 0.71+
25
+ - TypeScript 5.0+
26
+ - Node.js 20+
27
+
28
+ ## Installation
29
+
30
+ ```bash
31
+ npm install syzygy-foundation-rn
32
+ ```
33
+
34
+ ```typescript
35
+ // Runtime
36
+ import { SyzygyID, NetworkClientProtocol } from 'syzygy-foundation-rn'
37
+
38
+ // Test support (test files only)
39
+ import { MockNetworkClient } from 'syzygy-foundation-rn/testing'
40
+ ```
41
+
42
+ ## Architecture
43
+
44
+ SyzygyFoundation exposes two entry points:
45
+
46
+ - **index.ts** — runtime exports. Import in your app and library source files.
47
+ - **testing.ts** — test support exports. Import in test files only.
48
+
49
+ **Depends on:** nothing
50
+
51
+ **Used by:** syzygy-ui-rn, syzygy-core-rn, syzygy-services-rn
52
+
53
+ For the full ecosystem architecture see [syzygy-ecosystem.md](https://github.com/Syzygy-Hub/.github/blob/main/engineering/architecture/syzygy-ecosystem.md).
54
+
55
+ ## API
56
+
57
+ ### Primitives
58
+
59
+ - `SyzygyID<T>` — phantom-typed identifier preventing accidental ID mixing
60
+ - `Page<T>` / `PaginationRequest` — paginated data structures
61
+ - `SyzygyTimestamp` / `SyzygyDuration` / `TimeProvider` — cross-platform time primitives
62
+ - `ValidationResult` / `ValidationRule` — validation contract and result type
63
+
64
+ ### Contracts
65
+
66
+ - `NetworkClientProtocol` / `NetworkRequest` / `NetworkResponse` — networking contract
67
+ - `StorageProvider` / `StorageKey` — type-safe storage contract
68
+ - `AuthProvider` / `AuthToken` / `AuthState` — authentication contract
69
+ - `AnalyticsProvider` / `AnalyticsEvent` — analytics contract
70
+ - `LoggerProtocol` / `LogLevel` / `LogEntry` — logging contract
71
+ - `ConnectivityProvider` / `ConnectivityState` — connectivity contract
72
+
73
+ ### Shared Types
74
+
75
+ - `SyzygyEnvironment` — debug / staging / production
76
+ - `SyzygyConfiguration` — app configuration contract
77
+ - `SyzygyBuildInfo` — consumer-injected build metadata
78
+ - `SyzygyVersion` — semantic version with comparison support
79
+
80
+ ### Errors
81
+
82
+ - `SyzygyError` — base error interface
83
+ - `SyzygyErrorCode` — typed, extensible error codes
84
+ - `SyzygyErrorSeverity` — error severity levels
85
+
86
+ ### Testing Support
87
+
88
+ Import from `syzygy-foundation-rn/testing` in test files only.
89
+
90
+ - `MockLogger`, `MockConnectivityProvider`, `MockAuthProvider`, `MockStorageProvider`, `MockNetworkClient`
91
+ - `SpyAnalyticsProvider`
92
+ - `Fixtures`, `FixedTimeProvider`
93
+
94
+ ## Usage
95
+
96
+ ### Implementing a contract
97
+
98
+ ```typescript
99
+ import { NetworkClientProtocol, NetworkRequest, NetworkResponse, createNetworkResponse } from 'syzygy-foundation-rn';
100
+
101
+ class FetchNetworkClient implements NetworkClientProtocol {
102
+ async execute(request: NetworkRequest): Promise<NetworkResponse> {
103
+ const res = await fetch(request.url, {
104
+ method: request.method,
105
+ headers: request.headers,
106
+ body: request.body ? JSON.stringify(request.body) : undefined,
107
+ });
108
+ const data = await res.arrayBuffer();
109
+ return createNetworkResponse({ statusCode: res.status, data, headers: {} });
110
+ }
111
+ }
112
+ ```
113
+
114
+ ### Using a primitive
115
+
116
+ ```typescript
117
+ import { SyzygyID, createSyzygyID } from 'syzygy-foundation-rn';
118
+
119
+ type User = { id: SyzygyID<'User'>; name: string };
120
+ type Post = { id: SyzygyID<'Post'>; title: string };
121
+
122
+ const userId = createSyzygyID<'User'>();
123
+ const postId = createSyzygyID<'Post'>();
124
+ // TypeScript prevents comparing userId === postId across phantom types
125
+ ```
126
+
127
+ ### Using test support
128
+
129
+ ```typescript
130
+ import { MockNetworkClient, createNetworkResponse } from 'syzygy-foundation-rn/testing';
131
+
132
+ it('returns response from queue', async () => {
133
+ const client = new MockNetworkClient();
134
+ client.responses.push(createNetworkResponse({ statusCode: 200, data: new ArrayBuffer(0), headers: {} }));
135
+ const result = await client.execute({ url: 'https://example.com', method: 'GET', headers: {}, timeoutSeconds: 30 });
136
+ expect(result.statusCode).toBe(200);
137
+ });
138
+ ```
139
+
140
+ ## Platform Notes
141
+
142
+ - Async pattern: `Promise`
143
+ - `SyzygyError` extends `Error`
144
+ - `ConnectivityProvider`: controlled — pass `isOffline` prop (no first-party network detection)
145
+ - `SyzygyBuildInfo`: consumer-injected — populate at app startup
146
+
147
+ ## Contributing
148
+
149
+ Contributions are welcome. Please follow the [Syzygy engineering standards](https://github.com/Syzygy-Hub/.github/tree/main/engineering/standards) when submitting pull requests.
150
+
151
+ ### Local Development
152
+
153
+ | Script | Description |
154
+ |--------|-------------|
155
+ | `npm run build` | Compile TypeScript to `dist/` |
156
+ | `npm run clean` | Remove compiled output |
157
+ | `npm run lint` | Run ESLint |
158
+ | `npm run lint:fix` | Auto-fix lint violations |
159
+ | `npm run typecheck` | Type-check without emitting output |
160
+ | `npm run test` | Run Jest tests |
161
+
162
+ > `prepare` and `prebuild` are lifecycle hooks that run automatically — no need to call them directly.
163
+
164
+ ## Releases
165
+
166
+ Releases follow the Syzygy commit-message flow:
167
+
168
+ 1. Create branch `release/X.X.X`
169
+ 2. Bump version in manifest and `syzygy.yml`
170
+ 3. Update `CHANGELOG.md`
171
+ 4. Open PR → `main`
172
+ 5. Get approval and merge with commit message starting with **`release:`** (e.g. `release: 1.0.0`)
173
+ 6. CI detects the `release:` prefix → reads version from `syzygy.yml` → creates git tag and GitHub Release automatically
174
+
175
+ See the [Syzygy Release Standard](https://github.com/Syzygy-Hub/.github/blob/main/engineering/standards/release-standard.md) for full details.
176
+
177
+ ## License
178
+
179
+ MIT — see [LICENSE](LICENSE)
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AuthToken.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthToken.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/AuthToken.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AuthToken_1 = require("../contracts/auth/AuthToken");
4
+ const AuthState_1 = require("../contracts/auth/AuthState");
5
+ const SyzygyTimestamp_1 = require("../primitives/time/SyzygyTimestamp");
6
+ describe('AuthToken.isExpired', () => {
7
+ it('is false when expiresAt is undefined', () => {
8
+ expect((0, AuthToken_1.isExpired)({ accessToken: 'tok' })).toBe(false);
9
+ });
10
+ it('is true when expiresAt is in the past', () => {
11
+ const past = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(1);
12
+ expect((0, AuthToken_1.isExpired)({ accessToken: 'tok', expiresAt: past })).toBe(true);
13
+ });
14
+ it('is false when expiresAt is in the future', () => {
15
+ const future = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(Date.now() + 3600000);
16
+ expect((0, AuthToken_1.isExpired)({ accessToken: 'tok', expiresAt: future })).toBe(false);
17
+ });
18
+ });
19
+ describe('AuthState', () => {
20
+ const token = { accessToken: 'tok' };
21
+ it('isAuthenticated is true only for authenticated', () => {
22
+ expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.authenticated(token))).toBe(true);
23
+ expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.unauthenticated())).toBe(false);
24
+ expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.expired(token))).toBe(false);
25
+ expect(AuthState_1.AuthState.isAuthenticated(AuthState_1.AuthState.refreshing())).toBe(false);
26
+ });
27
+ it('token returns the AuthToken for authenticated state', () => {
28
+ expect(AuthState_1.AuthState.token(AuthState_1.AuthState.authenticated(token))).toBe(token);
29
+ });
30
+ it('token returns the AuthToken for expired state', () => {
31
+ expect(AuthState_1.AuthState.token(AuthState_1.AuthState.expired(token))).toBe(token);
32
+ });
33
+ it('token returns undefined for unauthenticated', () => {
34
+ expect(AuthState_1.AuthState.token(AuthState_1.AuthState.unauthenticated())).toBeUndefined();
35
+ });
36
+ it('token returns undefined for refreshing', () => {
37
+ expect(AuthState_1.AuthState.token(AuthState_1.AuthState.refreshing())).toBeUndefined();
38
+ });
39
+ });
40
+ //# sourceMappingURL=AuthToken.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthToken.test.js","sourceRoot":"","sources":["../../src/__tests__/AuthToken.test.ts"],"names":[],"mappings":";;AAAA,2DAAwD;AACxD,2DAAwD;AACxD,wEAA2E;AAE3E,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,IAAA,qBAAS,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,IAAA,qBAAS,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAS,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAA,qBAAS,EAAC,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAErC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,qBAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FixedTimeProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixedTimeProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/FixedTimeProvider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const FixedTimeProvider_1 = require("../testing/fixtures/FixedTimeProvider");
4
+ const SyzygyTimestamp_1 = require("../primitives/time/SyzygyTimestamp");
5
+ describe('FixedTimeProvider', () => {
6
+ it('now() returns the fixed time', () => {
7
+ const fixed = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(5000);
8
+ const provider = new FixedTimeProvider_1.FixedTimeProvider(fixed);
9
+ expect(provider.now().millisecondsSinceEpoch).toBe(5000);
10
+ });
11
+ it('since() computes duration from fixedTime to the given timestamp', () => {
12
+ const provider = new FixedTimeProvider_1.FixedTimeProvider((0, SyzygyTimestamp_1.createSyzygyTimestamp)(10000));
13
+ const earlier = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(3000);
14
+ const duration = provider.since(earlier);
15
+ expect(duration.milliseconds).toBe(7000);
16
+ });
17
+ it('fixedTime can be mutated to advance time', () => {
18
+ const provider = new FixedTimeProvider_1.FixedTimeProvider((0, SyzygyTimestamp_1.createSyzygyTimestamp)(0));
19
+ provider.fixedTime = (0, SyzygyTimestamp_1.createSyzygyTimestamp)(99000);
20
+ expect(provider.now().millisecondsSinceEpoch).toBe(99000);
21
+ });
22
+ });
23
+ //# sourceMappingURL=FixedTimeProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixedTimeProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/FixedTimeProvider.test.ts"],"names":[],"mappings":";;AAAA,6EAA0E;AAC1E,wEAA2E;AAE3E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,IAAA,uCAAqB,EAAC,IAAK,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,qCAAiB,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAA,uCAAqB,EAAC,KAAM,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,IAAK,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAA,uCAAqB,EAAC,CAAC,CAAC,CAAC,CAAC;QACjE,QAAQ,CAAC,SAAS,GAAG,IAAA,uCAAqB,EAAC,KAAM,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MockAuthProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockAuthProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MockAuthProvider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const MockAuthProvider_1 = require("../testing/mocks/MockAuthProvider");
4
+ const AuthState_1 = require("../contracts/auth/AuthState");
5
+ describe('MockAuthProvider', () => {
6
+ let provider;
7
+ beforeEach(() => {
8
+ provider = new MockAuthProvider_1.MockAuthProvider();
9
+ });
10
+ it('initial state is unauthenticated', () => {
11
+ expect(AuthState_1.AuthState.isAuthenticated(provider.state)).toBe(false);
12
+ });
13
+ it('authenticate transitions to authenticated', () => {
14
+ provider.authenticate({ accessToken: 'tok' });
15
+ expect(AuthState_1.AuthState.isAuthenticated(provider.state)).toBe(true);
16
+ });
17
+ it('token is accessible after authenticate', () => {
18
+ const token = { accessToken: 'tok' };
19
+ provider.authenticate(token);
20
+ expect(AuthState_1.AuthState.token(provider.state)).toBe(token);
21
+ });
22
+ it('signOut transitions to unauthenticated and increments signOutCallCount', () => {
23
+ provider.authenticate({ accessToken: 'tok' });
24
+ provider.signOut();
25
+ expect(AuthState_1.AuthState.isAuthenticated(provider.state)).toBe(false);
26
+ expect(provider.signOutCallCount).toBe(1);
27
+ });
28
+ it('signOut increments count on each call', () => {
29
+ provider.signOut();
30
+ provider.signOut();
31
+ expect(provider.signOutCallCount).toBe(2);
32
+ });
33
+ it('refresh increments refreshCallCount', async () => {
34
+ await provider.refresh();
35
+ await provider.refresh();
36
+ expect(provider.refreshCallCount).toBe(2);
37
+ });
38
+ it('subscribe notifies listener on state changes', () => {
39
+ const states = [];
40
+ provider.subscribe((s) => states.push(s));
41
+ provider.authenticate({ accessToken: 'tok' });
42
+ provider.signOut();
43
+ expect(states).toHaveLength(2);
44
+ });
45
+ });
46
+ //# sourceMappingURL=MockAuthProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockAuthProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/MockAuthProvider.test.ts"],"names":[],"mappings":";;AAAA,wEAAqE;AACrE,2DAAwD;AAExD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,QAA0B,CAAC;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,mCAAgB,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACrC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,qBAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MockConnectivityProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockConnectivityProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MockConnectivityProvider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const MockConnectivityProvider_1 = require("../testing/mocks/MockConnectivityProvider");
4
+ describe('MockConnectivityProvider', () => {
5
+ it('default initial state is connected', () => {
6
+ const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
7
+ expect(provider.isConnected).toBe(true);
8
+ expect(provider.state).toBe('connected');
9
+ });
10
+ it('setState to disconnected updates isConnected', () => {
11
+ const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
12
+ provider.setState('disconnected');
13
+ expect(provider.isConnected).toBe(false);
14
+ });
15
+ it('setState to unknown updates state', () => {
16
+ const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
17
+ provider.setState('unknown');
18
+ expect(provider.state).toBe('unknown');
19
+ expect(provider.isConnected).toBe(false);
20
+ });
21
+ it('constructor initial state overrides default', () => {
22
+ const provider = new MockConnectivityProvider_1.MockConnectivityProvider('disconnected');
23
+ expect(provider.isConnected).toBe(false);
24
+ });
25
+ it('subscribe notifies listeners on state changes', () => {
26
+ const provider = new MockConnectivityProvider_1.MockConnectivityProvider();
27
+ const observed = [];
28
+ provider.subscribe((s) => observed.push(s));
29
+ provider.setState('disconnected');
30
+ provider.setState('connected');
31
+ expect(observed).toEqual(['disconnected', 'connected']);
32
+ });
33
+ });
34
+ //# sourceMappingURL=MockConnectivityProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockConnectivityProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/MockConnectivityProvider.test.ts"],"names":[],"mappings":";;AAAA,wFAAqF;AAErF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,mDAAwB,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,QAAQ,GAAG,IAAI,mDAAwB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MockLogger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockLogger.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MockLogger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const MockLogger_1 = require("../testing/mocks/MockLogger");
4
+ const LogLevel_1 = require("../contracts/logging/LogLevel");
5
+ describe('MockLogger', () => {
6
+ let logger;
7
+ beforeEach(() => {
8
+ logger = new MockLogger_1.MockLogger();
9
+ });
10
+ it('records entries via convenience methods', () => {
11
+ logger.info('hello');
12
+ logger.debug('world');
13
+ expect(logger.entries).toHaveLength(2);
14
+ });
15
+ it('entriesForLevel filters by log level', () => {
16
+ logger.info('info one');
17
+ logger.info('info two');
18
+ logger.warning('warn');
19
+ expect(logger.entriesForLevel(LogLevel_1.LogLevel.Info)).toHaveLength(2);
20
+ expect(logger.entriesForLevel(LogLevel_1.LogLevel.Warning)).toHaveLength(1);
21
+ expect(logger.entriesForLevel(LogLevel_1.LogLevel.Error)).toHaveLength(0);
22
+ });
23
+ it('clear empties all entries', () => {
24
+ logger.info('message');
25
+ logger.clear();
26
+ expect(logger.entries).toHaveLength(0);
27
+ });
28
+ it('entries preserve message and level', () => {
29
+ logger.error('something failed');
30
+ expect(logger.entries[0].message).toBe('something failed');
31
+ expect(logger.entries[0].level).toBe(LogLevel_1.LogLevel.Error);
32
+ });
33
+ it('critical records at critical level', () => {
34
+ logger.critical('fatal issue');
35
+ expect(logger.entriesForLevel(LogLevel_1.LogLevel.Critical)).toHaveLength(1);
36
+ });
37
+ it('debug records at debug level', () => {
38
+ logger.debug('verbose info');
39
+ expect(logger.entriesForLevel(LogLevel_1.LogLevel.Debug)).toHaveLength(1);
40
+ });
41
+ });
42
+ //# sourceMappingURL=MockLogger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockLogger.test.js","sourceRoot":"","sources":["../../src/__tests__/MockLogger.test.ts"],"names":[],"mappings":";;AAAA,4DAAyD;AACzD,4DAAyD;AAEzD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,MAAkB,CAAC;IACvB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,uBAAU,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAQ,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MockNetworkClient.test.d.ts.map