@farmslot/protocol 0.74.0 → 0.74.2

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 (188) hide show
  1. package/CHANGELOG.md +23 -9
  2. package/README.md +9 -0
  3. package/dist/client-cache/cache.d.ts +4 -0
  4. package/dist/client-cache/cache.d.ts.map +1 -0
  5. package/dist/client-cache/cache.js +1102 -0
  6. package/dist/client-cache/cache.js.map +1 -0
  7. package/dist/client-cache/collector-admission.d.ts +29 -0
  8. package/dist/client-cache/collector-admission.d.ts.map +1 -0
  9. package/dist/client-cache/collector-admission.js +183 -0
  10. package/dist/client-cache/collector-admission.js.map +1 -0
  11. package/dist/client-cache/command-method.d.ts +5 -0
  12. package/dist/client-cache/command-method.d.ts.map +1 -0
  13. package/dist/client-cache/command-method.js +2 -0
  14. package/dist/client-cache/command-method.js.map +1 -0
  15. package/dist/client-cache/conformance.d.ts +36 -0
  16. package/dist/client-cache/conformance.d.ts.map +1 -0
  17. package/dist/client-cache/conformance.js +578 -0
  18. package/dist/client-cache/conformance.js.map +1 -0
  19. package/dist/client-cache/content.d.ts +29 -0
  20. package/dist/client-cache/content.d.ts.map +1 -0
  21. package/dist/client-cache/content.js +101 -0
  22. package/dist/client-cache/content.js.map +1 -0
  23. package/dist/client-cache/d07-domains.d.ts +17 -0
  24. package/dist/client-cache/d07-domains.d.ts.map +1 -0
  25. package/dist/client-cache/d07-domains.js +111 -0
  26. package/dist/client-cache/d07-domains.js.map +1 -0
  27. package/dist/client-cache/diff-apply.d.ts +29 -0
  28. package/dist/client-cache/diff-apply.d.ts.map +1 -0
  29. package/dist/client-cache/diff-apply.js +206 -0
  30. package/dist/client-cache/diff-apply.js.map +1 -0
  31. package/dist/client-cache/index.d.ts +14 -10
  32. package/dist/client-cache/index.d.ts.map +1 -1
  33. package/dist/client-cache/index.js +14 -1
  34. package/dist/client-cache/index.js.map +1 -1
  35. package/dist/client-cache/keys.d.ts +126 -0
  36. package/dist/client-cache/keys.d.ts.map +1 -0
  37. package/dist/client-cache/keys.js +25 -0
  38. package/dist/client-cache/keys.js.map +1 -0
  39. package/dist/client-cache/native-history.d.ts +64 -0
  40. package/dist/client-cache/native-history.d.ts.map +1 -0
  41. package/dist/client-cache/native-history.js +285 -0
  42. package/dist/client-cache/native-history.js.map +1 -0
  43. package/dist/client-cache/prefetch.d.ts +50 -0
  44. package/dist/client-cache/prefetch.d.ts.map +1 -0
  45. package/dist/client-cache/prefetch.js +507 -0
  46. package/dist/client-cache/prefetch.js.map +1 -0
  47. package/dist/client-cache/registry.d.ts +1365 -0
  48. package/dist/client-cache/registry.d.ts.map +1 -0
  49. package/dist/client-cache/registry.js +1038 -0
  50. package/dist/client-cache/registry.js.map +1 -0
  51. package/dist/client-cache/run-list-versions.d.ts +70 -0
  52. package/dist/client-cache/run-list-versions.d.ts.map +1 -0
  53. package/dist/client-cache/run-list-versions.js +309 -0
  54. package/dist/client-cache/run-list-versions.js.map +1 -0
  55. package/dist/client-cache/store.d.ts +128 -0
  56. package/dist/client-cache/store.d.ts.map +1 -0
  57. package/dist/client-cache/store.js +190 -0
  58. package/dist/client-cache/store.js.map +1 -0
  59. package/dist/client-cache/transport.d.ts +27 -0
  60. package/dist/client-cache/transport.d.ts.map +1 -0
  61. package/dist/client-cache/transport.js +56 -0
  62. package/dist/client-cache/transport.js.map +1 -0
  63. package/dist/client-cache/types.d.ts +116 -0
  64. package/dist/client-cache/types.d.ts.map +1 -0
  65. package/dist/client-cache/types.js +2 -0
  66. package/dist/client-cache/types.js.map +1 -0
  67. package/dist/client-cache/upstream-retention.d.ts +6 -0
  68. package/dist/client-cache/upstream-retention.d.ts.map +1 -0
  69. package/dist/client-cache/upstream-retention.js +28 -0
  70. package/dist/client-cache/upstream-retention.js.map +1 -0
  71. package/dist/client-cache/workspace-retention.d.ts +7 -0
  72. package/dist/client-cache/workspace-retention.d.ts.map +1 -0
  73. package/dist/client-cache/workspace-retention.js +46 -0
  74. package/dist/client-cache/workspace-retention.js.map +1 -0
  75. package/dist/contracts/provider-accounts.d.ts +31 -0
  76. package/dist/contracts/provider-accounts.d.ts.map +1 -1
  77. package/dist/contracts/provider-accounts.js +209 -1
  78. package/dist/contracts/provider-accounts.js.map +1 -1
  79. package/dist/contracts/run-bundles.d.ts.map +1 -1
  80. package/dist/contracts/run-bundles.js +2 -0
  81. package/dist/contracts/run-bundles.js.map +1 -1
  82. package/dist/contracts/runs.d.ts +4 -0
  83. package/dist/contracts/runs.d.ts.map +1 -1
  84. package/dist/contracts/runs.js.map +1 -1
  85. package/dist/index.d.ts +4 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +4 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/person-session-client.d.ts +4 -1
  90. package/dist/person-session-client.d.ts.map +1 -1
  91. package/dist/person-session-client.js.map +1 -1
  92. package/dist/rpc/auth.d.ts +17 -0
  93. package/dist/rpc/auth.d.ts.map +1 -1
  94. package/dist/rpc/auth.js.map +1 -1
  95. package/dist/rpc/config.d.ts +2 -0
  96. package/dist/rpc/config.d.ts.map +1 -1
  97. package/dist/rpc/config.js.map +1 -1
  98. package/dist/rpc/fs.d.ts +110 -4
  99. package/dist/rpc/fs.d.ts.map +1 -1
  100. package/dist/rpc/fs.js +7 -1
  101. package/dist/rpc/fs.js.map +1 -1
  102. package/dist/rpc/gateway.d.ts +3 -0
  103. package/dist/rpc/gateway.d.ts.map +1 -1
  104. package/dist/rpc/git.d.ts +42 -0
  105. package/dist/rpc/git.d.ts.map +1 -1
  106. package/dist/rpc/index.d.ts +1 -0
  107. package/dist/rpc/index.d.ts.map +1 -1
  108. package/dist/rpc/index.js +1 -0
  109. package/dist/rpc/index.js.map +1 -1
  110. package/dist/rpc/native-session.d.ts +2 -0
  111. package/dist/rpc/native-session.d.ts.map +1 -1
  112. package/dist/rpc/native-session.js.map +1 -1
  113. package/dist/rpc/nodes.d.ts +2 -0
  114. package/dist/rpc/nodes.d.ts.map +1 -1
  115. package/dist/rpc/nodes.js.map +1 -1
  116. package/dist/rpc/pr-observations.d.ts +22 -0
  117. package/dist/rpc/pr-observations.d.ts.map +1 -0
  118. package/dist/rpc/pr-observations.js +104 -0
  119. package/dist/rpc/pr-observations.js.map +1 -0
  120. package/dist/rpc/pr.d.ts +9 -0
  121. package/dist/rpc/pr.d.ts.map +1 -1
  122. package/dist/rpc/pr.js +1 -1
  123. package/dist/rpc/pr.js.map +1 -1
  124. package/dist/rpc/principal.d.ts +2 -0
  125. package/dist/rpc/principal.d.ts.map +1 -1
  126. package/dist/rpc/registry.d.ts +1 -0
  127. package/dist/rpc/registry.d.ts.map +1 -1
  128. package/dist/rpc/registry.js +2 -0
  129. package/dist/rpc/registry.js.map +1 -1
  130. package/dist/rpc/resource-observers.d.ts +32 -0
  131. package/dist/rpc/resource-observers.d.ts.map +1 -0
  132. package/dist/rpc/resource-observers.js +2 -0
  133. package/dist/rpc/resource-observers.js.map +1 -0
  134. package/dist/rpc/run.d.ts +23 -0
  135. package/dist/rpc/run.d.ts.map +1 -1
  136. package/dist/rpc/run.js.map +1 -1
  137. package/dist/rpc/runner-models.d.ts +15 -0
  138. package/dist/rpc/runner-models.d.ts.map +1 -1
  139. package/dist/rpc/runner-models.js +91 -0
  140. package/dist/rpc/runner-models.js.map +1 -1
  141. package/dist/runs/review-diff-identity.d.ts +15 -0
  142. package/dist/runs/review-diff-identity.d.ts.map +1 -0
  143. package/dist/runs/review-diff-identity.js +47 -0
  144. package/dist/runs/review-diff-identity.js.map +1 -0
  145. package/dist/runs/run-list-filter.d.ts +33 -0
  146. package/dist/runs/run-list-filter.d.ts.map +1 -0
  147. package/dist/runs/run-list-filter.js +116 -0
  148. package/dist/runs/run-list-filter.js.map +1 -0
  149. package/dist/runs/run-list-observation.d.ts +5 -0
  150. package/dist/runs/run-list-observation.d.ts.map +1 -0
  151. package/dist/runs/run-list-observation.js +36 -0
  152. package/dist/runs/run-list-observation.js.map +1 -0
  153. package/dist/runs/run-list-view.d.ts +6 -2
  154. package/dist/runs/run-list-view.d.ts.map +1 -1
  155. package/dist/runs/run-list-view.js +10 -4
  156. package/dist/runs/run-list-view.js.map +1 -1
  157. package/dist/slots/cancelled-run-slot.d.ts +2 -1
  158. package/dist/slots/cancelled-run-slot.d.ts.map +1 -1
  159. package/dist/sources/client.d.ts +10 -1
  160. package/dist/sources/client.d.ts.map +1 -1
  161. package/dist/sources/client.js +23 -4
  162. package/dist/sources/client.js.map +1 -1
  163. package/dist/sources/controller.d.ts +13 -14
  164. package/dist/sources/controller.d.ts.map +1 -1
  165. package/dist/sources/controller.js +87 -82
  166. package/dist/sources/controller.js.map +1 -1
  167. package/dist/sources/status-view.d.ts +2 -0
  168. package/dist/sources/status-view.d.ts.map +1 -1
  169. package/dist/sources/status-view.js +13 -0
  170. package/dist/sources/status-view.js.map +1 -1
  171. package/dist/transport/events.d.ts +1 -4
  172. package/dist/transport/events.d.ts.map +1 -1
  173. package/dist/transport/events.js +1 -0
  174. package/dist/transport/events.js.map +1 -1
  175. package/dist/transport/frames.d.ts +6 -0
  176. package/dist/transport/frames.d.ts.map +1 -1
  177. package/dist/transport/frames.js.map +1 -1
  178. package/dist/transport/observations.d.ts +24 -0
  179. package/dist/transport/observations.d.ts.map +1 -0
  180. package/dist/transport/observations.js +2 -0
  181. package/dist/transport/observations.js.map +1 -0
  182. package/dist/version.d.ts +1 -1
  183. package/dist/version.js +1 -1
  184. package/package.json +1 -1
  185. package/dist/sources/changes.d.ts +0 -37
  186. package/dist/sources/changes.d.ts.map +0 -1
  187. package/dist/sources/changes.js +0 -79
  188. package/dist/sources/changes.js.map +0 -1
@@ -0,0 +1,190 @@
1
+ import { canonicalResourceJson } from './keys.js';
2
+ function copy(value) {
3
+ // Registered query results are JSON replies, including on React Native without structuredClone.
4
+ return JSON.parse(JSON.stringify(value));
5
+ }
6
+ export function resourceContentId(key) {
7
+ return `${key.kind}:${key.id}`;
8
+ }
9
+ function contentInfo({ kind, id, bytes, origin, cohort, accessedAt, }) {
10
+ return { kind, id, bytes, origin, cohort, accessedAt };
11
+ }
12
+ export function resourceStoreScopeId(scope) {
13
+ return canonicalResourceJson(normalizeResourceStoreScope(scope));
14
+ }
15
+ export function normalizeResourceStoreScope(scope) {
16
+ const url = new URL(scope.gatewayUrl);
17
+ url.hash = '';
18
+ url.search = '';
19
+ url.username = '';
20
+ url.password = '';
21
+ return { ...scope, gatewayUrl: url.href };
22
+ }
23
+ export function sameResourceAuthority(a, b) {
24
+ const roles = (authority) => [...new Set(authority.roles.map(canonicalResourceJson))].sort();
25
+ return (a.workspaceAccess === b.workspaceAccess &&
26
+ canonicalResourceJson(roles(a)) === canonicalResourceJson(roles(b)));
27
+ }
28
+ export function createMemoryResourceStore() {
29
+ const entries = new Map();
30
+ const rows = new Map();
31
+ const contents = new Map();
32
+ const aliases = new Map();
33
+ let metadata;
34
+ let deleted = false;
35
+ let closed = false;
36
+ const deletionListeners = new Set();
37
+ const available = () => !deleted && !closed;
38
+ return {
39
+ persistent: false,
40
+ get deleted() {
41
+ return deleted;
42
+ },
43
+ onDeleted(listener) {
44
+ deletionListeners.add(listener);
45
+ return () => {
46
+ deletionListeners.delete(listener);
47
+ };
48
+ },
49
+ async getMetadata() {
50
+ return available() && metadata ? copy(metadata) : undefined;
51
+ },
52
+ async setMetadata(next) {
53
+ if (available())
54
+ metadata = copy(next);
55
+ },
56
+ async getQuery(id) {
57
+ return available() && entries.has(id)
58
+ ? copy(entries.get(id))
59
+ : undefined;
60
+ },
61
+ async putQuery(entry) {
62
+ if (available())
63
+ entries.set(entry.id, copy(entry));
64
+ },
65
+ async touchQuery(id, accessedAt, origin) {
66
+ if (available()) {
67
+ const entry = entries.get(id);
68
+ if (entry)
69
+ entry.accessedAt = accessedAt;
70
+ if (entry && origin)
71
+ entry.origin = origin;
72
+ }
73
+ },
74
+ async deleteQuery(id) {
75
+ if (!available())
76
+ return;
77
+ entries.delete(id);
78
+ rows.delete(id);
79
+ },
80
+ async getRows(queryId) {
81
+ const entry = available() ? entries.get(queryId) : undefined;
82
+ return {
83
+ ...(entry ? { entry: copy(entry) } : {}),
84
+ rows: available() ? [...(rows.get(queryId)?.values() ?? [])].map(copy) : [],
85
+ };
86
+ },
87
+ async mergeRows(queryId, merge) {
88
+ if (!available())
89
+ return;
90
+ if (merge.entry.id !== queryId)
91
+ throw new Error('A row merge writes its own entry');
92
+ // Copy everything before changing anything, so a failure leaves the store as it was.
93
+ const entry = copy(merge.entry);
94
+ const upserts = merge.upserts.map(copy);
95
+ const next = new Map(rows.get(queryId));
96
+ for (const id of merge.deletes)
97
+ next.delete(id);
98
+ for (const row of upserts)
99
+ next.set(row.id, row);
100
+ entries.set(queryId, entry);
101
+ rows.set(queryId, next);
102
+ },
103
+ async listQueries() {
104
+ return available()
105
+ ? [...entries.values()].map(({ id, observedAt, accessedAt, bytes, origin, cohort }) => ({
106
+ id,
107
+ observedAt,
108
+ accessedAt,
109
+ bytes,
110
+ origin,
111
+ cohort,
112
+ }))
113
+ : [];
114
+ },
115
+ async hasContent(key) {
116
+ return available() && contents.has(resourceContentId(key));
117
+ },
118
+ async getContent(key) {
119
+ const entry = available() ? contents.get(resourceContentId(key)) : undefined;
120
+ return entry ? { ...contentInfo(entry), data: new Uint8Array(entry.data) } : undefined;
121
+ },
122
+ async putContentAlias(alias, key) {
123
+ if (available() && contents.has(resourceContentId(key)))
124
+ aliases.set(alias, resourceContentId(key));
125
+ },
126
+ async getContentByAlias(alias) {
127
+ const id = available() ? aliases.get(alias) : undefined;
128
+ const entry = id === undefined ? undefined : contents.get(id);
129
+ return entry ? { ...contentInfo(entry), data: new Uint8Array(entry.data) } : undefined;
130
+ },
131
+ async putContent(entry) {
132
+ if (available())
133
+ contents.set(resourceContentId(entry), {
134
+ ...contentInfo(entry),
135
+ data: new Uint8Array(entry.data),
136
+ });
137
+ },
138
+ async touchContent(key, accessedAt, origin) {
139
+ const entry = available() ? contents.get(resourceContentId(key)) : undefined;
140
+ if (entry) {
141
+ entry.accessedAt = accessedAt;
142
+ if (origin)
143
+ entry.origin = origin;
144
+ }
145
+ },
146
+ async retainContent(key, accessedAt, { origin, cohort }) {
147
+ const entry = available() ? contents.get(resourceContentId(key)) : undefined;
148
+ if (!entry)
149
+ return;
150
+ entry.accessedAt = accessedAt;
151
+ if (origin === 'opened')
152
+ entry.origin = origin;
153
+ if (cohort === 'gate')
154
+ entry.cohort = cohort;
155
+ },
156
+ async deleteContent(key) {
157
+ if (!available())
158
+ return;
159
+ const id = resourceContentId(key);
160
+ contents.delete(id);
161
+ for (const [alias, target] of aliases)
162
+ if (target === id)
163
+ aliases.delete(alias);
164
+ },
165
+ async listContent() {
166
+ return available() ? [...contents.values()].map(contentInfo) : [];
167
+ },
168
+ async byteTotals() {
169
+ const sum = (values) => available() ? [...values].reduce((total, entry) => total + entry.bytes, 0) : 0;
170
+ return { queries: sum(entries.values()), content: sum(contents.values()) };
171
+ },
172
+ async deleteAll() {
173
+ if (deleted)
174
+ return;
175
+ deleted = true;
176
+ entries.clear();
177
+ rows.clear();
178
+ contents.clear();
179
+ aliases.clear();
180
+ metadata = undefined;
181
+ for (const listener of deletionListeners)
182
+ listener();
183
+ },
184
+ async close() {
185
+ closed = true;
186
+ deletionListeners.clear();
187
+ },
188
+ };
189
+ }
190
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/client-cache/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type GatewayAuthConnectResult } from '../rpc/auth.js';
2
+ import type { ResourceObserversReplaceParams, ResourceObserversReplaceResult } from '../rpc/resource-observers.js';
3
+ import type { ResourceReadMethod } from './registry.js';
4
+ import { type ResourceStoreIdentity } from './store.js';
5
+ import type { ResourceCacheTransport, ResourceConnectionReason, ResourceReadResult } from './types.js';
6
+ export interface ResourceClientConnection {
7
+ readonly resourceConnectionReason?: ResourceConnectionReason;
8
+ requestResource<T>(method: ResourceReadMethod, params: unknown, signal?: AbortSignal): Promise<ResourceReadResult<T>>;
9
+ replaceResourceObservers?(params: ResourceObserversReplaceParams, signal?: AbortSignal): Promise<ResourceObserversReplaceResult>;
10
+ subscribe(event: string, listener: (payload: unknown) => void): () => void;
11
+ onConnectionChange(listener: () => void): () => void;
12
+ reconnect(): void;
13
+ }
14
+ export interface ResourceConnectionInputs {
15
+ id: string | number;
16
+ connected: boolean;
17
+ foreground?: boolean;
18
+ gatewayUrl: string;
19
+ profileId?: string;
20
+ authentication?: GatewayAuthConnectResult;
21
+ /** Used only while disconnected or before auth; a live reply always replaces it. */
22
+ lastVerified?: ResourceStoreIdentity;
23
+ reason?: ResourceConnectionReason;
24
+ }
25
+ /** Adapts existing sockets; query dependencies and event-to-query routing remain in the cache. */
26
+ export declare function createResourceCacheTransport(client: ResourceClientConnection, snapshot: () => ResourceConnectionInputs): ResourceCacheTransport;
27
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client-cache/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAA2B,MAAM,gBAAgB,CAAC;AACxF,OAAO,KAAK,EACV,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,KAAK,qBAAqB,EAAwB,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAEV,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IAC7D,eAAe,CAAC,CAAC,EACf,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,wBAAwB,CAAC,CACvB,MAAM,EAAE,8BAA8B,EACtC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACrD,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,oFAAoF;IACpF,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,MAAM,CAAC,EAAE,wBAAwB,CAAC;CACnC;AAED,kGAAkG;AAClG,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,wBAAwB,EAChC,QAAQ,EAAE,MAAM,wBAAwB,GACvC,sBAAsB,CA0DxB"}
@@ -0,0 +1,56 @@
1
+ import { workspaceAccessFromAuth } from '../rpc/auth.js';
2
+ import { Events } from '../transport/events.js';
3
+ import { resourceStoreScopeId } from './store.js';
4
+ /** Adapts existing sockets; query dependencies and event-to-query routing remain in the cache. */
5
+ export function createResourceCacheTransport(client, snapshot) {
6
+ function getConnection() {
7
+ const state = snapshot();
8
+ const auth = state.authentication;
9
+ const saved = !auth &&
10
+ state.lastVerified &&
11
+ resourceStoreScopeId({
12
+ gatewayUrl: state.lastVerified.metadata.scope.gatewayUrl,
13
+ profileId: state.lastVerified.metadata.scope.profileId,
14
+ }) === resourceStoreScopeId({ gatewayUrl: state.gatewayUrl, profileId: state.profileId })
15
+ ? state.lastVerified
16
+ : undefined;
17
+ return {
18
+ id: state.id,
19
+ connected: state.connected,
20
+ foreground: state.foreground,
21
+ authMode: auth?.authMode ?? saved?.authMode ?? 'token',
22
+ scope: {
23
+ ...saved?.metadata.scope,
24
+ gatewayUrl: state.gatewayUrl,
25
+ profileId: state.profileId,
26
+ ...(auth && auth.authMode !== 'none'
27
+ ? { principalId: auth?.principal?.id, principalGeneration: auth?.principal?.generation }
28
+ : {}),
29
+ },
30
+ ...(auth
31
+ ? {
32
+ authority: {
33
+ roles: auth.principal?.roles ?? [],
34
+ workspaceAccess: workspaceAccessFromAuth(auth),
35
+ },
36
+ capabilities: auth.capabilities,
37
+ }
38
+ : saved
39
+ ? { authority: saved.metadata.authority }
40
+ : {}),
41
+ };
42
+ }
43
+ return {
44
+ getConnection,
45
+ onConnectionChange: (listener) => client.onConnectionChange(() => listener(getConnection(), snapshot().reason ?? client.resourceConnectionReason)),
46
+ onResourceChanged: (listener) => client.subscribe(Events.RESOURCE_CHANGED, (payload) => listener(payload)),
47
+ request: (method, params, signal) => client.requestResource(method, params, signal),
48
+ ...(client.replaceResourceObservers
49
+ ? {
50
+ replaceObservers: (params, signal) => client.replaceResourceObservers(params, signal),
51
+ }
52
+ : {}),
53
+ resynchronize: () => client.reconnect(),
54
+ };
55
+ }
56
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/client-cache/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import type { ReviewDiffSnapshot } from '../contracts/runs.js';
2
+ import type { GatewayAuthConnectResult, GatewayAuthMode } from '../rpc/auth.js';
3
+ import type { ResourceObserversReplaceParams, ResourceObserversReplaceResult, UpstreamObservation } from '../rpc/resource-observers.js';
4
+ import type { RunListProjection } from '../runs/run-list-filter.js';
5
+ import type { ResourceChangedPayload } from '../transport/events.js';
6
+ import type { ResourceReadStamp } from './keys.js';
7
+ import type { ResourceQuery, ResourceReadMethod } from './registry.js';
8
+ import type { ContentKey, ResourceContentCohort, ResourceContentOrigin, ResourceContentPlacement, ResourceStore, ResourceStoreAuthority, ResourceStoreMetadata, ResourceStoreScope } from './store.js';
9
+ export type ResourceQueryStatus = 'loading' | 'ready' | 'stale' | 'error' | 'unsupported';
10
+ export interface ResourceQueryError {
11
+ code: string;
12
+ message: string;
13
+ }
14
+ export interface ResourceQueryState<T = unknown> {
15
+ status: ResourceQueryStatus;
16
+ data?: T;
17
+ observedAt?: number;
18
+ sourceObservation?: UpstreamObservation;
19
+ resourceState?: ResourceReadStamp;
20
+ error?: ResourceQueryError;
21
+ storageNotice?: string;
22
+ }
23
+ export interface ResourceReadResult<T> {
24
+ data: T;
25
+ resourceState?: ResourceReadStamp;
26
+ }
27
+ export interface ResourceReadOptions {
28
+ signal?: AbortSignal;
29
+ includeResourceState?: boolean;
30
+ }
31
+ export interface ResourceCacheConnection {
32
+ /** Transport connection identity, not the gateway epoch. Token refresh retains it. */
33
+ id: number | string;
34
+ connected: boolean;
35
+ foreground?: boolean;
36
+ authMode: GatewayAuthMode;
37
+ scope: ResourceStoreScope;
38
+ authority?: ResourceStoreAuthority;
39
+ capabilities?: GatewayAuthConnectResult['capabilities'];
40
+ }
41
+ export type ResourceConnectionReason = 'network' | 'background' | 'access-token-expired' | 'token-refresh' | 'sign-out' | 'principal-change' | 'credential-refused' | 'session-ended' | 'profile-change';
42
+ export interface ResourceCacheTransport {
43
+ getConnection(): ResourceCacheConnection;
44
+ onConnectionChange(listener: (connection: ResourceCacheConnection, reason?: ResourceConnectionReason) => void): () => void;
45
+ onResourceChanged(listener: (payload: ResourceChangedPayload) => void): () => void;
46
+ request<T>(method: ResourceReadMethod, params: unknown, signal: AbortSignal): Promise<ResourceReadResult<T>>;
47
+ replaceObservers?(params: ResourceObserversReplaceParams, signal: AbortSignal): Promise<ResourceObserversReplaceResult>;
48
+ /** A changed epoch or broken change feed requires the transport's normal reconnect path. */
49
+ resynchronize(): void;
50
+ }
51
+ export interface GatewayResourceCacheOptions {
52
+ onStorageNotice?: (notice: string | undefined) => void;
53
+ transport: ResourceCacheTransport;
54
+ store?: ResourceStore;
55
+ /** Reopens a fresh scoped incarnation after authority deletion or a profile switch. */
56
+ openStore?: (metadata: ResourceStoreMetadata) => Promise<ResourceStore>;
57
+ maxInactiveEntries?: number;
58
+ /** Shared workspace/content budget supplied once by the platform owner. */
59
+ contentBudgetBytes?: number;
60
+ }
61
+ /** Opaque: the connection, owner and store incarnation a content read started under. */
62
+ export interface ResourceContentWriteToken {
63
+ readonly connectionId: number | string;
64
+ readonly ownerVersion: number;
65
+ readonly storeVersion: number;
66
+ }
67
+ export interface ResourceContentInput {
68
+ key: ContentKey;
69
+ data: Uint8Array;
70
+ origin: ResourceContentOrigin;
71
+ cohort: ResourceContentCohort;
72
+ /** A diff's untracked-file manifest, which its `diffHash` fingerprints. */
73
+ untrackedFiles?: ReviewDiffSnapshot['untrackedFiles'];
74
+ /** Captured before the fetch; the write is refused if any part has changed since. */
75
+ token?: ResourceContentWriteToken;
76
+ /** Also finds the content by this name, such as a frozen review diff; the latest store wins. */
77
+ alias?: string;
78
+ }
79
+ export interface ResourceContentRetain extends ResourceContentPlacement {
80
+ token?: ResourceContentWriteToken;
81
+ }
82
+ export interface GatewayResourceCache {
83
+ observe<T>(query: ResourceQuery<T>, listener: (state: ResourceQueryState<T>) => void): () => void;
84
+ read<T>(query: ResourceQuery<T>): ResourceQueryState<T>;
85
+ /**
86
+ * A `prefetch` placement persists a workspace snapshot as prefetched content: it counts toward
87
+ * the prefetch half of the budget and evicts only what prefetch may evict. A later read the user
88
+ * observes, or a read without a placement, keeps it as opened. Once `signal` aborts, the read
89
+ * is not sent, and a read no other caller or observer shares is cancelled without a result.
90
+ */
91
+ /**
92
+ * Version lists: every live run's projection from the shared run collection, newest first.
93
+ * Undefined without one, before the first versions read or a stored collection's hydrate.
94
+ * Optional for test doubles; the shared cache always provides it.
95
+ */
96
+ runListProjections?(): readonly RunListProjection[] | undefined;
97
+ retry<T>(query: ResourceQuery<T>, placement?: ResourceContentPlacement, signal?: AbortSignal): Promise<ResourceQueryState<T>>;
98
+ /** Presence for this owner, without loading the bytes or changing their recency. */
99
+ hasContent(key: ContentKey): Promise<boolean>;
100
+ /** Stored bytes for this owner, without changing their recency. */
101
+ readContent(key: ContentKey): Promise<Uint8Array | undefined>;
102
+ /** Stored bytes the user opened: refreshes recency and protects them from prefetch eviction. */
103
+ openContent(key: ContentKey): Promise<Uint8Array | undefined>;
104
+ readContentByAlias(alias: string): Promise<Uint8Array | undefined>;
105
+ openContentByAlias(alias: string): Promise<Uint8Array | undefined>;
106
+ /** Verifies, applies the caps and the shared budget, and returns false when refused. */
107
+ storeContent(input: ResourceContentInput): Promise<boolean>;
108
+ contentWriteToken(): ResourceContentWriteToken;
109
+ /**
110
+ * Refreshes held content and applies the stronger origin and cohort without transferring its
111
+ * bytes. False when it is not held or the write is refused.
112
+ */
113
+ retainContent(key: ContentKey, retain: ResourceContentRetain): Promise<boolean>;
114
+ dispose(reason?: ResourceConnectionReason): Promise<void>;
115
+ }
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client-cache/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client-cache/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { StoredResourceQueryInfo } from './store.js';
2
+ /** Stored IDs carry registered methods; persisted rows cannot declare their own retention group. */
3
+ export declare function isUpstreamStoredQuery(id: string): boolean;
4
+ /** Apply the same family byte bound before cold hydration as after a live read. */
5
+ export declare function upstreamRetentionEvictions(rows: readonly StoredResourceQueryInfo[]): string[];
6
+ //# sourceMappingURL=upstream-retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-retention.d.ts","sourceRoot":"","sources":["../../src/client-cache/upstream-retention.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,oGAAoG;AACpG,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,uBAAuB,EAAE,GAAG,MAAM,EAAE,CAe7F"}
@@ -0,0 +1,28 @@
1
+ import { RESOURCE_QUERY_DEFINITIONS, UPSTREAM_QUERY_MAX_BYTES, } from './registry.js';
2
+ /** Stored IDs carry registered methods; persisted rows cannot declare their own retention group. */
3
+ export function isUpstreamStoredQuery(id) {
4
+ const method = id.slice(0, id.indexOf(':'));
5
+ if (!Object.hasOwn(RESOURCE_QUERY_DEFINITIONS, method))
6
+ return false;
7
+ const definition = RESOURCE_QUERY_DEFINITIONS[method];
8
+ return definition.retention?.cohort === 'upstream';
9
+ }
10
+ /** Apply the same family byte bound before cold hydration as after a live read. */
11
+ export function upstreamRetentionEvictions(rows) {
12
+ const members = rows
13
+ .filter((row) => isUpstreamStoredQuery(row.id))
14
+ .sort((a, b) => a.observedAt - b.observedAt || a.id.localeCompare(b.id));
15
+ const evicted = members
16
+ .filter((row) => row.bytes > UPSTREAM_QUERY_MAX_BYTES)
17
+ .map((row) => row.id);
18
+ const retained = members.filter((row) => row.bytes <= UPSTREAM_QUERY_MAX_BYTES);
19
+ let total = retained.reduce((sum, row) => sum + row.bytes, 0);
20
+ for (const oldest of retained) {
21
+ if (total <= UPSTREAM_QUERY_MAX_BYTES)
22
+ break;
23
+ evicted.push(oldest.id);
24
+ total -= oldest.bytes;
25
+ }
26
+ return evicted;
27
+ }
28
+ //# sourceMappingURL=upstream-retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-retention.js","sourceRoot":"","sources":["../../src/client-cache/upstream-retention.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAG1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAGvB,oGAAoG;AACpG,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,MAAM,UAAU,GACd,0BAA0B,CAAC,MAA4B,CAAC,CAAC;IAC3D,OAAO,UAAU,CAAC,SAAS,EAAE,MAAM,KAAK,UAAU,CAAC;AACrD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,0BAA0B,CAAC,IAAwC;IACjF,MAAM,OAAO,GAAG,IAAI;SACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO;SACpB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,wBAAwB,CAAC;SACrD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;IAChF,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,IAAI,wBAAwB;YAAE,MAAM;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ResourceBudgetEvictions } from './content.js';
2
+ import { type ResourceQuery } from './registry.js';
3
+ import type { StoredResourceContentInfo, StoredResourceQueryInfo } from './store.js';
4
+ /** Reconstruct only registered identities; malformed/foreign rows do not gain workspace membership. */
5
+ export declare function workspaceRetentionMembership(id: string): readonly string[] | undefined;
6
+ export declare function workspaceRetentionEvictions(query: ResourceQuery, saved: StoredResourceQueryInfo, stored: StoredResourceQueryInfo[], budget?: number, content?: readonly StoredResourceContentInfo[]): ResourceBudgetEvictions | undefined;
7
+ //# sourceMappingURL=workspace-retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-retention.d.ts","sourceRoot":"","sources":["../../src/client-cache/workspace-retention.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErF,uGAAuG;AACvG,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAatF;AACD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,uBAAuB,EAC9B,MAAM,EAAE,uBAAuB,EAAE,EACjC,MAAM,SAAiC,EACvC,OAAO,GAAE,SAAS,yBAAyB,EAAO,GACjD,uBAAuB,GAAG,SAAS,CAiCrC"}
@@ -0,0 +1,46 @@
1
+ import { resourceBudgetEvictions, resourceEvictable, } from './content.js';
2
+ import { RESOURCE_QUERY_DEFINITIONS, } from './registry.js';
3
+ /** Reconstruct only registered identities; malformed/foreign rows do not gain workspace membership. */
4
+ export function workspaceRetentionMembership(id) {
5
+ const colon = id.indexOf(':');
6
+ try {
7
+ const definition = RESOURCE_QUERY_DEFINITIONS[id.slice(0, colon)];
8
+ if (definition?.retention?.cohort !== 'workspace')
9
+ return undefined;
10
+ const params = JSON.parse(id.slice(colon + 1));
11
+ return definition.retentionGroups?.(definition.normalizeParams ? definition.normalizeParams(params) : params);
12
+ }
13
+ catch {
14
+ return undefined;
15
+ } // Older or removed query definitions are outside this cohort.
16
+ }
17
+ export function workspaceRetentionEvictions(query, saved, stored, budget = query.retention?.maxBytes ?? 0, content = []) {
18
+ const retention = query.retention;
19
+ if (retention?.cohort !== 'workspace')
20
+ return { queries: [], content: [] };
21
+ const rows = [...stored.filter((row) => row.id !== saved.id), saved]
22
+ .filter((row) => workspaceRetentionMembership(row.id) !== undefined)
23
+ .sort((a, b) => (a.accessedAt || a.observedAt) - (b.accessedAt || b.observedAt) || a.id.localeCompare(b.id));
24
+ // One byte budget across content and every workspace family in this authenticated portable store.
25
+ // A prefetched snapshot follows Content rule 6 there and in its slot and run caps.
26
+ const budgeted = resourceBudgetEvictions(saved, content, rows.filter((row) => row.id !== saved.id), budget);
27
+ if (!budgeted)
28
+ return undefined;
29
+ const removed = new Set(budgeted.queries);
30
+ for (const group of retention.groups ?? []) {
31
+ const members = rows.filter((row) => !removed.has(row.id) && workspaceRetentionMembership(row.id)?.includes(group));
32
+ let excess = members.length - retention.maxEntries;
33
+ for (const row of members) {
34
+ if (excess <= 0)
35
+ break;
36
+ if (row.id === saved.id || !resourceEvictable(saved, row))
37
+ continue;
38
+ removed.add(row.id);
39
+ excess--;
40
+ }
41
+ if (excess > 0)
42
+ return undefined;
43
+ }
44
+ return { queries: [...removed], content: budgeted.content };
45
+ }
46
+ //# sourceMappingURL=workspace-retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-retention.js","sourceRoot":"","sources":["../../src/client-cache/workspace-retention.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@
3
3
  * Bind labels are farmslot-owned; identity/usage is mirrored from CodexBar (fail-open).
4
4
  * Tokens and credential paths are never included.
5
5
  */
6
+ import { type ResourceKey } from '../client-cache/keys.js';
7
+ import type { UpstreamObservation } from '../rpc/resource-observers.js';
6
8
  export type ProviderRunnerAccountStatusKind = 'bound' | 'ambient' | 'unsupported' | 'unknown' | 'error';
7
9
  export interface ProviderRunnerCoolingEntry {
8
10
  label: string;
@@ -47,6 +49,13 @@ export interface ProviderRunnerUsageMirror {
47
49
  /** Fail-open probe error; row still returns without blocking UI. */
48
50
  error?: string;
49
51
  }
52
+ /** Source age of each independently retained part of one runner row. */
53
+ export interface ProviderRunnerObservations {
54
+ identity: UpstreamObservation;
55
+ quota: UpstreamObservation;
56
+ /** Host cooling ledger, only for runners with account failover. */
57
+ cooling?: UpstreamObservation;
58
+ }
50
59
  /** One runner's connected subscription on a machine. */
51
60
  export interface ProviderRunnerAccountStatus {
52
61
  runner: string;
@@ -62,6 +71,8 @@ export interface ProviderRunnerAccountStatus {
62
71
  /** CodexBar mirror — email + quota for the node-active seat. */
63
72
  usage?: ProviderRunnerUsageMirror | null;
64
73
  error?: string;
74
+ /** Older gateways omit it. */
75
+ observations?: ProviderRunnerObservations;
65
76
  }
66
77
  export interface MachineProviderAccountsSnapshot {
67
78
  machine: string;
@@ -69,9 +80,29 @@ export interface MachineProviderAccountsSnapshot {
69
80
  checkedAt: string;
70
81
  /** False when the host could not be probed (remote offline, etc.). */
71
82
  reachable?: boolean;
83
+ /** Ready only when every component is; otherwise its oldest known success. */
84
+ observation?: UpstreamObservation;
72
85
  }
73
86
  export interface ProviderAccountsSnapshot {
74
87
  machines: MachineProviderAccountsSnapshot[];
75
88
  checkedAt: string;
89
+ /** Conservative over the selected machines. */
90
+ observation?: UpstreamObservation;
76
91
  }
92
+ /**
93
+ * Observer identity: never a forced probe; machines sorted and deduped. Empty and
94
+ * omitted `machines` both select every fleet machine.
95
+ */
96
+ export declare function providerAccountsObservationParams(params: unknown): {
97
+ machines?: string[];
98
+ };
99
+ /**
100
+ * One key per named machine (its single-machine collector id); the all-machines
101
+ * identity also follows fleet topology. Imperative force flags do not change keys.
102
+ */
103
+ export declare function providerAccountsDependencies(params: unknown): ResourceKey[];
104
+ /** Keys the gateway advances when one machine's retained snapshot changes. */
105
+ export declare function providerAccountsChangedKeys(machine: string): ResourceKey[];
106
+ /** Durable projection: explicit identifiers, bounded identity, enums, numbers and source ages. */
107
+ export declare function providerAccountsStoredData(data: unknown): ProviderAccountsSnapshot;
77
108
  //# sourceMappingURL=provider-accounts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-accounts.d.ts","sourceRoot":"","sources":["../../src/contracts/provider-accounts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,+BAA+B,GACvC,OAAO,GACP,SAAS,GACT,aAAa,GACb,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2EAA2E;AAC3E,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IACrE,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,eAAe,GAAG,kBAAkB,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;IACpD,iFAAiF;IACjF,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,oFAAoF;IACpF,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,MAAM,WAAW,yBAAyB;IACxC,gFAAgF;IAChF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0DAA0D;IAC1D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gDAAgD;IAChD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,+BAA+B,CAAC;IACxC,sEAAsE;IACtE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gEAAgE;IAChE,OAAO,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACvC,gEAAgE;IAChE,KAAK,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,+BAA+B,EAAE,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"provider-accounts.d.ts","sourceRoot":"","sources":["../../src/contracts/provider-accounts.ts"],"names":[],"mappings":"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"}